static void _vte_pango_x_draw_text(struct _vte_draw *draw, struct _vte_draw_text_request *requests, gsize n_requests, GdkColor *color, guchar alpha) { Display *display; GC gc; struct _vte_pango_x_data *data; char buf[VTE_UTF8_BPC]; gsize i, length; GdkColor wcolor; data = (struct _vte_pango_x_data*) draw->impl_data; wcolor = *color; gdk_rgb_find_color(gdk_drawable_get_colormap(draw->widget->window), &wcolor); gdk_gc_set_foreground(data->gc, &wcolor); display = gdk_x11_drawable_get_xdisplay(draw->widget->window); gc = gdk_x11_gc_get_xgc(data->gc); for (i = 0; i < n_requests; i++) { length = g_unichar_to_utf8(requests[i].c, buf); pango_layout_set_text(data->layout, buf, length); pango_x_render_layout(display, data->drawable, gc, data->layout, requests[i].x - data->x_offs, requests[i].y - data->y_offs); } }
static void wireframeDrawXlib (WireFrame *wireframe, int width, int height) { ScreenInfo *screen_info = wireframe->screen_info; wireframe->mapped = FALSE; XUnmapWindow (myScreenGetXDisplay (screen_info), wireframe->xwindow); XMoveResizeWindow (myScreenGetXDisplay (screen_info), wireframe->xwindow, wireframe->x, wireframe->y, width, height); wireframe->width = width; wireframe->height = height; if ((wireframe->width > OUTLINE_WIDTH * 2) && (wireframe->height > OUTLINE_WIDTH * 2)) { XRectangle xrect; Region inner_xregion; Region outer_xregion; inner_xregion = XCreateRegion (); outer_xregion = XCreateRegion (); xrect.x = 0; xrect.y = 0; xrect.width = wireframe->width; xrect.height = wireframe->height; XUnionRectWithRegion (&xrect, outer_xregion, outer_xregion); xrect.x += OUTLINE_WIDTH; xrect.y += OUTLINE_WIDTH; xrect.width -= OUTLINE_WIDTH * 2; xrect.height -= OUTLINE_WIDTH * 2; XUnionRectWithRegion (&xrect, inner_xregion, inner_xregion); XSubtractRegion (outer_xregion, inner_xregion, outer_xregion); XShapeCombineRegion (myScreenGetXDisplay (screen_info), wireframe->xwindow, ShapeBounding, 0, 0, outer_xregion, ShapeSet); XDestroyRegion (outer_xregion); XDestroyRegion (inner_xregion); XMapWindow (myScreenGetXDisplay (screen_info), wireframe->xwindow); wireframe->mapped = TRUE; XDrawRectangle (myScreenGetXDisplay (screen_info), wireframe->xwindow, gdk_x11_gc_get_xgc (screen_info->white_gc), 0, 0, wireframe->width - 1, wireframe->height - 1); XDrawRectangle (myScreenGetXDisplay (screen_info), wireframe->xwindow, gdk_x11_gc_get_xgc (screen_info->white_gc), OUTLINE_WIDTH - 1, OUTLINE_WIDTH - 1, wireframe->width - 2 * (OUTLINE_WIDTH - 1) - 1, wireframe->height- 2 * (OUTLINE_WIDTH - 1) - 1); } else { /* Unset the shape */ XShapeCombineMask (myScreenGetXDisplay (screen_info), wireframe->xwindow, ShapeBounding, 0, 0, None, ShapeSet); XMapWindow (myScreenGetXDisplay (screen_info), wireframe->xwindow); wireframe->mapped = TRUE; XDrawRectangle (myScreenGetXDisplay (screen_info), wireframe->xwindow, gdk_x11_gc_get_xgc (screen_info->white_gc), 0, 0, wireframe->width - 1, wireframe->height - 1); } }