2 * Copyright(c) 2021 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 extern alias TizenSystemInformation;
19 using TizenSystemInformation.Tizen.System;
22 using System.ComponentModel;
23 using System.Collections.Generic;
24 using System.Runtime.InteropServices;
26 using Tizen.NUI.BaseComponents;
31 /// The window class is used internally for drawing.<br />
32 /// The window has an orientation and indicator properties.<br />
34 /// <since_tizen> 3 </since_tizen>
35 public partial class Window : BaseHandle
37 private HandleRef stageCPtr;
38 private Layer rootLayer;
39 private Layer overlayLayer;
40 private Layer borderLayer;
41 private string windowTitle;
42 private List<Layer> childLayers = new List<Layer>();
43 private LayoutController localController;
44 private Key internalLastKeyEvent;
45 private Touch internalLastTouchEvent;
46 private Timer internalHoverTimer;
48 static internal bool IsSupportedMultiWindow()
50 bool isSupported = false;
53 Information.TryGetValue("http://tizen.org/feature/opengles.surfaceless_context", out isSupported);
55 catch (DllNotFoundException e)
57 Tizen.Log.Fatal("NUI", $"{e}\n");
62 internal Window(global::System.IntPtr cPtr, bool cMemoryOwn) : base(cPtr, cMemoryOwn)
64 if (Interop.Stage.IsInstalled())
66 stageCPtr = new global::System.Runtime.InteropServices.HandleRef(this, Interop.Stage.GetCurrent());
68 localController = new LayoutController(this);
69 NUILog.Debug("layoutController id:" + localController.GetId());
74 /// A helper method to get the current window where the view is added
76 /// <param name="view">The View added to the window</param>
77 /// <returns>A Window.</returns>
78 [EditorBrowsable(EditorBrowsableState.Never)]
79 static public Window Get(View view)
83 NUILog.Error("if there is no view, it can not get a window");
87 //to fix memory leak issue, match the handle count with native side.
88 Window ret = view.GetInstanceSafely<Window>(Interop.Window.Get(View.getCPtr(view)));
89 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
94 /// Creates a new Window.<br />
95 /// This creates an extra window in addition to the default main window<br />
97 /// <param name="windowPosition">The position and size of the Window.</param>
98 /// <param name="isTranslucent">Whether Window is translucent.</param>
99 /// <returns>A new Window.</returns>
100 /// <since_tizen> 6 </since_tizen>
101 /// <feature> http://tizen.org/feature/opengles.surfaceless_context </feature>
102 /// <exception cref="NotSupportedException">The required feature is not supported.</exception>
103 public Window(Rectangle windowPosition = null, bool isTranslucent = false) : this(Interop.Window.New(Rectangle.getCPtr(windowPosition), "", isTranslucent), true)
105 if (IsSupportedMultiWindow() == false)
107 NUILog.Error("This device does not support surfaceless_context. So Window cannot be created. ");
109 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
113 /// Creates a new Window with a specific name.<br />
114 /// This creates an extra window in addition to the default main window<br />
116 /// <param name="name">The name for extra window. </param>
117 /// <param name="windowPosition">The position and size of the Window.</param>
118 /// <param name="isTranslucent">Whether Window is translucent.</param>
119 /// <returns>A new Window.</returns>
120 /// <since_tizen> 6 </since_tizen>
121 /// <feature> http://tizen.org/feature/opengles.surfaceless_context </feature>
122 /// <exception cref="NotSupportedException">The required feature is not supported.</exception>
123 public Window(string name, Rectangle windowPosition = null, bool isTranslucent = false) : this(Interop.Window.New(Rectangle.getCPtr(windowPosition), name, isTranslucent), true)
125 if (IsSupportedMultiWindow() == false)
127 NUILog.Error("This device does not support surfaceless_context. So Window cannot be created. ");
129 this.windowTitle = name;
130 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
134 /// Creates a new Window with a specific name.<br />
135 /// This creates an extra window in addition to the default main window<br />
137 /// <param name="name">The name for extra window. </param>
138 /// <param name="borderInterface"><see cref="Tizen.NUI.IBorderInterface"/>If borderInterface is null, defaultBorder is enabled.</param>
139 /// <param name="windowPosition">The position and size of the Window.</param>
140 /// <param name="isTranslucent">Whether Window is translucent.</param>
141 /// <returns>A new Window.</returns>
142 /// <feature> http://tizen.org/feature/opengles.surfaceless_context </feature>
143 /// <exception cref="NotSupportedException">The required feature is not supported.</exception>
144 [EditorBrowsable(EditorBrowsableState.Never)]
145 public Window(string name, IBorderInterface borderInterface, Rectangle windowPosition = null, bool isTranslucent = false) : this(Interop.Window.New(Rectangle.getCPtr(windowPosition), name, isTranslucent), true)
147 if (IsSupportedMultiWindow() == false)
149 NUILog.Error("This device does not support surfaceless_context. So Window cannot be created. ");
151 this.windowTitle = name;
152 this.EnableBorder(borderInterface);
153 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
158 /// Enumeration for orientation of the window is the way in which a rectangular page is oriented for normal viewing.
160 /// <since_tizen> 3 </since_tizen>
161 public enum WindowOrientation
164 /// Portrait orientation. The height of the display area is greater than the width.
166 /// <since_tizen> 3 </since_tizen>
169 /// Landscape orientation. A wide view area is needed.
171 /// <since_tizen> 3 </since_tizen>
174 /// Portrait inverse orientation.
176 /// <since_tizen> 3 </since_tizen>
177 PortraitInverse = 180,
179 /// Landscape inverse orientation.
181 /// <since_tizen> 3 </since_tizen>
182 LandscapeInverse = 270,
184 /// No orientation. It is for the preferred orientation
185 /// Especially, NoOrientationPreference only has the effect for the preferred orientation.
186 /// It is used to unset the preferred orientation with SetPreferredOrientation.
188 [EditorBrowsable(EditorBrowsableState.Never)]
189 NoOrientationPreference = -1
193 /// Enumeration for the key grab mode for platform-level APIs.
195 /// <since_tizen> 3 </since_tizen>
196 public enum KeyGrabMode
199 /// Grabs a key only when on the top of the grabbing-window stack mode.
203 /// Grabs a key together with the other client window(s) mode.
207 /// Grabs a key exclusively regardless of the grabbing-window's position on the window stack with the possibility of overriding the grab by the other client window mode.
211 /// Grabs a key exclusively regardless of the grabbing-window's position on the window stack mode.
217 /// Enumeration for transition effect's state.
219 [Obsolete("Do not use this, that will be removed. Use Window.EffectState instead.")]
220 [EditorBrowsable(EditorBrowsableState.Never)]
221 // This is already deprecated, so suppress warning here.
222 [System.Diagnostics.CodeAnalysis.SuppressMessage("Naming", "CA1717:Only FlagsAttribute enums should have plural names", Justification = "<Pending>")]
223 public enum EffectStates
228 [Obsolete("Do not use this, that will be removed. Use Window.EffectState.None instead.")]
229 [EditorBrowsable(EditorBrowsableState.Never)]
232 /// Transition effect is started.
234 [Obsolete("Do not use this, that will be removed. Use Window.EffectState.Start instead.")]
235 [EditorBrowsable(EditorBrowsableState.Never)]
238 /// Transition effect is ended.
240 [Obsolete("Do not use this, that will be removed. Use Window.EffectState.End instead.")]
241 [EditorBrowsable(EditorBrowsableState.Never)]
246 /// Enumeration for transition effect's state.
248 [EditorBrowsable(EditorBrowsableState.Never)]
249 public enum EffectState
254 [EditorBrowsable(EditorBrowsableState.Never)]
257 /// Transition effect is started.
259 [EditorBrowsable(EditorBrowsableState.Never)]
262 /// Transition effect is ended.
264 [EditorBrowsable(EditorBrowsableState.Never)]
269 /// Enumeration for transition effect's type.
271 [Obsolete("Do not use this, that will be removed. Use Window.EffectType instead.")]
272 [EditorBrowsable(EditorBrowsableState.Never)]
273 // This is already deprecated, so suppress warning here.
274 [System.Diagnostics.CodeAnalysis.SuppressMessage("Naming", "CA1717:Only FlagsAttribute enums should have plural names", Justification = "<Pending>")]
275 public enum EffectTypes
280 [Obsolete("Do not use this, that will be removed. Use Window.EffectType.None instead.")]
281 [EditorBrowsable(EditorBrowsableState.Never)]
284 /// Window show effect.
286 [Obsolete("Do not use this, that will be removed. Use Window.EffectType.Show instead.")]
287 [EditorBrowsable(EditorBrowsableState.Never)]
290 /// Window hide effect.
292 [Obsolete("Do not use this, that will be removed. Use Window.EffectType.Hide instead.")]
293 [EditorBrowsable(EditorBrowsableState.Never)]
298 /// Enumeration for transition effect's type.
300 [EditorBrowsable(EditorBrowsableState.Never)]
301 public enum EffectType
306 [EditorBrowsable(EditorBrowsableState.Never)]
309 /// Window show effect.
311 [EditorBrowsable(EditorBrowsableState.Never)]
314 /// Window hide effect.
316 [EditorBrowsable(EditorBrowsableState.Never)]
321 /// Enumeration for result of window operation.
323 internal enum OperationResult
326 /// Failed for unknown reason
334 /// Permission denied
338 /// The operation is not supported.
344 /// Enumeration for window resized mode by display server.
346 [EditorBrowsable(EditorBrowsableState.Never)]
347 public enum ResizeDirection
352 [EditorBrowsable(EditorBrowsableState.Never)]
355 /// Start resizing window to the top-left edge.
357 [EditorBrowsable(EditorBrowsableState.Never)]
360 /// Start resizing window to the top side.
362 [EditorBrowsable(EditorBrowsableState.Never)]
365 /// Start resizing window to the top-right edge.
367 [EditorBrowsable(EditorBrowsableState.Never)]
370 /// Start resizing window to the left side.
372 [EditorBrowsable(EditorBrowsableState.Never)]
375 /// Start resizing window to the right side.
377 [EditorBrowsable(EditorBrowsableState.Never)]
380 /// Start resizing window to the bottom-left edge.
382 [EditorBrowsable(EditorBrowsableState.Never)]
385 /// Start resizing window to the bottom side.
387 [EditorBrowsable(EditorBrowsableState.Never)]
390 /// Start resizing window to the bottom-right edge.
392 [EditorBrowsable(EditorBrowsableState.Never)]
398 /// The stage instance property (read-only).<br />
399 /// Gets the current window.<br />
401 /// <since_tizen> 3 </since_tizen>
402 public static Window Instance { get; internal set; }
405 /// Gets or sets a window type.
406 /// Most of window type can be set to use WindowType, except for IME type.
407 /// IME type can be set to use one of NUIApplication's constrcutors.
409 /// <since_tizen> 3 </since_tizen>
410 public WindowType Type
414 WindowType ret = (WindowType)Interop.Window.GetType(SwigCPtr);
415 if (NDalicPINVOKE.SWIGPendingException.Pending) throw new InvalidOperationException("FATAL: get Exception", NDalicPINVOKE.SWIGPendingException.Retrieve());
420 Interop.Window.SetType(SwigCPtr, (int)value);
421 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
426 /// Gets/Sets a window title.
428 /// <since_tizen> 4 </since_tizen>
438 SetClass(windowTitle, "");
443 /// The rendering behavior of a Window.
445 /// <since_tizen> 5 </since_tizen>
446 public RenderingBehaviorType RenderingBehavior
450 return GetRenderingBehavior();
454 SetRenderingBehavior(value);
459 /// The window size property (read-only).
461 /// <since_tizen> 3 </since_tizen>
466 Size2D ret = GetSize();
472 /// The background color property.
474 /// <since_tizen> 3 </since_tizen>
475 public Color BackgroundColor
479 SetBackgroundColor(value);
483 Color ret = GetBackgroundColor();
489 /// The DPI property (read-only).<br />
490 /// Retrieves the DPI of the display device to which the Window is connected.<br />
492 /// <since_tizen> 3 </since_tizen>
502 /// The layer count property (read-only).<br />
503 /// Queries the number of on-Window layers.<br />
505 /// <since_tizen> 3 </since_tizen>
506 public uint LayerCount
510 return GetLayerCount();
515 /// Gets or sets a size of the window.
517 /// <exception cref="ArgumentNullException"> Thrown when value is null. </exception>
518 /// <since_tizen> 4 </since_tizen>
519 public Size2D WindowSize
523 return GetWindowSize();
527 SetWindowSize(value);
532 /// Gets or sets a position of the window.
534 /// <exception cref="ArgumentNullException"> Thrown when value is null. </exception>
535 /// <since_tizen> 4 </since_tizen>
536 public Position2D WindowPosition
540 return GetPosition();
549 /// Sets position and size of the window. This API guarantees that
550 /// both moving and resizing of window will appear on the screen at once.
552 [EditorBrowsable(EditorBrowsableState.Never)]
553 public Rectangle WindowPositionSize
557 Position2D position = GetPosition();
558 Size2D size = GetSize();
559 Rectangle ret = new Rectangle(position?.X ?? 0, position?.Y ?? 0, size?.Width ?? 0, size?.Height ?? 0);
565 SetPositionSize(value);
570 /// Gets or sets whether the window will update partial area or full area.
571 /// If this value is true, window will update and render partial area.
572 /// If false, full area updated.
574 [EditorBrowsable(EditorBrowsableState.Never)]
575 public bool PartialUpdate
579 return IsPartialUpdate();
583 SetPartialUpdate(value);
587 internal static Vector4 DEFAULT_BACKGROUND_COLOR
591 global::System.IntPtr cPtr = Interop.Stage.DefaultBackgroundColorGet();
592 Vector4 ret = (cPtr == global::System.IntPtr.Zero) ? null : new Vector4(cPtr, false);
593 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
598 internal static Vector4 DEBUG_BACKGROUND_COLOR
602 global::System.IntPtr cPtr = Interop.Stage.DebugBackgroundColorGet();
603 Vector4 ret = (cPtr == global::System.IntPtr.Zero) ? null : new Vector4(cPtr, false);
604 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
609 internal List<Layer> LayersChildren
618 /// Get the LayoutController for this Window.
620 internal LayoutController LayoutController
624 return localController;
629 /// Feed a key-event into the window.
631 /// <param name="keyEvent">The key event to feed.</param>
632 /// <since_tizen> 4 </since_tizen>
633 [Obsolete("Do not use this, that will be deprecated. Use FeedKey(Key keyEvent) instead.")]
634 public static void FeedKeyEvent(Key keyEvent)
636 Interop.Window.FeedKeyEvent(Key.getCPtr(keyEvent));
637 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
641 /// Sets whether the window accepts a focus or not.
643 /// <param name="accept">If a focus is accepted or not. The default is true.</param>
644 /// <since_tizen> 3 </since_tizen>
645 public void SetAcceptFocus(bool accept)
647 Interop.Window.SetAcceptFocus(SwigCPtr, accept);
648 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
652 /// Returns whether the window accepts a focus or not.
654 /// <returns>True if the window accepts a focus, false otherwise.</returns>
655 /// <since_tizen> 3 </since_tizen>
656 public bool IsFocusAcceptable()
658 bool ret = Interop.Window.IsFocusAcceptable(SwigCPtr);
659 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
665 /// Shows the window if it is hidden.
667 /// <since_tizen> 3 </since_tizen>
670 Interop.Window.Show(SwigCPtr);
671 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
675 /// Hides the window if it is showing.
677 /// <since_tizen> 3 </since_tizen>
680 Interop.Window.Hide(SwigCPtr);
681 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
685 /// Retrieves whether the window is visible or not.
687 /// <returns>True if the window is visible.</returns>
688 /// <since_tizen> 3 </since_tizen>
689 public bool IsVisible()
691 bool temp = Interop.Window.IsVisible(SwigCPtr);
692 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
697 /// Gets the count of supported auxiliary hints of the window.
699 /// <returns>The number of supported auxiliary hints.</returns>
700 /// <since_tizen> 3 </since_tizen>
701 public uint GetSupportedAuxiliaryHintCount()
703 uint ret = Interop.Window.GetSupportedAuxiliaryHintCount(SwigCPtr);
704 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
709 /// Gets the supported auxiliary hint string of the window.
711 /// <param name="index">The index of the supported auxiliary hint lists.</param>
712 /// <returns>The auxiliary hint string of the index.</returns>
713 /// <since_tizen> 3 </since_tizen>
714 public string GetSupportedAuxiliaryHint(uint index)
716 string ret = Interop.Window.GetSupportedAuxiliaryHint(SwigCPtr, index);
717 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
722 /// Creates an auxiliary hint of the window.
724 /// <param name="hint">The auxiliary hint string.</param>
725 /// <param name="value">The value string.</param>
726 /// <returns>The ID of created auxiliary hint, or 0 on failure.</returns>
727 /// <since_tizen> 3 </since_tizen>
728 public uint AddAuxiliaryHint(string hint, string value)
730 uint ret = Interop.Window.AddAuxiliaryHint(SwigCPtr, hint, value);
731 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
736 /// Removes an auxiliary hint of the window.
738 /// <param name="id">The ID of the auxiliary hint.</param>
739 /// <returns>True if no error occurred, false otherwise.</returns>
740 /// <since_tizen> 3 </since_tizen>
741 public bool RemoveAuxiliaryHint(uint id)
743 bool ret = Interop.Window.RemoveAuxiliaryHint(SwigCPtr, id);
744 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
749 /// Changes a value of the auxiliary hint.
751 /// <param name="id">The auxiliary hint ID.</param>
752 /// <param name="value">The value string to be set.</param>
753 /// <returns>True if no error occurred, false otherwise.</returns>
754 /// <since_tizen> 3 </since_tizen>
755 public bool SetAuxiliaryHintValue(uint id, string value)
757 bool ret = Interop.Window.SetAuxiliaryHintValue(SwigCPtr, id, value);
758 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
763 /// Gets a value of the auxiliary hint.
765 /// <param name="id">The auxiliary hint ID.</param>
766 /// <returns>The string value of the auxiliary hint ID, or an empty string if none exists.</returns>
767 /// <since_tizen> 3 </since_tizen>
768 public string GetAuxiliaryHintValue(uint id)
770 string ret = Interop.Window.GetAuxiliaryHintValue(SwigCPtr, id);
771 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
776 /// Gets an ID of the auxiliary hint string.
778 /// <param name="hint">The auxiliary hint string.</param>
779 /// <returns>The ID of auxiliary hint string, or 0 on failure.</returns>
780 /// <since_tizen> 3 </since_tizen>
781 public uint GetAuxiliaryHintId(string hint)
783 uint ret = Interop.Window.GetAuxiliaryHintId(SwigCPtr, hint);
784 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
789 /// Sets a region to accept input events.
791 /// <param name="inputRegion">The region to accept input events.</param>
792 /// <since_tizen> 3 </since_tizen>
793 public void SetInputRegion(Rectangle inputRegion)
795 Interop.Window.SetInputRegion(SwigCPtr, Rectangle.getCPtr(inputRegion));
796 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
800 /// Sets a priority level for the specified notification window.
802 /// <param name="level">The notification window level.</param>
803 /// <returns>True if no error occurred, false otherwise.</returns>
804 /// <since_tizen> 3 </since_tizen>
805 public bool SetNotificationLevel(NotificationLevel level)
807 var ret = (OperationResult)Interop.Window.SetNotificationLevel(SwigCPtr, (int)level);
808 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
809 return ret == OperationResult.Succeed;
813 /// Gets a priority level for the specified notification window.
815 /// <returns>The notification window level.</returns>
816 /// <since_tizen> 3 </since_tizen>
817 public NotificationLevel GetNotificationLevel()
819 NotificationLevel ret = (NotificationLevel)Interop.Window.GetNotificationLevel(SwigCPtr);
820 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
825 /// Sets a transparent window's visual state to opaque. <br />
826 /// If a visual state of a transparent window is opaque, <br />
827 /// then the window manager could handle it as an opaque window when calculating visibility.
829 /// <param name="opaque">Whether the window's visual state is opaque.</param>
830 /// <remarks>This will have no effect on an opaque window. <br />
831 /// It doesn't change transparent window to opaque window but lets the window manager know the visual state of the window.
833 /// <since_tizen> 3 </since_tizen>
834 public void SetOpaqueState(bool opaque)
836 Interop.Window.SetOpaqueState(SwigCPtr, opaque);
837 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
841 /// Returns whether a transparent window's visual state is opaque or not.
843 /// <returns>True if the window's visual state is opaque, false otherwise.</returns>
844 /// <remarks> The return value has no meaning on an opaque window. </remarks>
845 /// <since_tizen> 3 </since_tizen>
846 public bool IsOpaqueState()
848 bool ret = Interop.Window.IsOpaqueState(SwigCPtr);
849 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
854 /// Sets a window's screen off mode.
856 /// <param name="screenOffMode">The screen mode.</param>
857 /// <returns>True if no error occurred, false otherwise.</returns>
858 /// <since_tizen> 4 </since_tizen>
859 public bool SetScreenOffMode(ScreenOffMode screenOffMode)
861 var ret = (OperationResult)Interop.Window.SetScreenOffMode(SwigCPtr, (int)screenOffMode);
862 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
863 return ret == OperationResult.Succeed;
867 /// Gets the screen mode of the window.
869 /// <returns>The screen off mode.</returns>
870 /// <since_tizen> 4 </since_tizen>
871 public ScreenOffMode GetScreenOffMode()
873 ScreenOffMode ret = (ScreenOffMode)Interop.Window.GetScreenOffMode(SwigCPtr);
874 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
879 /// Sets preferred brightness of the window.
881 /// <param name="brightness">The preferred brightness (0 to 100).</param>
882 /// <returns>True if no error occurred, false otherwise.</returns>
883 /// <since_tizen> 3 </since_tizen>
884 public bool SetBrightness(int brightness)
886 var ret = (OperationResult)Interop.Window.SetBrightness(SwigCPtr, brightness);
887 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
888 return ret == OperationResult.Succeed;
892 /// Gets the preferred brightness of the window.
894 /// <returns>The preferred brightness.</returns>
895 /// <since_tizen> 3 </since_tizen>
896 public int GetBrightness()
898 int ret = Interop.Window.GetBrightness(SwigCPtr);
899 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
904 /// Sets the window name and the class string.
906 /// <param name="name">The name of the window.</param>
907 /// <param name="klass">The class of the window.</param>
908 /// <since_tizen> 4 </since_tizen>
909 public void SetClass(string name, string klass)
911 Interop.Window.SetClass(SwigCPtr, name, klass);
912 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
916 /// Raises the window to the top of the window stack.
918 /// <since_tizen> 3 </since_tizen>
921 Interop.Window.Raise(SwigCPtr);
922 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
926 /// Lowers the window to the bottom of the window stack.
928 /// <since_tizen> 3 </since_tizen>
931 Interop.Window.Lower(SwigCPtr);
932 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
936 /// Activates the window to the top of the window stack even it is iconified.
938 /// <since_tizen> 3 </since_tizen>
939 public void Activate()
941 Interop.Window.Activate(SwigCPtr);
942 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
946 /// Gets the default ( root ) layer.
948 /// <returns>The root layer.</returns>
949 /// <since_tizen> 3 </since_tizen>
950 public Layer GetDefaultLayer()
952 return this.GetRootLayer();
956 /// Gets the overlay layer.
958 /// <returns>The overlay layer.</returns>
959 [EditorBrowsable(EditorBrowsableState.Never)]
960 public Layer GetOverlayLayer()
962 // Window.IsInstalled() is actually true only when called from event thread and
963 // Core has been initialized, not when Stage is ready.
964 if (overlayLayer == null && Window.IsInstalled())
966 overlayLayer = new Layer(Interop.Window.GetOverlayLayer(SwigCPtr), true);
967 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
968 LayersChildren?.Add(overlayLayer);
969 overlayLayer.SetWindow(this);
975 /// Add a child view to window.
977 /// <param name="view">the child should be added to the window.</param>
978 /// <since_tizen> 3 </since_tizen>
979 public void Add(View view)
981 this.GetRootLayer().Add(view);
985 /// Remove a child view from window.
987 /// <param name="view">the child to be removed.</param>
988 /// <since_tizen> 3 </since_tizen>
989 public void Remove(View view)
991 this.GetRootLayer().Remove(view);
995 /// Retrieves the layer at a specified depth.
997 /// <param name="depth">The layer's depth index.</param>
998 /// <returns>The layer found at the given depth.</returns>
999 /// <since_tizen> 3 </since_tizen>
1000 public Layer GetLayer(uint depth)
1002 if (depth < LayersChildren?.Count)
1004 Layer ret = LayersChildren?[Convert.ToInt32(depth)];
1014 /// Destroy the window immediately.
1016 [EditorBrowsable(EditorBrowsableState.Never)]
1017 public void Destroy()
1023 /// Keep rendering for at least the given amount of time.
1025 /// <param name="durationSeconds">Time to keep rendering, 0 means render at least one more frame.</param>
1026 /// <since_tizen> 3 </since_tizen>
1027 public void KeepRendering(float durationSeconds)
1029 Interop.Window.KeepRendering(SwigCPtr, durationSeconds);
1030 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1034 /// Grabs the key specified by a key for a window only when a window is the topmost window.<br />
1035 /// This function can be used for following example scenarios: <br />
1036 /// - Mobile - Using volume up or down as zoom up or down in camera apps.<br />
1038 /// <param name="DaliKey">The key code to grab.</param>
1039 /// <returns>True if the grab succeeds.</returns>
1040 /// <since_tizen> 3 </since_tizen>
1041 public bool GrabKeyTopmost(int DaliKey)
1043 bool ret = Interop.Window.GrabKeyTopmost(HandleRef.ToIntPtr(this.SwigCPtr), DaliKey);
1044 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1049 /// Ungrabs the key specified by a key for the window.<br />
1050 /// Note: If this function is called between key down and up events of a grabbed key, an application doesn't receive the key up event.<br />
1052 /// <param name="DaliKey">The key code to ungrab.</param>
1053 /// <returns>True if the ungrab succeeds.</returns>
1054 /// <since_tizen> 3 </since_tizen>
1055 public bool UngrabKeyTopmost(int DaliKey)
1057 bool ret = Interop.Window.UngrabKeyTopmost(HandleRef.ToIntPtr(this.SwigCPtr), DaliKey);
1058 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1063 /// Grabs the key specified by a key for a window in a GrabMode. <br />
1064 /// Details: This function can be used for following example scenarios: <br />
1065 /// - TV - A user might want to change the volume or channel of the background TV contents while focusing on the foregrund app. <br />
1066 /// - Mobile - When a user presses the Home key, the homescreen appears regardless of the current foreground app. <br />
1067 /// - Mobile - Using the volume up or down as zoom up or down in camera apps. <br />
1069 /// <param name="DaliKey">The key code to grab.</param>
1070 /// <param name="GrabMode">The grab mode for the key.</param>
1071 /// <returns>True if the grab succeeds.</returns>
1072 /// <since_tizen> 3 </since_tizen>
1073 public bool GrabKey(int DaliKey, KeyGrabMode GrabMode)
1075 bool ret = Interop.Window.GrabKey(HandleRef.ToIntPtr(this.SwigCPtr), DaliKey, (int)GrabMode);
1076 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1081 /// Ungrabs the key specified by a key for a window.<br />
1082 /// Note: If this function is called between key down and up events of a grabbed key, an application doesn't receive the key up event. <br />
1084 /// <param name="DaliKey">The key code to ungrab.</param>
1085 /// <returns>True if the ungrab succeeds.</returns>
1086 /// <since_tizen> 3 </since_tizen>
1087 public bool UngrabKey(int DaliKey)
1089 bool ret = Interop.Window.UngrabKey(HandleRef.ToIntPtr(this.SwigCPtr), DaliKey);
1090 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1095 /// Sets the keyboard repeat information.
1097 /// <param name="rate">The key repeat rate value in seconds.</param>
1098 /// <param name="delay">The key repeat delay value in seconds.</param>
1099 /// <returns>True if setting the keyboard repeat succeeds.</returns>
1100 /// <since_tizen> 5 </since_tizen>
1101 public bool SetKeyboardRepeatInfo(float rate, float delay)
1103 bool ret = Interop.Window.SetKeyboardRepeatInfo(rate, delay);
1104 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1109 /// Gets the keyboard repeat information.
1111 /// <param name="rate">The key repeat rate value in seconds.</param>
1112 /// <param name="delay">The key repeat delay value in seconds.</param>
1113 /// <returns>True if setting the keyboard repeat succeeds.</returns>
1114 /// <since_tizen> 5 </since_tizen>
1115 public bool GetKeyboardRepeatInfo(out float rate, out float delay)
1117 bool ret = Interop.Window.GetKeyboardRepeatInfo(out rate, out delay);
1118 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1123 /// Adds a layer to the stage.
1125 /// <param name="layer">Layer to add.</param>
1126 /// <exception cref="ArgumentNullException"> Thrown when layer is null. </exception>
1127 /// <since_tizen> 3 </since_tizen>
1128 public void AddLayer(Layer layer)
1134 /// Removes a layer from the stage.
1136 /// <param name="layer">Layer to remove.</param>
1137 /// <exception cref="ArgumentNullException"> Thrown when layer is null. </exception>
1138 /// <since_tizen> 3 </since_tizen>
1139 public void RemoveLayer(Layer layer)
1145 /// Feeds a key event into the window.
1147 /// <param name="keyEvent">The key event to feed.</param>
1148 /// <since_tizen> 5 </since_tizen>
1149 public void FeedKey(Key keyEvent)
1151 Interop.Window.FeedKeyEvent(SwigCPtr, Key.getCPtr(keyEvent));
1152 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1156 /// Feeds a hover event into the window. <br />
1157 /// This is feed after a default time of 48 ms. You can also set this time.
1159 /// <param name="time">The time of how much later it will be feed (default is 48ms)</param>
1160 /// <remarks>If you want to do FeedHover after the UI is updated, it is recommended to set the time to at least 16ms. This will be a good time waiting for the UI to update.<br />
1161 /// and LazyFeedHover called within the set time are ignored. Only the last request becomes a FeedHover.
1163 [EditorBrowsable(EditorBrowsableState.Never)]
1164 public void LazyFeedHover(uint time = 48)
1166 if (internalHoverTimer == null)
1168 internalHoverTimer = new Timer(time);
1169 internalHoverTimer.Tick += (s, e) =>
1172 internalHoverTimer?.Stop();
1173 internalHoverTimer?.Dispose();
1174 internalHoverTimer = null;
1177 internalHoverTimer.Start();
1181 internalHoverTimer.Start();
1186 /// Feeds a touch point into the window.
1188 /// <param name="touchPoint">The touch point to feed.</param>
1189 /// <param name="timeStamp">The timeStamp.</param>
1190 internal void FeedTouch(TouchPoint touchPoint, int timeStamp)
1192 Interop.Window.FeedTouchPoint(SwigCPtr, TouchPoint.getCPtr(touchPoint), timeStamp);
1193 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1197 /// Feeds a wheel event into the window.
1199 /// <param name="wheelEvent">The wheel event to feed.</param>
1200 internal void FeedWheel(Wheel wheelEvent)
1202 Interop.Window.FeedWheelEvent(SwigCPtr, Wheel.getCPtr(wheelEvent));
1203 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1207 /// Feeds a hover event into the window.
1209 /// <param name="touchPoint">The touch point to feed hover event. If null is entered, the feed hover event is generated with the last inputed touch point.</param>
1210 [EditorBrowsable(EditorBrowsableState.Never)]
1211 internal void FeedHover(TouchPoint touchPoint = null)
1213 if (touchPoint == null)
1215 using Touch touch = GetLastTouchEvent();
1216 using Vector2 screenPosition = touch.GetScreenPosition(0);
1217 touchPoint = new TouchPoint(touch.GetDeviceId(0), TouchPoint.StateType.Motion, screenPosition.X, screenPosition.Y);
1219 Interop.Window.FeedHoverEvent(SwigCPtr, TouchPoint.getCPtr(touchPoint));
1220 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1224 /// Allows at least one more render, even when paused.
1225 /// The window should be shown, not minimised.
1227 /// <since_tizen> 4 </since_tizen>
1228 public void RenderOnce()
1230 Interop.Window.RenderOnce(SwigCPtr);
1231 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1235 /// Sets whether the window is transparent or not.
1237 /// <param name="transparent">Whether the window is transparent or not.</param>
1238 /// <since_tizen> 5 </since_tizen>
1239 public void SetTransparency(bool transparent)
1241 Interop.Window.SetTransparency(SwigCPtr, transparent);
1242 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1244 // Setting transparency of the window should request a relayout of the tree in the case the window changes from fully transparent.
1248 /// Sets parent window of the window.
1249 /// After setting that, these windows do together when raise-up, lower and iconified/deiconified.
1250 /// Initially, the window is located on top of the parent. The window can go below parent by calling Lower().
1251 /// If parent's window stack is changed by calling Raise() or Lower(), child windows are located on top of the parent again.
1253 /// <param name="parent">The parent window.</param>
1254 /// <since_tizen> 6 </since_tizen>
1255 /// <feature> http://tizen.org/feature/opengles.surfaceless_context </feature>
1256 /// <exception cref="NotSupportedException">The required feature is not supported.</exception>
1257 public void SetParent(Window parent)
1259 if (IsSupportedMultiWindow() == false)
1261 NUILog.Error("This device does not support surfaceless_context. So Window cannot be created. ");
1263 Interop.Window.SetParent(SwigCPtr, Window.getCPtr(parent));
1264 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1268 /// Sets parent window of the window.
1269 /// After setting that, these windows do together when raise-up, lower and iconified/deiconified.
1270 /// This function has the additional flag whether the child is located above or below of the parent.
1272 /// <param name="parent">The parent window.</param>
1273 /// <param name="belowParent">The flag is whether the child is located above or below of the parent.</param>
1274 /// <feature> http://tizen.org/feature/opengles.surfaceless_context </feature>
1275 /// <exception cref="NotSupportedException">The required feature is not supported.</exception>
1276 [EditorBrowsable(EditorBrowsableState.Never)]
1277 public void SetParent(Window parent, bool belowParent)
1279 if (IsSupportedMultiWindow() == false)
1281 NUILog.Error("This device does not support surfaceless_context. So Window cannot be created. ");
1283 Interop.Window.SetParentWithStack(SwigCPtr, Window.getCPtr(parent), belowParent);
1284 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1288 /// Unsets parent window of the window.
1289 /// After unsetting, the window is disconnected his parent window.
1291 /// <since_tizen> 6 </since_tizen>
1292 /// <feature> http://tizen.org/feature/opengles.surfaceless_context </feature>
1293 /// <exception cref="NotSupportedException">The required feature is not supported.</exception>
1294 public void Unparent()
1296 if (IsSupportedMultiWindow() == false)
1298 NUILog.Error("Fail to create window. because this device does not support opengles.surfaceless_context.");
1300 Interop.Window.Unparent(SwigCPtr);
1301 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1305 /// Gets parent window of the window.
1307 /// <returns>The parent window of the window.</returns>
1308 /// <since_tizen> 6 </since_tizen>
1309 /// <feature> http://tizen.org/feature/opengles.surfaceless_context </feature>
1310 /// <exception cref="NotSupportedException">The required feature is not supported.</exception>
1311 [System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1721: Property names should not match get methods")]
1312 public Window GetParent()
1314 if (IsSupportedMultiWindow() == false)
1316 NUILog.Error("This device does not support surfaceless_context. So Window cannot be created. ");
1318 Window ret = this.GetInstanceSafely<Window>(Interop.Window.GetParent(SwigCPtr));
1319 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1323 /// This will be public opened in tizen_next after ACR done. Before ACR, need to be hidden as inhouse API.
1324 [EditorBrowsable(EditorBrowsableState.Never)]
1325 public void ObjectDump()
1327 Layer rootLayer = GetRootLayer();
1328 foreach (View view in rootLayer.Children)
1334 internal static bool IsInstalled()
1336 bool ret = Interop.Stage.IsInstalled();
1337 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1342 /// Adds an orientation to the list of available orientations.
1344 /// <param name="orientation">The available orientation to add</param>
1345 /// <since_tizen> 6 </since_tizen>
1346 public void AddAvailableOrientation(Window.WindowOrientation orientation)
1348 Interop.Window.AddAvailableOrientation(SwigCPtr, (int)orientation);
1349 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1353 /// Removes an orientation from the list of available orientations.
1355 /// <param name="orientation">The available orientation to remove.</param>
1356 /// <since_tizen> 6 </since_tizen>
1357 public void RemoveAvailableOrientation(Window.WindowOrientation orientation)
1359 Interop.Window.RemoveAvailableOrientation(SwigCPtr, (int)orientation);
1360 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1364 /// Sets a preferred orientation.
1366 /// <param name="orientation">The preferred orientation.</param>
1367 /// <since_tizen> 6 </since_tizen>
1368 public void SetPreferredOrientation(Window.WindowOrientation orientation)
1370 Interop.Window.SetPreferredOrientation(SwigCPtr, (int)orientation);
1371 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1375 /// Gets the preferred orientation.
1377 /// <since_tizen> 6 </since_tizen>
1378 /// <returns>The preferred orientation if previously set, or none.</returns>
1379 public Window.WindowOrientation GetPreferredOrientation()
1381 Window.WindowOrientation ret = (Window.WindowOrientation)Interop.Window.GetPreferredOrientation(SwigCPtr);
1382 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1387 /// Gets current orientation of the window.
1389 /// <since_tizen> 6 </since_tizen>
1390 /// <returns>The current window orientation if previously set, or none.</returns>
1391 [EditorBrowsable(EditorBrowsableState.Never)]
1392 public Window.WindowOrientation GetCurrentOrientation()
1394 Window.WindowOrientation ret = (Window.WindowOrientation)Interop.Window.GetCurrentOrientation(SwigCPtr);
1395 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1400 /// Sets available orientations of the window.
1401 /// This API is for setting several orientations one time.
1403 /// <param name="orientations">The list of orientations.</param>
1404 /// <since_tizen> 6 </since_tizen>
1405 [EditorBrowsable(EditorBrowsableState.Never)]
1406 public void SetAvailableOrientations(List<Window.WindowOrientation> orientations)
1408 if (null == orientations)
1410 throw new ArgumentNullException(nameof(orientations));
1413 PropertyArray orientationArray = new PropertyArray();
1414 for (int i = 0; i < orientations.Count; i++)
1416 PropertyValue value = new PropertyValue((int)orientations[i]);
1417 orientationArray.PushBack(value);
1421 Interop.Window.SetAvailableOrientations(SwigCPtr, PropertyArray.getCPtr(orientationArray), orientations.Count);
1422 orientationArray.Dispose();
1423 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1427 /// Get native window ID
1429 /// <returns>native window ID</returns>
1430 [EditorBrowsable(EditorBrowsableState.Never)]
1431 public int GetNativeId()
1433 int ret = Interop.Window.GetNativeId(SwigCPtr);
1434 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1438 internal Any GetNativeHandle()
1440 Any ret = new Any(Interop.WindowInternal.WindowGetNativeHandle(SwigCPtr), true);
1441 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1445 internal void Add(Layer layer)
1449 throw new ArgumentNullException(nameof(layer));
1454 Interop.Actor.Add(GetRootLayer().SwigCPtr, layer.SwigCPtr);
1455 if (NDalicPINVOKE.SWIGPendingException.Pending) { throw NDalicPINVOKE.SWIGPendingException.Retrieve(); }
1459 Interop.Window.Add(SwigCPtr, Layer.getCPtr(layer));
1460 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1463 LayersChildren?.Add(layer);
1464 layer.SetWindow(this);
1467 internal void Remove(Layer layer)
1471 throw new ArgumentNullException(nameof(layer));
1473 Interop.Window.Remove(SwigCPtr, Layer.getCPtr(layer));
1474 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1476 LayersChildren?.Remove(layer);
1477 layer.SetWindow(null);
1480 internal Vector2 GetSize()
1482 var val = new Uint16Pair(Interop.Window.GetSize(SwigCPtr), true);
1484 convertRealWindowSizeToBorderWindowSize(val);
1486 Vector2 ret = new Vector2(val.GetWidth(), val.GetHeight());
1487 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1492 /// This will be public opened in next tizen after ACR done. Before ACR, need to be hidden as inhouse API.
1493 [EditorBrowsable(EditorBrowsableState.Never)]
1494 public RenderTaskList GetRenderTaskList()
1496 RenderTaskList ret = new RenderTaskList(Interop.Stage.GetRenderTaskList(stageCPtr), true);
1497 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1502 /// Queries the number of on-window layers.
1504 /// <returns>The number of layers.</returns>
1505 /// <remarks>Note that a default layer is always provided (count >= 1).</remarks>
1506 internal uint GetLayerCount()
1508 if (LayersChildren == null || LayersChildren.Count < 0)
1511 return (uint)LayersChildren.Count;
1514 internal Layer GetRootLayer()
1518 if (borderLayer == null)
1520 borderLayer = GetBorderWindowRootLayer();
1521 LayersChildren?.Add(borderLayer);
1522 borderLayer.SetWindow(this);
1528 // Window.IsInstalled() is actually true only when called from event thread and
1529 // Core has been initialized, not when Stage is ready.
1530 if (rootLayer == null && Window.IsInstalled())
1532 rootLayer = new Layer(Interop.Window.GetRootLayer(SwigCPtr), true);
1533 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1534 LayersChildren?.Add(rootLayer);
1535 rootLayer.SetWindow(this);
1541 internal void SetBackgroundColor(Vector4 color)
1543 Interop.Window.SetBackgroundColor(SwigCPtr, Vector4.getCPtr(color));
1544 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1547 internal Vector4 GetBackgroundColor()
1549 Vector4 ret = new Vector4(Interop.Window.GetBackgroundColor(SwigCPtr), true);
1550 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1554 internal Vector2 GetDpi()
1556 Vector2 ret = new Vector2(Interop.Stage.GetDpi(stageCPtr), true);
1557 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1561 internal ObjectRegistry GetObjectRegistry()
1563 ObjectRegistry ret = new ObjectRegistry(Interop.Stage.GetObjectRegistry(stageCPtr), true);
1564 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1568 internal void SetRenderingBehavior(RenderingBehaviorType renderingBehavior)
1570 Interop.Stage.SetRenderingBehavior(stageCPtr, (int)renderingBehavior);
1571 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1574 internal RenderingBehaviorType GetRenderingBehavior()
1576 RenderingBehaviorType ret = (RenderingBehaviorType)Interop.Stage.GetRenderingBehavior(stageCPtr);
1577 if (NDalicPINVOKE.SWIGPendingException.Pending)
1578 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1582 internal void SetWindowSize(Size2D size)
1586 throw new ArgumentNullException(nameof(size));
1588 var val = new Uint16Pair((uint)size.Width, (uint)size.Height);
1590 convertBorderWindowSizeToRealWindowSize(val);
1592 Interop.Window.SetSize(SwigCPtr, Uint16Pair.getCPtr(val));
1594 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1595 // Resetting Window size should request a relayout of the tree.
1598 internal Size2D GetWindowSize()
1600 var val = new Uint16Pair(Interop.Window.GetSize(SwigCPtr), true);
1602 convertRealWindowSizeToBorderWindowSize(val);
1604 Size2D ret = new Size2D(val.GetWidth(), val.GetHeight());
1605 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1610 internal void SetPosition(Position2D position)
1612 if (null == position)
1614 throw new ArgumentNullException(nameof(position));
1616 var val = new Int32Pair(position.X, position.Y);
1617 Interop.Window.SetPosition(SwigCPtr, Int32Pair.getCPtr(val));
1619 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1620 // Setting Position of the window should request a relayout of the tree.
1623 internal Position2D GetPosition()
1625 var val = new Int32Pair(Interop.Window.GetPosition(SwigCPtr), true);
1626 Position2D ret = new Position2D((int)val.GetX(), (int)val.GetY());
1628 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1632 internal void SetPositionSize(Rectangle positionSize)
1634 if (positionSize == null)
1636 throw new ArgumentNullException(nameof(positionSize));
1638 var val = new Uint16Pair((uint)positionSize.Width, (uint)positionSize.Height);
1640 convertBorderWindowSizeToRealWindowSize(val);
1642 positionSize.Width = val.GetX();
1643 positionSize.Height = val.GetY();
1645 Interop.Window.SetPositionSize(SwigCPtr, Rectangle.getCPtr(positionSize));
1648 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1650 // Setting Position of the window should request a relayout of the tree.
1654 /// Set the window use partial update or not.
1656 /// <param name="enabled">If window enable partial update or disable.</param>
1657 internal void SetPartialUpdate(bool enabled)
1659 Interop.Window.SetPartialUpdateEnabled(SwigCPtr, enabled);
1660 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1664 /// Returns whether the window is enabled partial update or not.
1666 /// <returns>True if the window is enabled partial update, false otherwise.</returns>
1667 internal bool IsPartialUpdate()
1669 bool ret = Interop.Window.IsPartialUpdateEnabled(SwigCPtr);
1670 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1675 /// Enables the floating mode of window.
1676 /// The floating mode is to support window is moved or resized by display server.
1677 /// For example, if the video-player window sets the floating mode,
1678 /// then display server changes its geometry and handles it like a popup.
1679 /// The way of handling floating mode window is decided by display server.
1680 /// A special display server(as a Tizen display server) supports this mode.
1682 /// <param name="enable">Enable floating mode or not.</param>
1683 [EditorBrowsable(EditorBrowsableState.Never)]
1684 public void EnableFloatingMode(bool enable)
1686 Interop.Window.EnableFloatingMode(SwigCPtr, enable);
1687 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1691 /// Requests to display server for the window is moved by display server.
1692 /// It can be work with setting window floating mode.
1694 [EditorBrowsable(EditorBrowsableState.Never)]
1695 public void RequestMoveToServer()
1697 Interop.Window.RequestMoveToServer(SwigCPtr);
1698 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1702 /// Requests to display server for the window is resized by display server.
1703 /// It can be work with setting window floating mode.
1705 /// <param name="direction">It is indicated the window's side or edge for starting point.</param>
1706 [EditorBrowsable(EditorBrowsableState.Never)]
1707 public void RequestResizeToServer(ResizeDirection direction)
1709 Interop.Window.RequestResizeToServer(SwigCPtr, (int)direction);
1710 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1714 /// Includes input region.
1715 /// This function inlcudes input regions.
1716 /// It can be used multiple times and supports multiple regions.
1717 /// It means input region will be extended.
1718 /// This input is related to mouse and touch event.
1719 /// If device has touch screen, this function is useful.
1720 /// Otherwise device does not have that, we can use it after connecting mouse to the device.
1722 /// <param name="inputRegion">The included region to accept input events.</param>
1723 [EditorBrowsable(EditorBrowsableState.Never)]
1724 public void IncludeInputRegion(Rectangle inputRegion)
1726 Interop.Window.IncludeInputRegion(SwigCPtr, Rectangle.getCPtr(inputRegion));
1727 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1731 /// This function excludes input regions.
1732 /// It can be used multiple times and supports multiple regions.
1733 /// It means input region will be reduced.
1734 /// Nofice, should be set input area by IncludeInputRegion() before this function is used.
1735 /// This input is related to mouse and touch event.
1736 /// If device has touch screen, this function is useful.
1737 /// Otherwise device does not have that, we can use it after connecting mouse to the device.
1739 /// <param name="inputRegion">The excluded region to except input events.</param>
1740 [EditorBrowsable(EditorBrowsableState.Never)]
1741 public void ExcludeInputRegion(Rectangle inputRegion)
1743 Interop.Window.ExcludeInputRegion(SwigCPtr, Rectangle.getCPtr(inputRegion));
1744 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1748 /// Maximizes window's size.
1749 /// If this function is called with true, window will be resized with screen size.
1750 /// Otherwise window will be resized with previous size.
1751 /// It is for the window's MAX button in window's border.
1752 /// If window border is supported by display server, it is not necessary.
1754 /// <param name="max">If window is maximized or unmaximized.</param>
1755 [EditorBrowsable(EditorBrowsableState.Never)]
1756 public void Maximize(bool max)
1758 Interop.Window.Maximize(SwigCPtr, max);
1759 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1763 /// Returns whether the window is maximized or not.
1765 /// <returns>True if the window is maximized, false otherwise.</returns>
1766 [EditorBrowsable(EditorBrowsableState.Never)]
1767 public bool IsMaximized()
1769 bool ret = Interop.Window.IsMaximized(SwigCPtr);
1770 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1775 /// Sets window's maximum size.
1777 /// It is to set the maximized size when window is maximized or the window's size is increased by RequestResizeToServer().
1778 /// Although the size is set by this function, window's size can be increased over the limitation by SetPositionSize() or SetSize().
1780 /// After setting, if Maximize() is called, window is resized with the setting size and move the center.
1783 /// <param name="size">the maximum size.</param>
1784 [EditorBrowsable(EditorBrowsableState.Never)]
1785 public void SetMaximumSize(Size2D size)
1789 throw new ArgumentNullException(nameof(size));
1791 var val = new Uint16Pair((uint)size.Width, (uint)size.Height);
1793 Interop.Window.SetMaximumSize(SwigCPtr, Uint16Pair.getCPtr(val));
1795 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1799 /// Minimizes window's size.
1800 /// If this function is called with true, window will be iconified.
1801 /// Otherwise window will be activated.
1802 /// It is for the window's MIN button in window border.
1803 /// If window border is supported by display server, it is not necessary.
1805 /// <param name="min">If window is minimized or unminimized.</param>
1806 [EditorBrowsable(EditorBrowsableState.Never)]
1807 public void Minimize(bool min)
1809 Interop.Window.Minimize(SwigCPtr, min);
1810 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1814 /// Returns whether the window is minimized or not.
1816 /// <returns>True if the window is minimized, false otherwise.</returns>
1817 [EditorBrowsable(EditorBrowsableState.Never)]
1818 public bool IsMinimized()
1820 bool ret = Interop.Window.IsMinimized(SwigCPtr);
1821 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1826 /// Sets window's minimum size.
1827 /// It is to set the minimum size when window's size is decreased by RequestResizeToServer().
1828 /// Although the size is set by this function, window's size can be decreased over the limitation by SetPositionSize() or SetSize().
1830 /// <param name="size">the minimum size.</param>
1831 [EditorBrowsable(EditorBrowsableState.Never)]
1832 public void SetMimimumSize(Size2D size)
1836 throw new ArgumentNullException(nameof(size));
1838 var val = new Uint16Pair((uint)size.Width, (uint)size.Height);
1840 Interop.Window.SetMimimumSize(SwigCPtr, Uint16Pair.getCPtr(val));
1842 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1846 /// Sets the layout of the window.
1848 /// <param name="numCols">The number of columns in the layout.</param>
1849 /// <param name="numRows">The number of rows in the layout.</param>
1850 /// <param name="column">The column number of the window within the layout.</param>
1851 /// <param name="row">The row number of the window within the layout.</param>
1852 /// <param name="colSpan">The number of columns the window should span within the layout.</param>
1853 /// <param name="rowSpan">The number of rows the window should span within the layout.</param>
1854 [EditorBrowsable(EditorBrowsableState.Never)]
1855 public void SetLayout(uint numCols, uint numRows, uint column, uint row, uint colSpan, uint rowSpan)
1857 Interop.Window.SetLayout(SwigCPtr, numCols, numRows, column, row, colSpan, rowSpan);
1858 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1863 /// Sets the layout of the window.
1865 /// <param name="layoutType">The type of layout to set for the window.</param>
1866 [EditorBrowsable(EditorBrowsableState.Never)]
1867 public void SetLayout(WindowLayoutType layoutType)
1871 case WindowLayoutType.LeftHalf:
1872 Interop.Window.SetLayout(SwigCPtr, 2, 1, 0, 0, 1, 1);
1874 case WindowLayoutType.RightHalf:
1875 Interop.Window.SetLayout(SwigCPtr, 2, 1, 1, 0, 1, 1);
1878 case WindowLayoutType.TopHalf:
1879 Interop.Window.SetLayout(SwigCPtr, 1, 2, 0, 0, 1, 1);
1881 case WindowLayoutType.BottomHalf:
1882 Interop.Window.SetLayout(SwigCPtr, 1, 2, 0, 1, 1, 1);
1885 case WindowLayoutType.UpperLeftQuarter:
1886 Interop.Window.SetLayout(SwigCPtr, 2, 2, 0, 0, 1, 1);
1888 case WindowLayoutType.UpperRightQuarter:
1889 Interop.Window.SetLayout(SwigCPtr, 2, 2, 1, 0, 1, 1);
1891 case WindowLayoutType.LowerLeftQuarter:
1892 Interop.Window.SetLayout(SwigCPtr, 2, 2, 0, 1, 1, 1);
1894 case WindowLayoutType.LowerRightQuarter:
1895 Interop.Window.SetLayout(SwigCPtr, 2, 2, 1, 1, 1, 1);
1898 case WindowLayoutType.LeftThird:
1899 Interop.Window.SetLayout(SwigCPtr, 3, 1, 0, 0, 1, 1);
1901 case WindowLayoutType.CenterThird:
1902 Interop.Window.SetLayout(SwigCPtr, 3, 1, 1, 0, 1, 1);
1904 case WindowLayoutType.RightThird:
1905 Interop.Window.SetLayout(SwigCPtr, 3, 1, 2, 0, 1, 1);
1908 case WindowLayoutType.TopThird:
1909 Interop.Window.SetLayout(SwigCPtr, 1, 3, 0, 0, 1, 1);
1911 case WindowLayoutType.MiddleThird:
1912 Interop.Window.SetLayout(SwigCPtr, 1, 3, 0, 1, 1, 1);
1914 case WindowLayoutType.BottomThird:
1915 Interop.Window.SetLayout(SwigCPtr, 1, 3, 0, 2, 1, 1);
1918 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1923 /// Query whether window is rotating or not.
1925 /// <returns>True if window is rotating, false otherwise.</returns>
1926 [EditorBrowsable(EditorBrowsableState.Never)]
1927 public bool IsWindowRotating()
1929 bool ret = Interop.Window.IsWindowRotating(SwigCPtr);
1930 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1935 /// Gets the last key event the window gets.
1937 /// <returns>The last key event the window gets.</returns>
1938 [EditorBrowsable(EditorBrowsableState.Never)]
1939 public Key GetLastKeyEvent()
1941 if(internalLastKeyEvent == null)
1943 internalLastKeyEvent = new Key();
1945 Interop.Window.InternalRetrievingLastKeyEvent(SwigCPtr, internalLastKeyEvent.SwigCPtr);
1946 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1947 return internalLastKeyEvent;
1951 /// Gets the last touch event the window gets.
1953 /// <returns>The last touch event the window gets.</returns>
1954 [EditorBrowsable(EditorBrowsableState.Never)]
1955 public Touch GetLastTouchEvent()
1957 if(internalLastTouchEvent == null)
1959 internalLastTouchEvent = new Touch();
1961 Interop.Window.InternalRetrievingLastTouchEvent(SwigCPtr, internalLastTouchEvent.SwigCPtr);
1962 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1963 return internalLastTouchEvent;
1967 /// Sets the necessary for window rotation Acknowledgement.
1968 /// After this function called, SendRotationCompletedAcknowledgement() should be called to complete window rotation.
1970 /// This function is supprot that application has the window rotation acknowledgement's control.
1971 /// It means display server waits when application's rotation work is finished.
1972 /// It is useful application has the other rendering engine which works asynchronous.
1973 /// For instance, GlView.
1975 /// <param name="needAcknowledgement">the flag is true if window rotation acknowledge is sent.</param>
1976 [EditorBrowsable(EditorBrowsableState.Never)]
1977 public void SetNeedsRotationCompletedAcknowledgement(bool needAcknowledgement)
1979 Interop.Window.SetNeedsRotationCompletedAcknowledgement(SwigCPtr, needAcknowledgement);
1980 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1984 /// send the Acknowledgement to complete window rotation.
1985 /// For this function, SetNeedsRotationCompletedAcknowledgement should be already called with true.
1987 [EditorBrowsable(EditorBrowsableState.Never)]
1988 public void SendRotationCompletedAcknowledgement()
1990 Interop.Window.SendRotationCompletedAcknowledgement(SwigCPtr);
1991 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1995 /// Add FrameUpdateCallback
1997 [EditorBrowsable(EditorBrowsableState.Never)]
1998 public void AddFrameUpdateCallback(FrameUpdateCallbackInterface frameUpdateCallback)
2000 frameUpdateCallback?.AddFrameUpdateCallback(stageCPtr, Layer.getCPtr(GetRootLayer()));
2004 /// Remove FrameUpdateCallback
2006 [EditorBrowsable(EditorBrowsableState.Never)]
2007 public void RemoveFrameUpdateCallback(FrameUpdateCallbackInterface frameUpdateCallback)
2009 frameUpdateCallback?.RemoveFrameUpdateCallback(stageCPtr);
2013 /// Dispose for Window
2015 [EditorBrowsable(EditorBrowsableState.Never)]
2016 protected override void Dispose(DisposeTypes type)
2023 this.DisconnectNativeSignals();
2025 if (type == DisposeTypes.Explicit)
2028 //Release your own managed resources here.
2029 //You should release all of your own disposable objects here.
2031 if (IsBorderEnabled)
2036 foreach (var layer in childLayers)
2044 childLayers.Clear();
2046 localController?.Dispose();
2048 internalLastKeyEvent?.Dispose();
2049 internalLastKeyEvent = null;
2050 internalLastTouchEvent?.Dispose();
2051 internalLastTouchEvent = null;
2053 internalHoverTimer?.Stop();
2054 internalHoverTimer?.Dispose();
2055 internalHoverTimer = null;
2062 /// This will not be public opened.
2063 [EditorBrowsable(EditorBrowsableState.Never)]
2064 protected override void ReleaseSwigCPtr(System.Runtime.InteropServices.HandleRef swigCPtr)
2066 Interop.Window.DeleteWindow(swigCPtr);
2069 private static Dictionary<int, internalHookCallbackType> frameCallbackList = new Dictionary<int, internalHookCallbackType>();
2071 private static readonly object locker = new object();
2073 private static int key = 0;
2075 private static FrameCallbackType internalHookFrameCallback = OnInternalHookFrameCallback;
2077 private struct internalHookCallbackType
2079 public FrameCallbackType userCallback;
2083 private static void OnInternalHookFrameCallback(int id)
2087 if (frameCallbackList.ContainsKey(id))
2089 if (frameCallbackList[id].userCallback != null)
2091 frameCallbackList[id].userCallback.Invoke(frameCallbackList[id].frameId);
2092 frameCallbackList.Remove(id);
2096 NUILog.Error($"found userCallback is NULL");
2097 frameCallbackList.Remove(id);
2103 private int AddInterHookCallback(FrameCallbackType callback, int frameId)
2105 if (null == callback)
2107 throw new ArgumentNullException(nameof(callback), "FrameCallbackType should not be null");
2109 var assignedKey = 0;
2114 frameCallbackList.Add(assignedKey, new internalHookCallbackType()
2116 userCallback = callback,
2124 /// Type of callback which is called when the frame rendering is done by graphics driver or when the frame is displayed on display.
2126 /// <param name="frameId">The Id to specify the frame. It will be passed when the callback is called.</param>
2127 [EditorBrowsable(EditorBrowsableState.Never)]
2128 public delegate void FrameCallbackType(int frameId);
2131 /// Adds a callback that is called when the frame rendering is done by the graphics driver.
2132 /// A callback of the following type may be used:
2134 /// void MyFunction( int frameId )
2136 /// This callback will be deleted once it is called.
2138 /// Ownership of the callback is passed onto this class
2141 /// <param name="callback">The function to call</param>
2142 /// <param name="frameId">The Id to specify the frame. It will be passed when the callback is called.</param>
2143 /// <exception cref="ArgumentNullException">This exception can occur by the callback is null.</exception>
2144 [EditorBrowsable(EditorBrowsableState.Never)]
2145 public void AddFrameRenderedCallback(FrameCallbackType callback, int frameId)
2147 var assignedKey = AddInterHookCallback(callback, frameId);
2148 Interop.WindowInternal.AddFrameRenderedCallback(SwigCPtr, new HandleRef(this, Marshal.GetFunctionPointerForDelegate<Delegate>(internalHookFrameCallback)), assignedKey);
2150 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
2154 /// Adds a callback that is called when the frame is displayed on the display.
2155 /// A callback of the following type may be used:
2157 /// void MyFunction( int frameId )
2159 /// This callback will be deleted once it is called.
2161 /// Ownership of the callback is passed onto this class
2164 /// <param name="callback">The function to call</param>
2165 /// <param name="frameId">The Id to specify the frame. It will be passed when the callback is called.</param>
2166 /// <exception cref="ArgumentNullException">This exception can occur by the callback is null.</exception>
2167 [EditorBrowsable(EditorBrowsableState.Never)]
2168 public void AddFramePresentedCallback(FrameCallbackType callback, int frameId)
2170 var assignedKey = AddInterHookCallback(callback, frameId);
2171 Interop.WindowInternal.AddFramePresentedCallback(SwigCPtr, new HandleRef(this, Marshal.GetFunctionPointerForDelegate<Delegate>(internalHookFrameCallback)), assignedKey);
2173 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
2177 /// Search through this Window for a Layer with the given unique ID.
2179 /// <param name="id">The ID of the Layer to find.</param>
2180 /// <remarks>Hidden-API</remarks>
2181 /// <returns>A handle to the Layer if found, or an empty handle if not.</returns>
2182 [EditorBrowsable(EditorBrowsableState.Never)]
2183 public Layer FindLayerByID(uint id)
2185 Layer defaultLayer = this.GetDefaultLayer();
2186 IntPtr cPtr = Interop.Actor.FindChildById(defaultLayer.SwigCPtr, id);
2187 Layer ret = this.GetInstanceSafely<Layer>(cPtr);
2189 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
2194 /// Get Native Window handle.
2196 /// How to get Native Window handle
2198 /// Window window = NUIApplication.GetDefaultWindow();
2199 /// var handle = window.NativeHandle;
2200 /// if(handle.IsInvalid == false)
2202 /// IntPtr nativeHandle = handle.DangerousGetHandle();
2203 /// // do something with nativeHandle
2208 /// <since_tizen> 9 </since_tizen>
2209 public SafeHandle NativeHandle
2213 return new NUI.SafeNativeWindowHandle(this);