diff options
-rw-r--r-- | plugingui/button.cc | 16 | ||||
-rw-r--r-- | plugingui/button.h | 3 | ||||
-rw-r--r-- | plugingui/eventhandler.cc | 9 | ||||
-rw-r--r-- | plugingui/widget.h | 3 |
4 files changed, 31 insertions, 0 deletions
diff --git a/plugingui/button.cc b/plugingui/button.cc index 05d16a2..2370f29 100644 --- a/plugingui/button.cc +++ b/plugingui/button.cc @@ -29,6 +29,7 @@ #include "painter.h" #include <stdio.h> +#include <hugin.hpp> GUI::Button::Button(Widget *parent) : GUI::Widget(parent) @@ -110,6 +111,21 @@ void GUI::Button::setText(std::string text) repaintEvent(NULL); } +void GUI::Button::mouseLeaveEvent() +{ + DEBUG(button, "Leave\n"); + if(state == down) { + state = up; + repaintEvent(NULL); + } +} + +void GUI::Button::mouseEnterEvent() +{ + DEBUG(button, "Enter\n"); +} + + #ifdef TEST_BUTTON //Additional dependency files //deps: diff --git a/plugingui/button.h b/plugingui/button.h index f39f24f..89cabf5 100644 --- a/plugingui/button.h +++ b/plugingui/button.h @@ -50,6 +50,9 @@ public: virtual void repaintEvent(RepaintEvent *e); virtual void buttonEvent(ButtonEvent *e); + virtual void mouseLeaveEvent(); + virtual void mouseEnterEvent(); + private: Painter::Box box_up; Painter::Box box_down; diff --git a/plugingui/eventhandler.cc b/plugingui/eventhandler.cc index 1cf67fc..050c2e1 100644 --- a/plugingui/eventhandler.cc +++ b/plugingui/eventhandler.cc @@ -447,6 +447,15 @@ void GUI::EventHandler::processEvents(Window *window) MouseMoveEvent *me = (MouseMoveEvent*)event; Widget *w = window->find(me->x, me->y); + Widget *oldw = window->mouseFocus(); + if(w != oldw) { + // Send focus leave to oldw + if(oldw) oldw->mouseLeaveEvent(); + // Send focus enter to w + if(w) w->mouseEnterEvent(); + + window->setMouseFocus(w); + } if(window->buttonDownFocus()) { Widget *w = window->buttonDownFocus(); diff --git a/plugingui/widget.h b/plugingui/widget.h index 34cdaee..47c374e 100644 --- a/plugingui/widget.h +++ b/plugingui/widget.h @@ -66,6 +66,9 @@ public: virtual void scrollEvent(ScrollEvent *e) {} virtual void keyEvent(KeyEvent *e) {} + virtual void mouseLeaveEvent() {} + virtual void mouseEnterEvent() {} + Widget *find(size_t x, size_t y); virtual Window *window(); |