X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=render%2Fgradient.c;h=7b26e54c820df1515042cfea5174087f5b1d0d3f;hb=d77c8f62f2f908cfe1d09686a35dce1ccaf65aec;hp=9f245743b1bfceefbcece5c68e7be26bc7d92566;hpb=b3fa579a61b6259defa0cd718ab7047862cf506f;p=chaz%2Fopenbox 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;