]> Dogcows Code - chaz/openbox/blobdiff - render/gradient.c
add a root menu
[chaz/openbox] / render / gradient.c
index ebfdb3bbf6f3ab7001b77c6c72a1539b9baa2113..8e3b207f58b05bb6a94786a12980c531cbece02a 100644 (file)
@@ -1,52 +1,62 @@
-#include <glib.h>
 #include "render.h"
 #include "gradient.h"
-#include "../kernel/openbox.h"
 #include "color.h"
+#include <glib.h>
 
-void gradient_render(Surface *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 Background_Solid: /* already handled */
+    switch (a->surface.grad) {
+    case RR_SURFACE_SOLID:
+        gradient_solid(a, w, h);
         return;
-    case Background_Vertical:
-        gradient_vertical(sf, w, h);
+    case RR_SURFACE_VERTICAL:
+        gradient_vertical(&a->surface, w, h);
         break;
-    case Background_Horizontal:
-        gradient_horizontal(sf, w, h);
+    case RR_SURFACE_HORIZONTAL:
+        gradient_horizontal(&a->surface, w, h);
         break;
-    case Background_Diagonal:
-        gradient_diagonal(sf, w, h);
+    case RR_SURFACE_DIAGONAL:
+        gradient_diagonal(&a->surface, w, h);
         break;
-    case Background_CrossDiagonal:
-        gradient_crossdiagonal(sf, w, h);
+    case RR_SURFACE_CROSS_DIAGONAL:
+        gradient_crossdiagonal(&a->surface, w, h);
         break;
-    case Background_Pyramid:
-        gradient_pyramid(sf, w, h);
+    case RR_SURFACE_PYRAMID:
+        gradient_pyramid(&a->surface, w, h);
         break;
-    case Background_PipeCross:
-        gradient_pipecross(sf, w, h);
+    case RR_SURFACE_PIPECROSS:
+        gradient_pipecross(&a->surface, w, h);
         break;
-    case Background_Rectangle:
-        gradient_rectangle(sf, w, h);
+    case RR_SURFACE_RECTANGLE:
+        gradient_rectangle(&a->surface, w, h);
         break;
     default:
         g_message("unhandled gradient");
         return;
     }
   
-    if (sf->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;
@@ -57,37 +67,37 @@ void gradient_render(Surface *sf, int w, int h)
         }
     }
 
-    if (sf->relief != Flat) {
-        if (sf->bevel == Bevel1) {
+    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==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==Raised);
+                          a->surface.relief==RR_RELIEF_RAISED);
         }
 
-        if (sf->bevel == Bevel2) {
+        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==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==Raised);
+                          a->surface.relief==RR_RELIEF_RAISED);
         }
     }
 }
 
 
 
