]> Dogcows Code - chaz/openbox/blobdiff - render/gradient.c
add a root menu
[chaz/openbox] / render / gradient.c
index feb4ad08466c97f2e5c02a7c1dc1c32c89704d47..8e3b207f58b05bb6a94786a12980c531cbece02a 100644 (file)
@@ -3,49 +3,60 @@
 #include "color.h"
 #include <glib.h>
 
-void gradient_render(RrSurface *sf, int w, int h)
+static void highlight(RrPixel32 *x, RrPixel32 *y, gboolean raised);
+static void gradient_solid(RrAppearance *l, int w, int h);
+static void gradient_vertical(RrSurface *sf, int w, int h);
+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)
 {
-    pixel32 *data = sf->pixel_data;
-    pixel32 current;
+    RrPixel32 *data = a->surface.RrPixel_data;
+    RrPixel32 current;
     unsigned int r,g,b;
     int off, x;
 
-    switch (sf->grad) {
-    case RR_SURFACE_SOLID: /* already handled */
+    switch (a->surface.grad) {
+    case RR_SURFACE_SOLID:
+        gradient_solid(a, w, h);
         return;
     case RR_SURFACE_VERTICAL:
-        gradient_vertical(sf, w, h);
+        gradient_vertical(&a->surface, w, h);
         break;
     case RR_SURFACE_HORIZONTAL:
-        gradient_horizontal(sf, w, h);
+        gradient_horizontal(&a->surface, w, h);
         break;
     case RR_SURFACE_DIAGONAL:
-        gradient_diagonal(sf, w, h);
+        gradient_diagonal(&a->surface, w, h);
         break;
     case RR_SURFACE_CROSS_DIAGONAL:
-        gradient_crossdiagonal(sf, w, h);
+        gradient_crossdiagonal(&a->surface, w, h);
         break;
     case RR_SURFACE_PYRAMID:
-        gradient_pyramid(sf, w, h);
+        gradient_pyramid(&a->surface, w, h);
         break;
     case RR_SURFACE_PIPECROSS:
-        gradient_pipecross(sf, w, h);
+        gradient_pipecross(&a->surface, w, h);
         break;
     case RR_SURFACE_RECTANGLE:
-        gradient_rectangle(sf, w, h);
+        gradient_rectangle(&a->surface, w, h);
         break;
     default:
         g_message("unhandled gradient");
         return;
     }
   
-    if (sf->relief == RR_RELIEF_FLAT && sf->border) {
-        r = sf->border_color->r;
-        g = sf->border_color->g;
-        b = sf->border_color->b;
-        current = (r << default_red_offset)
-            + (g << default_green_offset)
-            + (b << default_blue_offset);
+    if (a->surface.relief == RR_RELIEF_FLAT && a->surface.border) {
+        r = a->surface.border_color->r;
+        g = a->surface.border_color->g;
+        b = a->surface.border_color->b;
+        current = (r << RrDefaultRedOffset)
+            + (g << RrDefaultGreenOffset)
+            + (b << RrDefaultBlueOffset);
         for (off = 0, x = 0; x < w; ++x, off++) {
             *(data + off) = current;
             *(data + off + ((h-1) * w)) = current;
@@ -56,37 +67,37 @@ void gradient_render(RrSurface *sf, int w, int h)
         }
     }
 
-    if (sf->relief != RR_RELIEF_FLAT) {
-        if (sf->bevel == RR_BEVEL_1) {
+    if (a->surface.relief != RR_RELIEF_FLAT) {
+        if (a->surface.bevel == RR_BEVEL_1) {
             for (off = 1, x = 1; x < w - 1; ++x, off++)
                 highlight(data + off,
                           data + off + (h-1) * w,
-                          sf->relief==RR_RELIEF_RAISED);
+                          a->surface.relief==RR_RELIEF_RAISED);
             for (off = 0, x = 0; x < h; ++x, off++)
                 highlight(data + off * w,
                           data + off * w + w - 1,
-                          sf->relief==RR_RELIEF_RAISED);
+                          a->surface.relief==RR_RELIEF_RAISED);
         }
 
-        if (sf->bevel == RR_BEVEL_2) {
+        if (a->surface.bevel == RR_BEVEL_2) {
             for (off = 2, x = 2; x < w - 2; ++x, off++)
                 highlight(data + off + w,
                           data + off + (h-2) * w,
-                          sf->relief==RR_RELIEF_RAISED);
+                          a->surface.relief==RR_RELIEF_RAISED);
             for (off = 1, x = 1; x < h-1; ++x, off++)
                 highlight(data + off * w + 1,
                           data + off * w + w - 2,
-                          sf->relief==RR_RELIEF_RAISED);
+                          a->surface.relief==RR_RELIEF_RAISED);
         }
     }
 }
 
 
 
-void gradient_vertical(RrSurface *sf, int w, int h)
+static void gradient_vertical(RrSurface *sf, int w, int h)
 {
-    pixel32 *data = sf->pixel_data;
-    pixel32 current;
+    RrPixel32 *data = sf->RrPixel_data;
+    RrPixel32 current;
     float dr, dg, db;
     unsigned int r,g,b;
     int x, y;
@@ -104,18 +115,18 @@ void gradient_vertical(RrSurface *sf, int w, int h)
         r = sf->primary->r + (int)(dr * y);
         g = sf->primary->g + (int)(dg * y);
         b = sf->primary->b + (int)(db * y);
-        current = (r << default_red_offset)
-            + (g << default_green_offset)
-            + (b << default_blue_offset);
+        current = (r << RrDefaultRedOffset)
+            + (g << RrDefaultGreenOffset)
+            + (b << RrDefaultBlueOffset);
         for (x = 0; x < w; ++x, ++data)
             *data = current;
     }
 }
 
