1 // -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*-
4 # include "../config.h"
7 #include "focuslabel.hh"
9 #include "screeninfo.hh"
13 FocusLabel::FocusLabel(Widget *parent)
14 : FocusWidget(parent), _text("")
16 const ScreenInfo *info = Display::screenInfo(screen());
17 _xftdraw = XftDrawCreate(Display::display, window(), info->visual(),
21 FocusLabel::~FocusLabel()
23 XftDrawDestroy(_xftdraw);
27 void FocusLabel::setStyle(Style *style)
29 FocusWidget::setStyle(style);
31 setTexture(style->getLabelFocus());
32 setUnfocusTexture(style->getLabelUnfocus());
36 void FocusLabel::update(void)
39 const Font *ft = style()->getFont();
40 Color *text_color = (isFocused() ? style()->getTextFocus()
41 : style()->getTextUnfocus());
42 unsigned int sidemargin = style()->getBevelWidth() * 2;
44 ustring t = _text; // the actual text to draw
45 int x = sidemargin; // x coord for the text
47 // find a string that will fit inside the area for text
48 int max_length = width() - sidemargin * 2;
49 if (max_length <= 0) {
50 t = ""; // can't fit anything
52 size_t text_len = t.size();
57 length = ft->measureString(t);
58 } while (length > max_length && text_len-- > 0);
61 switch (style()->textJustify()) {
62 case Style::RightJustify:
63 x += max_length - length;
65 case Style::CenterJustify:
66 x += (max_length - length) / 2;
68 case Style::LeftJustify:
73 FocusWidget::update();
75 ft->drawString(_xftdraw, x, 0, *text_color, t);
77 FocusWidget::update();