- if (resized) {
- oldp = l->pixmap; /* save to free after changing the visible pixmap */
- l->pixmap = XCreatePixmap(RrDisplay(l->inst),
- RrRootWindow(l->inst),
- w, h, RrDepth(l->inst));
- } else
- oldp = None;
-
- g_assert(l->pixmap != None);
- l->w = w;
- l->h = h;
-
- if (l->xftdraw != NULL)
- XftDrawDestroy(l->xftdraw);
- l->xftdraw = XftDrawCreate(RrDisplay(l->inst), l->pixmap,
- RrVisual(l->inst), RrColormap(l->inst));
- g_assert(l->xftdraw != NULL);
-
- g_free(l->surface.RrPixel_data);
- l->surface.RrPixel_data = g_new(RrPixel32, w * h);
-
- if (l->surface.grad == RR_SURFACE_PARENTREL) {
- g_assert (l->surface.parent);
- g_assert (l->surface.parent->w);
-
- sw = l->surface.parent->w;
- source = (l->surface.parent->surface.RrPixel_data + l->surface.parentx +
- sw * l->surface.parenty);
- dest = l->surface.RrPixel_data;
- for (i = 0; i < h; i++, source += sw, dest += w) {
- memcpy(dest, source, w * sizeof(RrPixel32));
+ g_assert(a->pixmap != None);
+ a->w = w;
+ a->h = h;
+
+ if (a->xftdraw != NULL)
+ XftDrawDestroy(a->xftdraw);
+ a->xftdraw = XftDrawCreate(RrDisplay(a->inst), a->pixmap,
+ 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 (a->surface.grad == RR_SURFACE_PARENTREL) {
+ g_assert (a->surface.parent);
+ g_assert (a->surface.parent->w);
+
+ sw = a->surface.parent->w;
+ sh = a->surface.parent->h;
+
+ if (a->surface.parentx >= sw || a->surface.parenty >= sh) {
+ return;