Browse Source

Allow to pass scale factor to KnobEventHandler mouse events

pull/321/merge
falkTX 2 years ago
parent
commit
0ffd22d07e
3 changed files with 17 additions and 17 deletions
  1. +2
    -2
      dgl/EventHandlers.hpp
  2. +13
    -13
      dgl/src/EventHandlers.cpp
  3. +2
    -2
      dgl/src/ImageBaseWidgets.cpp

+ 2
- 2
dgl/EventHandlers.hpp View File

@@ -151,8 +151,8 @@ public:
// default 200, higher means slower // default 200, higher means slower
void setMouseDeceleration(float accel) noexcept; 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); bool scrollEvent(const Widget::ScrollEvent& ev);


protected: protected:


+ 13
- 13
dgl/src/EventHandlers.cpp View File

@@ -361,7 +361,7 @@ struct KnobEventHandler::PrivateData {
return std::log(v/a)/b; 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) if (ev.button != 1)
return false; return false;
@@ -378,8 +378,8 @@ struct KnobEventHandler::PrivateData {
return true; 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) if (lastClickTime > 0 && ev.time > lastClickTime && ev.time - lastClickTime <= 300)
{ {
@@ -414,7 +414,7 @@ struct KnobEventHandler::PrivateData {
return false; return false;
} }


bool motionEvent(const Widget::MotionEvent& ev)
bool motionEvent(const Widget::MotionEvent& ev, const double scaleFactor)
{ {
if ((state & kKnobStateDragging) == 0x0) if ((state & kKnobStateDragging) == 0x0)
return false; return false;
@@ -424,13 +424,13 @@ struct KnobEventHandler::PrivateData {
switch (orientation) switch (orientation)
{ {
case Horizontal: case Horizontal:
movDiff = ev.pos.getX() - lastX;
movDiff = ev.pos.getX() / scaleFactor - lastX;
break; break;
case Vertical: case Vertical:
movDiff = lastY - ev.pos.getY();
movDiff = lastY - ev.pos.getY() / scaleFactor;
break; break;
case Both: case Both:
movDiff = (ev.pos.getX() - lastX) + (lastY - ev.pos.getY());
movDiff = (ev.pos.getX() / scaleFactor - lastX) + (lastY - ev.pos.getY() / scaleFactor);
break; break;
default: default:
return false; return false;
@@ -486,8 +486,8 @@ struct KnobEventHandler::PrivateData {
if (valueChanged) if (valueChanged)
setValue(value2, true); setValue(value2, true);


lastX = ev.pos.getX();
lastY = ev.pos.getY();
lastX = ev.pos.getX() / scaleFactor;
lastY = ev.pos.getY() / scaleFactor;


return true; return true;
} }
@@ -652,14 +652,14 @@ void KnobEventHandler::setMouseDeceleration(float accel) noexcept
pData->accel = accel; 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) bool KnobEventHandler::scrollEvent(const Widget::ScrollEvent& ev)


+ 2
- 2
dgl/src/ImageBaseWidgets.cpp View File

@@ -395,7 +395,7 @@ bool ImageBaseKnob<ImageType>::onMouse(const MouseEvent& ev)
{ {
if (SubWidget::onMouse(ev)) if (SubWidget::onMouse(ev))
return true; return true;
return KnobEventHandler::mouseEvent(ev);
return KnobEventHandler::mouseEvent(ev, getTopLevelWidget()->getScaleFactor());
} }


template <class ImageType> template <class ImageType>
@@ -403,7 +403,7 @@ bool ImageBaseKnob<ImageType>::onMotion(const MotionEvent& ev)
{ {
if (SubWidget::onMotion(ev)) if (SubWidget::onMotion(ev))
return true; return true;
return KnobEventHandler::motionEvent(ev);
return KnobEventHandler::motionEvent(ev, getTopLevelWidget()->getScaleFactor());
} }


template <class ImageType> template <class ImageType>


Loading…
Cancel
Save