#define __label_hh
#include "widget.hh"
+#include "ustring.hh"
+#include "renderstyle.hh"
#include "font.hh"
+#include <vector>
+
namespace otk {
class Label : public Widget {
public:
-
Label(Widget *parent);
- ~Label();
+ virtual ~Label();
+
+ inline const ustring& text(void) const { return _text; }
+ void setText(const ustring &text);
+
+ virtual inline bool isHighlighted() const { return _highlight; }
+ virtual void setHighlighted(bool h);
+
+ RenderStyle::Justify horizontalJustify() const { return _justify_horz; }
+ virtual void setHorizontalJustify(RenderStyle::Justify j);
+ RenderStyle::Justify verticalJustify() const { return _justify_vert; }
+ virtual void setVerticalJustify(RenderStyle::Justify j);
- inline const std::string &getText(void) const { return _text; }
- void setText(const std::string &text) { _text = text; _dirty = true; }
+ const Font *font() const { return _font; }
+ virtual void setFont(const Font *f);
- void update(void);
+ virtual void calcDefaultSizes();
- virtual void setStyle(Style *style);
+ virtual void styleChanged(const RenderStyle &style);
+
+ virtual void renderForeground(Surface &surface);
+protected:
+ //! The color the label will use for rendering its text
+ RenderColor *_forecolor;
+
private:
- //! Object used by Xft to render to the drawable
- XftDraw *_xftdraw;
- //! Text displayed in the label
- std::string _text;
+ //! Text to be displayed in the label
+ ustring _text;
+ //! Text to be displayed, parsed into its separate lines
+ std::vector<ustring> _parsedtext;
+ //! The actual text being shown, may be a subset of _text
+ ustring _drawtext;
+ //! The font the text will be rendered with
+ const Font *_font;
+ //! The horizontal justification used for drawing text
+ RenderStyle::Justify _justify_horz;
+ //! The vertical justification used for drawing text
+ RenderStyle::Justify _justify_vert;
+ //! The drawing offset for the text
+ int _drawx;
+ //! If the widget is highlighted or not
+ bool _highlight;
};
}