summaryrefslogtreecommitdiff
path: root/render/render.c
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2007-03-07 22:57:10 +0000
committerDana Jansens <danakj@orodu.net>2007-03-07 22:57:10 +0000
commita79651294c54a784b34c85e3832e8c7ca4f3aa17 (patch)
tree8c5e7f7544f728db4f292860bbcf19b3ce7784a0 /render/render.c
parentefedb4df9c18ff68630ecb6fa9c012b459207e7d (diff)
Split RrPaint to RrPaint and RrPaintPixmap, so you can paint things other than windows. If you don't free the returned pixmap though, you will be leaking memory in the server!
Diffstat (limited to 'render/render.c')
-rw-r--r--render/render.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/render/render.c b/render/render.c
index 669761d5..df47d6db 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,11 +46,11 @@ 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;
}
resized = (a->w != w || a->h != h);
@@ -80,7 +80,7 @@ void RrPaint(RrAppearance *a, Window win, gint w, gint h)
sh = a->surface.parent->h;
if (a->surface.parentx >= sw || a->surface.parenty >= sh) {
- return;
+ return oldp;
}
source = (a->surface.parent->surface.pixel_data +
@@ -164,8 +164,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);
}