diff options
| author | Dana Jansens <danakj@orodu.net> | 2002-12-27 10:07:57 +0000 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2002-12-27 10:07:57 +0000 |
| commit | 5fdd493d0d2255f134114e69f028371366f4dfd3 (patch) | |
| tree | 661a83f7b9369d95d29ed2bb88e4ce6d621a36d0 /src/buttonwidget.cc | |
| parent | 8bae1352cb401b71575106051a35a9535db1a7cd (diff) | |
buttons have their pixmaps!
Diffstat (limited to 'src/buttonwidget.cc')
| -rw-r--r-- | src/buttonwidget.cc | 63 |
1 files changed, 57 insertions, 6 deletions
diff --git a/src/buttonwidget.cc b/src/buttonwidget.cc index 853b0339..efb98e76 100644 --- a/src/buttonwidget.cc +++ b/src/buttonwidget.cc @@ -5,6 +5,7 @@ #endif #include "buttonwidget.hh" +#include "otk/gccache.hh" // otk::BPen namespace ob { @@ -76,6 +77,62 @@ void OBButtonWidget::setStyle(otk::Style *style) } +void OBButtonWidget::update() +{ + otk::PixmapMask *pm; + int width; + + otk::OtkWidget::update(); + + 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() +{ + // XXX: adjust shit +} + + void OBButtonWidget::focus() { otk::OtkWidget::focus(); @@ -90,12 +147,6 @@ void OBButtonWidget::unfocus() } -void OBButtonWidget::adjust() -{ - // XXX: adjust shit -} - - void OBButtonWidget::buttonPressHandler(const XButtonEvent &e) { OtkWidget::buttonPressHandler(e); |
