combine the parent and child textures in fun ways when a parentrelative texture with a bevel is placed right overtop of another texture with a bevel
This commit is contained in:
parent
cea8656983
commit
4548d40c0d
1 changed files with 32 additions and 11 deletions
|
@ -205,20 +205,41 @@ static void gradient_parentrelative(RrAppearance *a, gint w, gint h)
|
||||||
sw = a->surface.parent->w;
|
sw = a->surface.parent->w;
|
||||||
sh = a->surface.parent->h;
|
sh = a->surface.parent->h;
|
||||||
|
|
||||||
source = (a->surface.parent->surface.pixel_data +
|
/* This is a little hack. When a texture is parentrelative, and the same
|
||||||
a->surface.parentx + sw * a->surface.parenty);
|
area as the parent, and has a bevel, it will draw its bevel on top
|
||||||
dest = a->surface.pixel_data;
|
of the parent's, amplifying it. So instead, rerender the child with
|
||||||
|
the parent's settings, but the child's bevel and interlace */
|
||||||
|
if (a->surface.relief != RR_RELIEF_FLAT &&
|
||||||
|
!a->surface.parentx && !a->surface.parenty &&
|
||||||
|
sw == w && sh == h)
|
||||||
|
{
|
||||||
|
RrSurface old = a->surface;
|
||||||
|
a->surface = a->surface.parent->surface;
|
||||||
|
a->surface.relief = old.relief;
|
||||||
|
a->surface.bevel = old.bevel;
|
||||||
|
a->surface.pixel_data = old.pixel_data;
|
||||||
|
if (old.interlaced) {
|
||||||
|
a->surface.interlaced = TRUE;
|
||||||
|
a->surface.interlace_color = old.interlace_color;
|
||||||
|
}
|
||||||
|
RrRender(a, w, h);
|
||||||
|
a->surface = old;
|
||||||
|
} else {
|
||||||
|
source = (a->surface.parent->surface.pixel_data +
|
||||||
|
a->surface.parentx + sw * a->surface.parenty);
|
||||||
|
dest = a->surface.pixel_data;
|
||||||
|
|
||||||
if (a->surface.parentx + w > sw) {
|
if (a->surface.parentx + w > sw) {
|
||||||
partial_w = sw - a->surface.parentx;
|
partial_w = sw - a->surface.parentx;
|
||||||
} else partial_w = w;
|
} else partial_w = w;
|
||||||
|
|
||||||
if (a->surface.parenty + h > sh) {
|
if (a->surface.parenty + h > sh) {
|
||||||
partial_h = sh - a->surface.parenty;
|
partial_h = sh - a->surface.parenty;
|
||||||
} else partial_h = h;
|
} else partial_h = h;
|
||||||
|
|
||||||
for (i = 0; i < partial_h; i++, source += sw, dest += w) {
|
for (i = 0; i < partial_h; i++, source += sw, dest += w) {
|
||||||
memcpy(dest, source, partial_w * sizeof(RrPixel32));
|
memcpy(dest, source, partial_w * sizeof(RrPixel32));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue