commit b8e8eb7a9aff73239df6c2b225fb6dac1647904c
parent f2cb4e0f0c6fc901dcbff3fcbd02aec2aa0b9fb2
Author: falkTX <falktx@falktx.com>
Date: Thu, 25 Aug 2022 08:59:14 +0100
Add KnobEventHandler::setMouseDeceleration
Diffstat:
2 files changed, 18 insertions(+), 6 deletions(-)
diff --git a/dgl/EventHandlers.hpp b/dgl/EventHandlers.hpp
@@ -147,6 +147,9 @@ public:
void setCallback(Callback* callback) noexcept;
+ // default 200, higher means slower
+ void setMouseDeceleration(float accel) noexcept;
+
bool mouseEvent(const Widget::MouseEvent& ev);
bool motionEvent(const Widget::MotionEvent& ev);
bool scrollEvent(const Widget::ScrollEvent& ev);
diff --git a/dgl/src/EventHandlers.cpp b/dgl/src/EventHandlers.cpp
@@ -274,6 +274,7 @@ struct KnobEventHandler::PrivateData {
SubWidget* const widget;
KnobEventHandler::Callback* callback;
+ float accel;
float minimum;
float maximum;
float step;
@@ -292,8 +293,9 @@ struct KnobEventHandler::PrivateData {
: self(s),
widget(w),
callback(nullptr),
- minimum(0.0f),
- maximum(1.0f),
+ accel(200.f),
+ minimum(0.f),
+ maximum(1.f),
step(0.0f),
value(0.5f),
valueDef(value),
@@ -309,6 +311,7 @@ struct KnobEventHandler::PrivateData {
: self(s),
widget(w),
callback(other->callback),
+ accel(other->accel),
minimum(other->minimum),
maximum(other->maximum),
step(other->step),
@@ -325,6 +328,7 @@ struct KnobEventHandler::PrivateData {
void assignFrom(PrivateData* const other)
{
callback = other->callback;
+ accel = other->accel;
minimum = other->minimum;
maximum = other->maximum;
step = other->step;
@@ -407,7 +411,7 @@ struct KnobEventHandler::PrivateData {
case Horizontal:
if (const double movX = ev.pos.getX() - lastX)
{
- d = (ev.mod & kModifierControl) ? 2000.0f : 200.0f;
+ d = (ev.mod & kModifierControl) ? accel * 10.f : accel;
value2 = (usingLog ? invlogscale(valueTmp) : valueTmp) + (float(maximum - minimum) / d * float(movX));
doVal = true;
}
@@ -415,7 +419,7 @@ struct KnobEventHandler::PrivateData {
case Vertical:
if (const double movY = lastY - ev.pos.getY())
{
- d = (ev.mod & kModifierControl) ? 2000.0f : 200.0f;
+ d = (ev.mod & kModifierControl) ? accel * 10.f : accel;
value2 = (usingLog ? invlogscale(valueTmp) : valueTmp) + (float(maximum - minimum) / d * float(movY));
doVal = true;
}
@@ -426,7 +430,7 @@ struct KnobEventHandler::PrivateData {
if (const double mov = movX + movY)
{
- d = (ev.mod & kModifierControl) ? 2000.0f : 200.0f;
+ d = (ev.mod & kModifierControl) ? accel * 10.f : accel;
value2 = (usingLog ? invlogscale(valueTmp) : valueTmp) + (float(maximum - minimum) / d * float(mov));
doVal = true;
}
@@ -477,7 +481,7 @@ struct KnobEventHandler::PrivateData {
return false;
const float dir = (ev.delta.getY() > 0.f) ? 1.f : -1.f;
- const float d = (ev.mod & kModifierControl) ? 2000.0f : 200.0f;
+ const float d = (ev.mod & kModifierControl) ? accel * 10.f : accel;
float value2 = (usingLog ? invlogscale(valueTmp) : valueTmp)
+ ((maximum - minimum) / d * 10.f * dir);
@@ -626,6 +630,11 @@ void KnobEventHandler::setCallback(Callback* const callback) noexcept
pData->callback = callback;
}
+void KnobEventHandler::setMouseDeceleration(float accel) noexcept
+{
+ pData->accel = accel;
+}
+
bool KnobEventHandler::mouseEvent(const Widget::MouseEvent& ev)
{
return pData->mouseEvent(ev);