void s_server_window_title (int id, char *title) { int i; int v; int h; int yo; s_font_t *font; s_surface_t *srf; if ((id < 0) || (title == NULL) || (server->client[id].type & WINDOW_NOFORM)) { return; } for (v = 0; v < 2; v++) { font = server->theme.font[v]; s_font_set_str(font, title); s_font_get_glyph(font); s_image_get_mat(font->glyph.img); s_image_get_handler(font->glyph.img); font->glyph.img->buf = (char *) s_calloc(1, font->glyph.img->w * font->glyph.img->h * server->window->surface->bytesperpixel); if (s_surface_create_from_data(&srf, font->glyph.img->w, font->glyph.img->h, server->window->surface->bitsperpixel, font->glyph.img->buf)) { goto out; } if ((i = font->glyph.img->w / server->theme.form[v][TOP_3].w) > 0) { while (i--) { yo = server->theme.text_v_off[v] - font->glyph.img->handler->y + (server->theme.form[v][TOP_3].handler->h - font->glyph.img->handler->h) / 2; if ((font->glyph.img->h + yo) > server->theme.form[v][TOP_3].h) { h = server->theme.form[v][TOP_3].h - yo; } else { h = font->glyph.img->h; } s_putboxpart(srf, i * server->theme.form[v][TOP_3].w, 0, server->theme.form[v][TOP_3].w, h, server->theme.form[v][TOP_3].w, server->theme.form[v][TOP_3].h, server->theme.form[v][TOP_3].buf, 0, yo); } } if ((i = font->glyph.img->w % server->theme.form[v][TOP_3].w) > 0) { s_putboxpart(srf, font->glyph.img->w - server->theme.form[v][TOP_3].w, 0, server->theme.form[v][TOP_3].w, font->glyph.img->h, server->theme.form[v][TOP_3].w, server->theme.form[v][TOP_3].h, server->theme.form[v][TOP_3].buf, 0, server->theme.text_v_off[v] - font->glyph.img->handler->y + (server->theme.form[v][TOP_3].handler->h - font->glyph.img->handler->h) / 2); } s_putboxrgba(srf, 0, 0, font->glyph.img->w, font->glyph.img->h, font->glyph.img->rgba); s_free(server->client[id].title.img[v].mat); s_free(server->client[id].title.img[v].buf); server->client[id].title.img[v].mat = (unsigned char *) s_malloc(font->glyph.img->w * font->glyph.img->h); server->client[id].title.img[v].buf = (char *) s_malloc(font->glyph.img->w * font->glyph.img->h * server->window->surface->bytesperpixel); server->client[id].title.img[v].w = font->glyph.img->w; server->client[id].title.img[v].h = font->glyph.img->h; server->client[id].title.hy[v] = font->glyph.img->handler->y; server->client[id].title.hh[v] = font->glyph.img->handler->h; memcpy(server->client[id].title.img[v].mat, font->glyph.img->mat, font->glyph.img->w * font->glyph.img->h); memcpy(server->client[id].title.img[v].buf, font->glyph.img->buf, font->glyph.img->w * font->glyph.img->h * server->window->surface->bytesperpixel); s_surface_destroy(srf); out: s_image_uninit(font->glyph.img); s_image_init(&(font->glyph.img)); } }
int s_image_get_buf (s_surface_t *surface, s_image_t *img) { s_surface_t *s; if (img->buf != NULL) { s_image_free_buf(img); } img->buf = (char *) s_malloc(img->w * img->h * surface->bytesperpixel + 1); s_surface_create_from_data(&s, img->w, img->h, surface->bitsperpixel, img->buf, 0); s_putboxrgb(s, 0, 0, img->w, img->h, img->rgba); s_surface_destroy(s); return 0; }