]> Dogcows Code - chaz/openbox/commitdiff
Added bevels
authorDerek Foreman <manmower@gmail.com>
Thu, 23 Jan 2003 05:22:50 +0000 (05:22 +0000)
committerDerek Foreman <manmower@gmail.com>
Thu, 23 Jan 2003 05:22:50 +0000 (05:22 +0000)
otk/truerendercontrol.cc
otk/truerendercontrol.hh

index ecc5d347196533d3d70a4f66d851cf5cb4bf76a5..8e2b10839e5a411441ce02fa3d56eb75679a8528 100644 (file)
@@ -143,12 +143,36 @@ void TrueRenderControl::drawGradientBackground(
             + (g << 8)
             + b;
     for (off = 0, x = 0; x < w; ++x, off++) {
-       *(data + off) = current;
-       *(data + off + ((h-1) * w)) = current;
+      *(data + off) = current;
+      *(data + off + ((h-1) * w)) = current;
     }
     for (off = 0, x = 0; x < h; ++x, off++) {
-       *(data + (off * w)) = current;
-       *(data + (off * w) + w - 1) = current;
+      *(data + (off * w)) = current;
+      *(data + (off * w) + w - 1) = current;
+    }
+  }
+
+  if (texture.relief() != RenderTexture::Flat) {
+    if (texture.bevel() == RenderTexture::Bevel1) {
+      for (off = 0, x = 0; x < w; ++x, off++)
+        highlight(data + off,
+                data + off + (h-1) * w,
+                texture.relief()==RenderTexture::Raised);
+      for (off = 0, x = 0; x < h; ++x, off++)
+        highlight(data + off * w,
+                data + off * w + w - 1,
+                texture.relief()==RenderTexture::Raised);
+    }
+
+    if (texture.bevel() == RenderTexture::Bevel2) {
+      for (off = 1, x = 1; x < w - 1; ++x, off++)
+        highlight(data + off + w,
+                data + off + (h-2) * w,
+                texture.relief()==RenderTexture::Raised);
+      for (off = 1, x = 1; x < h-1; ++x, off++)
+        highlight(data + off * w + 1,
+                  data + off * w + w - 2,
+                  texture.relief()==RenderTexture::Raised);
     }
   }
 
@@ -162,6 +186,37 @@ void TrueRenderControl::drawGradientBackground(
   XDestroyImage(im);
 }
 
+void TrueRenderControl::highlight(pixel32 *x, pixel32 *y, bool raised) const
+{
+  int r, g, b;
+
+  pixel32 *up, *down;
+  if (raised) {
+    up = x;
+    down = y;
+  } else {
+    up = y;
+    down = x;
+  }
+  r = (*up >> 16) & 0xFF;
+  r += r >> 1;
+  g = (*up >> 8) & 0xFF;
+  g += g >> 1;
+  b = *up & 0xFF;
+  b += b >> 1;
+  if (r > 255) r = 255;
+  if (g > 255) r = 255;
+  if (b > 255) r = 255;
+  *up = (r << 16) + (g << 8) + b;
+  
+  r = (*down >> 16) & 0xFF;
+  r = (r >> 1) + (r >> 2);
+  g = (*down >> 8) & 0xFF;
+  g = (g >> 1) + (g >> 2);
+  b = *down & 0xFF;
+  b = (b >> 1) + (b >> 2);
+  *down = (r << 16) + (g << 8) + b;
+}
 void TrueRenderControl::drawBackground(Surface& sf,
                                       const RenderTexture &texture) const
 {
index e4975aeb002250478753faf1fbcbae5eb93b02ca..a4735c8fbdb0b54728cbea7b8b6937c256d4f546 100644 (file)
@@ -46,6 +46,8 @@ public:
   virtual void drawBackground(Surface& sf, const RenderTexture &texture) const;
   virtual void drawGradientBackground(Surface &sf,
                                       const RenderTexture &texture) const;
+
+  inline void highlight(pixel32 *x, pixel32 *y, bool raised) const;
 };
 
 }
This page took 0.024506 seconds and 4 git commands to generate.