]> Dogcows Code - chaz/openbox/blobdiff - src/buttonwidget.cc
include the all otk stuff into the openbox python module. rename widget.hh to stop...
[chaz/openbox] / src / buttonwidget.cc
index 853b0339f448793948e60e93bb3ff7b9e6db6cbc..ceca8d38a830735c1be3132fc8b442b768449913 100644 (file)
@@ -5,6 +5,7 @@
 #endif
 
 #include "buttonwidget.hh"
+#include "otk/gccache.hh" // otk::BPen
 
 namespace ob {
 
@@ -76,6 +77,65 @@ void OBButtonWidget::setStyle(otk::Style *style)
 }
 
 
+void OBButtonWidget::update()
+{
+  otk::PixmapMask *pm;
+  int width;
+  bool draw = _dirty;
+
+  otk::OtkWidget::update();
+
+  if (draw) {
+    switch (type()) {
+    case Type_StickyButton:
+      pm = _style->getStickyButtonMask();
+      break;
+    case Type_CloseButton:
+      pm = _style->getCloseButtonMask();
+      break;
+    case Type_MaximizeButton:
+      pm = _style->getMaximizeButtonMask();
+      break;
+    case Type_IconifyButton:
+      pm = _style->getIconifyButtonMask();
+      break;
+    case Type_LeftGrip:
+    case Type_RightGrip:
+      return; // no drawing
+    default:
+      assert(false); // there's no other button widgets!
+    }
+
+    if (pm->mask == None) return; // no mask for the button, leave it empty
+
+    width = _rect.width();
+  
+    otk::BPen pen(_focused ? *_style->getButtonPicFocus() :
+                  *_style->getButtonPicUnfocus());
+
+    // set the clip region
+    XSetClipMask(otk::OBDisplay::display, pen.gc(), pm->mask);
+    XSetClipOrigin(otk::OBDisplay::display, pen.gc(),
+                   (width - pm->w)/2, (width - pm->h)/2);
+
+    // fill in the clipped region
+    XFillRectangle(otk::OBDisplay::display, _window, pen.gc(),
+                   (width - pm->w)/2, (width - pm->h)/2,
+                   (width + pm->w)/2, (width + pm->h)/2);
+
+    // unset the clip region
+    XSetClipMask(otk::OBDisplay::display, pen.gc(), None);
+    XSetClipOrigin(otk::OBDisplay::display, pen.gc(), 0, 0);
+  }
+}
+
+
+void OBButtonWidget::adjust()
+{
+  // nothing to adjust. no children.
+}
+
+
 void OBButtonWidget::focus()
 {
   otk::OtkWidget::focus();
@@ -90,12 +150,6 @@ void OBButtonWidget::unfocus()
 }
 
 
-void OBButtonWidget::adjust()
-{
-  // XXX: adjust shit
-}
-
-
 void OBButtonWidget::buttonPressHandler(const XButtonEvent &e)
 {
   OtkWidget::buttonPressHandler(e);
This page took 0.023992 seconds and 4 git commands to generate.