]>
Dogcows Code - chaz/openbox/blob - src/labelwidget.cc
1 // -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*-
4 # include "../config.h"
7 #include "otk/screeninfo.hh"
8 #include "otk/display.hh"
9 #include "labelwidget.hh"
13 OBLabelWidget::OBLabelWidget(otk::OtkWidget
*parent
, OBWidget::WidgetType type
)
14 : otk::OtkWidget(parent
),
17 const otk::ScreenInfo
*info
= otk::OBDisplay::screenInfo(_screen
);
18 _xftdraw
= XftDrawCreate(otk::OBDisplay::display
, _window
, info
->visual(),
23 OBLabelWidget::~OBLabelWidget()
25 XftDrawDestroy(_xftdraw
);
29 void OBLabelWidget::setText(const std::string
&text
)
36 void OBLabelWidget::setTextures()
39 setTexture(_style
->getLabelFocus());
40 _text_color
= _style
->getTextFocus();
42 setTexture(_style
->getLabelUnfocus());
43 _text_color
= _style
->getTextUnfocus();
48 void OBLabelWidget::setStyle(otk::Style
*style
)
50 OtkWidget::setStyle(style
);
52 _font
= style
->getFont();
54 _sidemargin
= style
->getBevelWidth() * 2;
55 _justify
= style
->textJustify();
59 void OBLabelWidget::focus()
61 otk::OtkWidget::focus();
66 void OBLabelWidget::unfocus()
68 otk::OtkWidget::unfocus();
73 void OBLabelWidget::update()
80 std::string t
= _text
;
81 int x
= _sidemargin
; // x coord for the text
83 // find a string that will fit inside the area for text
84 int max_length
= width() - _sidemargin
* 2;
85 if (max_length
<= 0) {
86 t
= ""; // can't fit anything
88 size_t text_len
= t
.size();
93 length
= _font
->measureString(t
);
94 } while (length
> max_length
&& text_len
-- > 0);
98 case otk::Style::RightJustify
:
99 x
+= max_length
- length
;
101 case otk::Style::CenterJustify
:
102 x
+= (max_length
- length
) / 2;
104 case otk::Style::LeftJustify
:
109 _font
->drawString(_xftdraw
, x
, 0, *_text_color
, t
);
114 void OBLabelWidget::adjust()
116 // nothing to adjust. no children.
This page took 0.040331 seconds and 4 git commands to generate.