}
}
-void x_paint(Window win, Appearance *l, int w, int h)
+void x_paint(Window win, Appearance *l, int x, int y, int w, int h)
{
int i;
XImage *im;
// printf("painting window %ld\n", win);
oldp = l->pixmap; /* save to free after changing the visible pixmap */
- l->pixmap = XCreatePixmap(ob_display, ob_root, w, h, render_depth);
+ l->pixmap = XCreatePixmap(ob_display, ob_root, x+w, y+h, render_depth);
g_assert(l->pixmap != None);
if (l->xftdraw != NULL)
l->surface.data.planar.pixel_data = g_new(pixel32, w * h);
if (l->surface.data.planar.grad == Background_Solid)
- gradient_solid(l, w, h);
+ gradient_solid(l, x, y, w, h);
else gradient_render(&l->surface, w, h);
/*reduce depth here...
im->byte_order = endian;
im->data = l->surface.data.planar.pixel_data;
XPutImage(ob_display, l->pixmap, DefaultGC(ob_display, ob_screen),
- im, 0, 0, 0, 0, w, h);
+ im, 0, 0, x, y, w, h);
im->data = NULL;
XDestroyImage(im);
}
l->xftdraw = XftDrawCreate(ob_display, l->pixmap,
render_visual, render_colormap);
}
- font_draw(l->xftdraw, &l->texture[i].data.text);
+ font_draw(l->xftdraw, &l->texture[i].data.text, x, y, w, h);
break;
case Bitmask:
if (l->texture[i].data.mask.color->gc == None)
out->textures = numtex;
out->xftdraw = NULL;
if (numtex) out->texture = g_new(Texture, numtex);
+ else out->texture = NULL;
out->pixmap = None;
switch (type) {
break;
}
copy->textures = orig->textures;
- if (orig->textures) {
- copy->texture = malloc(orig->textures * sizeof(Texture));
- memcpy(copy->texture, orig->texture, orig->textures * sizeof(Texture));
- } else copy->texture = NULL;
+ copy->texture = g_memdup(orig->texture, orig->textures * sizeof(Texture));
copy->pixmap = None;
copy->xftdraw = NULL;
return copy;
if (p->primary != NULL) color_free(p->primary);
if (p->secondary != NULL) color_free(p->secondary);
if (p->border_color != NULL) color_free(p->border_color);
+ if (p->pixel_data != NULL) g_free(p->pixel_data);
}
g_free(a);
}