Merge "[Telephony] Sample App implementation."
[platform/core/csapi/tizenfx.git] / test / ElmSharp.Test / TC / GestureLayerTest1.cs
1 using System;
2 using ElmSharp;
3 using System.Collections.Generic;
4
5 namespace ElmSharp.Test
6 {
7     class GestureLayerTest1 : TestCaseBase
8     {
9         public override string TestName => "GestureLayerTest1";
10         public override string TestDescription => "Demonstrate GestureLayer features: Tap, DoubleTap, Rotate, Zoom detection.";
11
12         private GestureLayer _glayer;
13         private Label _log;
14         private List<string> _logEntries;
15         private Background _background;
16         private Rectangle _box1;
17
18         public override void Run(Window window)
19         {
20             _background = new Background(window);
21             var windowSize = window.ScreenSize;
22             _background.Color = Color.White;
23             _background.Resize(windowSize.Width, windowSize.Height);
24             _background.Show();
25
26             _box1 = new Rectangle(window)
27                 {
28                     Color = Color.Yellow
29                 };
30             _box1.Resize(400, 600);
31             _box1.Move(160, 160);
32             _box1.Show();
33
34             _log = new Label(window);
35             _log.Resize(700, 1280 - 780);
36             _log.Move(10, 770);
37             _log.Show();
38             _logEntries = new List<string>();
39             Log("Double tap to register additional gestures. Tripple tap to unregister them.");
40
41             _glayer = new GestureLayer(_box1);
42             _glayer.Attach(_box1);
43
44             _glayer.SetTapCallback(GestureLayer.GestureType.Tap, GestureLayer.GestureState.End, (info) => {
45                 Log("Tap {0},{1}", info.X, info.Y);
46             });
47
48             _glayer.SetTapCallback(GestureLayer.GestureType.DoubleTap, GestureLayer.GestureState.End, (info) => {
49                 Log("DoubleTap {0},{1} {2}", info.X, info.Y, info.FingersCount);
50                 _glayer.SetLineCallback(GestureLayer.GestureState.End, (line) => {
51                     Log("Line {0},{1}-{2},{3}, M:{4},{5}", line.X1, line.Y1, line.X2, line.Y2, line.HorizontalMomentum, line.VerticalMomentum);
52                 });
53                 _glayer.SetFlickCallback(GestureLayer.GestureState.End, (flick) => {
54                     Log("Flick {0},{1}-{2},{3}, M:{4},{5}", flick.X1, flick.Y1, flick.X2, flick.Y2, flick.HorizontalMomentum, flick.VerticalMomentum);
55                 });
56                 _glayer.RotateStep = 3;
57                 _glayer.SetRotateCallback(GestureLayer.GestureState.Move, (rotate) => {
58                     Log("Rotation {0},{1} a:{2:F3} ba:{3:F3}", rotate.X, rotate.Y, rotate.Angle, rotate.BaseAngle);
59                 });
60                 _glayer.SetZoomCallback(GestureLayer.GestureState.End, (zoom) => {
61                     Log("Zoom {0},{1} r:{2} z:{3:F3}", zoom.X, zoom.Y, zoom.Radius, zoom.Zoom);
62                 });
63                 Log("Line, Flick, Rotate, and Zoom callbacks enabled.");
64             });
65
66             _glayer.SetTapCallback(GestureLayer.GestureType.TripleTap, GestureLayer.GestureState.End, (info) => {
67                 Log("TrippleTap {0},{1} {2}", info.X, info.Y, info.FingersCount);
68                 _glayer.SetLineCallback(GestureLayer.GestureState.End, null);
69                 _glayer.SetFlickCallback(GestureLayer.GestureState.End, null);
70                 _glayer.SetRotateCallback(GestureLayer.GestureState.Move, null);
71                 _glayer.SetZoomCallback(GestureLayer.GestureState.End, null);
72                 Log("Cleared Line, Flick, Rotate, and Zoom callbacks.");
73             });
74             // Momentum is not used, it seems that it conflicts with Rotate and Zoom
75         }
76
77         private void Log(string format, params object[] args)
78         {
79             var entry = string.Format(format, args);
80             if (_logEntries.Count > 15)
81                 _logEntries.RemoveRange(0, _logEntries.Count - 15);
82             _logEntries.Add(entry);
83             _log.Text = string.Join("<br>", _logEntries);
84         }
85     }
86 }