summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikael Magnusson <mikachu@comhem.se>2007-06-04 16:03:43 +0000
committerMikael Magnusson <mikachu@comhem.se>2007-06-04 16:03:43 +0000
commit3a89939c2decf295a5d85e5306ca259e64812d9d (patch)
treeccc0d1bb70e532b2f6e701a45afc20a00e8d21a2
parent4dec70d627dbf133e3042c09032906ba65ad17b0 (diff)
allow effects on parentrelative textures, ie bevels and interlaces and borders
-rw-r--r--render/gradient.c36
-rw-r--r--render/render.c28
-rw-r--r--render/theme.c40
3 files changed, 56 insertions, 48 deletions
diff --git a/render/gradient.c b/render/gradient.c
index d3a09955..99441cd3 100644
--- a/render/gradient.c
+++ b/render/gradient.c
@@ -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;
diff --git a/render/render.c b/render/render.c
index 8623455f..e259f622 100644
--- a/render/render.c
+++ b/render/render.c
@@ -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;
diff --git a/render/theme.c b/render/theme.c
index daf2fddf..f3f7e5f4 100644
--- a/render/theme.c
+++ b/render/theme.c
@@ -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, "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;
- if (strstr(tex, "interlaced") != NULL)
- *interlaced = TRUE;
+ *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
- *interlaced = FALSE;
+ *bevel = RR_BEVEL_1;
}
+
+ if (strstr(tex, "interlaced") != NULL)
+ *interlaced = TRUE;
+ else
+ *interlaced = FALSE;
}
static xmlNodePtr find_node(xmlNodePtr n, const gchar *names[])