| @@ -430,7 +430,11 @@ struct KnobEventHandler::PrivateData { | |||||
| movDiff = lastY - ev.pos.getY() / scaleFactor; | movDiff = lastY - ev.pos.getY() / scaleFactor; | ||||
| break; | break; | ||||
| case Both: | 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; | break; | ||||
| default: | default: | ||||
| return false; | return false; | ||||
| @@ -464,10 +468,13 @@ struct KnobEventHandler::PrivateData { | |||||
| { | { | ||||
| if (std::abs(valueTmp - value) >= step) | if (std::abs(valueTmp - value) >= step) | ||||
| { | { | ||||
| const float rest = std::fmod(valueTmp, step); | |||||
| valueChanged = true; | 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; | value2 += step; | ||||
| if (value2 < minimum) | if (value2 < minimum) | ||||