void Rterm_draw_screen_string_imlib2(struct R_termscreen *screen, int row, int column, int len) { R_text_t *text; R_textflags_t *textflags; int bufferrow; int bgcolor, fgcolor; int textw, texth; struct imlib2color *color; Imlib_Image *textimg; if (screen == NULL) { return; } text = screen->textbuf.data[screen->viewrow + row] + column; textflags = screen->textbuf.renddata[screen->viewrow + row] + column; memcpy(screen->stringbuffer, text, len); screen->stringbuffer[len] = '\0'; fprintf(stderr, "string: %s\n", screen->stringbuffer); fgcolor = RTERM_CHAR_FG_COLOR(*textflags); if (fgcolor) { color = &screen->im2colors[fgcolor]; } else { color = &screen->im2colors[RTERM_SCREEN_FOREGROUND]; } #if 0 fprintf(stderr, "red == %d, green == %d, blue == %d, alpha == %d\n", color->red, color->green, color->blue, color->alpha); #endif imlib_context_set_font(screen->im2font); imlib_context_set_color(color->red, color->green, color->blue, color->alpha); imlib_context_set_drawable(screen->buf); imlib_get_text_size(screen->stringbuffer, &textw, &texth); textimg = imlib_create_image(textw, texth); imlib_context_set_image(textimg); imlib_image_clear(); imlib_image_set_has_alpha(1); imlib_context_set_blend(0); imlib_context_set_anti_alias(0); imlib_text_draw(0, 0, screen->stringbuffer); imlib_render_image_on_drawable(Rterm_screen_column_x(screen, column), Rterm_screen_row_y(screen, column)); imlib_free_image(); return; }
void mainwin_update_background(MainWin *mw) { Pixmap dummy = wm_get_root_pmap(mw->dpy); Window dummy_root; int x, y; unsigned int root_w, root_h, border_width, depth; XGetGeometry(mw->dpy, mw->root, &dummy_root, &x, &y, &root_w, &root_h, &border_width, &depth); if(mw->background != 0) { imlib_context_set_image(mw->background); imlib_free_image(); } if(dummy != None) { unsigned int width, height; mw->background = imlib_create_image(root_w, root_h); imlib_context_set_image(mw->background); XGetGeometry(mw->dpy, dummy, &dummy_root, &x, &y, &width, &height, &border_width, &depth); imlib_context_set_drawable(dummy); imlib_copy_drawable_to_image(0, 0, 0, width, height, 0, 0, 1); for(x = 1; x < (int)ceil((double)root_w / width); ++x) imlib_image_copy_rect(0, 0, width, height, x * width, 0); for(y = 1; y < (int)ceil((double)root_h / height); ++y) imlib_image_copy_rect(0, 0, root_w, height, 0, y * height); } else { mw->background = imlib_create_image(root_w, root_h); imlib_context_set_image(mw->background); imlib_image_clear(); } mainwin_update_bg_pixmap(mw); REDUCE(clientwin_render((ClientWin*)iter->data), mw->cod); }
void menu_draw_string_imlib2(Rwindow_t *window) { int textw, texth; unsigned int winw, winh; unsigned int dummyui; int dummyi; size_t len; char *str; Window dummywin; Imlib_Image textimg; char blend; if (window->im2title) { XGetGeometry(window->app->display, window->id, &dummywin, &dummyi, &dummyi, &winw, &winh, &dummyui, &dummyui); imlib_context_set_image(window->im2title); imlib_context_set_drawable(window->id); blend = imlib_context_get_blend(); imlib_context_set_blend(1); imlib_render_image_on_drawable(window->menu->lefttextoffset, (winh - window->im2titleh) / 2); if (window->menuitem) { textimg = NULL; if (window->menuitem->type == MENUITEM_TOGGLE) { if (!window->menuitem->im2true) { imlib_context_set_font(window->im2font); imlib_get_text_size(window->menuitem->truetext, &textw, &texth); textimg = imlib_create_image(textw, texth); if (textimg) { imlib_context_set_image(textimg); imlib_image_set_has_alpha(1); imlib_image_clear(); imlib_context_set_color(204, 181, 59, 255); imlib_text_draw(0, 0, window->menuitem->truetext); window->menuitem->im2true = textimg; window->menuitem->im2truew = textw; window->menuitem->im2trueh = texth; } } if (!window->menuitem->im2false) { imlib_context_set_font(window->im2font); imlib_get_text_size(window->menuitem->falsetext, &textw, &texth); textimg = imlib_create_image(textw, texth); if (textimg) { imlib_context_set_image(textimg); imlib_image_set_has_alpha(1); imlib_image_clear(); imlib_context_set_color(204, 181, 59, 255); imlib_text_draw(0, 0, window->menuitem->falsetext); window->menuitem->im2false = textimg; window->menuitem->im2falsew = textw; window->menuitem->im2falseh = texth; } } if (*((unsigned long *)window->menuitem->option.valueptr) & window->menuitem->option.flag) { str = window->menuitem->truetext; textimg = window->menuitem->im2true; textw = window->menuitem->im2truew; texth = window->menuitem->im2trueh; } else { str = window->menuitem->falsetext; textimg = window->menuitem->im2false; textw = window->menuitem->im2falsew; texth = window->menuitem->im2falseh; } } else if (window->menuitem->righttext) { if (!window->menuitem->im2right) { imlib_context_set_font(window->im2font); imlib_get_text_size(window->menuitem->righttext, &textw, &texth); textimg = imlib_create_image(textw, texth); if (textimg) { imlib_context_set_image(textimg); imlib_image_set_has_alpha(1); imlib_image_clear(); imlib_context_set_color(204, 181, 59, 255); imlib_text_draw(0, 0, window->menuitem->righttext); window->menuitem->im2right = textimg; window->menuitem->im2rightw = textw; window->menuitem->im2righth = texth; } } str = window->menuitem->righttext; textimg = window->menuitem->im2right; textw = window->menuitem->im2rightw; texth = window->menuitem->im2righth; } if (textimg) { imlib_context_set_image(textimg); imlib_context_set_drawable(window->id); imlib_render_image_on_drawable(winw - window->menu->righttextoffset - textw, (winh - texth) / 2); } else { #if 0 len = strlen(str); if (len) { XDrawString(window->app->display, window->id, window->gc, winw - window->menu->righttextoffset - len * FONT_WIDTH(window->fontinfo), (winh + FONT_HEIGHT(window->fontinfo)) / 2, str, len); } #endif } } imlib_context_set_blend(blend); } else { menu_draw_string(window); } return; }