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!
This commit is contained in:
parent
efedb4df9c
commit
a79651294c
2 changed files with 20 additions and 7 deletions
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -237,6 +237,10 @@ RrSize *RrFontMeasureString (const RrFont *f, const gchar *str,
|
|||
gint RrFontHeight (const RrFont *f, gint shadow_offset_y);
|
||||
gint RrFontMaxCharWidth (const RrFont *f);
|
||||
|
||||
/* Paint into the appearance. The old pixmap is returned (if there was one). It
|
||||
is the responsibility of the caller to call XFreePixmap on the return when
|
||||
it is non-null. */
|
||||
Pixmap RrPaintPixmap (RrAppearance *a, gint w, gint h);
|
||||
void RrPaint (RrAppearance *a, Window win, gint w, gint h);
|
||||
void RrMinsize (RrAppearance *a, gint *w, gint *h);
|
||||
void RrMargins (RrAppearance *a, gint *l, gint *t, gint *r, gint *b);
|
||||
|
|
Loading…
Reference in a new issue