1 using System.Collections.Generic;
3 namespace ElmSharp.Test
5 class GestureLayerTest2 : TestCaseBase
7 public override string TestName => "GestureLayerTest2";
8 public override string TestDescription => "GestureLayer feature : Momentum & Rotate Test.";
10 private GestureLayer _glayer;
12 private List<string> _logEntries;
13 private Background _background;
14 private Rectangle _box1;
21 public override void Run(Window window)
23 _background = new Background(window);
24 var windowSize = window.ScreenSize;
25 _background.Color = Color.White;
26 _background.Resize(windowSize.Width, windowSize.Height);
29 _box1 = new Rectangle(window)
33 _box1.Resize(400, 600);
37 _log = new Label(window);
38 _log.Resize(700, 1280 - 780);
41 _logEntries = new List<string>();
42 Log("Momentum & Roate Gesture Test.");
44 _glayer = new GestureLayer(_box1);
45 _glayer.Attach(_box1);
47 _glayer.RotateStep = 3;
48 _glayer.SetRotateCallback(GestureLayer.GestureState.Start, (rotate) =>
50 _prevAngle = (int)rotate.BaseAngle;
53 _glayer.SetRotateCallback(GestureLayer.GestureState.Move, (rotate) =>
55 if (_box1.IsMapEnabled)
57 _angle += (int)rotate.Angle - _prevAngle;
58 _prevAngle = (int)rotate.Angle;
59 Log($"@@ Rotation XY:({rotate.X},{rotate.Y}) a:{rotate.Angle:F2} ba:{rotate.BaseAngle:F2} total:{_angle}");
60 ApplyTransformation();
64 int prevX = 0, prevY = 0;
65 _glayer.SetMomentumCallback(GestureLayer.GestureState.Start, (data) =>
67 if (data.FingersCount == 1)
69 prevX = _glayer.EvasCanvas.Pointer.X;
70 prevY = _glayer.EvasCanvas.Pointer.Y;
73 _glayer.SetMomentumCallback(GestureLayer.GestureState.Move, (data) =>
75 if (data.FingersCount == 1)
77 data.X2 = _glayer.EvasCanvas.Pointer.X;
78 data.Y2 = _glayer.EvasCanvas.Pointer.Y;
79 _totalX += (data.X2 - prevX);
80 _totalY += (data.Y2 - prevY);
83 Log($"@@ Momentum X:({prevX},{data.X2}), Y({prevY},{data.Y2}) = Total:({(data.X2 - prevX)}, {(data.Y2 - prevY)})");
84 ApplyTransformation();
87 _glayer.SetMomentumCallback(GestureLayer.GestureState.Abort, (data) =>
89 Log($"@@ Momentum Abort");
91 _glayer.SetMomentumCallback(GestureLayer.GestureState.End, (data) =>
93 Log($"@@ Momentum End");
97 void ApplyTransformation()
99 EvasMap map = new EvasMap(4);
100 Rect geometry = _box1.Geometry;
101 map.PopulatePoints(geometry, 0);
103 map.Rotate3D(0, 0, _angle, (int)(geometry.X + geometry.Width * 0.5), (int)(geometry.Y + geometry.Height * 0.5), 0);
106 for (int i = 0; i < 4; i++)
108 p = map.GetPointCoordinate(i);
111 map.SetPointCoordinate(i, p);
114 _box1.IsMapEnabled = true;
117 private void Log(string format, params object[] args)
119 var entry = string.Format(format, args);
120 if (_logEntries.Count > 15)
121 _logEntries.RemoveRange(0, _logEntries.Count - 15);
122 _logEntries.Add(entry);
123 _log.Text = string.Join("<br>", _logEntries);