From 4371dbda3cc25796adc719d6e4434ea24c8ca3b8 Mon Sep 17 00:00:00 2001 From: Nick Fisher Date: Wed, 23 Oct 2024 14:10:41 +0800 Subject: [PATCH] feat: track zoom delta for DelegateInputHandler --- .../src/input/src/delegate_input_handler.dart | 27 ++++++++++++++++--- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/thermion_dart/lib/src/input/src/delegate_input_handler.dart b/thermion_dart/lib/src/input/src/delegate_input_handler.dart index 0a5383e5..4664285a 100644 --- a/thermion_dart/lib/src/input/src/delegate_input_handler.dart +++ b/thermion_dart/lib/src/input/src/delegate_input_handler.dart @@ -266,15 +266,34 @@ class DelegateInputHandler implements InputHandler { // noop } + double? _lastScale; + @override - Future onScaleUpdate(Vector2 focalPoint, Vector2 focalPointDelta, - double horizontalScale, double verticalScale, double scale, int pointerCount) async { + Future onScaleUpdate( + Vector2 focalPoint, + Vector2 focalPointDelta, + double horizontalScale, + double verticalScale, + double scale, + int pointerCount) async { if (pointerCount == 1) { _inputDeltas[InputType.SCALE1] = Vector3(focalPointDelta.x, focalPointDelta.y, 0); } else if (pointerCount == 2) { - _inputDeltas[InputType.SCALE2] = - Vector3(0, 0, max(horizontalScale, verticalScale)); + var zoomDelta = 0.0; + 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 { throw UnimplementedError("Only pointerCount <= 2 supported"); }