diff options
author | SungHyun Min <shyun.min@samsung.com> | 2017-02-22 19:49:54 +0900 |
---|---|---|
committer | Kangho Hur <kangho.hur@samsung.com> | 2017-03-24 13:19:03 +0900 |
commit | a2cd9cb8784dad353fd1fb9f2a7707d79d3bf691 (patch) | |
tree | ba81b8c041445f4d792a576ccdbb88711aae4de3 /Xamarin.Forms.Platform.Tizen/PinchGestureHandler.cs | |
parent | 93cbfcadce593432944c9a683ef55a2edb105d21 (diff) | |
download | xamarin-forms-a2cd9cb8784dad353fd1fb9f2a7707d79d3bf691.tar.gz xamarin-forms-a2cd9cb8784dad353fd1fb9f2a7707d79d3bf691.tar.bz2 xamarin-forms-a2cd9cb8784dad353fd1fb9f2a7707d79d3bf691.zip |
Refactoring GestureHandler for extension
- Design : http://suprem.sec.samsung.net/confluence/display/SPTDTLC/Refactoring+GestureHandler
Change-Id: I1cbcf830b4b1076c227b0ea641508198c7cb2102
Signed-off-by: SungHyun Min <shyun.min@samsung.com>
Diffstat (limited to 'Xamarin.Forms.Platform.Tizen/PinchGestureHandler.cs')
-rw-r--r-- | Xamarin.Forms.Platform.Tizen/PinchGestureHandler.cs | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/Xamarin.Forms.Platform.Tizen/PinchGestureHandler.cs b/Xamarin.Forms.Platform.Tizen/PinchGestureHandler.cs new file mode 100644 index 00000000..c22b7e20 --- /dev/null +++ b/Xamarin.Forms.Platform.Tizen/PinchGestureHandler.cs @@ -0,0 +1,60 @@ +using System; +using System.ComponentModel; +using ElmSharp; + +namespace Xamarin.Forms.Platform.Tizen +{ + public class PinchGestureHandler : GestureHandler + { + Point _currentScalePoint; + int _previousPinchRadius; + double _originalPinchScale; + + public PinchGestureHandler(IGestureRecognizer recognizer) : base(recognizer) + { + } + + public override GestureLayer.GestureType Type + { + get + { + return GestureLayer.GestureType.Zoom; + } + } + + public override event PropertyChangedEventHandler PropertyChanged; + + protected override void OnStarted(View sender, object data) + { + var geometry = Platform.GetRenderer(sender).NativeView.Geometry; + var zoomData = (GestureLayer.ZoomData)data; + _currentScalePoint = new Point((zoomData.X - geometry.X) / (double)geometry.Width, (zoomData.Y - geometry.Y) / (double)geometry.Height); + _originalPinchScale = sender.Scale; + _previousPinchRadius = zoomData.Radius; + (Recognizer as IPinchGestureController)?.SendPinchStarted(sender, _currentScalePoint); + } + + protected override void OnMoved(View sender, object data) + { + var zoomData = (GestureLayer.ZoomData)data; + if (_previousPinchRadius <= 0) + _previousPinchRadius = 1; + // functionality limitation: _currentScalePoint is not updated + (Recognizer as IPinchGestureController)?.SendPinch(sender, + 1 + _originalPinchScale * (zoomData.Radius - _previousPinchRadius) / _previousPinchRadius, + _currentScalePoint + ); + _previousPinchRadius = zoomData.Radius; + } + + protected override void OnCompleted(View sender, object data) + { + (Recognizer as IPinchGestureController)?.SendPinchEnded(sender); + } + + protected override void OnCanceled(View sender, object data) + { + (Recognizer as IPinchGestureController)?.SendPinchCanceled(sender); + } + } +}
\ No newline at end of file |