feat: track zoom delta for DelegateInputHandler

This commit is contained in:
Nick Fisher
2024-10-23 14:10:41 +08:00
parent c6640cef96
commit 4371dbda3c

View File

@@ -266,15 +266,34 @@ class DelegateInputHandler implements InputHandler {
// noop // noop
} }
double? _lastScale;
@override @override
Future<void> onScaleUpdate(Vector2 focalPoint, Vector2 focalPointDelta, Future<void> onScaleUpdate(
double horizontalScale, double verticalScale, double scale, int pointerCount) async { Vector2 focalPoint,
Vector2 focalPointDelta,
double horizontalScale,
double verticalScale,
double scale,
int pointerCount) async {
if (pointerCount == 1) { if (pointerCount == 1) {
_inputDeltas[InputType.SCALE1] = _inputDeltas[InputType.SCALE1] =
Vector3(focalPointDelta.x, focalPointDelta.y, 0); Vector3(focalPointDelta.x, focalPointDelta.y, 0);
} else if (pointerCount == 2) { } else if (pointerCount == 2) {
_inputDeltas[InputType.SCALE2] = var zoomDelta = 0.0;
Vector3(0, 0, max(horizontalScale, verticalScale)); if (_lastScale == null) {
if (scale < 0) {
zoomDelta = 1;
} else if (scale > 0) {
zoomDelta = -1;
}
_lastScale = scale;
} else {
zoomDelta = scale < _lastScale! ? 1 : -1;
_lastScale = scale;
}
_inputDeltas[InputType.SCALE2] = Vector3(0, 0, zoomDelta);
} else { } else {
throw UnimplementedError("Only pointerCount <= 2 supported"); throw UnimplementedError("Only pointerCount <= 2 supported");
} }