summaryrefslogtreecommitdiff
path: root/render/gradient.c
diff options
context:
space:
mode:
authorMikael Magnusson <mikachu@comhem.se>2006-08-01 20:34:35 +0000
committerMikael Magnusson <mikachu@comhem.se>2006-08-01 20:34:35 +0000
commit50292dbd75763a192eee748cc6c0b3e15505e7fe (patch)
tree9239ae3a364da09329171a31e2cd38fb8c006228 /render/gradient.c
parent6212b7c19bc43df2bfcb02ae074c791231ba8f94 (diff)
a "osx" gradient, it is like horizontal but mirrors in the center
Diffstat (limited to 'render/gradient.c')
-rw-r--r--render/gradient.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/render/gradient.c b/render/gradient.c
index 9f245743..7b26e54c 100644
--- a/render/gradient.c
+++ b/render/gradient.c
@@ -27,6 +27,7 @@ static void gradient_solid(RrAppearance *l, gint w, gint h);
static void gradient_split(RrAppearance *a, gint w, gint h);
static void gradient_vertical(RrSurface *sf, gint w, gint h);
static void gradient_horizontal(RrSurface *sf, gint w, gint h);
+static void gradient_osx(RrSurface *sf, gint w, gint h);
static void gradient_diagonal(RrSurface *sf, gint w, gint h);
static void gradient_crossdiagonal(RrSurface *sf, gint w, gint h);
static void gradient_pyramid(RrSurface *sf, gint inw, gint inh);
@@ -51,6 +52,9 @@ void RrRender(RrAppearance *a, gint w, gint h)
case RR_SURFACE_HORIZONTAL:
gradient_horizontal(&a->surface, w, h);
break;
+ case RR_SURFACE_OSX:
+ gradient_osx(&a->surface, w, h);
+ break;
case RR_SURFACE_DIAGONAL:
gradient_diagonal(&a->surface, w, h);
break;
@@ -449,6 +453,43 @@ static void gradient_horizontal(RrSurface *sf, gint w, gint h)
*(data + y * w) = current;
}
+static void gradient_osx(RrSurface *sf, gint w, gint h)
+{
+ gint x, y;
+ RrPixel32 *data = sf->pixel_data, *datav;
+ RrPixel32 current;
+
+ VARS(x);
+ SETUP(x, sf->primary, sf->secondary, w/2);
+
+ for (x = w - 1; x > w/2-1; --x) { /* 0 -> w-1 */
+ current = COLOR(x);
+ datav = data;
+ for (y = h - 1; y >= 0; --y) { /* 0 -> h */
+ *datav = current;
+ datav += w;
+ }
+ ++data;
+
+ NEXT(x);
+ }
+ SETUP(x, sf->secondary, sf->primary, w/2);
+ for (x = w/2 - 1; x > 0; --x) { /* 0 -> w-1 */
+ current = COLOR(x);
+ datav = data;
+ for (y = h - 1; y >= 0; --y) { /* 0 -> h */
+ *datav = current;
+ datav += w;
+ }
+ ++data;
+
+ NEXT(x);
+ }
+ current = COLOR(x);
+ for (y = h - 1; y >= 0; --y) /* 0 -> h */
+ *(data + y * w) = current;
+}
+
static void gradient_vertical(RrSurface *sf, gint w, gint h)
{
gint x, y;