-void gradient_horizontal(RrSurface *sf, int w, int h)
+static void gradient_horizontal(RrSurface *sf, int w, int h)
 {
-    pixel32 *data = sf->pixel_data;
-    pixel32 current;
+    RrPixel32 *data = sf->RrPixel_data;
+    RrPixel32 current;
     float dr, dg, db;
     unsigned int r,g,b;
     int x, y;
@@ -133,18 +144,18 @@ void gradient_horizontal(RrSurface *sf, int w, int h)
         r = sf->primary->r + (int)(dr * x);
         g = sf->primary->g + (int)(dg * x);
         b = sf->primary->b + (int)(db * x);
-        current = (r << default_red_offset)
-            + (g << default_green_offset)
-            + (b << default_blue_offset);
+        current = (r << RrDefaultRedOffset)
+            + (g << RrDefaultGreenOffset)
+            + (b << RrDefaultBlueOffset);
         for (y = 0; y < h; ++y)
             *(data + y*w) = current;
     }
 }
 
-void gradient_diagonal(RrSurface *sf, int w, int h)
+static void gradient_diagonal(RrSurface *sf, int w, int h)
 {
-    pixel32 *data = sf->pixel_data;
-    pixel32 current;
+    RrPixel32 *data = sf->RrPixel_data;
+    RrPixel32 current;
     float drx, dgx, dbx, dry, dgy, dby;
     unsigned int r,g,b;
     int x, y;
@@ -171,18 +182,18 @@ void gradient_diagonal(RrSurface *sf, int w, int h)
                 ((int)(dgx * x) + (int)(dgy * y))/2;
             b = sf->primary->b +
                 ((int)(dbx * x) + (int)(dby * y))/2;
-            current = (r << default_red_offset)
-                + (g << default_green_offset)
-                + (b << default_blue_offset);
+            current = (r << RrDefaultRedOffset)
+                + (g << RrDefaultGreenOffset)
+                + (b << RrDefaultBlueOffset);
             *data = current;
         }
     }
 }
 
-void gradient_crossdiagonal(RrSurface *sf, int w, int h)
+static void gradient_crossdiagonal(RrSurface *sf, int w, int h)
 {
-    pixel32 *data = sf->pixel_data;
-    pixel32 current;
+    RrPixel32 *data = sf->RrPixel_data;
+    RrPixel32 current;
     float drx, dgx, dbx, dry, dgy, dby;
     unsigned int r,g,b;
     int x, y;
@@ -209,19 +220,19 @@ void gradient_crossdiagonal(RrSurface *sf, int w, int h)
                 ((int)(dgx * (x-1)) + (int)(dgy * y))/2;
             b = sf->primary->b +
                 ((int)(dbx * (x-1)) + (int)(dby * y))/2;
-            current = (r << default_red_offset)
-                + (g << default_green_offset)
-                + (b << default_blue_offset);
+            current = (r << RrDefaultRedOffset)
+                + (g << RrDefaultGreenOffset)
+                + (b << RrDefaultBlueOffset);
             *data = current;
         }
     }
 }
 
