summaryrefslogtreecommitdiff
path: root/ElmSharp.Test/TC/GestureLayerTest1.cs
diff options
context:
space:
mode:
Diffstat (limited to 'ElmSharp.Test/TC/GestureLayerTest1.cs')
-rw-r--r--ElmSharp.Test/TC/GestureLayerTest1.cs86
1 files changed, 86 insertions, 0 deletions
diff --git a/ElmSharp.Test/TC/GestureLayerTest1.cs b/ElmSharp.Test/TC/GestureLayerTest1.cs
new file mode 100644
index 0000000..b59cbcc
--- /dev/null
+++ b/ElmSharp.Test/TC/GestureLayerTest1.cs
@@ -0,0 +1,86 @@
+using System;
+using ElmSharp;
+using System.Collections.Generic;
+
+namespace ElmSharp.Test
+{
+ class GestureLayerTest1 : TestCaseBase
+ {
+ public override string TestName => "GestureLayerTest1";
+ public override string TestDescription => "Demonstrate GestureLayer features: Tap, DoubleTap, Rotate, Zoom detection.";
+
+ private GestureLayer _glayer;
+ private Label _log;
+ private List<string> _logEntries;
+ private Background _background;
+ private Rectangle _box1;
+
+ public override void Run(Window window)
+ {
+ _background = new Background(window);
+ var windowSize = window.ScreenSize;
+ _background.Color = Color.White;
+ _background.Resize(windowSize.Width, windowSize.Height);
+ _background.Show();
+
+ _box1 = new Rectangle(window)
+ {
+ Color = Color.Yellow
+ };
+ _box1.Resize(400, 600);
+ _box1.Move(160, 160);
+ _box1.Show();
+
+ _log = new Label(window);
+ _log.Resize(700, 1280 - 780);
+ _log.Move(10, 770);
+ _log.Show();
+ _logEntries = new List<string>();
+ Log("Double tap to register additional gestures. Tripple tap to unregister them.");
+
+ _glayer = new GestureLayer(_box1);
+ _glayer.Attach(_box1);
+
+ _glayer.SetTapCallback(GestureLayer.GestureType.Tap, GestureLayer.GestureState.End, (info) => {
+ Log("Tap {0},{1}", info.X, info.Y);
+ });
+
+ _glayer.SetTapCallback(GestureLayer.GestureType.DoubleTap, GestureLayer.GestureState.End, (info) => {
+ Log("DoubleTap {0},{1} {2}", info.X, info.Y, info.FingersCount);
+ _glayer.SetLineCallback(GestureLayer.GestureState.End, (line) => {
+ Log("Line {0},{1}-{2},{3}, M:{4},{5}", line.X1, line.Y1, line.X2, line.Y2, line.HorizontalMomentum, line.VerticalMomentum);
+ });
+ _glayer.SetFlickCallback(GestureLayer.GestureState.End, (flick) => {
+ Log("Flick {0},{1}-{2},{3}, M:{4},{5}", flick.X1, flick.Y1, flick.X2, flick.Y2, flick.HorizontalMomentum, flick.VerticalMomentum);
+ });
+ _glayer.RotateStep = 3;
+ _glayer.SetRotateCallback(GestureLayer.GestureState.Move, (rotate) => {
+ Log("Rotation {0},{1} a:{2:F3} ba:{3:F3}", rotate.X, rotate.Y, rotate.Angle, rotate.BaseAngle);
+ });
+ _glayer.SetZoomCallback(GestureLayer.GestureState.End, (zoom) => {
+ Log("Zoom {0},{1} r:{2} z:{3:F3}", zoom.X, zoom.Y, zoom.Radius, zoom.Zoom);
+ });
+ Log("Line, Flick, Rotate, and Zoom callbacks enabled.");
+ });
+
+ _glayer.SetTapCallback(GestureLayer.GestureType.TripleTap, GestureLayer.GestureState.End, (info) => {
+ Log("TrippleTap {0},{1} {2}", info.X, info.Y, info.FingersCount);
+ _glayer.SetLineCallback(GestureLayer.GestureState.End, null);
+ _glayer.SetFlickCallback(GestureLayer.GestureState.End, null);
+ _glayer.SetRotateCallback(GestureLayer.GestureState.Move, null);
+ _glayer.SetZoomCallback(GestureLayer.GestureState.End, null);
+ Log("Cleared Line, Flick, Rotate, and Zoom callbacks.");
+ });
+ // Momentum is not used, it seems that it conflicts with Rotate and Zoom
+ }
+
+ private void Log(string format, params object[] args)
+ {
+ var entry = string.Format(format, args);
+ if (_logEntries.Count > 15)
+ _logEntries.RemoveRange(0, _logEntries.Count - 15);
+ _logEntries.Add(entry);
+ _log.Text = string.Join("<br>", _logEntries);
+ }
+ }
+}