Merge "[Telephony] Sample App implementation."
[platform/core/csapi/tizenfx.git] / test / ElmSharp.Test / TC / GestureLayerTest2.cs
1 using System.Collections.Generic;
2
3 namespace ElmSharp.Test
4 {
5     class GestureLayerTest2 : TestCaseBase
6     {
7         public override string TestName => "GestureLayerTest2";
8         public override string TestDescription => "GestureLayer feature : Momentum & Rotate Test.";
9
10         private GestureLayer _glayer;
11         private Label _log;
12         private List<string> _logEntries;
13         private Background _background;
14         private Rectangle _box1;
15
16         int _angle = 0;
17         int _prevAngle = 0;
18         int _totalX = 0;
19         int _totalY = 0;
20
21         public override void Run(Window window)
22         {
23             _background = new Background(window);
24             var windowSize = window.ScreenSize;
25             _background.Color = Color.White;
26             _background.Resize(windowSize.Width, windowSize.Height);
27             _background.Show();
28
29             _box1 = new Rectangle(window)
30             {
31                 Color = Color.Yellow
32             };
33             _box1.Resize(400, 600);
34             _box1.Move(160, 160);
35             _box1.Show();
36
37             _log = new Label(window);
38             _log.Resize(700, 1280 - 780);
39             _log.Move(10, 770);
40             _log.Show();
41             _logEntries = new List<string>();
42             Log("Momentum & Roate Gesture Test.");
43
44             _glayer = new GestureLayer(_box1);
45             _glayer.Attach(_box1);
46
47             _glayer.RotateStep = 3;
48             _glayer.SetRotateCallback(GestureLayer.GestureState.Start, (rotate) =>
49             {
50                 _prevAngle = (int)rotate.BaseAngle;
51             });
52
53             _glayer.SetRotateCallback(GestureLayer.GestureState.Move, (rotate) =>
54             {
55                 if (_box1.IsMapEnabled)
56                 {
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();
61                 }
62             });
63
64             int prevX = 0, prevY = 0;
65             _glayer.SetMomentumCallback(GestureLayer.GestureState.Start, (data) =>
66             {
67                 if (data.FingersCount == 1)
68                 {
69                     prevX = _glayer.EvasCanvas.Pointer.X;
70                     prevY = _glayer.EvasCanvas.Pointer.Y;
71                 }
72             });
73             _glayer.SetMomentumCallback(GestureLayer.GestureState.Move, (data) =>
74             {
75                 if (data.FingersCount == 1)
76                 {
77                     data.X2 = _glayer.EvasCanvas.Pointer.X;
78                     data.Y2 = _glayer.EvasCanvas.Pointer.Y;
79                     _totalX += (data.X2 - prevX);
80                     _totalY += (data.Y2 - prevY);
81                     prevX = data.X2;
82                     prevY = data.Y2;
83                     Log($"@@ Momentum X:({prevX},{data.X2}), Y({prevY},{data.Y2}) = Total:({(data.X2 - prevX)}, {(data.Y2 - prevY)})");
84                     ApplyTransformation();
85                 }
86             });
87             _glayer.SetMomentumCallback(GestureLayer.GestureState.Abort, (data) =>
88             {
89                 Log($"@@ Momentum Abort");
90             });
91             _glayer.SetMomentumCallback(GestureLayer.GestureState.End, (data) =>
92             {
93                 Log($"@@ Momentum End");
94             });
95         }
96
97         void ApplyTransformation()
98         {
99             EvasMap map = new EvasMap(4);
100             Rect geometry = _box1.Geometry;
101             map.PopulatePoints(geometry, 0);
102
103             map.Rotate3D(0, 0, _angle, (int)(geometry.X + geometry.Width * 0.5), (int)(geometry.Y + geometry.Height * 0.5), 0);
104
105             Point3D p;
106             for (int i = 0; i < 4; i++)
107             {
108                 p = map.GetPointCoordinate(i);
109                 p.X += _totalX;
110                 p.Y += _totalY;
111                 map.SetPointCoordinate(i, p);
112             }
113             _box1.EvasMap = map;
114             _box1.IsMapEnabled = true;
115         }
116
117         private void Log(string format, params object[] args)
118         {
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);
124         }
125     }
126 }