diff --git a/dgl/EventHandlers.hpp b/dgl/EventHandlers.hpp index 1e450b8d..f06406c4 100644 --- a/dgl/EventHandlers.hpp +++ b/dgl/EventHandlers.hpp @@ -52,16 +52,18 @@ public: bool isCheckable() const noexcept; void setCheckable(bool checkable) noexcept; + Point getLastMotionPosition() const noexcept; + void setCallback(Callback* callback) noexcept; bool mouseEvent(const Widget::MouseEvent& ev); bool motionEvent(const Widget::MotionEvent& ev); protected: - State getState() const noexcept; - void clearState() noexcept; + State getState() const noexcept; + void clearState() noexcept; - virtual void stateChanged(State state, State oldState); + virtual void stateChanged(State state, State oldState); void setInternalCallback(Callback* callback) noexcept; void triggerUserCallback(SubWidget* widget, int button); diff --git a/dgl/src/EventHandlers.cpp b/dgl/src/EventHandlers.cpp index dc6489a6..aba66983 100644 --- a/dgl/src/EventHandlers.cpp +++ b/dgl/src/EventHandlers.cpp @@ -59,18 +59,14 @@ struct ButtonEventHandler::PrivateData { const int state2 = state; state &= ~kButtonStateActive; + self->stateChanged(static_cast(state), static_cast(state2)); + widget->repaint(); + // cursor was moved outside the button bounds, ignore click if (! widget->contains(ev.pos)) - { - self->stateChanged(static_cast(state), static_cast(state2)); - widget->repaint(); return true; - } // still on bounds, register click - self->stateChanged(static_cast(state), static_cast(state2)); - widget->repaint(); - if (checkable) checked = !checked; @@ -217,6 +213,11 @@ void ButtonEventHandler::setCheckable(const bool checkable) noexcept pData->checkable = checkable; } +Point ButtonEventHandler::getLastMotionPosition() const noexcept +{ + return pData->oldMotionPos; +} + void ButtonEventHandler::setCallback(Callback* const callback) noexcept { pData->userCallback = callback;