X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=render%2Frender.c;h=a1120570dc304d1ae0174e4d625fbe87eb46353b;hb=a8a93d7d39b3cc82a25d99c9c639c97a5facbfec;hp=fd95469c87019be80afc503d7c04ca3b94778882;hpb=d3d4aa29871111737a4f6985da695c8688a05270;p=chaz%2Fopenbox diff --git a/render/render.c b/render/render.c index fd95469c..a1120570 100644 --- a/render/render.c +++ b/render/render.c @@ -38,7 +38,7 @@ static void pixel_data_to_pixmap(RrAppearance *l, gint x, gint y, gint w, gint h); -void RrPaint(RrAppearance *a, Window win, gint w, gint h) +Pixmap RrPaintPixmap(RrAppearance *a, gint w, gint h) { gint i, transferred = 0, sw, sh, partial_w, partial_h; RrPixel32 *source, *dest; @@ -46,12 +46,20 @@ void RrPaint(RrAppearance *a, Window win, gint w, gint h) RrRect tarea; /* area in which to draw textures */ gboolean resized; - if (w <= 0 || h <= 0) return; + if (w <= 0 || h <= 0) return None; if (a->surface.parentx < 0 || a->surface.parenty < 0) { /* ob_debug("Invalid parent co-ordinates\n"); */ - return; + return None; + } + + if (a->surface.grad == RR_SURFACE_PARENTREL && + (a->surface.parentx >= a->surface.parent->w || + a->surface.parenty >= a->surface.parent->h)) + { + return None; } + resized = (a->w != w || a->h != h); oldp = a->pixmap; /* save to free after changing the visible pixmap */ @@ -79,10 +87,6 @@ void RrPaint(RrAppearance *a, Window win, gint w, gint h) sw = a->surface.parent->w; sh = a->surface.parent->h; - if (a->surface.parentx >= sw || a->surface.parenty >= sh) { - return; - } - source = (a->surface.parent->surface.pixel_data + a->surface.parentx + sw * a->surface.parenty); dest = a->surface.pixel_data; @@ -164,8 +168,17 @@ void RrPaint(RrAppearance *a, Window win, gint w, gint h) pixel_data_to_pixmap(a, 0, 0, w, h); } + return oldp; +} + +void RrPaint(RrAppearance *a, Window win, gint w, gint h) +{ + Pixmap oldp; + + oldp = RrPaintPixmap(a, w, h); XSetWindowBackgroundPixmap(RrDisplay(a->inst), win, a->pixmap); XClearWindow(RrDisplay(a->inst), win); + /* free this after changing the visible pixmap */ if (oldp) XFreePixmap(RrDisplay(a->inst), oldp); } @@ -348,9 +361,12 @@ void RrMinsize(RrAppearance *a, gint *w, gint *h) break; case RR_TEXTURE_TEXT: m = RrFontMeasureString(a->texture[i].data.text.font, - a->texture[i].data.text.string); + a->texture[i].data.text.string, + a->texture[i].data.text.shadow_offset_x, + a->texture[i].data.text.shadow_offset_y); *w = MAX(*w, m->width + 4); - m->height = RrFontHeight(a->texture[i].data.text.font); + m->height = RrFontHeight(a->texture[i].data.text.font, + a->texture[i].data.text.shadow_offset_y); *h += MAX(*h, m->height); g_free(m); break;