]> Dogcows Code - chaz/openbox/blobdiff - render/color.c
better handling of maximizing, wrt changing decorations on the windows, and showing...
[chaz/openbox] / render / color.c
index 145550f34c0314e0668720bfefed89f93441d7c7..d16bbf0cdd93b8e06cc2eee2664f2f6ea2fe5edf 100644 (file)
@@ -1,13 +1,11 @@
-#include <X11/Xlib.h>
-#include <X11/Xutil.h>
-#include <string.h>
 #include "render.h"
 #include "color.h"
 
-XColor *pseudo_colors;
-int pseudo_bpc;
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+#include <string.h>
 
-void color_allocate_gc(color_rgb *in)
+void RrColorAllocateGC(RrColor *in)
 {
     XGCValues gcv;
 
@@ -18,7 +16,7 @@ void color_allocate_gc(color_rgb *in)
                        GCForeground | GCCapStyle, &gcv);
 }
 
-color_rgb *RrColorParse(const RrInstance *inst, gchar *colorname)
+RrColor *RrColorParse(const RrInstance *inst, gchar *colorname)
 {
     XColor xcol;
 
@@ -36,16 +34,16 @@ color_rgb *RrColorParse(const RrInstance *inst, gchar *colorname)
     return RrColorNew(inst, xcol.red >> 8, xcol.green >> 8, xcol.blue >> 8);
 }
 
