commit c5d9a720383032646d4a1f203875d1d12db2ec31 parent 0ffd22d07e4162cb0caf70ac3a9bbfd4bea704a4 Author: falkTX <falktx@falktx.com> Date: Tue, 30 Aug 2022 01:17:50 +0100 More improvements to KnobEventHandler stepped movement Diffstat:
M | dgl/src/EventHandlers.cpp | | | 13 | ++++++++++--- |
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/dgl/src/EventHandlers.cpp b/dgl/src/EventHandlers.cpp @@ -430,7 +430,11 @@ struct KnobEventHandler::PrivateData { movDiff = lastY - ev.pos.getY() / scaleFactor; break; case Both: - movDiff = (ev.pos.getX() / scaleFactor - lastX) + (lastY - ev.pos.getY() / scaleFactor); + { + const float movDiffX = ev.pos.getX() / scaleFactor - lastX; + const float movDiffY = lastY - ev.pos.getY() / scaleFactor; + movDiff = std::abs(movDiffX) > std::abs(movDiffY) ? movDiffX : movDiffY; + } break; default: return false; @@ -464,10 +468,13 @@ struct KnobEventHandler::PrivateData { { if (std::abs(valueTmp - value) >= step) { + const float rest = std::fmod(valueTmp, step); valueChanged = true; - value2 = valueTmp + std::fmod(valueTmp, step); + value2 = valueTmp - rest; - if (movDiff < 0.0) + if (rest < 0 && rest < step * -0.5f) + value2 -= step; + else if (rest > 0 && rest > step * 0.5f) value2 += step; if (value2 < minimum)