mirror of
https://github.com/vcmi/vcmi.git
synced 2025-08-10 22:31:40 +02:00
allow scrolling in touch popups
This commit is contained in:
@@ -83,16 +83,18 @@ void InputSourceTouch::handleEventFingerMotion(const SDL_TouchFingerEvent & tfin
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case TouchState::TAP_DOWN_SHORT:
|
case TouchState::TAP_DOWN_SHORT:
|
||||||
|
case TouchState::TAP_DOWN_LONG_AWAIT:
|
||||||
{
|
{
|
||||||
Point distance = convertTouchToMouse(tfinger) - lastTapPosition;
|
Point distance = convertTouchToMouse(tfinger) - lastTapPosition;
|
||||||
if ( std::abs(distance.x) > params.panningSensitivityThreshold || std::abs(distance.y) > params.panningSensitivityThreshold)
|
if ( std::abs(distance.x) > params.panningSensitivityThreshold || std::abs(distance.y) > params.panningSensitivityThreshold)
|
||||||
{
|
{
|
||||||
state = TouchState::TAP_DOWN_PANNING;
|
state = state == TouchState::TAP_DOWN_SHORT ? TouchState::TAP_DOWN_PANNING : TouchState::TAP_DOWN_PANNING_POPUP;
|
||||||
GH.events().dispatchGesturePanningStarted(lastTapPosition);
|
GH.events().dispatchGesturePanningStarted(lastTapPosition);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case TouchState::TAP_DOWN_PANNING:
|
case TouchState::TAP_DOWN_PANNING:
|
||||||
|
case TouchState::TAP_DOWN_PANNING_POPUP:
|
||||||
{
|
{
|
||||||
emitPanningEvent(tfinger);
|
emitPanningEvent(tfinger);
|
||||||
break;
|
break;
|
||||||
@@ -103,7 +105,6 @@ void InputSourceTouch::handleEventFingerMotion(const SDL_TouchFingerEvent & tfin
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case TouchState::TAP_DOWN_LONG:
|
case TouchState::TAP_DOWN_LONG:
|
||||||
case TouchState::TAP_DOWN_LONG_AWAIT:
|
|
||||||
{
|
{
|
||||||
// no-op
|
// no-op
|
||||||
break;
|
break;
|
||||||
@@ -157,8 +158,11 @@ void InputSourceTouch::handleEventFingerDown(const SDL_TouchFingerEvent & tfinge
|
|||||||
CSH->getGlobalLobby().activateInterface();
|
CSH->getGlobalLobby().activateInterface();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case TouchState::TAP_DOWN_LONG:
|
|
||||||
case TouchState::TAP_DOWN_LONG_AWAIT:
|
case TouchState::TAP_DOWN_LONG_AWAIT:
|
||||||
|
lastTapPosition = convertTouchToMouse(tfinger);
|
||||||
|
break;
|
||||||
|
case TouchState::TAP_DOWN_LONG:
|
||||||
|
case TouchState::TAP_DOWN_PANNING_POPUP:
|
||||||
{
|
{
|
||||||
// no-op
|
// no-op
|
||||||
break;
|
break;
|
||||||
@@ -205,9 +209,10 @@ void InputSourceTouch::handleEventFingerUp(const SDL_TouchFingerEvent & tfinger)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case TouchState::TAP_DOWN_PANNING:
|
case TouchState::TAP_DOWN_PANNING:
|
||||||
|
case TouchState::TAP_DOWN_PANNING_POPUP:
|
||||||
{
|
{
|
||||||
GH.events().dispatchGesturePanningEnded(lastTapPosition, convertTouchToMouse(tfinger));
|
GH.events().dispatchGesturePanningEnded(lastTapPosition, convertTouchToMouse(tfinger));
|
||||||
state = TouchState::IDLE;
|
state = state == TouchState::TAP_DOWN_PANNING ? TouchState::IDLE : TouchState::TAP_DOWN_LONG_AWAIT;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case TouchState::TAP_DOWN_DOUBLE:
|
case TouchState::TAP_DOWN_DOUBLE:
|
||||||
|
@@ -45,6 +45,12 @@ enum class TouchState
|
|||||||
// UP -> transition to IDLE
|
// UP -> transition to IDLE
|
||||||
TAP_DOWN_PANNING,
|
TAP_DOWN_PANNING,
|
||||||
|
|
||||||
|
// single finger is moving across screen
|
||||||
|
// DOWN -> ignored
|
||||||
|
// MOTION -> emit panning event
|
||||||
|
// UP -> transition to TAP_DOWN_LONG_AWAIT
|
||||||
|
TAP_DOWN_PANNING_POPUP,
|
||||||
|
|
||||||
// two fingers are touching the screen
|
// two fingers are touching the screen
|
||||||
// DOWN -> ??? how to handle 3rd finger? Ignore?
|
// DOWN -> ??? how to handle 3rd finger? Ignore?
|
||||||
// MOTION -> emit pinch event
|
// MOTION -> emit pinch event
|
||||||
@@ -59,7 +65,7 @@ enum class TouchState
|
|||||||
|
|
||||||
// right-click popup is active, waiting for new tap to hide popup
|
// right-click popup is active, waiting for new tap to hide popup
|
||||||
// DOWN -> ignored
|
// DOWN -> ignored
|
||||||
// MOTION -> ignored
|
// MOTION -> transition to TAP_DOWN_PANNING_POPUP
|
||||||
// UP -> transition to IDLE, generate closePopup() event
|
// UP -> transition to IDLE, generate closePopup() event
|
||||||
TAP_DOWN_LONG_AWAIT,
|
TAP_DOWN_LONG_AWAIT,
|
||||||
};
|
};
|
||||||
@@ -79,7 +85,7 @@ struct TouchInputParameters
|
|||||||
uint32_t doubleTouchToleranceDistance = 50;
|
uint32_t doubleTouchToleranceDistance = 50;
|
||||||
|
|
||||||
/// moving finger for distance larger than specified will be qualified as panning gesture instead of long press
|
/// moving finger for distance larger than specified will be qualified as panning gesture instead of long press
|
||||||
uint32_t panningSensitivityThreshold = 10;
|
uint32_t panningSensitivityThreshold = 15;
|
||||||
|
|
||||||
/// gesture will be qualified as pinch if distance between fingers is at least specified here
|
/// gesture will be qualified as pinch if distance between fingers is at least specified here
|
||||||
uint32_t pinchSensitivityThreshold = 10;
|
uint32_t pinchSensitivityThreshold = 10;
|
||||||
|
Reference in New Issue
Block a user