-void highlight(pixel32 *x, pixel32 *y, gboolean raised)
+static void highlight(RrPixel32 *x, RrPixel32 *y, gboolean raised)
 {
     int r, g, b;
 
-    pixel32 *up, *down;
+    RrPixel32 *up, *down;
     if (raised) {
         up = x;
         down = y;
@@ -229,26 +240,26 @@ void highlight(pixel32 *x, pixel32 *y, gboolean raised)
         up = y;
         down = x;
     }
-    r = (*up >> default_red_offset) & 0xFF;
+    r = (*up >> RrDefaultRedOffset) & 0xFF;
     r += r >> 1;
-    g = (*up >> default_green_offset) & 0xFF;
+    g = (*up >> RrDefaultGreenOffset) & 0xFF;
     g += g >> 1;
-    b = (*up >> default_blue_offset) & 0xFF;
+    b = (*up >> RrDefaultBlueOffset) & 0xFF;
     b += b >> 1;
     if (r > 0xFF) r = 0xFF;
     if (g > 0xFF) g = 0xFF;
     if (b > 0xFF) b = 0xFF;
-    *up = (r << default_red_offset) + (g << default_green_offset)
-        + (b << default_blue_offset);
+    *up = (r << RrDefaultRedOffset) + (g << RrDefaultGreenOffset)
+        + (b << RrDefaultBlueOffset);
   
-    r = (*down >> default_red_offset) & 0xFF;
+    r = (*down >> RrDefaultRedOffset) & 0xFF;
     r = (r >> 1) + (r >> 2);
-    g = (*down >> default_green_offset) & 0xFF;
+    g = (*down >> RrDefaultGreenOffset) & 0xFF;
     g = (g >> 1) + (g >> 2);
-    b = (*down >> default_blue_offset) & 0xFF;
+    b = (*down >> RrDefaultBlueOffset) & 0xFF;
     b = (b >> 1) + (b >> 2);
-    *down = (r << default_red_offset) + (g << default_green_offset)
-        + (b << default_blue_offset);
+    *down = (r << RrDefaultRedOffset) + (g << RrDefaultGreenOffset)
+        + (b << RrDefaultBlueOffset);
 }
 
 static void create_bevel_colors(RrAppearance *l)
@@ -267,7 +278,7 @@ static void create_bevel_colors(RrAppearance *l)
     if (b > 0xFF) b = 0xFF;
     g_assert(!l->surface.bevel_light);
     l->surface.bevel_light = RrColorNew(l->inst, r, g, b);
-    color_allocate_gc(l->surface.bevel_light);
+    RrColorAllocateGC(l->surface.bevel_light);
 
     /* dark color */
     r = l->surface.primary->r;
@@ -278,35 +289,35 @@ static void create_bevel_colors(RrAppearance *l)
     b = (b >> 1) + (b >> 2);
     g_assert(!l->surface.bevel_dark);
     l->surface.bevel_dark = RrColorNew(l->inst, r, g, b);
-    color_allocate_gc(l->surface.bevel_dark);
+    RrColorAllocateGC(l->surface.bevel_dark);
 }
 
