namespace ob {
-OBLabelWidget::OBLabelWidget(otk::OtkWidget *parent, OBWidget::WidgetType type)
- : otk::OtkWidget(parent),
- OBWidget(type)
+LabelWidget::LabelWidget(otk::Widget *parent, WidgetBase::WidgetType type)
+ : otk::Widget(parent),
+ WidgetBase(type)
{
- const otk::ScreenInfo *info = otk::OBDisplay::screenInfo(_screen);
- _xftdraw = XftDrawCreate(otk::OBDisplay::display, _window, info->visual(),
- info->colormap());
}
-OBLabelWidget::~OBLabelWidget()
+LabelWidget::~LabelWidget()
{
- XftDrawDestroy(_xftdraw);
}
-void OBLabelWidget::setText(const std::string &text)
+void LabelWidget::setText(const otk::ustring &text)
{
_text = text;
_dirty = true;
}
-void OBLabelWidget::setTextures()
+void LabelWidget::setTextures()
{
if (_focused) {
- setTexture(_style->getLabelFocus());
- _text_color = _style->getTextFocus();
+ setTexture(_style->labelFocusBackground());
+ _text_color = _style->textFocusColor();
} else {
- setTexture(_style->getLabelUnfocus());
- _text_color = _style->getTextUnfocus();
+ setTexture(_style->labelUnfocusBackground());
+ _text_color = _style->textUnfocusColor();
}
}
-void OBLabelWidget::setStyle(otk::Style *style)
+void LabelWidget::setStyle(otk::RenderStyle *style)
{
- OtkWidget::setStyle(style);
+ otk::Widget::setStyle(style);
setTextures();
- _font = style->getFont();
+ _font = style->labelFont();
+ _sidemargin = style->bevelWidth() * 2;
+ _justify = style->labelTextJustify();
+
assert(_font);
- _sidemargin = style->getBevelWidth() * 2;
- _justify = style->textJustify();
}
-void OBLabelWidget::focus()
+void LabelWidget::focus()
{
- otk::OtkWidget::focus();
+ otk::Widget::focus();
setTextures();
}
-void OBLabelWidget::unfocus()
+void LabelWidget::unfocus()
{
- otk::OtkWidget::unfocus();
+ otk::Widget::unfocus();
setTextures();
}
-void OBLabelWidget::update()
+void LabelWidget::renderForeground()
{
- OtkWidget::update();
+ bool draw = _dirty;
- std::string t = _text;
- int x = _sidemargin; // x coord for the text
+ otk::Widget::renderForeground();
- // 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;
+ if (draw) {
+ otk::ustring 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;
- 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;
+ do {
+ t.resize(text_len);
+ length = _font->measureString(t);
+ } while (length > max_length && text_len-- > 0);
+
+ // justify the text
+ switch (_justify) {
+ case otk::RenderStyle::RightJustify:
+ x += max_length - length;
+ break;
+ case otk::RenderStyle::CenterJustify:
+ x += (max_length - length) / 2;
+ break;
+ case otk::RenderStyle::LeftJustify:
+ break;
+ }
}
- }
- _font->drawString(_xftdraw, x, 0, *_text_color, t);
+ otk::display->renderControl(_screen)->drawString
+ (*_surface, *_font, x, 0, *_text_color, t);
+ }
}
-void OBLabelWidget::adjust()
+void LabelWidget::adjust()
{
- // XXX: adjust shit
+ // nothing to adjust. no children.
}
}