summaryrefslogtreecommitdiff
path: root/otk/label.cc
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2003-03-21 18:42:39 +0000
committerDana Jansens <danakj@orodu.net>2003-03-21 18:42:39 +0000
commita52a6d96d701c993896f276e4198003317632aaf (patch)
treebe2f51e6a433d1fdf9a7c8248b343cb3f6297212 /otk/label.cc
parenta36c7543d4eedaa9e10bfd9f4d9b81279b1bb7e6 (diff)
rm the old code including the .pys and the c++ shit
Diffstat (limited to 'otk/label.cc')
-rw-r--r--otk/label.cc176
1 files changed, 0 insertions, 176 deletions
diff --git a/otk/label.cc b/otk/label.cc
deleted file mode 100644
index 8ec03dd9..00000000
--- a/otk/label.cc
+++ /dev/null
@@ -1,176 +0,0 @@
-// -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*-
-
-#include "config.h"
-
-#include "label.hh"
-#include "display.hh"
-#include "rendercontrol.hh"
-
-#include <string>
-
-namespace otk {
-
-Label::Label(int screen, EventDispatcher *ed, int bevel)
- : Widget(screen, ed, Widget::Horizontal, bevel, true),
- _text(""),
- _font(0),
- _justify_horz(RenderStyle::LeftTopJustify),
- _justify_vert(RenderStyle::LeftTopJustify),
- _highlight(false)
-{
- styleChanged(*RenderStyle::style(screen));
-}
-
-Label::Label(Widget *parent)
- : Widget(parent),
- _text(""),
- _font(0),
- _justify_horz(RenderStyle::LeftTopJustify),
- _justify_vert(RenderStyle::LeftTopJustify),
- _highlight(false)
-{
- styleChanged(*RenderStyle::style(screen()));
-}
-
-Label::~Label()
-{
-}
-
-void Label::setHorizontalJustify(RenderStyle::Justify j)
-{
- _justify_horz = j;
- refresh();
-}
-
-void Label::setVerticalJustify(RenderStyle::Justify j)
-{
- _justify_vert = j;
- refresh();
-}
-
-void Label::setHighlighted(bool h)
-{
- _highlight = h;
- styleChanged(*RenderStyle::style(screen()));
- refresh();
-}
-
-void Label::setText(const ustring &text)
-{
- bool utf = text.utf8();
- std::string s = text.c_str(); // use a normal string, for its functionality
-
- _parsedtext.clear();
- _text = text;
-
- // parse it into multiple lines
- std::string::size_type p = 0;
- while (p != std::string::npos) {
- std::string::size_type p2 = s.find('\n', p);
- std::string s(s.substr(p, (p2==std::string::npos?p2:p2-p)));
-
- // turn tabs into spaces (multiples of 8)
- std::string::size_type t;
- while ((t = s.find('\t')) != std::string::npos)
- s.replace(t, 1, std::string(8 - t % 8, ' '));
-
- _parsedtext.push_back(s);
- _parsedtext.back().setUtf8(utf);
- p = (p2==std::string::npos?p2:p2+1);
- }
- calcDefaultSizes();
-}
-
-void Label::setFont(const Font *f)
-{
- _font = f;
- calcDefaultSizes();
-}
-
-void Label::calcDefaultSizes()
-{
- int longest = 0;
- // find the longest line
- std::vector<ustring>::iterator it, end = _parsedtext.end();
- for (it = _parsedtext.begin(); it != end; ++it) {
- int length = _font->measureString(*it);
- if (length < 0) continue; // lines too long get skipped
- if (length > longest) longest = length;
- }
- setMinSize(Size(longest + borderWidth() * 2 + bevel() * 4,
- _parsedtext.size() * _font->height() + borderWidth() * 2 +
- bevel() * 2));
-}
-
-void Label::styleChanged(const RenderStyle &style)
-{
- if (_highlight) {
- _texture = style.labelFocusBackground();
- _forecolor = style.textFocusColor();
- } else {
- _texture = style.labelUnfocusBackground();
- _forecolor = style.textUnfocusColor();
- }
- if (_font != style.labelFont()) {
- _font = style.labelFont();
- calcDefaultSizes();
- }
-}
-
-void Label::renderForeground(Surface &surface)
-{
- const RenderControl *control = display->renderControl(screen());
- int sidemargin = bevel() * 2;
- int y = bevel();
- int w = area().width() - borderWidth() * 2 - sidemargin * 2;
- int h = area().height() - borderWidth() * 2 - bevel() * 2;
-
- switch (_justify_vert) {
- case RenderStyle::RightBottomJustify:
- y += h - (_parsedtext.size() * _font->height());
- if (y < bevel()) y = bevel();
- break;
- case RenderStyle::CenterJustify:
- y += (h - (_parsedtext.size() * _font->height())) / 2;
- if (y < bevel()) y = bevel();
- break;
- case RenderStyle::LeftTopJustify:
- break;
- }
-
- if (w <= 0) return; // can't fit anything
-
- std::vector<ustring>::iterator it, end = _parsedtext.end();
- for (it = _parsedtext.begin(); it != end; ++it, y += _font->height()) {
- ustring t = *it; // the actual text to draw
- int x = sidemargin; // x coord for the text
-
- // find a string that will fit inside the area for text
- ustring::size_type text_len = t.size();
- int length;
-
- do {
- t.resize(text_len);
- length = _font->measureString(t);
- } while (length > w && text_len-- > 0);
- if (length < 0) continue; // lines too long get skipped
-
- if (text_len <= 0) continue; // won't fit anything
-
- // justify the text
- switch (_justify_horz) {
- case RenderStyle::RightBottomJustify:
- x += w - length;
- break;
- case RenderStyle::CenterJustify:
- x += (w - length) / 2;
- break;
- case RenderStyle::LeftTopJustify:
- break;
- }
-
- control->drawString(surface, *_font, x, y, *_forecolor, t);
- }
-}
-
-}