summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Platform.Tizen/Native/Window.cs
blob: 7587e17cd6f4c310f426a428d5306b404dc4571d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
using System;
using ElmSharp;
using EWindow = ElmSharp.Window;
using ELayout = ElmSharp.Layout;

namespace Xamarin.Forms.Platform.Tizen.Native
{
	public class Window : EWindow
	{
		ELayout _layout;
		Conformant _conformant;

		/// <summary>
		/// Initializes a new instance of the Window class.
		/// </summary>
		public Window() : base("FormsWindow")
		{
			Initialize();
		}

		/// <summary>
		/// Notifies that the window has been closed.
		/// </summary>
		public event EventHandler Closed;

		/// <summary>
		/// Notifies that the back button has been pressed.
		/// </summary>
		public event EventHandler BackButtonPressed;

		/// <summary>
		/// Gets the current orientation.
		/// </summary>
		public DisplayOrientations CurrentOrientation
		{
			get
			{
				if (IsRotationSupported)
				{
					return GetDisplayOrientation();
				}
				else
				{
					return DisplayOrientations.None;
				}
			}
		}

		/// <summary>
		/// Gets or sets the orientation of a rectangular screen.
		/// </summary>
		public DisplayOrientations AvailableOrientations
		{
			get
			{
				if (IsRotationSupported)
				{
					return (DisplayOrientations)AvailableRotations;
				}
				else
				{
					return DisplayOrientations.None;
				}
			}
			set
			{
				if (IsRotationSupported)
				{
					AvailableRotations = (DisplayRotation)value;
				}
			}
		}

		public ELayout BaseLayout
		{
			get
			{
				return _layout;
			}

			private set
			{
				_layout = value;
			}
		}

		/// <summary>
		/// Sets the main page of Window.
		/// </summary>
		/// <param name="content">ElmSharp.EvasObject type page to be set.</param>
		public void SetMainPage(EvasObject content)
		{
			_layout.SetContent(content);
		}

		void Initialize()
		{
			// size
			var size = ScreenSize;
			Resize(size.Width, size.Height);

			// events
			Deleted += (sender, e) =>
			{
				Closed?.Invoke(this, EventArgs.Empty);
			};
			CloseRequested += (sender, e) =>
			{
				Unrealize();
			};

			KeyGrab(EvasKeyEventArgs.PlatformBackButtonName, false);
			KeyUp += (s, e) =>
			{
				if (e.KeyName == EvasKeyEventArgs.PlatformBackButtonName)
				{
					BackButtonPressed?.Invoke(this, EventArgs.Empty);
				}
			};

			Active();
			AutoDeletion = false;
			Show();

			_conformant = new Conformant(this);
			_conformant.SetAlignment(-1.0, -1.0);  // fill
			_conformant.SetWeight(1.0, 1.0);  // expand
			_conformant.Show();

			// Create the base (default) layout for the application
			_layout = new ELayout(_conformant);
			_layout.SetAlignment(-1.0, -1.0);  // fill
			_layout.SetWeight(1.0, 1.0);  // expand
			_layout.SetTheme("layout", "application", "default");
			_layout.Show();

			_conformant.SetContent(_layout);
			BaseLayout = _layout;
			AvailableOrientations = DisplayOrientations.Portrait | DisplayOrientations.Landscape | DisplayOrientations.PortraitFlipped | DisplayOrientations.LandscapeFlipped;
		}
		DisplayOrientations GetDisplayOrientation()
		{
			switch (Rotation)
			{
				case 0:
				return Native.DisplayOrientations.Portrait;

				case 90:
				return Native.DisplayOrientations.Landscape;

				case 180:
				return Native.DisplayOrientations.PortraitFlipped;

				case 270:
				return Native.DisplayOrientations.LandscapeFlipped;

				default:
				return Native.DisplayOrientations.None;
			}
		}
	}
}