summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--render/render.c18
-rw-r--r--render/render.h5
2 files changed, 19 insertions, 4 deletions
diff --git a/render/render.c b/render/render.c
index 2813dda0..b81e80a6 100644
--- a/render/render.c
+++ b/render/render.c
@@ -132,10 +132,20 @@ Pixmap RrPaintPixmap(RrAppearance *a, gint w, gint h)
break;
case RR_TEXTURE_RGBA:
g_assert(!transferred);
- RrImageDraw(a->surface.pixel_data,
- &a->texture[i].data.rgba,
- a->w, a->h,
- &tarea);
+ {
+ RrRect narea = tarea;
+ RrTextureRGBA *rgb = &a->texture[i].data.rgba;
+ if (rgb->twidth)
+ narea.width = MIN(tarea.width, rgb->twidth);
+ if (rgb->theight)
+ narea.height = MIN(tarea.height, rgb->theight);
+ narea.x += rgb->tx;
+ narea.y += rgb->ty;
+ RrImageDraw(a->surface.pixel_data,
+ &a->texture[i].data.rgba,
+ a->w, a->h,
+ &narea);
+ }
force_transfer = 1;
break;
}
diff --git a/render/render.h b/render/render.h
index d9438edc..10eafc6e 100644
--- a/render/render.h
+++ b/render/render.h
@@ -167,6 +167,11 @@ struct _RrTextureRGBA {
gint cwidth;
gint cheight;
RrPixel32 *cache;
+/* size and position to draw at */
+ gint tx;
+ gint ty;
+ gint twidth;
+ gint theight;
};
struct _RrTextureLineArt {