diff options
| author | Mikael Magnusson <mikachu@comhem.se> | 2006-08-01 20:34:35 +0000 |
|---|---|---|
| committer | Mikael Magnusson <mikachu@comhem.se> | 2006-08-01 20:34:35 +0000 |
| commit | 50292dbd75763a192eee748cc6c0b3e15505e7fe (patch) | |
| tree | 9239ae3a364da09329171a31e2cd38fb8c006228 /render/gradient.c | |
| parent | 6212b7c19bc43df2bfcb02ae074c791231ba8f94 (diff) | |
a "osx" gradient, it is like horizontal but mirrors in the center
Diffstat (limited to 'render/gradient.c')
| -rw-r--r-- | render/gradient.c | 41 |
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; |
