]> Dogcows Code - chaz/openbox/blobdiff - render/gradient.c
offset of 1 is default
[chaz/openbox] / render / gradient.c
index b05da48a54ff0c7178bdd2bb7ffa88124f19c7dc..55a2fd27238c3d07ddc25a0a1976e04bdc37b672 100644 (file)
@@ -10,12 +10,10 @@ 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)
 {
-    RrPixel32 *data = a->surface.RrPixel_data;
+    RrPixel32 *data = a->surface.pixel_data;
     RrPixel32 current;
     unsigned int r,g,b;
     int off, x;
@@ -23,7 +21,7 @@ void RrRender(RrAppearance *a, int w, int h)
     switch (a->surface.grad) {
     case RR_SURFACE_SOLID:
         gradient_solid(a, w, h);
-        return;
+        break;
     case RR_SURFACE_VERTICAL:
         gradient_vertical(&a->surface, w, h);
         break;
@@ -39,14 +37,8 @@ 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");
+        g_assert_not_reached(); /* unhandled gradient */
         return;
     }
   
@@ -171,7 +163,7 @@ static void gradient_solid(RrAppearance *l, int w, int h)
 
     for (a = 0; a < w; a++)
         for (b = 0; b < h; b++)
-            sp->RrPixel_data[a + b * w] = pix;
+            sp->pixel_data[a + b * w] = pix;
 
     XFillRectangle(RrDisplay(l->inst), l->pixmap, sp->primary->gc,
                    0, 0, w, h);
@@ -312,6 +304,9 @@ static void gradient_solid(RrAppearance *l, int w, int h)
      (color##x[1] << RrDefaultGreenOffset) + \
      (color##x[2] << RrDefaultBlueOffset))
 
+#define INCREMENT(x, i) \
+    (inc##x[i])
+
 #define NEXT(x)                                           \
 {                                                         \
     int i;                                                \
@@ -322,13 +317,13 @@ static void gradient_solid(RrAppearance *l, int w, int h)
             /* Y (color) is dependant on X */             \
             error##x[i] += cdelta##x[i];                  \
             if ((error##x[i] << 1) >= len##x) {           \
-                color##x[i] += inc##x[i];                 \
+                color##x[i] += INCREMENT(x, i);           \
                 error##x[i] -= len##x;                    \
             }                                             \
         } else {                                          \
             /* X is dependant on Y (color) */             \
             while (1) {                                   \
-                color##x[i] += inc##x[i];                 \
+                color##x[i] += INCREMENT(x, i);           \
                 error##x[i] += len##x;                    \
                 if ((error##x[i] << 1) >= cdelta##x[i]) { \
                     error##x[i] -= cdelta##x[i];          \
@@ -342,7 +337,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->pixel_data, *datav;
     RrPixel32 current;
 
     VARS(x);
@@ -350,8 +345,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);
@@ -364,7 +362,7 @@ static void gradient_horizontal(RrSurface *sf, int w, int h)
 static void gradient_vertical(RrSurface *sf, int w, int h)
 {
     int x, y;
-    RrPixel32 *data = sf->RrPixel_data;
+    RrPixel32 *data = sf->pixel_data;
     RrPixel32 current;
 
     VARS(y);
@@ -386,7 +384,7 @@ static void gradient_vertical(RrSurface *sf, int w, int h)
 static void gradient_diagonal(RrSurface *sf, int w, int h)
 {
     int x, y;
-    RrPixel32 *data = sf->RrPixel_data;
+    RrPixel32 *data = sf->pixel_data;
     RrColor left, right;
     RrColor extracorner;
 
@@ -433,7 +431,7 @@ static void gradient_diagonal(RrSurface *sf, int w, int h)
 static void gradient_crossdiagonal(RrSurface *sf, int w, int h)
 {
     int x, y;
-    RrPixel32 *data = sf->RrPixel_data;
+    RrPixel32 *data = sf->pixel_data;
     RrColor left, right;
     RrColor extracorner;
 
@@ -480,74 +478,7 @@ static void gradient_crossdiagonal(RrSurface *sf, int w, int h)
 static void gradient_pyramid(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_rectangle(RrSurface *sf, int inw, int inh)
-{
-    int x, y, w = (inw >> 1) + 1, h = (inh >> 1) + 1;
-    RrPixel32 *data = sf->RrPixel_data;
+    RrPixel32 *data = sf->pixel_data;
     RrPixel32 *end = data + inw*inh - 1;
     RrPixel32 current;
     RrColor left, right;
@@ -605,56 +536,10 @@ static void gradient_rectangle(RrSurface *sf, int inw, int inh)
         
         NEXT(x);
     }
+    current = COLOR(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;
-    }
-}
This page took 0.026201 seconds and 4 git commands to generate.