X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=render%2Frender.c;h=8623455f6c06091e6c55335ca48531eb393b8f5b;hb=959fff5e1cda35b0a1569ef323aab3129db3cb1f;hp=b357f8a35f759857a0eee0cfb124d6309a068ac8;hpb=53066b1808701dc6c3497b2a4741ed6b82002c8f;p=chaz%2Fopenbox diff --git a/render/render.c b/render/render.c index b357f8a3..8623455f 100644 --- a/render/render.c +++ b/render/render.c @@ -40,9 +40,9 @@ static void pixel_data_to_pixmap(RrAppearance *l, Pixmap RrPaintPixmap(RrAppearance *a, gint w, gint h) { - gint i, transferred = 0, sw, sh, partial_w, partial_h; + gint i, transferred = 0, sw, sh, partial_w, partial_h, force_transfer = 0; RrPixel32 *source, *dest; - Pixmap oldp; + Pixmap oldp = None; RrRect tarea; /* area in which to draw textures */ gboolean resized; @@ -77,8 +77,10 @@ Pixmap RrPaintPixmap(RrAppearance *a, gint w, gint h) RrVisual(a->inst), RrColormap(a->inst)); g_assert(a->xftdraw != NULL); - g_free(a->surface.pixel_data); - a->surface.pixel_data = g_new(RrPixel32, w * h); + if (resized) { + g_free(a->surface.pixel_data); + a->surface.pixel_data = g_new(RrPixel32, w * h); + } if (a->surface.grad == RR_SURFACE_PARENTREL) { g_assert (a->surface.parent); @@ -158,14 +160,18 @@ Pixmap RrPaintPixmap(RrAppearance *a, gint w, gint h) &a->texture[i].data.rgba, a->w, a->h, &tarea); + force_transfer = 1; break; } } if (!transferred) { transferred = 1; - if ((a->surface.grad != RR_SURFACE_SOLID) || (a->surface.interlaced)) + if ((a->surface.grad != RR_SURFACE_SOLID) || (a->surface.interlaced) || + force_transfer) + { pixel_data_to_pixmap(a, 0, 0, w, h); + } } return oldp;