diff options
Diffstat (limited to 'plugingui/button.cc')
-rw-r--r-- | plugingui/button.cc | 69 |
1 files changed, 47 insertions, 22 deletions
diff --git a/plugingui/button.cc b/plugingui/button.cc index a833ad3..0e42e27 100644 --- a/plugingui/button.cc +++ b/plugingui/button.cc @@ -30,53 +30,78 @@ #include <stdio.h> -Button::Button(GlobalContext *gctx, Widget *parent) - : Widget(gctx, parent) +GUI::Button::Button(Widget *parent) + : GUI::Widget(parent) { state = up; + handler = NULL; + ptr = NULL; } -void Button::button(ButtonEvent *e) +void GUI::Button::registerClickHandler(void (*handler)(void *), void *ptr) +{ + this->handler = handler; + this->ptr = ptr; +} + +void GUI::Button::buttonEvent(ButtonEvent *e) { if(e->direction == 1) { state = down; - repaint(NULL); + repaintEvent(NULL); } if(e->direction == -1) { state = up; - repaint(NULL); + repaintEvent(NULL); clicked(); + if(handler) handler(ptr); } } -void Button::repaint(RepaintEvent *e) +void GUI::Button::repaintEvent(GUI::RepaintEvent *e) { - Painter p(gctx, wctx); - - p.setColour(Colour(0.5)); - p.drawFilledRectangle(1,1,width()-1,height()-1); + // printf("Button::repaintEvent\n"); - p.setColour(Colour(0.1)); - p.drawRectangle(0,0,width()-1,height()-1); + Painter p(this); + + float alpha = 0.8; - p.setColour(Colour(0.8)); - if(state == up) { - p.drawLine(1,1,1,height()); - p.drawLine(1,1,width(),1); + if(hasKeyboardFocus()) { + p.setColour(Colour(0.6, alpha)); + } else { + p.setColour(Colour(0.5, alpha)); } - if(state == down) { - p.drawLine(width()-2,0, width()-2,height()-2); - p.drawLine(width()-2,height()-2,0, height()-2); + p.drawFilledRectangle(0,0,width()-1,height()-1); + + p.setColour(Colour(0.1, alpha)); + p.drawRectangle(0,0,width()-1,height()-1); + + p.setColour(Colour(0.8, alpha)); + switch(state) { + case up: + p.drawLine(0,0,0,height()-1); + p.drawLine(0,0,width()-1,0); + break; + case down: + p.drawLine(width()-1,0, width()-1,height()-1); + p.drawLine(width()-1,height()-1,0, height()-1); + break; } - p.setColour(Colour(0.9)); + p.setColour(Colour(0.3, alpha)); + p.drawPoint(0,height()-1); + p.drawPoint(width()-1,0); + + Font font; + p.setColour(Colour(0.9, alpha)); p.drawText(width()/2-(text.length()*3)+(state==up?0:1), - height()/2+4+(state==up?0:1), text); + height()/2+4+(state==up?0:1), font, text); } -void Button::setText(std::string text) +void GUI::Button::setText(std::string text) { this->text = text; + repaintEvent(NULL); } #ifdef TEST_BUTTON |