Fix for rendering RGBA and Image textures.
RGBA and Image textures could exceed their tarea if given an x or y offset inside the area that is > 0.
This commit is contained in:
parent
324ba15ebc
commit
437739b6a3
1 changed files with 12 additions and 8 deletions
|
@ -135,12 +135,14 @@ Pixmap RrPaintPixmap(RrAppearance *a, gint w, gint h)
|
||||||
{
|
{
|
||||||
RrRect narea = tarea;
|
RrRect narea = tarea;
|
||||||
RrTextureImage *img = &a->texture[i].data.image;
|
RrTextureImage *img = &a->texture[i].data.image;
|
||||||
if (img->twidth)
|
|
||||||
narea.width = MIN(tarea.width, img->twidth);
|
|
||||||
if (img->theight)
|
|
||||||
narea.height = MIN(tarea.height, img->theight);
|
|
||||||
narea.x += img->tx;
|
narea.x += img->tx;
|
||||||
|
narea.width -= img->tx;
|
||||||
narea.y += img->ty;
|
narea.y += img->ty;
|
||||||
|
narea.height -= img->ty;
|
||||||
|
if (img->twidth)
|
||||||
|
narea.width = MIN(narea.width, img->twidth);
|
||||||
|
if (img->theight)
|
||||||
|
narea.height = MIN(narea.height, img->theight);
|
||||||
RrImageDrawImage(a->surface.pixel_data,
|
RrImageDrawImage(a->surface.pixel_data,
|
||||||
&a->texture[i].data.image,
|
&a->texture[i].data.image,
|
||||||
a->w, a->h,
|
a->w, a->h,
|
||||||
|
@ -153,12 +155,14 @@ Pixmap RrPaintPixmap(RrAppearance *a, gint w, gint h)
|
||||||
{
|
{
|
||||||
RrRect narea = tarea;
|
RrRect narea = tarea;
|
||||||
RrTextureRGBA *rgb = &a->texture[i].data.rgba;
|
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.x += rgb->tx;
|
||||||
|
narea.width -= rgb->tx;
|
||||||
narea.y += rgb->ty;
|
narea.y += rgb->ty;
|
||||||
|
narea.height -= rgb->ty;
|
||||||
|
if (rgb->twidth)
|
||||||
|
narea.width = MIN(narea.width, rgb->twidth);
|
||||||
|
if (rgb->theight)
|
||||||
|
narea.height = MIN(narea.height, rgb->theight);
|
||||||
RrImageDrawRGBA(a->surface.pixel_data,
|
RrImageDrawRGBA(a->surface.pixel_data,
|
||||||
&a->texture[i].data.rgba,
|
&a->texture[i].data.rgba,
|
||||||
a->w, a->h,
|
a->w, a->h,
|
||||||
|
|
Loading…
Reference in a new issue