allow effects on parentrelative textures, ie bevels and interlaces and borders
This commit is contained in:
parent
4dec70d627
commit
3a89939c2d
3 changed files with 59 additions and 51 deletions
|
@ -24,6 +24,7 @@
|
|||
#include <glib.h>
|
||||
|
||||
static void highlight(RrPixel32 *x, RrPixel32 *y, gboolean raised);
|
||||
static void gradient_parentrelative(RrAppearance *a, gint w, gint h);
|
||||
static void gradient_solid(RrAppearance *l, gint w, gint h);
|
||||
static void gradient_splitvertical(RrAppearance *a, gint w, gint h);
|
||||
static void gradient_vertical(RrSurface *sf, gint w, gint h);
|
||||
|
@ -36,11 +37,14 @@ static void gradient_pyramid(RrSurface *sf, gint inw, gint inh);
|
|||
void RrRender(RrAppearance *a, gint w, gint h)
|
||||
{
|
||||
RrPixel32 *data = a->surface.pixel_data;
|
||||
RrPixel32 current;
|
||||
RrPixel32 current, *source, *dest;
|
||||
guint r,g,b;
|
||||
gint off, x;
|
||||
gint off, x, sw, sh, partial_w, partial_h, i;
|
||||
|
||||
switch (a->surface.grad) {
|
||||
case RR_SURFACE_PARENTREL:
|
||||
gradient_parentrelative(a, w, h);
|
||||
break;
|
||||
case RR_SURFACE_SOLID:
|
||||
gradient_solid(a, w, h);
|
||||
break;
|
||||
|
@ -190,6 +194,34 @@ static void create_bevel_colors(RrAppearance *l)
|
|||
l->surface.bevel_dark = RrColorNew(l->inst, r, g, b);
|
||||
}
|
||||
|
||||
static void gradient_parentrelative(RrAppearance *a, gint w, gint h)
|
||||
{
|
||||
RrPixel32 *source, *dest;
|
||||
gint sw, sh, partial_w, partial_h, i;
|
||||
|
||||
g_assert (a->surface.parent);
|
||||
g_assert (a->surface.parent->w);
|
||||
|
||||
sw = a->surface.parent->w;
|
||||
sh = a->surface.parent->h;
|
||||
|
||||
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) {
|
||||
partial_w = sw - a->surface.parentx;
|
||||
} else partial_w = w;
|
||||
|
||||
if (a->surface.parenty + h > sh) {
|
||||
partial_h = sh - a->surface.parenty;
|
||||
} else partial_h = h;
|
||||
|
||||
for (i = 0; i < partial_h; i++, source += sw, dest += w) {
|
||||
memcpy(dest, source, partial_w * sizeof(RrPixel32));
|
||||
}
|
||||
}
|
||||
|
||||
static void gradient_solid(RrAppearance *l, gint w, gint h)
|
||||
{
|
||||
gint i;
|
||||
|
|
|
@ -40,8 +40,7 @@ static void pixel_data_to_pixmap(RrAppearance *l,
|
|||
|
||||
Pixmap RrPaintPixmap(RrAppearance *a, gint w, gint h)
|
||||
{
|
||||
gint i, transferred = 0, sw, sh, partial_w, partial_h, force_transfer = 0;
|
||||
RrPixel32 *source, *dest;
|
||||
gint i, transferred = 0, force_transfer = 0;
|
||||
Pixmap oldp = None;
|
||||
RrRect tarea; /* area in which to draw textures */
|
||||
gboolean resized;
|
||||
|
@ -82,30 +81,7 @@ Pixmap RrPaintPixmap(RrAppearance *a, gint w, gint h)
|
|||
a->surface.pixel_data = g_new(RrPixel32, w * h);
|
||||
}
|
||||
|
||||
if (a->surface.grad == RR_SURFACE_PARENTREL) {
|
||||
g_assert (a->surface.parent);
|
||||
g_assert (a->surface.parent->w);
|
||||
|
||||
sw = a->surface.parent->w;
|
||||
sh = a->surface.parent->h;
|
||||
|
||||
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) {
|
||||
partial_w = sw - a->surface.parentx;
|
||||
} else partial_w = w;
|
||||
|
||||
if (a->surface.parenty + h > sh) {
|
||||
partial_h = sh - a->surface.parenty;
|
||||
} else partial_h = h;
|
||||
|
||||
for (i = 0; i < partial_h; i++, source += sw, dest += w) {
|
||||
memcpy(dest, source, partial_w * sizeof(RrPixel32));
|
||||
}
|
||||
} else
|
||||
RrRender(a, w, h);
|
||||
RrRender(a, w, h);
|
||||
|
||||
{
|
||||
gint l, t, r, b;
|
||||
|
|
|
@ -1472,30 +1472,30 @@ static void parse_style(gchar *tex, RrSurfaceColorType *grad,
|
|||
} else {
|
||||
*grad = RR_SURFACE_SOLID;
|
||||
}
|
||||
|
||||
if (strstr(tex, "sunken") != NULL)
|
||||
*relief = RR_RELIEF_SUNKEN;
|
||||
else if (strstr(tex, "flat") != NULL)
|
||||
*relief = RR_RELIEF_FLAT;
|
||||
else
|
||||
*relief = RR_RELIEF_RAISED;
|
||||
|
||||
*border = FALSE;
|
||||
if (*relief == RR_RELIEF_FLAT) {
|
||||
if (strstr(tex, "border") != NULL)
|
||||
*border = TRUE;
|
||||
} else {
|
||||
if (strstr(tex, "bevel2") != NULL)
|
||||
*bevel = RR_BEVEL_2;
|
||||
else
|
||||
*bevel = RR_BEVEL_1;
|
||||
}
|
||||
|
||||
if (strstr(tex, "interlaced") != NULL)
|
||||
*interlaced = TRUE;
|
||||
else
|
||||
*interlaced = FALSE;
|
||||
}
|
||||
|
||||
if (strstr(tex, "sunken") != NULL)
|
||||
*relief = RR_RELIEF_SUNKEN;
|
||||
else if ((strstr(tex, "flat") != NULL) || (*grad == RR_SURFACE_PARENTREL))
|
||||
*relief = RR_RELIEF_FLAT;
|
||||
else
|
||||
*relief = RR_RELIEF_RAISED;
|
||||
|
||||
*border = FALSE;
|
||||
if (*relief == RR_RELIEF_FLAT) {
|
||||
if (strstr(tex, "border") != NULL)
|
||||
*border = TRUE;
|
||||
} else {
|
||||
if (strstr(tex, "bevel2") != NULL)
|
||||
*bevel = RR_BEVEL_2;
|
||||
else
|
||||
*bevel = RR_BEVEL_1;
|
||||
}
|
||||
|
||||
if (strstr(tex, "interlaced") != NULL)
|
||||
*interlaced = TRUE;
|
||||
else
|
||||
*interlaced = FALSE;
|
||||
}
|
||||
|
||||
static xmlNodePtr find_node(xmlNodePtr n, const gchar *names[])
|
||||
|
|
Loading…
Reference in a new issue