diff options
author | Bent Bisballe Nyeng <deva@aasimon.org> | 2012-01-23 20:08:12 +0100 |
---|---|---|
committer | Bent Bisballe Nyeng <deva@aasimon.org> | 2012-01-23 20:08:12 +0100 |
commit | af9c9091ed69394171485aa4c4814504f86f2004 (patch) | |
tree | 070b911dc8faed486c8e8829f0f41aec7d5b4350 /plugingui/lineedit.cc | |
parent | 5e4cb10f72ef69d73fbd2c1bc42465c9111a4c41 (diff) |
Simple image blit. New slider class. New filenamelineedit. New pixelbuffer used for drawing everything but the root window - with alpha blending...
Diffstat (limited to 'plugingui/lineedit.cc')
-rw-r--r-- | plugingui/lineedit.cc | 59 |
1 files changed, 37 insertions, 22 deletions
diff --git a/plugingui/lineedit.cc b/plugingui/lineedit.cc index e2a63d9..5b0336f 100644 --- a/plugingui/lineedit.cc +++ b/plugingui/lineedit.cc @@ -29,80 +29,95 @@ #include <stdio.h> #include "painter.h" -#include "globalcontext.h" -using namespace DGGUI; +#include "window.h" #define BORDER 10 -LineEdit::LineEdit(GlobalContext *gctx, Widget *parent) - : Widget(gctx, parent) +GUI::LineEdit::LineEdit(Widget *parent) + : GUI::Widget(parent) { pos = 0; - gctx->keyboardFocus = this; } -void LineEdit::setText(std::string text) +void GUI::LineEdit::setText(std::string text) { _text = text; + textChanged(); } -std::string LineEdit::text() +std::string GUI::LineEdit::text() { return _text; } -void LineEdit::key(KeyEvent *e) +void GUI::LineEdit::keyEvent(GUI::KeyEvent *e) { - // printf("%d\n", e->keycode); + bool change = false; + if(e->direction == -1) { - if(e->keycode == 113) { // left key + if(e->keycode == GUI::KeyEvent::KEY_LEFT) { if(pos) pos--; - } else if(e->keycode == 114) { // right key + } else if(e->keycode == GUI::KeyEvent::KEY_HOME) { + pos = 0; + + } else if(e->keycode == GUI::KeyEvent::KEY_END) { + pos = _text.length(); + + } else if(e->keycode == GUI::KeyEvent::KEY_RIGHT) { if(pos < _text.length()) pos++; - } else if(e->keycode == 119) { // delete + } else if(e->keycode == GUI::KeyEvent::KEY_DELETE) { if(pos < _text.length()) { std::string t = _text.substr(0, pos); t += _text.substr(pos + 1, std::string::npos); _text = t; + change = true; } - } else if(e->keycode == 22) { // backspace + } else if(e->keycode == GUI::KeyEvent::KEY_BACKSPACE) { if(pos > 0) { std::string t = _text.substr(0, pos - 1); t += _text.substr(pos, std::string::npos); _text = t; pos--; + change = true; } - } else if(e->keycode >= 10 && e->keycode <= 61) { + } else if(e->keycode == GUI::KeyEvent::KEY_CHARACTER) { std::string pre = _text.substr(0, pos); std::string post = _text.substr(pos, std::string::npos); _text = pre + e->text + post; + change = true; pos++; } - repaint(NULL); + repaintEvent(NULL); } + + if(change) textChanged(); } -void LineEdit::repaint(RepaintEvent *e) +void GUI::LineEdit::repaintEvent(GUI::RepaintEvent *e) { - Painter p(gctx, wctx); + Painter p(this); - p.setColour(Colour(0)); + p.setColour(Colour(0, 0.4)); p.drawFilledRectangle(3,3,width()-3,height()-3); + Font font; p.setColour(Colour(1,1,1)); p.drawRectangle(0,0,width()-1,height()-1); - p.drawRectangle(2,2,width()-5,height()-5); - p.drawText(BORDER, height()/2+4, _text); + p.drawRectangle(2,2,width()-3,height()-3); + p.drawText(BORDER, height()/2+4, font, _text); - p.setColour(Colour(0.8)); - p.drawLine(pos * 6 + BORDER - 1, 4, pos * 6 + BORDER - 1, height() - 5); + if(hasKeyboardFocus()) { + size_t px = font.textWidth(_text.substr(0, pos)); + p.setColour(Colour(0.8)); + p.drawLine(px + BORDER - 1, 4, px + BORDER - 1, height() - 5); + } } #ifdef TEST_LINEEDIT |