-color_rgb *RrColorNew(const RrInstance *inst, gint r, gint g, gint b)
+RrColor *RrColorNew(const RrInstance *inst, gint r, gint g, gint b)
 {
     /* this should be replaced with something far cooler */
-    color_rgb *out = NULL;
+    RrColor *out = NULL;
     XColor xcol;
     xcol.red = (r << 8) | r;
     xcol.green = (g << 8) | g;
     xcol.blue = (b << 8) | b;
     if (XAllocColor(RrDisplay(inst), RrColormap(inst), &xcol)) {
-        out = g_new(color_rgb, 1);
+        out = g_new(RrColor, 1);
         out->inst = inst;
         out->r = xcol.red >> 8;
         out->g = xcol.green >> 8;
@@ -58,7 +56,7 @@ color_rgb *RrColorNew(const RrInstance *inst, gint r, gint g, gint b)
 
 /*XXX same color could be pointed to twice, this might have to be a refcount*/
 
-void RrColorFree(color_rgb *c)
+void RrColorFree(RrColor *c)
 {
     if (c) {
         if (c->gc) XFreeGC(RrDisplay(c->inst), c->gc);
@@ -66,26 +64,26 @@ void RrColorFree(color_rgb *c)
     }
 }
 
-void reduce_depth(const RrInstance *inst, pixel32 *data, XImage *im)
+void RrReduceDepth(const RrInstance *inst, RrPixel32 *data, XImage *im)
 {
     int r, g, b;
     int x,y;
-    pixel32 *p32 = (pixel32 *) im->data;
-    pixel16 *p16 = (pixel16 *) im->data;
+    RrPixel32 *p32 = (RrPixel32 *) im->data;
+    RrPixel16 *p16 = (RrPixel16 *) im->data;
     unsigned char *p8 = (unsigned char *)im->data;
     switch (im->bits_per_pixel) {
     case 32:
-        if ((RrRedOffset(inst) != default_red_offset) ||
-            (RrBlueOffset(inst) != default_blue_offset) ||
-            (RrGreenOffset(inst) != default_green_offset)) {
+        if ((RrRedOffset(inst) != RrDefaultRedOffset) ||
+            (RrBlueOffset(inst) != RrDefaultBlueOffset) ||
+            (RrGreenOffset(inst) != RrDefaultGreenOffset)) {
             for (y = 0; y < im->height; y++) {
                 for (x = 0; x < im->width; x++) {
-                    r = (data[x] >> default_red_offset) & 0xFF;
-                    g = (data[x] >> default_green_offset) & 0xFF;
-                    b = (data[x] >> default_blue_offset) & 0xFF;
-                    p32[x] = (r << RrRedShift(inst))
-                           + (g << RrGreenShift(inst))
-                           + (b << RrBlueShift(inst));
+                    r = (data[x] >> RrDefaultRedOffset) & 0xFF;
+                    g = (data[x] >> RrDefaultGreenOffset) & 0xFF;
+                    b = (data[x] >> RrDefaultBlueOffset) & 0xFF;
+                    p32[x] = (r << RrRedOffset(inst))
+                           + (g << RrGreenOffset(inst))
+                           + (b << RrBlueOffset(inst));
                 }
                 data += im->width;
                 p32 += im->width;
@@ -95,11 +93,11 @@ void reduce_depth(const RrInstance *inst, pixel32 *data, XImage *im)
     case 16:
         for (y = 0; y < im->height; y++) {
             for (x = 0; x < im->width; x++) {
-                r = (data[x] >> default_red_offset) & 0xFF;
+                r = (data[x] >> RrDefaultRedOffset) & 0xFF;
                 r = r >> RrRedShift(inst);
-                g = (data[x] >> default_green_offset) & 0xFF;
+                g = (data[x] >> RrDefaultGreenOffset) & 0xFF;
                 g = g >> RrGreenShift(inst);
-                b = (data[x] >> default_blue_offset) & 0xFF;
+                b = (data[x] >> RrDefaultBlueOffset) & 0xFF;
                 b = b >> RrBlueShift(inst);
                 p16[x] = (r << RrRedOffset(inst))
                        + (g << RrGreenOffset(inst))
@@ -113,10 +111,10 @@ void reduce_depth(const RrInstance *inst, pixel32 *data, XImage *im)
         g_assert(RrVisual(inst)->class != TrueColor);
         for (y = 0; y < im->height; y++) {
             for (x = 0; x < im->width; x++) {
-                p8[x] = pickColor(inst,
-                                  data[x] >> default_red_offset,
-                                  data[x] >> default_green_offset,
-                                  data[x] >> default_blue_offset)->pixel;
+                p8[x] = RrPickColor(inst,
+                                    data[x] >> RrDefaultRedOffset,
+                                    data[x] >> RrDefaultGreenOffset,
+                                    data[x] >> RrDefaultBlueOffset)->pixel;
         }
         data += im->width;
         p8 += im->bytes_per_line;
@@ -124,17 +122,17 @@ void reduce_depth(const RrInstance *inst, pixel32 *data, XImage *im)
 
     break;
     default:
-        g_message("your bit depth is currently unhandled\n");
+        g_warning("your bit depth is currently unhandled\n");
     }
 }
 
-XColor *pickColor(const RrInstance *inst, gint r, gint g, gint b) 
+XColor *RrPickColor(const RrInstance *inst, gint r, gint g, gint b) 
 {
-  r = (r & 0xff) >> (8-pseudo_bpc);
-  g = (g & 0xff) >> (8-pseudo_bpc);
-  b = (b & 0xff) >> (8-pseudo_bpc);
-  return &RrPseudoColors(inst)[(r << (2*pseudo_bpc)) +
-                               (g << (1*pseudo_bpc)) +
+  r = (r & 0xff) >> (8-RrPseudoBPC(inst));
+  g = (g & 0xff) >> (8-RrPseudoBPC(inst));
+  b = (b & 0xff) >> (8-RrPseudoBPC(inst));
+  return &RrPseudoColors(inst)[(r << (2*RrPseudoBPC(inst))) +
+                               (g << (1*RrPseudoBPC(inst))) +
                                b];
 }
 
@@ -142,8 +140,6 @@ static void swap_byte_order(XImage *im)
 {
     int x, y, di;
 
-    g_message("SWAPPING BYTE ORDER");
-
     di = 0;
     for (y = 0; y < im->height; ++y) {
         for (x = 0; x < im->height; ++x) {
@@ -162,7 +158,7 @@ static void swap_byte_order(XImage *im)
             case 8:
                 break;
             default:
-                g_message("your bit depth is currently unhandled\n");
+                g_warning("your bit depth is currently unhandled");
             }
         }
         di += im->bytes_per_line;
@@ -174,15 +170,15 @@ static void swap_byte_order(XImage *im)
         im->byte_order = LSBFirst;
 }
 
-void increase_depth(const RrInstance *inst, pixel32 *data, XImage *im)
+void RrIncreaseDepth(const RrInstance *inst, RrPixel32 *data, XImage *im)
 {
     int r, g, b;
     int x,y;
-    pixel32 *p32 = (pixel32 *) im->data;
-    pixel16 *p16 = (pixel16 *) im->data;
+    RrPixel32 *p32 = (RrPixel32 *) im->data;
+    RrPixel16 *p16 = (RrPixel16 *) im->data;
     unsigned char *p8 = (unsigned char *)im->data;
 
-    if (im->byte_order != render_endian)
+    if (im->byte_order != LSBFirst)
         swap_byte_order(im);
 
     switch (im->bits_per_pixel) {
@@ -192,10 +188,10 @@ void increase_depth(const RrInstance *inst, pixel32 *data, XImage *im)
                 r = (p32[x] >> RrRedOffset(inst)) & 0xff;
                 g = (p32[x] >> RrGreenOffset(inst)) & 0xff;
                 b = (p32[x] >> RrBlueOffset(inst)) & 0xff;
-                data[x] = (r << default_red_offset)
-                    + (g << default_green_offset)
-                    + (b << default_blue_offset)
-                    + (0xff << default_alpha_offset);
+                data[x] = (r << RrDefaultRedOffset)
+                    + (g << RrDefaultGreenOffset)
+                    + (b << RrDefaultBlueOffset)
+                    + (0xff << RrDefaultAlphaOffset);
             }
             data += im->width;
             p32 += im->bytes_per_line/4;
@@ -213,23 +209,23 @@ void increase_depth(const RrInstance *inst, pixel32 *data, XImage *im)
                 b = (p16[x] & RrBlueMask(inst)) >>
                     RrBlueOffset(inst) <<
                     RrBlueShift(inst);
-                data[x] = (r << default_red_offset)
-                    + (g << default_green_offset)
-                    + (b << default_blue_offset)
-                    + (0xff << default_alpha_offset);
+                data[x] = (r << RrDefaultRedOffset)
+                    + (g << RrDefaultGreenOffset)
+                    + (b << RrDefaultBlueOffset)
+                    + (0xff << RrDefaultAlphaOffset);
             }
             data += im->width;
             p16 += im->bytes_per_line/2;
         }
         break;
     case 8:
-        g_message("this image bit depth is currently unhandled\n");
+        g_warning("this image bit depth is currently unhandled");
         break;
     case 1:
         for (y = 0; y < im->height; y++) {
             for (x = 0; x < im->width; x++) {
                 if (!(((p8[x / 8]) >> (x % 8)) & 0x1))
-                    data[x] = 0xff << default_alpha_offset; /* black */
+                    data[x] = 0xff << RrDefaultAlphaOffset; /* black */
                 else
                     data[x] = 0xffffffff; /* white */
             }
@@ -238,6 +234,26 @@ void increase_depth(const RrInstance *inst, pixel32 *data, XImage *im)
         }
         break;
     default:
-        g_message("this image bit depth is currently unhandled\n");
+        g_warning("this image bit depth is currently unhandled");
     }
 }
+
+int RrColorRed(const RrColor *c)
+{
+    return c->r;
+}
+
+int RrColorGreen(const RrColor *c)
+{
+    return c->g;
+}
+
+int RrColorBlue(const RrColor *c)
+{
+    return c->b;
+}
+
+gulong RrColorPixel(const RrColor *c)
+{
+    return c->pixel;
+}
This page took 0.029024 seconds and 4 git commands to generate.