-void gradient_solid(RrAppearance *l, int x, int y, int w, int h) 
+static void gradient_solid(RrAppearance *l, int w, int h) 
 {
-    pixel32 pix;
+    RrPixel32 pix;
     int i, a, b;
     RrSurface *sp = &l->surface;
-    int left = x, top = y, right = x + w - 1, bottom = y + h - 1;
+    int left = 0, top = 0, right = w - 1, bottom = h - 1;
 
     if (sp->primary->gc == None)
-        color_allocate_gc(sp->primary);
-    pix = (sp->primary->r << default_red_offset)
-        + (sp->primary->g << default_green_offset)
-        + (sp->primary->b << default_blue_offset);
+        RrColorAllocateGC(sp->primary);
+    pix = (sp->primary->r << RrDefaultRedOffset)
+        + (sp->primary->g << RrDefaultGreenOffset)
+        + (sp->primary->b << RrDefaultBlueOffset);
 
     for (a = 0; a < w; a++)
         for (b = 0; b < h; b++)
-            sp->pixel_data[a + b * w] = pix;
+            sp->RrPixel_data[a + b * w] = pix;
 
     XFillRectangle(RrDisplay(l->inst), l->pixmap, sp->primary->gc,
-                   x, y, w, h);
+                   0, 0, w, h);
 
     if (sp->interlaced) {
         if (sp->secondary->gc == None)
-            color_allocate_gc(sp->secondary);
-        for (i = y; i < h; i += 2)
+            RrColorAllocateGC(sp->secondary);
+        for (i = 0; i < h; i += 2)
             XDrawLine(RrDisplay(l->inst), l->pixmap, sp->secondary->gc,
-                      x, i, w, i);
+                      0, i, w, i);
     }
 
     switch (sp->relief) {
@@ -380,7 +391,7 @@ void gradient_solid(RrAppearance *l, int x, int y, int w, int h)
     case RR_RELIEF_FLAT:
         if (sp->border) {
             if (sp->border_color->gc == None)
-                color_allocate_gc(sp->border_color);
+                RrColorAllocateGC(sp->border_color);
             XDrawRectangle(RrDisplay(l->inst), l->pixmap, sp->border_color->gc,
                            left, top, right, bottom);
         }
@@ -390,11 +401,11 @@ void gradient_solid(RrAppearance *l, int x, int y, int w, int h)
     }
 }
 
-void gradient_pyramid(RrSurface *sf, int inw, int inh)
+static void gradient_pyramid(RrSurface *sf, int inw, int inh)
 {
-    pixel32 *data = sf->pixel_data;
-    pixel32 *end = data + inw*inh - 1;
-    pixel32 current;
+    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;
@@ -422,9 +433,9 @@ void gradient_pyramid(RrSurface *sf, int inw, int inh)
                 ((int)(dgx * x) + (int)(dgy * y))/2;
             b = sf->primary->b +
                 ((int)(dbx * x) + (int)(dby * y))/2;
-            current = (r << default_red_offset)
-                + (g << default_green_offset)
-                + (b << default_blue_offset);
+            current = (r << RrDefaultRedOffset)
+                + (g << RrDefaultGreenOffset)
+                + (b << RrDefaultBlueOffset);
             *(data+x) = current;
             *(data+inw-x) = current;
             *(end-x) = current;
@@ -435,11 +446,11 @@ void gradient_pyramid(RrSurface *sf, int inw, int inh)
     }
 }
 
-void gradient_rectangle(RrSurface *sf, int inw, int inh)
+static void gradient_rectangle(RrSurface *sf, int inw, int inh)
 {
-    pixel32 *data = sf->pixel_data;
-    pixel32 *end = data + inw*inh - 1;
-    pixel32 current;
+    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;
@@ -470,9 +481,9 @@ void gradient_rectangle(RrSurface *sf, int inw, int inh)
                 g = sf->primary->g + (dgy * x);
                 b = sf->primary->b + (dby * x);
             }
-            current = (r << default_red_offset)
-                + (g << default_green_offset)
-                + (b << default_blue_offset);
+            current = (r << RrDefaultRedOffset)
+                + (g << RrDefaultGreenOffset)
+                + (b << RrDefaultBlueOffset);
             *(data+x) = current;
             *(data+inw-x) = current;
             *(end-x) = current;
@@ -483,11 +494,11 @@ void gradient_rectangle(RrSurface *sf, int inw, int inh)
     }
 }
 
-void gradient_pipecross(RrSurface *sf, int inw, int inh)
+static void gradient_pipecross(RrSurface *sf, int inw, int inh)
 {
-    pixel32 *data = sf->pixel_data;
-    pixel32 *end = data + inw*inh - 1;
-    pixel32 current;
+    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;
@@ -518,9 +529,9 @@ void gradient_pipecross(RrSurface *sf, int inw, int inh)
                 g = sf->primary->g + (dgy * x);
                 b = sf->primary->b + (dby * x);
             }
-            current = (r << default_red_offset)
-                + (g << default_green_offset)
-                + (b << default_blue_offset);
+            current = (r << RrDefaultRedOffset)
+                + (g << RrDefaultGreenOffset)
+                + (b << RrDefaultBlueOffset);
             *(data+x) = current;
             *(data+inw-x) = current;
             *(end-x) = current;
This page took 0.036756 seconds and 4 git commands to generate.