]> Dogcows Code - chaz/openbox/blobdiff - src/buttonwidget.cc
remove debug printfs
[chaz/openbox] / src / buttonwidget.cc
index 853b0339f448793948e60e93bb3ff7b9e6db6cbc..eb864ba23827208ec219cbfc6b93596acc4c604f 100644 (file)
@@ -5,33 +5,34 @@
 #endif
 
 #include "buttonwidget.hh"
+#include "otk/gccache.hh" // otk::BPen
 
 namespace ob {
 
-OBButtonWidget::OBButtonWidget(otk::OtkWidget *parent,
-                               OBWidget::WidgetType type)
-  : otk::OtkWidget(parent),
-    OBWidget(type),
+ButtonWidget::ButtonWidget(otk::Widget *parent,
+                           WidgetBase::WidgetType type)
+  : otk::Widget(parent),
+    WidgetBase(type),
     _pressed(false),
     _button(0)
 {
 }
 
 
-OBButtonWidget::~OBButtonWidget()
+ButtonWidget::~ButtonWidget()
 {
 }
 
 
-void OBButtonWidget::setTextures()
+void ButtonWidget::setTextures()
 {
   switch (type()) {
   case Type_LeftGrip:
   case Type_RightGrip:
     if (_focused)
-      setTexture(_style->getGripFocus());
+      setTexture(_style->gripFocusBackground());
     else
-      setTexture(_style->getGripUnfocus());
+      setTexture(_style->gripUnfocusBackground());
     break;
   case Type_StickyButton:
   case Type_CloseButton:
@@ -39,14 +40,14 @@ void OBButtonWidget::setTextures()
   case Type_IconifyButton:
     if (_pressed) {
       if (_focused)
-        setTexture(_style->getButtonPressedFocus());
+        setTexture(_style->buttonPressFocusBackground());
       else
-        setTexture(_style->getButtonPressedUnfocus());
+        setTexture(_style->buttonPressUnfocusBackground());
     } else {
       if (_focused)
-        setTexture(_style->getButtonFocus());
+        setTexture(_style->buttonUnpressFocusBackground());
       else
-        setTexture(_style->getButtonUnfocus());
+        setTexture(_style->buttonUnpressUnfocusBackground());
     }
     break;
   default:
@@ -55,15 +56,15 @@ void OBButtonWidget::setTextures()
 }
 
 
-void OBButtonWidget::setStyle(otk::Style *style)
+void ButtonWidget::setStyle(otk::RenderStyle *style)
 {
-  otk::OtkWidget::setStyle(style);
+  otk::Widget::setStyle(style);
   setTextures();
 
   switch (type()) {
   case Type_LeftGrip:
   case Type_RightGrip:
-    setBorderColor(_style->getBorderColor());
+    setBorderColor(_style->frameBorderColor());
     break;
   case Type_StickyButton:
   case Type_CloseButton:
@@ -76,29 +77,82 @@ void OBButtonWidget::setStyle(otk::Style *style)
 }
 
 
-void OBButtonWidget::focus()
+void ButtonWidget::renderForeground()
 {
-  otk::OtkWidget::focus();
-  setTextures();
+  otk::PixmapMask *pm;
+  int width;
+  bool draw = _dirty;
+
+  otk::Widget::renderForeground();
+
+  if (draw) {
+    switch (type()) {
+    case Type_StickyButton:
+      pm = _style->stickyMask();
+      break;
+    case Type_CloseButton:
+      pm = _style->closeMask();
+      break;
+    case Type_MaximizeButton:
+      pm = _style->maximizeMask();
+      break;
+    case Type_IconifyButton:
+      pm = _style->iconifyMask();
+      break;
+    case Type_LeftGrip:
+    case Type_RightGrip:
+      return; // no drawing
+    default:
+      assert(false); // there's no other button widgets!
+    }
+
+    assert(pm->mask);
+    if (pm->mask == None) return; // no mask for the button, leave it empty
+
+    width = _rect.width();
+
+    otk::RenderColor *color = (_focused ? _style->buttonFocusColor() :
+                               _style->buttonUnfocusColor());
+
+    // set the clip region
+    int x = (width - pm->w) / 2, y = (width - pm->h) / 2;
+    XSetClipMask(**otk::display, color->gc(), pm->mask);
+    XSetClipOrigin(**otk::display, color->gc(), x, y);
+
+    // fill in the clipped region
+    XFillRectangle(**otk::display, _surface->pixmap(), color->gc(), x, y,
+                   x + pm->w, y + pm->h);
+
+    // unset the clip region
+    XSetClipMask(**otk::display, color->gc(), None);
+    XSetClipOrigin(**otk::display, color->gc(), 0, 0);
+  }
 }
 
 
-void OBButtonWidget::unfocus()
+void ButtonWidget::adjust()
 {
-  otk::OtkWidget::unfocus();
+  // nothing to adjust. no children.
+}
+
+
+void ButtonWidget::focus()
+{
+  otk::Widget::focus();
   setTextures();
 }
 
 
-void OBButtonWidget::adjust()
+void ButtonWidget::unfocus()
 {
-  // XXX: adjust shit
+  otk::Widget::unfocus();
+  setTextures();
 }
 
 
-void OBButtonWidget::buttonPressHandler(const XButtonEvent &e)
+void ButtonWidget::buttonPressHandler(const XButtonEvent &e)
 {
-  OtkWidget::buttonPressHandler(e);
+  otk::Widget::buttonPressHandler(e);
   if (_button) return;
   _button = e.button;
   _pressed = true;
@@ -107,9 +161,9 @@ void OBButtonWidget::buttonPressHandler(const XButtonEvent &e)
 }
 
 
-void OBButtonWidget::buttonReleaseHandler(const XButtonEvent &e)
+void ButtonWidget::buttonReleaseHandler(const XButtonEvent &e)
 {
-  OtkWidget::buttonPressHandler(e);
+  otk::Widget::buttonPressHandler(e);
   if (e.button != _button) return;
   _button = 0;
   _pressed = false;
This page took 0.026792 seconds and 4 git commands to generate.