X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fbuttonwidget.cc;h=52398d92a88c03740c96b6368026dcb51748639f;hb=75e8fc2705d9c606a702eb7057e9e503be90618b;hp=efb98e7652babc990da115232a9e60e44d9a7b3d;hpb=5fdd493d0d2255f134114e69f028371366f4dfd3;p=chaz%2Fopenbox diff --git a/src/buttonwidget.cc b/src/buttonwidget.cc index efb98e76..52398d92 100644 --- a/src/buttonwidget.cc +++ b/src/buttonwidget.cc @@ -9,22 +9,22 @@ 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: @@ -56,9 +56,9 @@ void OBButtonWidget::setTextures() } -void OBButtonWidget::setStyle(otk::Style *style) +void ButtonWidget::setStyle(otk::Style *style) { - otk::OtkWidget::setStyle(style); + otk::Widget::setStyle(style); setTextures(); switch (type()) { @@ -77,79 +77,82 @@ void OBButtonWidget::setStyle(otk::Style *style) } -void OBButtonWidget::update() +void ButtonWidget::update() { otk::PixmapMask *pm; int width; + bool draw = _dirty; + + otk::Widget::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! + } - 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 + if (pm->mask == None) return; // no mask for the button, leave it empty - width = _rect.width(); + 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); + otk::Pen pen(_focused ? *_style->getButtonPicFocus() : + *_style->getButtonPicUnfocus()); + + // set the clip region + XSetClipMask(**otk::display, pen.gc(), pm->mask); + XSetClipOrigin(**otk::display, pen.gc(), + (width - pm->w)/2, (width - pm->h)/2); + + // fill in the clipped region + XFillRectangle(**otk::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::display, pen.gc(), None); + XSetClipOrigin(**otk::display, pen.gc(), 0, 0); + } } -void OBButtonWidget::adjust() +void ButtonWidget::adjust() { - // XXX: adjust shit + // nothing to adjust. no children. } -void OBButtonWidget::focus() +void ButtonWidget::focus() { - otk::OtkWidget::focus(); + otk::Widget::focus(); setTextures(); } -void OBButtonWidget::unfocus() +void ButtonWidget::unfocus() { - otk::OtkWidget::unfocus(); + 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; @@ -158,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;