#endif
#include "buttonwidget.hh"
+#include "otk/gccache.hh" // otk::BPen
namespace ob {
}
+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();
}
-void OBButtonWidget::adjust()
-{
- // XXX: adjust shit
-}
-
-
void OBButtonWidget::buttonPressHandler(const XButtonEvent &e)
{
OtkWidget::buttonPressHandler(e);