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)); } }
void taskbar_clock_draw (s_window_t *window, s_timer_t *timer) { int w_; time_t t_; struct tm *t; int _w = 0; char *vbuf; s_surface_t *srf; tbar_data_t *tbar_data; tbar_clock_t *tbar_clock; int c0 = s_rgbcolor(window->surface, 96, 96, 96); int c1 = s_rgbcolor(window->surface, 255, 255, 255); int c2 = s_rgbcolor(window->surface, 220, 220, 220); tbar_data = (tbar_data_t *) window->data; tbar_clock = tbar_data->tbar_clock; t_ = time(NULL); t = localtime(&t_); vbuf = (char *) s_malloc(sizeof(char) * 10); if (t->tm_sec & 1) { sprintf(vbuf, "%02d:%02d ", t->tm_hour, t->tm_min); } else { sprintf(vbuf, "%02d %02d ", t->tm_hour, t->tm_min); } s_font_set_str(tbar_clock->font, vbuf); s_free(vbuf); s_font_get_glyph(tbar_clock->font); if (s_surface_create(&srf, tbar_clock->rect.w, tbar_clock->rect.h, window->surface->bitsperpixel)) { return; } s_fillbox(srf, 0, 0, tbar_clock->rect.w, tbar_clock->rect.h, c0); s_fillbox(srf, 1, 1, tbar_clock->rect.w - 1, tbar_clock->rect.h - 1, c1); s_fillbox(srf, 1, 1, tbar_clock->rect.w - 2, tbar_clock->rect.h - 2, c2); w_ = tbar_clock->font->glyph.img->w; if (tbar_clock->font->glyph.img->w > (tbar_clock->rect.w - 6)) { w_ = tbar_clock->rect.w - 6; _w = tbar_clock->font->glyph.img->w - (tbar_clock->rect.w - 6); } s_putboxpartrgba(srf, 3, 4, w_, tbar_clock->font->glyph.img->h, tbar_clock->font->glyph.img->w, tbar_clock->font->glyph.img->h, tbar_clock->font->glyph.img->rgba, 0, 0); s_putbox(window->surface, tbar_clock->rect.x, tbar_clock->rect.y, tbar_clock->rect.w, tbar_clock->rect.h, srf->vbuf); s_surface_destroy(srf); return; }
void taskbar_progs_draw_client (tbar_progs_t *tbar_progs, s_surface_t *surface, s_desktop_client_t *client, int x, int y, int w, int h) { int x_; int w_ = 0; int _w = 0; char *text; s_font_t *font; x += 2; w -= 4; text = (char *) s_malloc(sizeof(char) * (50 + 1)); snprintf(text, 50, "%s", client->title); font = tbar_progs->prog_font; s_font_set_str(font, text); s_font_set_size(font, h - 8); s_font_get_glyph(font); s_image_get_handler(font->glyph.img); s_fillbox(surface, x, y, w, h, s_rgbcolor(surface, 123, 121, 115)); if (!client->pri) { for (x_ = w - 3; x_ >= 0; x_--) { s_putbox(surface, x + 1 + x_, y + 1, 1, h - 2, tbar_progs->prog_img[0]->buf); } x += 1; y += 1; } else { for (x_ = w - 3; x_ >= 0; x_--) { s_putbox(surface, x + 1 + x_, y + 1, 1, h - 2, tbar_progs->prog_img[1]->buf); } } y += 5; x += 4; w_ = font->glyph.img->w; if (font->glyph.img->w > (w - 8)) { w_ = w - 8; _w = font->glyph.img->w - (w - 8); } s_putboxpartrgba(surface, x, y, w_, font->glyph.img->h, font->glyph.img->w, font->glyph.img->h, font->glyph.img->rgba, 0, 0); s_free(text); s_image_uninit(font->glyph.img); s_image_init(&(font->glyph.img)); }
/** * \brief * * \return */ void GuiMultiTextBox::renderText() { // clean up previous contents if(fontData != NULL) { for(int i=0; i<numLines; i++) { if(fontData[i]) s_font_uninit(fontData[i]); fontData[i] = NULL; } s_free(fontData); fontData = NULL; } numLines = 0; std::list<std::string>::iterator it = fontWords.begin(); while(true) { std::string textLine; if(it != fontWords.end()) textLine = it->c_str(); else break; s_font_t** newFontData = (s_font_t**)s_realloc(fontData, sizeof(s_font_t*) * (numLines + 1)); if (newFontData == NULL) return; fontData = newFontData; fontData[numLines] = NULL; s_font_t* font; if(s_font_init(&font, (char*)fontName.c_str())) { return; } s_font_set_size(font, fontSize); s_font_set_rgb(font, fontColor.red, fontColor.green, fontColor.blue); std::string textTest; while(it != fontWords.end()) { if(!textTest.empty()) textTest += " "; textTest += it->c_str(); s_font_set_str(font, (char*)textTest.c_str()); s_font_get_glyph(font); // the text does not fit anymore if(font->glyph.img->w > drawArea.w) break; textLine = textTest; it ++; } s_font_set_str(font, (char*)textLine.c_str()); s_font_get_glyph(font); fontData[numLines ++] = font; } }
static int draw_single_box (s_surface_t *wsurface, s_rect_t *rect, osk_char_t c[4], int colors[2], image_bin_t *image_bin) { int i; int r; int g; int b; int fh; int x = 0; int y = 0; char *tbuf; s_image_t *img; s_font_t *font; s_surface_t *surface; if (s_surface_create(&surface, rect->w, rect->h, wsurface->bitsperpixel)) { return -1; } s_fillbox(surface, 0, 0, rect->w, rect->h, colors[0]); s_image_init(&img); image_load(img, image_bin->width, image_bin->height, (unsigned char *) image_bin->pixel_data); s_image_get_buf(surface, img); tbuf = (char *) s_malloc(sizeof(char) * (rect->w - 2) * (rect->h - 2) * surface->bytesperpixel); s_scalebox(surface, img->w, img->h, img->buf, rect->w - 2, rect->h - 2, tbuf); s_putbox(surface, 1, 1, rect->w - 2, rect->h - 2, tbuf); s_free(tbuf); s_image_uninit(img); fh = rect->h / 3; for (i = 0; i < 4; i++) { s_font_init(&font, "veramono.ttf"); s_font_set_str(font, c[i].name); s_colorrgb(wsurface, colors[1], &r, &g, &b); s_font_set_rgb(font, r, g, b); if (strlen(c[i].name) > 1) { s_font_set_size(font, fh - 5); } else { s_font_set_size(font, fh); } s_font_get_glyph(font); s_image_get_handler(font->glyph.img); font->glyph.img->handler->x = 0; font->glyph.img->handler->y = 0; font->glyph.img->handler->w = font->glyph.img->w; font->glyph.img->handler->h = font->glyph.img->h; switch (i) { case 0: x = 5; y = (rect->h - fh) / 2; break; case 1: x = (rect->w - font->glyph.img->handler->w) / 2; y = 2; break; case 2: x = rect->w - font->glyph.img->handler->w - 3; y = (rect->h - fh) / 2; break; case 3: y = rect->h - fh - 7; x = (rect->w - font->glyph.img->handler->w) / 2; break; } s_putboxpartrgba(surface, x, y + fh - font->glyph.yMax, font->glyph.img->handler->w, font->glyph.img->handler->h, font->glyph.img->w, font->glyph.img->h, font->glyph.img->rgba, font->glyph.img->handler->x, font->glyph.img->handler->y); s_font_uninit(font); } s_putbox(wsurface, rect->x, rect->y, rect->w, rect->h, surface->vbuf); s_surface_destroy(surface); return 0; }
void start_menu_start (s_window_t *pwindow, s_list_t *progs, int wx, int wy) { int p; int fy; int fx; int fw; int fh; char *file; char *tbuf; s_surface_t *s; s_font_t *font; s_image_t *img; s_window_t *temp; s_handler_t *hndl; smenu_prog_t *sprog; tbar_data_t *tbar_data; fx = 30; fy = 22; fw = 160; fh = progs->nb_elt * fy + 13; tbar_data = (tbar_data_t *) pwindow->data; tbar_data->tbar_smenu->running = 1; s_window_init(&temp); s_window_new(temp, WINDOW_TEMP | WINDOW_NOFORM, pwindow); s_window_set_coor(temp, 0, wx, wy - fh - 1, fw, fh); s_fillbox(temp->surface, 0, 0, temp->surface->buf->w, temp->surface->buf->h, s_rgbcolor(temp->surface, 0, 0, 0)); s_fillbox(temp->surface, 1, 1, temp->surface->buf->w - 2, temp->surface->buf->h - 2, s_rgbcolor(temp->surface, 255, 255, 255)); s_fillbox(temp->surface, 1, 1, 24, temp->surface->buf->h - 2, s_rgbcolor(temp->surface, 197, 198, 189)); s_font_init(&font, "arial.ttf"); s_font_set_size(font, 13); p = 0; while (!s_list_eol(progs, p)) { sprog = (smenu_prog_t *) s_list_get(progs, p++); if ((sprog->icon != NULL) && (*(sprog->icon) != '\0')) { s_image_init(&img); file = (char *) s_malloc(sizeof(char) * (strlen(DESKTOPDIR "/img/icons/") + strlen(sprog->icon) + 1)); sprintf(file, "%s/img/icons/%s", DESKTOPDIR, sprog->icon); s_image_img(file, img); s_image_get_handler(img); tbuf = (char *) s_malloc(temp->surface->bytesperpixel * 18 * 18); if (s_surface_create(&s, img->w, img->h, temp->surface->bitsperpixel)) { goto out; } s_fillbox(s, 0, 0, img->w, img->h, s_rgbcolor(s, 197, 198, 199)); s_putboxrgba(s, 0, 0, img->w, img->h, img->rgba); s_scalebox(temp->surface, img->w, img->h, s->vbuf, 18, 18, tbuf); s_putbox(temp->surface, 4, 2 + fy - 16, 18, 18, tbuf); s_surface_destroy(s); out: s_image_uninit(img); s_free(file); s_free(tbuf); } s_font_set_str(font, sprog->name); s_font_get_glyph(font); s_image_get_handler(font->glyph.img); s_putboxrgba(temp->surface, fx, fy - font->glyph.yMax, font->glyph.img->w, font->glyph.img->h, font->glyph.img->rgba); s_handler_init(&hndl); hndl->type = MOUSE_HANDLER; hndl->mouse.x = fx; hndl->mouse.y = fy - font->glyph.img->h + font->glyph.img->handler->y; hndl->mouse.w = fw - 50; hndl->mouse.h = font->glyph.img->h; hndl->mouse.p = start_menu_handler; hndl->mouse.button = MOUSE_LEFTBUTTON; hndl->data = sprog; s_handler_add(temp, hndl); if (sprog->type == SMENU_MENU) { s_font_set_str(font, ">"); s_font_get_glyph(font); s_image_get_handler(font->glyph.img); s_putboxrgba(temp->surface, fw - font->glyph.img->w - 10, fy - font->glyph.yMax, font->glyph.img->w, font->glyph.img->h, font->glyph.img->rgba); } fy += 22; } s_font_uninit(font); s_window_atexit(temp, start_menu_atexit); temp->data = tbar_data; s_window_show(temp); s_window_main(temp); }
int main (int argc, char *argv[]) { int x; int y; int w; int h; s_font_t *font; s_handler_t *hndl; s_window_t *window; s_window_init(&window); s_window_new(window, WINDOW_MAIN | WINDOW_NOFORM | WINDOW_DESKTOP, NULL); s_window_set_resizeable(window, 0); s_window_set_alwaysontop(window, 1); s_window_set_title(window, "Xynth logout"); w = 300; h = 100; x = (window->surface->width - w) / 2; y = (window->surface->height - h) / 2; s_window_set_coor(window, WINDOW_NOFORM, x, y, w, h); s_free(window->surface->vbuf); window->surface->width = w; window->surface->height = h; window->surface->vbuf = (unsigned char *) malloc(w * h * window->surface->bytesperpixel); s_window_atevent(window, xynthlogout_atevent); s_fillbox(window->surface, 0, 0, w, h, s_rgbcolor(window->surface, 0, 0, 0)); for (y = 2; y < h - 2; y++) { s_fillbox(window->surface, 2, y, w - 4, 1, s_rgbcolor(window->surface, 255 - (int) ((float) y * 255.00 / 100.00), 255 - (int) ((float) y * 255.00 / 100.00), 255)); } s_font_init(&font, "arial.ttf"); s_font_set_str(font, "Close Xynth Windowing System..."); s_font_set_size(font, 16); s_font_get_glyph(font); s_image_get_handler(font->glyph.img); s_putboxrgba(window->surface, 18, 13, font->glyph.img->w, font->glyph.img->h, font->glyph.img->rgba); s_fillbox(window->surface, 18, 15 + font->glyph.img->h + 2, font->glyph.img->w, 2, 0); s_font_uninit(font); s_fillbox(window->surface, 40, 48, 35, 35, s_rgbcolor(window->surface, 0, 0, 0)); s_fillbox(window->surface, 42, 50, 31, 31, s_rgbcolor(window->surface, 255, 30, 30)); s_font_init(&font, "arial.ttf"); s_font_set_str(font, "Shutdown"); s_font_set_size(font, 16); s_font_get_glyph(font); s_image_get_handler(font->glyph.img); s_putboxrgba(window->surface, 40 + 35 + 5, 48 + 12, font->glyph.img->w, font->glyph.img->h, font->glyph.img->rgba); s_font_uninit(font); s_handler_init(&hndl); hndl->type = MOUSE_HANDLER; hndl->mouse.x = 40; hndl->mouse.y = 48; hndl->mouse.w = 35; hndl->mouse.h = 35; hndl->mouse.r = xynthlogout_logout; hndl->mouse.button = MOUSE_LEFTBUTTON; s_handler_add(window, hndl); s_fillbox(window->surface, 175, 48, 35, 35, s_rgbcolor(window->surface, 0, 0, 0)); s_fillbox(window->surface, 177, 50, 31, 31, s_rgbcolor(window->surface, 30, 255, 30)); s_font_init(&font, "arial.ttf"); s_font_set_str(font, "Cancel"); s_font_set_size(font, 16); s_font_get_glyph(font); s_image_get_handler(font->glyph.img); s_putboxrgba(window->surface, 175 + 35 + 5, 48 + 12, font->glyph.img->w, font->glyph.img->h, font->glyph.img->rgba); s_font_uninit(font); s_handler_init(&hndl); hndl->type = MOUSE_HANDLER; hndl->mouse.x = 175; hndl->mouse.y = 48; hndl->mouse.w = 35; hndl->mouse.h = 35; hndl->mouse.r = xynthlogout_cancel; hndl->mouse.button = MOUSE_LEFTBUTTON; s_handler_add(window, hndl); s_window_show(window); s_window_main(window); return 0; }
void taskbar_clock_handler_o (s_window_t *window, s_event_t *event, s_handler_t *handler) { time_t t_; char *text; struct tm *t; int wday = 0; s_font_t *font; s_window_t *temp; tbar_data_t *tbar_data; tbar_clock_t *tbar_clock; int mon[] = {0, 3, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5}; char *days[] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}; char *mons[] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"}; tbar_data = (tbar_data_t *) window->data; tbar_clock = tbar_data->tbar_clock; if (tbar_clock->clock != NULL) { return; } t_ = time(NULL); t = localtime(&t_); text = (char *) s_malloc(sizeof(char) * 256); s_window_init(&temp); s_window_new(temp, WINDOW_TYPE_TEMP | WINDOW_TYPE_NOFORM, window); s_window_set_alwaysontop(temp, 1); /* W = C + Y + L + M + D (mod 7) Where: W is the day of the week (0 = Sunday, through 6 = Saturday) C is a code for the century from this table (for the Gregorian calendar only): 1400s, 1800s, 2200s 2 1800�is�not�a�leap�year 1500s, 1900s, 2300s�����0�������1900�is�not�a�leap�year 1600s, 2000s, 2400s�����5�������2000�is�a�leap�year 1700s, 2100s, 2500s�����4�������2100�is�not�a�leap�year Y is the last two digits of the year. L is the number of leap days since the beginning of the century. Step 1: Divide the year (two digits) by 4 and throw away the fraction. Step 2: Notice that 1900 and 1800 were not leap years, and 2000 was. Only century years divisible by 400 are leap years. So, add 1 for those centuries divisible by 4 (as we haven't counted the leap day for year 00 yet). Step 3: Also, don't count a leap day if it happens after the date that you are calculating. In other words subtract one, if you are calculating a date of January or February of a leap year. M is the code for the month, from this table: 1. Jan. 0 5.�May��1 9.� Sep. 5 2. Feb. 3 6.�June�4 10.�Oct.�0 3. Mar. 3 7.�July�6 11.�Nov. 3 4. Apr. 6 8.�Aug.�2 12.�Dec. 5 D is the date (day of month). */ switch ((t->tm_year + 1900) / 100) { case 14: case 18: case 22: wday = 2; break; case 15: case 19: case 23: wday = 0; break; case 16: case 20: case 24: wday = 5; break; case 17: case 21: case 25: wday = 4; break; } wday += t->tm_year % 100; wday += ((t->tm_year % 100) / 4); wday += ((((t->tm_year + 1900) / 100) % 4) == 0) ? 1 : 0; wday += mon[t->tm_mon]; wday += t->tm_mday; wday %= 7; sprintf(text, "%s %d %s %d", days[wday], t->tm_mday, mons[t->tm_mon], t->tm_year + 1900); s_font_init(&font, "arial.ttf"); s_font_set_str(font, text); s_font_set_size(font, 12); s_font_get_glyph(font); s_image_get_handler(font->glyph.img); s_window_set_coor(temp, 0, event->mouse->x - font->glyph.img->handler->w - 8, event->mouse->y - font->glyph.img->handler->h - 8, font->glyph.img->handler->w + 8, font->glyph.img->handler->h + 8); s_fillbox(temp->surface, 0, 0, temp->surface->buf->w, temp->surface->buf->h, s_rgbcolor(temp->surface, 0, 0, 0)); s_fillbox(temp->surface, 1, 1, temp->surface->buf->w - 2, temp->surface->buf->h - 2, s_rgbcolor(temp->surface, 255, 255, 222)); s_putboxrgba(temp->surface, 4, 4, font->glyph.img->w, font->glyph.img->h, font->glyph.img->rgba); s_font_uninit(font); s_free(text); s_window_atevent(temp, taskbar_clock_popup_atevent); s_window_atexit(temp, taskbar_clock_popup_atexit); s_window_show(temp); s_window_main(temp); tbar_clock->clock = temp; }
void MButton::objectDraw (void) { int x; int y; int w; int h; int x_; int y_; int c[3]; char *vbuf; char text[3]; s_surface_t s; s_font_t *font; unsigned int *mat; if (buttonMines->minesMatrix_[buttonR][buttonC] == 1) { this->frameSetStyle((this->frameStyle & SFrame::MShape) | SFrame::Sunken); } SButton::objectDraw(); if (buttonMines->minesMatrix_[buttonR][buttonC] == 1) { if (buttonMines->minesMatrix[buttonR][buttonC] == 0) { /* top */ buttonDrawEmpty(buttonR - 1, buttonC); /* top right */ buttonDrawEmpty(buttonR - 1, buttonC + 1); /* right */ buttonDrawEmpty(buttonR, buttonC + 1); /* bottom right */ buttonDrawEmpty(buttonR + 1, buttonC + 1); /* bottom */ buttonDrawEmpty(buttonR + 1, buttonC); /* bottom left */ buttonDrawEmpty(buttonR + 1, buttonC - 1); /* left */ buttonDrawEmpty(buttonR, buttonC - 1); /* top left */ buttonDrawEmpty(buttonR - 1, buttonC - 1); } else if (buttonMines->minesMatrix[buttonR][buttonC] > 0) { if ((objectRectContents.rectH - 2) < 0) { return; } s_font_init(&font, "arial.ttf"); sprintf(text, "%d", (int) (buttonMines->minesMatrix[buttonR][buttonC])); s_font_set_str(font, text); s_font_set_size(font, objectRectContents.rectH - 2); s_font_get_glyph(font); s_image_get_handler(font->img); switch (buttonMines->minesMatrix[buttonR][buttonC]) { case 1: c[0] = 0; c[1] = 0; c[2] = 255; break; case 2: c[0] = 0; c[1] = 136; c[2] = 0; break; case 3: c[0] = 136; c[1] = 136; c[2] = 0; break; case 4: c[0] = 136; c[1] = 0; c[2] = 136; break; case 5: c[0] = 255; c[1] = 0; c[2] = 0; break; case 6: c[0] = 136; c[1] = 0; c[2] = 0; break; case 7: c[0] = 0; c[1] = 0; c[2] = 0; break; default: case 8: c[0] = 0; c[1] = 0; c[2] = 0; break; } x_ = objectRectContents.rectX + ((((objectRectContents.rectW - font->img->w) / 2) < 0) ? 0 : ((objectRectContents.rectW - font->img->w) / 2)); y_ = objectRectContents.rectY + ((((objectRectContents.rectH - font->yMax) / 2) < 0) ? 0 : ((objectRectContents.rectH - font->yMax) / 2)); w = (objectRectContents.rectW < font->img->w) ? objectRectContents.rectW : font->img->w; h = (objectRectContents.rectH < font->img->h) ? objectRectContents.rectH : font->img->h; vbuf = (char *) s_malloc(objectWindow->surface->bytesperpixel * font->img->w * font->img->h + 1); s_getsurfacevirtual(&s, font->img->w, font->img->h, objectWindow->surface->bitsperpixel, vbuf); s_getbox(objectWindow->surface, x_, y_, font->img->w, font->img->h, s.vbuf); mat = font->img->rgba; for (y = 0; y < h; y++) { for (x = 0; x < w; x++) { if (~*mat & 0xff) { s_setpixelrgba(&s, x, y, c[0], c[1], c[2], *mat & 0xff); } mat++; } mat += font->img->w - w; } s_putbox(objectWindow->surface, x_, y_, font->img->w, font->img->h, s.vbuf); s_free(vbuf); s_font_uninit(font); } else if (buttonMines->minesMatrix[buttonR][buttonC] < 0) { x = objectRectContents.rectX + ((((objectRectContents.rectW - buttonMines->minesMine->w) / 2) < 0) ? 0 : ((objectRectContents.rectW - buttonMines->minesMine->w) / 2)); y = objectRectContents.rectY + ((((objectRectContents.rectH - buttonMines->minesMine->h) / 2) < 0) ? 0 : ((objectRectContents.rectH - buttonMines->minesMine->h) / 2)); w = (objectRectContents.rectW < buttonMines->minesMine->w) ? objectRectContents.rectW : buttonMines->minesMine->w; h = (objectRectContents.rectH < buttonMines->minesMine->h) ? objectRectContents.rectH : buttonMines->minesMine->h; s_putboxpartmask(objectWindow->surface, x, y, w, h, buttonMines->minesMine->w, buttonMines->minesMine->h, buttonMines->minesMine->buf, buttonMines->minesMine->mat, 0, 0); } } else if (buttonMines->minesMatrix_[buttonR][buttonC] == 2) { x = objectRectContents.rectX + ((((objectRectContents.rectW - buttonMines->minesFlag->w) / 2) < 0) ? 0 : ((objectRectContents.rectW - buttonMines->minesFlag->w) / 2)); y = objectRectContents.rectY + ((((objectRectContents.rectH - buttonMines->minesFlag->h) / 2) < 0) ? 0 : ((objectRectContents.rectH - buttonMines->minesFlag->h) / 2)); w = (objectRectContents.rectW < buttonMines->minesFlag->w) ? objectRectContents.rectW : buttonMines->minesFlag->w; h = (objectRectContents.rectH < buttonMines->minesFlag->h) ? objectRectContents.rectH : buttonMines->minesFlag->h; s_putboxpartmask(objectWindow->surface, x, y, w, h, buttonMines->minesFlag->w, buttonMines->minesFlag->h, buttonMines->minesFlag->buf, buttonMines->minesFlag->mat, 0, 0); } else if (buttonMines->minesMatrix_[buttonR][buttonC] == 3) { if ((objectRectContents.rectH - 2) < 0) { return; } s_font_init(&font, "arial.ttf"); sprintf(text, "%s", "?"); s_font_set_str(font, text); s_font_set_size(font, objectRectContents.rectH - 2); s_font_get_glyph(font); s_image_get_handler(font->img); x_ = objectRectContents.rectX + ((((objectRectContents.rectW - font->img->w) / 2) < 0) ? 0 : ((objectRectContents.rectW - font->img->w) / 2)); y_ = objectRectContents.rectY + ((((objectRectContents.rectH - font->yMax) / 2) < 0) ? 0 : ((objectRectContents.rectH - font->yMax) / 2)); w = (objectRectContents.rectW < font->img->w) ? objectRectContents.rectW : font->img->w; h = (objectRectContents.rectH < font->img->h) ? objectRectContents.rectH : font->img->h; vbuf = (char *) s_malloc(objectWindow->surface->bytesperpixel * font->img->w * font->img->h + 1); s_getsurfacevirtual(&s, font->img->w, font->img->h, objectWindow->surface->bitsperpixel, vbuf); s_getbox(objectWindow->surface, x_, y_, font->img->w, font->img->h, s.vbuf); mat = font->img->rgba; for (y = 0; y < h; y++) { for (x = 0; x < w; x++) { if (~*mat & 0xff) { s_setpixelrgba(&s, x, y, 0, 0, 0, *mat & 0xff); } mat++; } mat += font->img->w - w; } s_putbox(objectWindow->surface, x_, y_, font->img->w, font->img->h, s.vbuf); s_free(vbuf); s_font_uninit(font); } }