summaryrefslogtreecommitdiff
path: root/src/buttonwidget.cc
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2002-12-27 16:29:32 +0000
committerDana Jansens <danakj@orodu.net>2002-12-27 16:29:32 +0000
commitd222c565432a146313fe4673b67c517b6d649182 (patch)
treeb7429a203bbcac318ef9b41a339d656610cd02ee /src/buttonwidget.cc
parent5fdd493d0d2255f134114e69f028371366f4dfd3 (diff)
draw only when needed
Diffstat (limited to 'src/buttonwidget.cc')
-rw-r--r--src/buttonwidget.cc77
1 files changed, 40 insertions, 37 deletions
diff --git a/src/buttonwidget.cc b/src/buttonwidget.cc
index efb98e76..390e5948 100644
--- a/src/buttonwidget.cc
+++ b/src/buttonwidget.cc
@@ -81,49 +81,52 @@ void OBButtonWidget::update()
{
otk::PixmapMask *pm;
int width;
+ bool draw = _dirty;
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 (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
+ 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::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);
+ }
}