[NUI] View Transition with page switching
[platform/core/csapi/tizenfx.git] / test / Tizen.NUI.Samples / Tizen.NUI.Samples / Samples / PageTransitionSample.cs
1 using System;
2 using Tizen.NUI.BaseComponents;
3 using Tizen.NUI.Components;
4
5 namespace Tizen.NUI.Samples
6 {
7     public class PageTransitionSample : IExample
8     {
9         private readonly string[,] Keywords = new string[3, 2]
10         {
11             {"red", "redGrey"},
12             {"green", "greenGrey"},
13             {"blue", "blueGrey"}
14         };
15         private readonly string totalGreyTag = "totalGrey";
16
17         private Navigator navigator;
18         private Page mainPage;
19         private Page redPage, greenPage, bluePage, totalPage;
20
21         private readonly Vector4 ColorGrey = new Vector4(0.82f, 0.80f, 0.78f, 1.0f);
22         private readonly Vector4 ColorBackground = new Vector4(0.99f, 0.94f, 0.83f, 1.0f);
23
24         private readonly Vector4[] TileColor = { new Color("#F5625D"), new Color("#7DFF83"), new Color("#7E72DF") };
25
26         private readonly Vector2 baseSize = new Vector2(480.0f, 800.0f);
27         private Vector2 contentSize;
28
29         private float magnification;
30
31         private float convertSize(float size)
32         {
33             return size * magnification;
34         }
35
36
37         public void Activate()
38         {
39             Window window = NUIApplication.GetDefaultWindow();
40             Vector2 windowSize = new Vector2((float)(window.Size.Width), (float)(window.Size.Height));
41             magnification = Math.Min(windowSize.X / baseSize.X, windowSize.Y / baseSize.Y);
42             contentSize = baseSize * magnification;
43
44             navigator = new Navigator()
45             {
46                 WidthResizePolicy = ResizePolicyType.FillToParent,
47                 HeightResizePolicy = ResizePolicyType.FillToParent,
48                 Transition = new Transition()
49                 {
50                     TimePeriod = new TimePeriod(0.4f),
51                     AlphaFunction = new AlphaFunction(AlphaFunction.BuiltinFunctions.EaseInOutSine),
52                 },
53             };
54             window.Add(navigator);
55
56             View mainRoot = new View()
57             {
58                 WidthResizePolicy = ResizePolicyType.FillToParent,
59                 HeightResizePolicy = ResizePolicyType.FillToParent
60             };
61
62             View layoutView = new View()
63             {
64                 PositionUsesPivotPoint = true,
65                 PivotPoint = PivotPoint.BottomCenter,
66                 ParentOrigin = ParentOrigin.BottomCenter,
67                 Layout = new LinearLayout()
68                 {
69                     LinearAlignment = LinearLayout.Alignment.Center,
70                     LinearOrientation = LinearLayout.Orientation.Horizontal,
71                     CellPadding = new Size(convertSize(60), convertSize(60)),
72                 },
73                 Position = new Position(0, -convertSize(30))
74             };
75             mainRoot.Add(layoutView);
76
77             View redButton = CreateButton(TileColor[0], Keywords[0, 0], Keywords[0, 1], redPage);
78             View greenButton = CreateButton(TileColor[1], Keywords[1, 0], Keywords[1, 1], greenPage);
79             View blueButton = CreateButton(TileColor[2], Keywords[2, 0], Keywords[2, 1], bluePage);
80
81             layoutView.Add(redButton);
82             layoutView.Add(greenButton);
83             layoutView.Add(blueButton);
84
85             mainPage = new Page(mainRoot);
86             navigator.Push(mainPage);
87
88             View totalGreyView = new View()
89             {
90                 Size = new Size(convertSize(50), convertSize(50)),
91                 CornerRadius = convertSize(25),
92                 BackgroundColor = ColorGrey,
93                 TransitionOptions = new TransitionOptions()
94                 {
95                     TransitionTag = totalGreyTag,
96                 }
97             };
98
99             totalGreyView.TouchEvent += (object sender, View.TouchEventArgs e) =>
100             {
101                 if (e.Touch.GetState(0) == PointStateType.Down)
102                 {
103                     navigator.PushWithTransition(totalPage);
104                 }
105                 return true;
106             };
107             layoutView.Add(totalGreyView);
108
109
110             // ------------------------------------------------------
111
112
113             View totalPageRoot = new View()
114             {
115                 WidthResizePolicy = ResizePolicyType.FillToParent,
116                 SizeHeight = contentSize.Height,
117             };
118
119             View totalLayoutView = new View()
120             {
121                 Layout = new GridLayout()
122                 {
123                     Rows = 2,
124                     GridOrientation = GridLayout.Orientation.Vertical,
125                 },
126                 PositionUsesPivotPoint = true,
127                 PivotPoint = PivotPoint.Center,
128                 ParentOrigin = ParentOrigin.Center,
129             };
130             totalPageRoot.Add(totalLayoutView);
131
132             for (int i = 0; i < 3; ++i)
133             {
134                 View sizeView = new View()
135                 {
136                     Size = new Size(contentSize.Width / 2.0f, contentSize.Height / 2.0f),
137                 };
138                 View smallView = CreatePageScene(TileColor[i], Keywords[i, 0], Keywords[i, 1]);
139                 smallView.Scale = new Vector3(0.45f, 0.45f, 1.0f);
140                 smallView.PositionUsesPivotPoint = true;
141                 smallView.PivotPoint = PivotPoint.Center;
142                 smallView.ParentOrigin = ParentOrigin.Center;
143                 sizeView.Add(smallView);
144                 totalLayoutView.Add(sizeView);
145             }
146
147             View sizeGreyView = new View()
148             {
149                 Size = new Size(contentSize.Width / 2.0f, contentSize.Height / 2.0f),
150             };
151
152             View totalGreyReturnView = new View()
153             {
154                 PositionUsesPivotPoint = true,
155                 PivotPoint = PivotPoint.Center,
156                 ParentOrigin = ParentOrigin.Center,
157                 Size = new Size(convertSize(70), convertSize(70)),
158                 CornerRadius = convertSize(20),
159                 BackgroundColor = ColorGrey,
160                 TransitionOptions = new TransitionOptions()
161                 {
162                     TransitionTag = totalGreyTag,
163                 }
164             };
165             sizeGreyView.Add(totalGreyReturnView);
166             totalLayoutView.Add(sizeGreyView);
167
168             totalGreyReturnView.TouchEvent += (object sender, View.TouchEventArgs e) =>
169             {
170                 if (e.Touch.GetState(0) == PointStateType.Down)
171                 {
172                     navigator.PopWithTransition();
173                 }
174                 return true;
175             };
176
177             totalPage = new Page(totalPageRoot);
178         }
179
180         private View CreateButton(Color color, string colorTag, string greyTag, Page secondPage)
181         {
182             View colorView = new View()
183             {
184                 Size = new Size(convertSize(50), convertSize(50)),
185                 CornerRadius = 0.45f,
186                 CornerRadiusPolicy = VisualTransformPolicyType.Relative,
187                 BackgroundColor = color,
188                 Orientation = new Rotation(new Radian((float)Math.PI / 2.0f), Vector3.ZAxis),
189                 TransitionOptions = new TransitionOptions()
190                 {
191                     TransitionTag = colorTag,
192                 },
193             };
194
195             View greyView = new View()
196             {
197                 PositionUsesPivotPoint = true,
198                 PivotPoint = PivotPoint.Center,
199                 ParentOrigin = ParentOrigin.Center,
200                 Size = new Size(convertSize(40), convertSize(40)),
201                 CornerRadius = 0.45f,
202                 CornerRadiusPolicy = VisualTransformPolicyType.Relative,
203                 BackgroundColor = ColorGrey,
204                 Orientation = new Rotation(new Radian(-(float)Math.PI / 2.0f), Vector3.ZAxis),
205                 TransitionOptions = new TransitionOptions()
206                 {
207                     TransitionTag = greyTag,
208                 }
209             };
210
211             secondPage = CreatePage(color, colorTag, greyTag);
212
213             greyView.TouchEvent += (object sender, View.TouchEventArgs e) =>
214             {
215                 if (e.Touch.GetState(0) == PointStateType.Down)
216                 {
217                     navigator.PushWithTransition(secondPage);
218                 }
219                 return true;
220             };
221             colorView.Add(greyView);
222             return colorView;
223         }
224
225         private View CreatePageScene(Color color, string colorTag, string greyTag)
226         {
227             View pageBackground = new View()
228             {
229                 SizeWidth = contentSize.Width,
230                 SizeHeight = contentSize.Height,
231             };
232
233             View colorView = new View()
234             {
235                 WidthResizePolicy = ResizePolicyType.FillToParent,
236                 HeightResizePolicy = ResizePolicyType.FillToParent,
237                 CornerRadius = 0.05f,
238                 CornerRadiusPolicy = VisualTransformPolicyType.Relative,
239                 BackgroundColor = color,
240                 TransitionOptions = new TransitionOptions()
241                 {
242                     TransitionTag = colorTag
243                 }
244             };
245
246             View greyView = new View()
247             {
248                 PositionUsesPivotPoint = true,
249                 PivotPoint = PivotPoint.TopCenter,
250                 ParentOrigin = ParentOrigin.TopCenter,
251                 Position = new Position(0, convertSize(80)),
252                 SizeWidth = contentSize.Width * 0.7f,
253                 SizeHeight = contentSize.Height * 0.06f,
254                 CornerRadius = 0.1f,
255                 CornerRadiusPolicy = VisualTransformPolicyType.Relative,
256                 BackgroundColor = ColorGrey,
257                 TransitionOptions = new TransitionOptions()
258                 {
259                     TransitionTag = greyTag
260                 }
261             };
262
263             View whiteView = new View()
264             {
265                 PositionUsesPivotPoint = true,
266                 PivotPoint = PivotPoint.BottomCenter,
267                 ParentOrigin = ParentOrigin.BottomCenter,
268                 Position = new Position(0, -convertSize(60)),
269                 SizeWidth = contentSize.Width * 0.75f,
270                 SizeHeight = contentSize.Height * 0.7f,
271                 CornerRadius = 0.1f,
272                 CornerRadiusPolicy = VisualTransformPolicyType.Relative,
273                 BackgroundColor = Color.AntiqueWhite,
274             };
275             pageBackground.Add(colorView);
276             pageBackground.Add(whiteView);
277             pageBackground.Add(greyView);
278
279             return pageBackground;
280         }
281
282         private Page CreatePage(Color color, string colorTag, string greyTag)
283         {
284             View pageRoot = new View()
285             {
286                 WidthResizePolicy = ResizePolicyType.FillToParent,
287                 HeightResizePolicy = ResizePolicyType.FillToParent
288             };
289
290             View pageBackground = CreatePageScene(color, colorTag, greyTag);
291             pageBackground.TouchEvent += (object sender, View.TouchEventArgs e) =>
292             {
293                 if (e.Touch.GetState(0) == PointStateType.Down)
294                 {
295                     navigator.PopWithTransition();
296                 }
297                 return true;
298             };
299             pageRoot.Add(pageBackground);
300
301             Page page = new Page(pageRoot);
302             return page;
303         }
304
305         public void Deactivate()
306         {
307         }
308     }
309 }