all repos — openbox @ d222c565432a146313fe4673b67c517b6d649182

openbox fork - make it a bit more like ryudo

draw only when needed
Dana Jansens danakj@orodu.net
commit

d222c565432a146313fe4673b67c517b6d649182

parent

5fdd493d0d2255f134114e69f028371366f4dfd3

2 files changed, 66 insertions(+), 59 deletions(-)

jump to
M src/buttonwidget.ccsrc/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()); + 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); + // 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); + // 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); + // unset the clip region + XSetClipMask(otk::OBDisplay::display, pen.gc(), None); + XSetClipOrigin(otk::OBDisplay::display, pen.gc(), 0, 0); + } }
M src/labelwidget.ccsrc/labelwidget.cc

@@ -72,38 +72,42 @@

void OBLabelWidget::update() { + bool draw = _dirty; + OtkWidget::update(); - std::string t = _text; - int x = _sidemargin; // x coord for the text + if (draw) { + std::string t = _text; + int x = _sidemargin; // x coord for the text - // find a string that will fit inside the area for text - int max_length = width() - _sidemargin * 2; - if (max_length <= 0) { - t = ""; // can't fit anything - } else { - size_t text_len = t.size(); - int length; + // find a string that will fit inside the area for text + int max_length = width() - _sidemargin * 2; + if (max_length <= 0) { + t = ""; // can't fit anything + } else { + size_t text_len = t.size(); + int length; - do { - t.resize(text_len); - length = _font->measureString(t); - } while (length > max_length && text_len-- > 0); + do { + t.resize(text_len); + length = _font->measureString(t); + } while (length > max_length && text_len-- > 0); - // justify the text - switch (_justify) { - case otk::Style::RightJustify: - x += max_length - length; - break; - case otk::Style::CenterJustify: - x += (max_length - length) / 2; - break; - case otk::Style::LeftJustify: - break; + // justify the text + switch (_justify) { + case otk::Style::RightJustify: + x += max_length - length; + break; + case otk::Style::CenterJustify: + x += (max_length - length) / 2; + break; + case otk::Style::LeftJustify: + break; + } } - } - _font->drawString(_xftdraw, x, 0, *_text_color, t); + _font->drawString(_xftdraw, x, 0, *_text_color, t); + } }