-void gradient_vertical(Surface *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;
@@ -105,18 +115,18 @@ void gradient_vertical(Surface *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(Surface *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;
@@ -134,18 +144,18 @@ void gradient_horizontal(Surface *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(Surface *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;
@@ -172,18 +182,18 @@ void gradient_diagonal(Surface *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(Surface *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;
@@ -210,19 +220,19 @@ void gradient_crossdiagonal(Surface *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;
@@ -230,29 +240,29 @@ 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(Appearance *l)
+static void create_bevel_colors(RrAppearance *l)
 {
     int r, g, b;
 
@@ -267,8 +277,8 @@ static void create_bevel_colors(Appearance *l)
     if (g > 0xFF) g = 0xFF;
     if (b > 0xFF) b = 0xFF;
     g_assert(!l->surface.bevel_light);
-    l->surface.bevel_light = color_new(r, g, b);
-    color_allocate_gc(l->surface.bevel_light);
+    l->surface.bevel_light = RrColorNew(l->inst, r, g, b);
+    RrColorAllocateGC(l->surface.bevel_light);
 
     /* dark color */
     r = l->surface.primary->r;
@@ -278,67 +288,67 @@ static void create_bevel_colors(Appearance *l)
     b = l->surface.primary->b;
     b = (b >> 1) + (b >> 2);
     g_assert(!l->surface.bevel_dark);
-    l->surface.bevel_dark = color_new(r, g, b);
-    color_allocate_gc(l->surface.bevel_dark);
+    l->surface.bevel_dark = RrColorNew(l->inst, r, g, b);
+    RrColorAllocateGC(l->surface.bevel_dark);
 }
 
-void gradient_solid(Appearance *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;
-    Surface *sp = &l->surface;
-    int left = x, top = y, right = x + w - 1, bottom = y + h - 1;
+    RrSurface *sp = &l->surface;
+    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(ob_display, l->pixmap, sp->primary->gc,
-                   x, y, w, h);
+    XFillRectangle(RrDisplay(l->inst), l->pixmap, sp->primary->gc,
+                   0, 0, w, h);
 
     if (sp->interlaced) {
         if (sp->secondary->gc == None)
-            color_allocate_gc(sp->secondary);
-        for (i = y; i < h; i += 2)
-            XDrawLine(ob_display, l->pixmap, sp->secondary->gc,
-                      x, i, w, i);
+            RrColorAllocateGC(sp->secondary);
+        for (i = 0; i < h; i += 2)
+            XDrawLine(RrDisplay(l->inst), l->pixmap, sp->secondary->gc,
+                      0, i, w, i);
     }
 
     switch (sp->relief) {
-    case Raised:
+    case RR_RELIEF_RAISED:
         if (!sp->bevel_dark)
             create_bevel_colors(l);
 
         switch (sp->bevel) {
-        case Bevel1:
-            XDrawLine(ob_display, l->pixmap, sp->bevel_dark->gc,
+        case RR_BEVEL_1:
+            XDrawLine(RrDisplay(l->inst), l->pixmap, sp->bevel_dark->gc,
                       left, bottom, right, bottom);
-            XDrawLine(ob_display, l->pixmap, sp->bevel_dark->gc,
+            XDrawLine(RrDisplay(l->inst), l->pixmap, sp->bevel_dark->gc,
                       right, bottom, right, top);
                 
-            XDrawLine(ob_display, l->pixmap, sp->bevel_light->gc,
+            XDrawLine(RrDisplay(l->inst), l->pixmap, sp->bevel_light->gc,
                       left, top, right, top);
-            XDrawLine(ob_display, l->pixmap, sp->bevel_light->gc,
+            XDrawLine(RrDisplay(l->inst), l->pixmap, sp->bevel_light->gc,
                       left, bottom, left, top);
             break;
-        case Bevel2:
-            XDrawLine(ob_display, l->pixmap,
+        case RR_BEVEL_2:
+            XDrawLine(RrDisplay(l->inst), l->pixmap,
                       sp->bevel_dark->gc,
                       left + 1, bottom - 2, right - 2, bottom - 2);
-            XDrawLine(ob_display, l->pixmap,
+            XDrawLine(RrDisplay(l->inst), l->pixmap,
                       sp->bevel_dark->gc,
                       right - 2, bottom - 2, right - 2, top + 1);
 
-            XDrawLine(ob_display, l->pixmap,
+            XDrawLine(RrDisplay(l->inst), l->pixmap,
                       sp->bevel_light->gc,
                       left + 1, top + 1, right - 2, top + 1);
-            XDrawLine(ob_display, l->pixmap,
+            XDrawLine(RrDisplay(l->inst), l->pixmap,
                       sp->bevel_light->gc,
                       left + 1, bottom - 2, left + 1, top + 1);
             break;
@@ -346,31 +356,31 @@ void gradient_solid(Appearance *l, int x, int y, int w, int h)
             g_assert_not_reached(); /* unhandled BevelType */
         }
         break;
-    case Sunken:
+    case RR_RELIEF_SUNKEN:
         if (!sp->bevel_dark)
             create_bevel_colors(l);
 
         switch (sp->bevel) {
-        case Bevel1:
-            XDrawLine(ob_display, l->pixmap, sp->bevel_light->gc,
+        case RR_BEVEL_1:
+            XDrawLine(RrDisplay(l->inst), l->pixmap, sp->bevel_light->gc,
                       left, bottom, right, bottom);
-            XDrawLine(ob_display, l->pixmap, sp->bevel_light->gc,
+            XDrawLine(RrDisplay(l->inst), l->pixmap, sp->bevel_light->gc,
                       right, bottom, right, top);
       
-            XDrawLine(ob_display, l->pixmap, sp->bevel_dark->gc,
+            XDrawLine(RrDisplay(l->inst), l->pixmap, sp->bevel_dark->gc,
                       left, top, right, top);
-            XDrawLine(ob_display, l->pixmap, sp->bevel_dark->gc,
+            XDrawLine(RrDisplay(l->inst), l->pixmap, sp->bevel_dark->gc,
                       left, bottom, left, top);
             break;
-        case Bevel2:
-            XDrawLine(ob_display, l->pixmap, sp->bevel_light->gc,
+        case RR_BEVEL_2:
+            XDrawLine(RrDisplay(l->inst), l->pixmap, sp->bevel_light->gc,
                       left + 1, bottom - 2, right - 2, bottom - 2);
-            XDrawLine(ob_display, l->pixmap, sp->bevel_light->gc,
+            XDrawLine(RrDisplay(l->inst), l->pixmap, sp->bevel_light->gc,
                       right - 2, bottom - 2, right - 2, top + 1);
       
-            XDrawLine(ob_display, l->pixmap, sp->bevel_dark->gc,
+            XDrawLine(RrDisplay(l->inst), l->pixmap, sp->bevel_dark->gc,
                       left + 1, top + 1, right - 2, top + 1);
-            XDrawLine(ob_display, l->pixmap, sp->bevel_dark->gc,
+            XDrawLine(RrDisplay(l->inst), l->pixmap, sp->bevel_dark->gc,
                       left + 1, bottom - 2, left + 1, top + 1);
 
             break;
@@ -378,11 +388,11 @@ void gradient_solid(Appearance *l, int x, int y, int w, int h)
             g_assert_not_reached(); /* unhandled BevelType */
         }
         break;
-    case Flat:
+    case RR_RELIEF_FLAT:
         if (sp->border) {
             if (sp->border_color->gc == None)
-                color_allocate_gc(sp->border_color);
-            XDrawRectangle(ob_display, l->pixmap, sp->border_color->gc,
+                RrColorAllocateGC(sp->border_color);
+            XDrawRectangle(RrDisplay(l->inst), l->pixmap, sp->border_color->gc,
                            left, top, right, bottom);
         }
         break;
@@ -391,11 +401,11 @@ void gradient_solid(Appearance *l, int x, int y, int w, int h)
     }
 }
 
-void gradient_pyramid(Surface *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;
@@ -423,9 +433,9 @@ void gradient_pyramid(Surface *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;
@@ -436,11 +446,11 @@ void gradient_pyramid(Surface *sf, int inw, int inh)
     }
 }
 
-void gradient_rectangle(Surface *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;
@@ -471,9 +481,9 @@ void gradient_rectangle(Surface *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;
@@ -484,11 +494,11 @@ void gradient_rectangle(Surface *sf, int inw, int inh)
     }
 }
 
-void gradient_pipecross(Surface *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;
@@ -519,9 +529,9 @@ void gradient_pipecross(Surface *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.042572 seconds and 4 git commands to generate.