X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=render%2Fgradient.c;h=a819a4bee9e988b859155ad73f94951b94a06422;hb=b23fa507a8526ada698b2eb7e38987aa076ac79f;hp=b05da48a54ff0c7178bdd2bb7ffa88124f19c7dc;hpb=dc60657acf0511855d4844a872c9266fc1e63fc9;p=chaz%2Fopenbox diff --git a/render/gradient.c b/render/gradient.c index b05da48a..a819a4be 100644 --- a/render/gradient.c +++ b/render/gradient.c @@ -10,8 +10,6 @@ static void gradient_horizontal(RrSurface *sf, int w, int h); static void gradient_diagonal(RrSurface *sf, int w, int h); static void gradient_crossdiagonal(RrSurface *sf, int w, int h); static void gradient_pyramid(RrSurface *sf, int inw, int inh); -static void gradient_rectangle(RrSurface *sf, int inw, int inh); -static void gradient_pipecross(RrSurface *sf, int inw, int inh); void RrRender(RrAppearance *a, int w, int h) { @@ -39,12 +37,6 @@ void RrRender(RrAppearance *a, int w, int h) case RR_SURFACE_PYRAMID: gradient_pyramid(&a->surface, w, h); break; - case RR_SURFACE_PIPECROSS: - gradient_pipecross(&a->surface, w, h); - break; - case RR_SURFACE_RECTANGLE: - gradient_rectangle(&a->surface, w, h); - break; default: g_message("unhandled gradient"); return; @@ -342,7 +334,7 @@ static void gradient_solid(RrAppearance *l, int w, int h) static void gradient_horizontal(RrSurface *sf, int w, int h) { int x, y; - RrPixel32 *data = sf->RrPixel_data; + RrPixel32 *data = sf->RrPixel_data, *datav; RrPixel32 current; VARS(x); @@ -350,8 +342,11 @@ static void gradient_horizontal(RrSurface *sf, int w, int h) for (x = w - 1; x > 0; --x) { /* 0 -> w-1 */ current = COLOR(x); - for (y = h - 1; y >= 0; --y) /* 0 -> h */ - *(data + y * w) = current; + datav = data; + for (y = h - 1; y >= 0; --y) { /* 0 -> h */ + *datav = current; + datav += w; + } ++data; NEXT(x); @@ -544,117 +539,3 @@ static void gradient_pyramid(RrSurface *sf, int inw, int inh) *(end-(inw-x)) = current; } -static void gradient_rectangle(RrSurface *sf, int inw, int inh) -{ - int x, y, w = (inw >> 1) + 1, h = (inh >> 1) + 1; - RrPixel32 *data = sf->RrPixel_data; - RrPixel32 *end = data + inw*inh - 1; - RrPixel32 current; - RrColor left, right; - RrColor extracorner; - - VARS(lefty); - VARS(righty); - VARS(x); - - extracorner.r = (sf->primary->r + sf->secondary->r) / 2; - extracorner.g = (sf->primary->g + sf->secondary->g) / 2; - extracorner.b = (sf->primary->b + sf->secondary->b) / 2; - - SETUP(lefty, (&extracorner), sf->secondary, h); - SETUP(righty, sf->primary, (&extracorner), h); - - for (y = h - 1; y > 0; --y) { /* 0 -> h-1 */ - COLOR_RR(lefty, (&left)); - COLOR_RR(righty, (&right)); - - SETUP(x, (&left), (&right), w); - - for (x = w - 1; x > 0; --x) { /* 0 -> w-1 */ - current = COLOR(x); - *(data+x) = current; - *(data+inw-x) = current; - *(end-x) = current; - *(end-(inw-x)) = current; - - NEXT(x); - } - current = COLOR(x); - *(data+x) = current; - *(data+inw-x) = current; - *(end-x) = current; - *(end-(inw-x)) = current; - - data+=inw; - end-=inw; - - NEXT(lefty); - NEXT(righty); - } - COLOR_RR(lefty, (&left)); - COLOR_RR(righty, (&right)); - - SETUP(x, (&left), (&right), w); - - for (x = w - 1; x > 0; --x) { /* 0 -> w-1 */ - current = COLOR(x); - *(data+x) = current; - *(data+inw-x) = current; - *(end-x) = current; - *(end-(inw-x)) = current; - - NEXT(x); - } - *(data+x) = current; - *(data+inw-x) = current; - *(end-x) = current; - *(end-(inw-x)) = current; -} - -static void gradient_pipecross(RrSurface *sf, int inw, int inh) -{ - RrPixel32 *data = sf->RrPixel_data; - RrPixel32 *end = data + inw*inh - 1; - RrPixel32 current; - float drx, dgx, dbx, dry, dgy, dby; - unsigned int r,g,b; - int x, y, h=(inh/2) + 1, w=(inw/2) + 1; - - drx = (float)(sf->secondary->r - - sf->primary->r); - dry = drx/(float)h; - drx/= (float)w; - - dgx = (float)(sf->secondary->g - - sf->primary->g); - dgy = dgx/(float)h; - dgx/= (float)w; - - dbx = (float)(sf->secondary->b - - sf->primary->b); - dby = dbx/(float)h; - dbx/= (float)w; - - for (y = 0; y < h; ++y) { - for (x = 0; x < w; ++x, data) { - if ((float)x/(float)w > (float)y/(float)h) { - r = sf->primary->r + (drx * x); - g = sf->primary->g + (dgx * x); - b = sf->primary->b + (dbx * x); - } else { - r = sf->primary->r + (dry * x); - g = sf->primary->g + (dgy * x); - b = sf->primary->b + (dby * x); - } - current = (r << RrDefaultRedOffset) - + (g << RrDefaultGreenOffset) - + (b << RrDefaultBlueOffset); - *(data+x) = current; - *(data+inw-x) = current; - *(end-x) = current; - *(end-(inw-x)) = current; - } - data+=inw; - end-=inw; - } -}