From 1e882b62718e4d6a4a149b415964646ad424fbfd Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Tue, 24 Jun 2003 18:54:18 +0000 Subject: [PATCH] made all the gradients work with integer math. removed the pipecross and rectangle gradietns tho cuz they are ugly and i dont want to code that bullshit cuz they are ugly. --- render/gradient.c | 122 ---------------------------------------------- render/render.h | 2 - render/test.c | 2 +- render/theme.c | 6 --- 4 files changed, 1 insertion(+), 131 deletions(-) diff --git a/render/gradient.c b/render/gradient.c index b05da48a..6f976e0b 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; @@ -544,117 +536,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; - } -} diff --git a/render/render.h b/render/render.h index ede14d72..8469c69e 100644 --- a/render/render.h +++ b/render/render.h @@ -40,8 +40,6 @@ typedef enum { RR_SURFACE_VERTICAL, RR_SURFACE_DIAGONAL, RR_SURFACE_CROSS_DIAGONAL, - RR_SURFACE_PIPECROSS, - RR_SURFACE_RECTANGLE, RR_SURFACE_PYRAMID } RrSurfaceColorType; diff --git a/render/test.c b/render/test.c index 12974a91..38cd7a99 100644 --- a/render/test.c +++ b/render/test.c @@ -46,7 +46,7 @@ int main() inst = RrInstanceNew(ob_display, ob_screen); look = RrAppearanceNew(inst, 0); - look->surface.grad = RR_SURFACE_RECTANGLE; + look->surface.grad = RR_SURFACE_PYRAMID; look->surface.secondary = RrColorParse(inst, "Yellow"); look->surface.primary = RrColorParse(inst, "Blue"); look->surface.interlaced = FALSE; diff --git a/render/theme.c b/render/theme.c index 7e45b86f..4f86c8d0 100644 --- a/render/theme.c +++ b/render/theme.c @@ -871,14 +871,8 @@ static void parse_appearance(gchar *tex, RrSurfaceColorType *grad, if (strstr(tex, "gradient") != NULL) { if (strstr(tex, "crossdiagonal") != NULL) *grad = RR_SURFACE_CROSS_DIAGONAL; - else if (strstr(tex, "rectangle") != NULL) - *grad = RR_SURFACE_RECTANGLE; else if (strstr(tex, "pyramid") != NULL) *grad = RR_SURFACE_PYRAMID; - else if (strstr(tex, "pipecross") != NULL) - *grad = RR_SURFACE_PIPECROSS; - else if (strstr(tex, "elliptic") != NULL) - *grad = RR_SURFACE_PIPECROSS; else if (strstr(tex, "horizontal") != NULL) *grad = RR_SURFACE_HORIZONTAL; else if (strstr(tex, "vertical") != NULL) -- 2.39.2