diff --git a/dgl/EventHandlers.hpp b/dgl/EventHandlers.hpp index c33866de..f56b5a63 100644 --- a/dgl/EventHandlers.hpp +++ b/dgl/EventHandlers.hpp @@ -151,8 +151,8 @@ public: // default 200, higher means slower void setMouseDeceleration(float accel) noexcept; - bool mouseEvent(const Widget::MouseEvent& ev); - bool motionEvent(const Widget::MotionEvent& ev); + bool mouseEvent(const Widget::MouseEvent& ev, double scaleFactor = 1.0); + bool motionEvent(const Widget::MotionEvent& ev, double scaleFactor = 1.0); bool scrollEvent(const Widget::ScrollEvent& ev); protected: diff --git a/dgl/src/EventHandlers.cpp b/dgl/src/EventHandlers.cpp index 2ba28e25..caf892a3 100644 --- a/dgl/src/EventHandlers.cpp +++ b/dgl/src/EventHandlers.cpp @@ -361,7 +361,7 @@ struct KnobEventHandler::PrivateData { return std::log(v/a)/b; } - bool mouseEvent(const Widget::MouseEvent& ev) + bool mouseEvent(const Widget::MouseEvent& ev, const double scaleFactor) { if (ev.button != 1) return false; @@ -378,8 +378,8 @@ struct KnobEventHandler::PrivateData { return true; } - lastX = ev.pos.getX(); - lastY = ev.pos.getY(); + lastX = ev.pos.getX() / scaleFactor; + lastY = ev.pos.getY() / scaleFactor; if (lastClickTime > 0 && ev.time > lastClickTime && ev.time - lastClickTime <= 300) { @@ -414,7 +414,7 @@ struct KnobEventHandler::PrivateData { return false; } - bool motionEvent(const Widget::MotionEvent& ev) + bool motionEvent(const Widget::MotionEvent& ev, const double scaleFactor) { if ((state & kKnobStateDragging) == 0x0) return false; @@ -424,13 +424,13 @@ struct KnobEventHandler::PrivateData { switch (orientation) { case Horizontal: - movDiff = ev.pos.getX() - lastX; + movDiff = ev.pos.getX() / scaleFactor - lastX; break; case Vertical: - movDiff = lastY - ev.pos.getY(); + movDiff = lastY - ev.pos.getY() / scaleFactor; break; case Both: - movDiff = (ev.pos.getX() - lastX) + (lastY - ev.pos.getY()); + movDiff = (ev.pos.getX() / scaleFactor - lastX) + (lastY - ev.pos.getY() / scaleFactor); break; default: return false; @@ -486,8 +486,8 @@ struct KnobEventHandler::PrivateData { if (valueChanged) setValue(value2, true); - lastX = ev.pos.getX(); - lastY = ev.pos.getY(); + lastX = ev.pos.getX() / scaleFactor; + lastY = ev.pos.getY() / scaleFactor; return true; } @@ -652,14 +652,14 @@ void KnobEventHandler::setMouseDeceleration(float accel) noexcept pData->accel = accel; } -bool KnobEventHandler::mouseEvent(const Widget::MouseEvent& ev) +bool KnobEventHandler::mouseEvent(const Widget::MouseEvent& ev, const double scaleFactor) { - return pData->mouseEvent(ev); + return pData->mouseEvent(ev, scaleFactor); } -bool KnobEventHandler::motionEvent(const Widget::MotionEvent& ev) +bool KnobEventHandler::motionEvent(const Widget::MotionEvent& ev, const double scaleFactor) { - return pData->motionEvent(ev); + return pData->motionEvent(ev, scaleFactor); } bool KnobEventHandler::scrollEvent(const Widget::ScrollEvent& ev) diff --git a/dgl/src/ImageBaseWidgets.cpp b/dgl/src/ImageBaseWidgets.cpp index bb16f0ce..eadc57fb 100644 --- a/dgl/src/ImageBaseWidgets.cpp +++ b/dgl/src/ImageBaseWidgets.cpp @@ -395,7 +395,7 @@ bool ImageBaseKnob::onMouse(const MouseEvent& ev) { if (SubWidget::onMouse(ev)) return true; - return KnobEventHandler::mouseEvent(ev); + return KnobEventHandler::mouseEvent(ev, getTopLevelWidget()->getScaleFactor()); } template @@ -403,7 +403,7 @@ bool ImageBaseKnob::onMotion(const MotionEvent& ev) { if (SubWidget::onMotion(ev)) return true; - return KnobEventHandler::motionEvent(ev); + return KnobEventHandler::motionEvent(ev, getTopLevelWidget()->getScaleFactor()); } template