/* * Copyright(c) 2018 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ using System; using System.Runtime.InteropServices; using Tizen.NUI.BaseComponents; using System.ComponentModel; using System.Collections.Generic; namespace Tizen.NUI { /// /// The window class is used internally for drawing.
/// The window has an orientation and indicator properties.
///
/// 3 public class Window : BaseHandle { private global::System.Runtime.InteropServices.HandleRef swigCPtr; private global::System.Runtime.InteropServices.HandleRef stageCPtr; private global::System.Runtime.InteropServices.HandleRef rootLayoutCPtr; private global::System.IntPtr rootLayoutIntPtr; private Layer _rootLayer; private string _windowTitle; private List _childLayers = new List(); internal List LayersChildren { get { return _childLayers; } } internal Window(global::System.IntPtr cPtr, bool cMemoryOwn) : base(NDalicPINVOKE.Window_SWIGUpcast(cPtr), cMemoryOwn) { swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); if (NDalicPINVOKE.Stage_IsInstalled()) { stageCPtr = new global::System.Runtime.InteropServices.HandleRef(this, NDalicPINVOKE.Stage_GetCurrent()); // Create a root layout (AbsoluteLayout) that is invisible to the user but enables layouts added to the Window // Enables layouts added to the Window to have a parent layout. As parent layout is needed to store measure spec properties. // Currently without these measure specs the new layout added will always be the size of the window. rootLayoutIntPtr = NDalicManualPINVOKE.Window_NewRootLayout(); // Store HandleRef used by Add() rootLayoutCPtr = new global::System.Runtime.InteropServices.HandleRef(this, rootLayoutIntPtr); Layer rootLayer = GetRootLayer(); // Add the root layout created above to the root layer. NDalicPINVOKE.Actor_Add( Layer.getCPtr(rootLayer), rootLayoutCPtr ); } } internal static global::System.Runtime.InteropServices.HandleRef getCPtr(Window obj) { return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; } internal static Window GetCurrent() { Window ret = new Window(NDalicPINVOKE.Stage_GetCurrent(), true); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } internal static bool IsInstalled() { bool ret = NDalicPINVOKE.Stage_IsInstalled(); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } /// /// Sets whether the window accepts a focus or not. /// /// If a focus is accepted or not. The default is true. /// 3 public void SetAcceptFocus(bool accept) { NDalicPINVOKE.SetAcceptFocus(swigCPtr, accept); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); } /// /// Returns whether the window accepts a focus or not. /// /// True if the window accepts a focus, false otherwise. /// 3 public bool IsFocusAcceptable() { bool ret = NDalicPINVOKE.IsFocusAcceptable(swigCPtr); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } /// /// Shows the window if it is hidden. /// /// 3 public void Show() { NDalicPINVOKE.Show(swigCPtr); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); } /// /// Hides the window if it is showing. /// /// 3 public void Hide() { NDalicPINVOKE.Hide(swigCPtr); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); } /// /// Retrieves whether the window is visible or not. /// /// True if the window is visible. /// 3 public bool IsVisible() { bool temp = NDalicPINVOKE.IsVisible(swigCPtr); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return temp; } /// /// Gets the count of supported auxiliary hints of the window. /// /// The number of supported auxiliary hints. /// 3 public uint GetSupportedAuxiliaryHintCount() { uint ret = NDalicPINVOKE.GetSupportedAuxiliaryHintCount(swigCPtr); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } /// /// Gets the supported auxiliary hint string of the window. /// /// The index of the supported auxiliary hint lists. /// The auxiliary hint string of the index. /// 3 public string GetSupportedAuxiliaryHint(uint index) { string ret = NDalicPINVOKE.GetSupportedAuxiliaryHint(swigCPtr, index); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } /// /// Creates an auxiliary hint of the window. /// /// The auxiliary hint string. /// The value string. /// The ID of created auxiliary hint, or 0 on failure. /// 3 public uint AddAuxiliaryHint(string hint, string value) { uint ret = NDalicPINVOKE.AddAuxiliaryHint(swigCPtr, hint, value); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } /// /// Removes an auxiliary hint of the window. /// /// The ID of the auxiliary hint. /// True if no error occurred, false otherwise. /// 3 public bool RemoveAuxiliaryHint(uint id) { bool ret = NDalicPINVOKE.RemoveAuxiliaryHint(swigCPtr, id); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } /// /// Changes a value of the auxiliary hint. /// /// The auxiliary hint ID. /// The value string to be set. /// True if no error occurred, false otherwise. /// 3 public bool SetAuxiliaryHintValue(uint id, string value) { bool ret = NDalicPINVOKE.SetAuxiliaryHintValue(swigCPtr, id, value); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } /// /// Gets a value of the auxiliary hint. /// /// The auxiliary hint ID. /// The string value of the auxiliary hint ID, or an empty string if none exists. /// 3 public string GetAuxiliaryHintValue(uint id) { string ret = NDalicPINVOKE.GetAuxiliaryHintValue(swigCPtr, id); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } /// /// Gets an ID of the auxiliary hint string. /// /// The auxiliary hint string. /// The ID of auxiliary hint string, or 0 on failure. /// 3 public uint GetAuxiliaryHintId(string hint) { uint ret = NDalicPINVOKE.GetAuxiliaryHintId(swigCPtr, hint); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } /// /// Sets a region to accept input events. /// /// The region to accept input events. /// 3 public void SetInputRegion(Rectangle inputRegion) { NDalicPINVOKE.SetInputRegion(swigCPtr, Rectangle.getCPtr(inputRegion)); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); } /// /// Gets or sets a window type. /// /// 3 public WindowType Type { get { WindowType ret = (WindowType)NDalicPINVOKE.GetType(swigCPtr); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } set { NDalicPINVOKE.SetType(swigCPtr, (int)value); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); } } /// /// Sets a priority level for the specified notification window. /// /// The notification window level. /// True if no error occurred, false otherwise. /// 3 public bool SetNotificationLevel(NotificationLevel level) { bool ret = NDalicPINVOKE.SetNotificationLevel(swigCPtr, (int)level); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } /// /// Gets a priority level for the specified notification window. /// /// The notification window level. /// 3 public NotificationLevel GetNotificationLevel() { NotificationLevel ret = (NotificationLevel)NDalicPINVOKE.GetNotificationLevel(swigCPtr); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } /// /// Sets a transparent window's visual state to opaque.
/// If a visual state of a transparent window is opaque,
/// then the window manager could handle it as an opaque window when calculating visibility. ///
/// Whether the window's visual state is opaque. /// This will have no effect on an opaque window.
/// It doesn't change transparent window to opaque window but lets the window manager know the visual state of the window. ///
/// 3 public void SetOpaqueState(bool opaque) { NDalicPINVOKE.SetOpaqueState(swigCPtr, opaque); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); } /// /// Returns whether a transparent window's visual state is opaque or not. /// /// True if the window's visual state is opaque, false otherwise. /// The return value has no meaning on an opaque window. /// 3 public bool IsOpaqueState() { bool ret = NDalicPINVOKE.IsOpaqueState(swigCPtr); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } /// /// Sets a window's screen off mode. /// /// The screen mode. /// True if no error occurred, false otherwise. /// 4 public bool SetScreenOffMode(ScreenOffMode screenOffMode) { bool ret = NDalicPINVOKE.SetScreenOffMode(swigCPtr, (int)screenOffMode); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } /// /// Gets the screen mode of the window. /// /// The screen off mode. /// 4 public ScreenOffMode GetScreenOffMode() { ScreenOffMode ret = (ScreenOffMode)NDalicPINVOKE.GetScreenOffMode(swigCPtr); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } /// /// Sets preferred brightness of the window. /// /// The preferred brightness (0 to 100). /// True if no error occurred, false otherwise. /// 3 public bool SetBrightness(int brightness) { bool ret = NDalicPINVOKE.SetBrightness(swigCPtr, brightness); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } /// /// Gets the preferred brightness of the window. /// /// The preferred brightness. /// 3 public int GetBrightness() { int ret = NDalicPINVOKE.GetBrightness(swigCPtr); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } /// /// The focus changed event argument. /// /// 3 public class FocusChangedEventArgs : EventArgs { /// /// FocusGained flag. /// /// 3 public bool FocusGained { get; set; } } private WindowFocusChangedEventCallbackType _windowFocusChangedEventCallback; [UnmanagedFunctionPointer(CallingConvention.StdCall)] private delegate void WindowFocusChangedEventCallbackType(bool focusGained); private event EventHandler _windowFocusChangedEventHandler; /// /// FocusChanged event. /// /// 3 public event EventHandler FocusChanged { add { if (_windowFocusChangedEventHandler == null) { _windowFocusChangedEventCallback = OnWindowFocusedChanged; WindowFocusChangedSignal().Connect(_windowFocusChangedEventCallback); } _windowFocusChangedEventHandler += value; } remove { _windowFocusChangedEventHandler -= value; if (_windowFocusChangedEventHandler == null && WindowFocusChangedSignal().Empty() == false && _windowFocusChangedEventCallback != null) { WindowFocusChangedSignal().Disconnect(_windowFocusChangedEventCallback); } } } private void OnWindowFocusedChanged(bool focusGained) { FocusChangedEventArgs e = new FocusChangedEventArgs(); e.FocusGained = focusGained; if (_windowFocusChangedEventHandler != null) { _windowFocusChangedEventHandler(this, e); } } /// /// Gets/Sets a window title. /// /// 4 public string Title { get { return _windowTitle; } set { _windowTitle = value; SetClass(_windowTitle, ""); } } internal WindowFocusSignalType WindowFocusChangedSignal() { WindowFocusSignalType ret = new WindowFocusSignalType(NDalicPINVOKE.FocusChangedSignal(swigCPtr), false); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } internal Window(Rectangle windowPosition, string name, bool isTransparent) : this(NDalicPINVOKE.Window_New__SWIG_0(Rectangle.getCPtr(windowPosition), name, isTransparent), true) { if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); } internal Window(Rectangle windowPosition, string name) : this(NDalicPINVOKE.Window_New__SWIG_1(Rectangle.getCPtr(windowPosition), name), true) { if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); } internal Window(Rectangle windowPosition, string name, string className, bool isTransparent) : this(NDalicPINVOKE.Window_New__SWIG_2(Rectangle.getCPtr(windowPosition), name, className, isTransparent), true) { if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); } internal Window(Rectangle windowPosition, string name, string className) : this(NDalicPINVOKE.Window_New__SWIG_3(Rectangle.getCPtr(windowPosition), name, className), true) { if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); } internal void ShowIndicator(Window.IndicatorVisibleMode visibleMode) { NDalicPINVOKE.Window_ShowIndicator(swigCPtr, (int)visibleMode); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); } internal void SetIndicatorBackgroundOpacity(Window.IndicatorBackgroundOpacity opacity) { NDalicPINVOKE.Window_SetIndicatorBgOpacity(swigCPtr, (int)opacity); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); } internal void RotateIndicator(Window.WindowOrientation orientation) { NDalicPINVOKE.Window_RotateIndicator(swigCPtr, (int)orientation); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); } /// /// Sets the window name and the class string. /// /// The name of the window. /// The class of the window. /// 4 public void SetClass(string name, string klass) { NDalicPINVOKE.Window_SetClass(swigCPtr, name, klass); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); } /// /// Raises the window to the top of the window stack. /// /// 3 public void Raise() { NDalicPINVOKE.Window_Raise(swigCPtr); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); } /// /// Lowers the window to the bottom of the window stack. /// /// 3 public void Lower() { NDalicPINVOKE.Window_Lower(swigCPtr); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); } /// /// Activates the window to the top of the window stack even it is iconified. /// /// 3 public void Activate() { NDalicPINVOKE.Window_Activate(swigCPtr); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); } internal void AddAvailableOrientation(Window.WindowOrientation orientation) { NDalicPINVOKE.Window_AddAvailableOrientation(swigCPtr, (int)orientation); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); } internal void RemoveAvailableOrientation(Window.WindowOrientation orientation) { NDalicPINVOKE.Window_RemoveAvailableOrientation(swigCPtr, (int)orientation); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); } internal void SetPreferredOrientation(Window.WindowOrientation orientation) { NDalicPINVOKE.Window_SetPreferredOrientation(swigCPtr, (int)orientation); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); } internal Window.WindowOrientation GetPreferredOrientation() { Window.WindowOrientation ret = (Window.WindowOrientation)NDalicPINVOKE.Window_GetPreferredOrientation(swigCPtr); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } internal DragAndDropDetector GetDragAndDropDetector() { DragAndDropDetector ret = new DragAndDropDetector(NDalicPINVOKE.Window_GetDragAndDropDetector(swigCPtr), true); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } internal Any GetNativeHandle() { Any ret = new Any(NDalicPINVOKE.Window_GetNativeHandle(swigCPtr), true); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } internal WindowFocusSignalType FocusChangedSignal() { WindowFocusSignalType ret = new WindowFocusSignalType(NDalicPINVOKE.FocusChangedSignal(swigCPtr), false); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } /// /// Gets the default ( root ) layer. /// /// The root layer. /// 3 public Layer GetDefaultLayer() { return this.GetRootLayer(); } internal void Add(Layer layer) { NDalicPINVOKE.Stage_Add(stageCPtr, Layer.getCPtr(layer)); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); LayersChildren.Add(layer); } internal void Remove(Layer layer) { NDalicPINVOKE.Stage_Remove(stageCPtr, Layer.getCPtr(layer)); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); LayersChildren.Remove(layer); } /// /// Add a child view to window. /// /// the child should be added to the window. /// 3 public void Add(View view) { NDalicPINVOKE.Actor_Add( rootLayoutCPtr, View.getCPtr(view) ); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); this.GetRootLayer().AddViewToLayerList(view); // Maintain the children list in the Layer } /// /// Remove a child view from window. /// /// the child to be removed. /// 3 public void Remove(View view) { NDalicPINVOKE.Actor_Remove( rootLayoutCPtr, View.getCPtr(view) ); this.GetRootLayer().RemoveViewFromLayerList(view); // Maintain the children list in the Layer } internal Vector2 GetSize() { Vector2 ret = new Vector2(NDalicPINVOKE.Stage_GetSize(stageCPtr), true); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } internal RenderTaskList GetRenderTaskList() { RenderTaskList ret = new RenderTaskList(NDalicPINVOKE.Stage_GetRenderTaskList(stageCPtr), true); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } /// /// Queries the number of on-window layers. /// /// The number of layers. /// Note that a default layer is always provided (count >= 1). internal uint GetLayerCount() { if (LayersChildren == null || LayersChildren.Count < 0) return 0; return (uint) LayersChildren.Count; } /// /// Retrieves the layer at a specified depth. /// /// The layer's depth index. /// The layer found at the given depth. /// 3 public Layer GetLayer(uint depth) { if (depth < LayersChildren.Count) { Layer ret = LayersChildren[Convert.ToInt32(depth)]; return ret; } else { return null; } } internal Layer GetRootLayer() { // Window.IsInstalled() is actually true only when called from event thread and // Core has been initialized, not when Stage is ready. if (_rootLayer == null && Window.IsInstalled()) { _rootLayer = new Layer(NDalicPINVOKE.Stage_GetRootLayer(stageCPtr), true); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); LayersChildren.Add(_rootLayer); } return _rootLayer; } internal void SetBackgroundColor(Vector4 color) { NDalicPINVOKE.Stage_SetBackgroundColor(stageCPtr, Vector4.getCPtr(color)); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); } internal Vector4 GetBackgroundColor() { Vector4 ret = new Vector4(NDalicPINVOKE.Stage_GetBackgroundColor(stageCPtr), true); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } internal Vector2 GetDpi() { Vector2 ret = new Vector2(NDalicPINVOKE.Stage_GetDpi(stageCPtr), true); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } internal ObjectRegistry GetObjectRegistry() { ObjectRegistry ret = new ObjectRegistry(NDalicPINVOKE.Stage_GetObjectRegistry(stageCPtr), true); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } /// /// Keep rendering for at least the given amount of time. /// /// Time to keep rendering, 0 means render at least one more frame. /// 3 public void KeepRendering(float durationSeconds) { NDalicPINVOKE.Stage_KeepRendering(stageCPtr, durationSeconds); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); } internal KeyEventSignal KeyEventSignal() { KeyEventSignal ret = new KeyEventSignal(NDalicPINVOKE.Stage_KeyEventSignal(stageCPtr), false); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } internal VoidSignal EventProcessingFinishedSignal() { VoidSignal ret = new VoidSignal(NDalicPINVOKE.Stage_EventProcessingFinishedSignal(stageCPtr), false); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } internal TouchSignal TouchSignal() { TouchSignal ret = new TouchSignal(NDalicPINVOKE.Stage_TouchSignal(stageCPtr), false); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } internal TouchDataSignal TouchDataSignal() { TouchDataSignal ret = new TouchDataSignal(NDalicPINVOKE.Actor_TouchSignal(Layer.getCPtr(GetRootLayer())), false); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } private StageWheelSignal WheelEventSignal() { StageWheelSignal ret = new StageWheelSignal(NDalicPINVOKE.Stage_WheelEventSignal(stageCPtr), false); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } private WheelSignal StageWheelEventSignal() { WheelSignal ret = new WheelSignal(NDalicPINVOKE.Actor_WheelEventSignal(Layer.getCPtr(this.GetRootLayer())), false); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } internal VoidSignal ContextLostSignal() { VoidSignal ret = new VoidSignal(NDalicPINVOKE.Stage_ContextLostSignal(stageCPtr), false); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } internal VoidSignal ContextRegainedSignal() { VoidSignal ret = new VoidSignal(NDalicPINVOKE.Stage_ContextRegainedSignal(stageCPtr), false); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } internal VoidSignal SceneCreatedSignal() { VoidSignal ret = new VoidSignal(NDalicPINVOKE.Stage_SceneCreatedSignal(stageCPtr), false); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } internal ResizedSignal ResizedSignal() { ResizedSignal ret = new ResizedSignal(NDalicManualPINVOKE.Window_ResizedSignal(swigCPtr), false); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } internal static Vector4 DEFAULT_BACKGROUND_COLOR { get { global::System.IntPtr cPtr = NDalicPINVOKE.Stage_DEFAULT_BACKGROUND_COLOR_get(); Vector4 ret = (cPtr == global::System.IntPtr.Zero) ? null : new Vector4(cPtr, false); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } } internal static Vector4 DEBUG_BACKGROUND_COLOR { get { global::System.IntPtr cPtr = NDalicPINVOKE.Stage_DEBUG_BACKGROUND_COLOR_get(); Vector4 ret = (cPtr == global::System.IntPtr.Zero) ? null : new Vector4(cPtr, false); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } } private static readonly Window instance = Application.Instance.GetWindow(); /// /// The stage instance property (read-only).
/// Gets the current window.
///
/// 3 public static Window Instance { get { return instance; } } /// /// Grabs the key specified by a key for a window only when a window is the topmost window.
/// This function can be used for following example scenarios:
/// - Mobile - Using volume up or down as zoom up or down in camera apps.
///
/// The key code to grab. /// True if the grab succeeds. /// 3 public bool GrabKeyTopmost(int DaliKey) { bool ret = NDalicManualPINVOKE.GrabKeyTopmost(HandleRef.ToIntPtr(this.swigCPtr), DaliKey); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } /// /// Ungrabs the key specified by a key for the window.
/// 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.
///
/// The key code to ungrab. /// True if the ungrab succeeds. /// 3 public bool UngrabKeyTopmost(int DaliKey) { bool ret = NDalicManualPINVOKE.UngrabKeyTopmost(HandleRef.ToIntPtr(this.swigCPtr), DaliKey); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } /// /// Grabs the key specified by a key for a window in a GrabMode.
/// Details: This function can be used for following example scenarios:
/// - TV - A user might want to change the volume or channel of the background TV contents while focusing on the foregrund app.
/// - Mobile - When a user presses the Home key, the homescreen appears regardless of the current foreground app.
/// - Mobile - Using the volume up or down as zoom up or down in camera apps.
///
/// The key code to grab. /// The grab mode for the key. /// True if the grab succeeds. /// 3 public bool GrabKey(int DaliKey, KeyGrabMode GrabMode) { bool ret = NDalicManualPINVOKE.GrabKey(HandleRef.ToIntPtr(this.swigCPtr), DaliKey, (int)GrabMode); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } /// /// Ungrabs the key specified by a key for a window.
/// 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.
///
/// The key code to ungrab. /// True if the ungrab succeeds. /// 3 public bool UngrabKey(int DaliKey) { bool ret = NDalicManualPINVOKE.UngrabKey(HandleRef.ToIntPtr(this.swigCPtr), DaliKey); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } /// /// Sets keyboard repeat information. /// /// The key repeat rate value in seconds /// The key repeat delay value in seconds /// True if setting the keyboard repeat succeeds. /// 5 public bool SetKeyboardRepeatInfo(float rate, float delay) { bool ret = NDalicManualPINVOKE.SetKeyboardRepeatInfo(rate, delay); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } /// /// Gets keyboard repeat information. /// /// The key repeat rate value in seconds /// The key repeat delay value in seconds /// True if setting the keyboard repeat succeeds. /// 5 public bool GetKeyboardRepeatInfo(out float rate, out float delay) { bool ret = NDalicManualPINVOKE.GetKeyboardRepeatInfo(out rate, out delay); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } internal System.IntPtr GetNativeWindowHandler() { System.IntPtr ret = NDalicManualPINVOKE.GetNativeWindowHandler(HandleRef.ToIntPtr(this.swigCPtr)); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } /// /// Enumeration for orientation of the window is the way in which a rectangular page is oriented for normal viewing. /// /// 3 public enum WindowOrientation { /// /// Portrait orientation. The height of the display area is greater than the width. /// /// 3 Portrait = 0, /// /// Landscape orientation. A wide view area is needed. /// /// 3 Landscape = 90, /// /// Portrait inverse orientation. /// /// 3 PortraitInverse = 180, /// /// Landscape inverse orientation. /// /// 3 LandscapeInverse = 270 } /// /// Enumeration for the key grab mode for platform-level APIs. /// /// 3 public enum KeyGrabMode { /// /// Grabs a key only when on the top of the grabbing-window stack mode. /// Topmost = 0, /// /// Grabs a key together with the other client window(s) mode. /// Shared, /// /// 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. /// OverrideExclusive, /// /// Grabs a key exclusively regardless of the grabbing-window's position on the window stack mode. /// Exclusive }; /// /// Enumeration for opacity of the indicator. /// internal enum IndicatorBackgroundOpacity { Opaque = 100, Translucent = 50, Transparent = 0 } /// /// Enumeration for visible mode of the indicator. /// internal enum IndicatorVisibleMode { Invisible = 0, Visible = 1, Auto = 2 } /// /// The touch event argument. /// /// 3 public class TouchEventArgs : EventArgs { private Touch _touch; /// /// Touch. /// /// 3 public Touch Touch { get { return _touch; } set { _touch = value; } } } private event EventHandler _rootLayerTouchDataEventHandler; [UnmanagedFunctionPointer(CallingConvention.StdCall)] private delegate bool RootLayerTouchDataCallbackType(IntPtr view, IntPtr touchData); private RootLayerTouchDataCallbackType _rootLayerTouchDataCallback; /// /// This event is emitted when the screen is touched and when the touch ends.
/// If there are multiple touch points, then this will be emitted when the first touch occurs and /// then when the last finger is lifted.
/// An interrupted event will also be emitted (if it occurs).
///
/// 3 public event EventHandler TouchEvent { add { if (_rootLayerTouchDataEventHandler == null) { _rootLayerTouchDataCallback = OnWindowTouch; this.TouchDataSignal().Connect(_rootLayerTouchDataCallback); } _rootLayerTouchDataEventHandler += value; } remove { _rootLayerTouchDataEventHandler -= value; if (_rootLayerTouchDataEventHandler == null && TouchSignal().Empty() == false) { this.TouchDataSignal().Disconnect(_rootLayerTouchDataCallback); } } } private bool OnWindowTouch(IntPtr view, IntPtr touchData) { if (touchData == global::System.IntPtr.Zero) { NUILog.Error("touchData should not be null!"); return false; } TouchEventArgs e = new TouchEventArgs(); e.Touch = Tizen.NUI.Touch.GetTouchFromPtr(touchData); if (_rootLayerTouchDataEventHandler != null) { _rootLayerTouchDataEventHandler(this, e); } return false; } /// /// Wheel event arguments. /// /// 3 public class WheelEventArgs : EventArgs { private Wheel _wheel; /// /// Wheel. /// /// 3 public Wheel Wheel { get { return _wheel; } set { _wheel = value; } } } private event EventHandler _stageWheelHandler; [UnmanagedFunctionPointer(CallingConvention.StdCall)] private delegate bool WheelEventCallbackType(IntPtr view, IntPtr wheelEvent); private WheelEventCallbackType _wheelEventCallback; /// /// This event is emitted when the wheel event is received. /// /// 3 public event EventHandler WheelEvent { add { if (_stageWheelHandler == null) { _wheelEventCallback = OnStageWheel; this.StageWheelEventSignal().Connect(_wheelEventCallback); } _stageWheelHandler += value; } remove { _stageWheelHandler -= value; if (_stageWheelHandler == null && StageWheelEventSignal().Empty() == false) { this.StageWheelEventSignal().Disconnect(_wheelEventCallback); } } } private bool OnStageWheel(IntPtr rootLayer, IntPtr wheelEvent) { if (wheelEvent == global::System.IntPtr.Zero) { NUILog.Error("wheelEvent should not be null!"); return true; } WheelEventArgs e = new WheelEventArgs(); e.Wheel = Tizen.NUI.Wheel.GetWheelFromPtr(wheelEvent); if (_stageWheelHandler != null) { _stageWheelHandler(this, e); } return true; } /// /// Key event arguments. /// /// 3 public class KeyEventArgs : EventArgs { private Key _key; /// /// Key. /// /// 3 public Key Key { get { return _key; } set { _key = value; } } } private event EventHandler _stageKeyHandler; private EventCallbackDelegateType1 _stageKeyCallbackDelegate; /// /// This event is emitted when the key event is received. /// /// 3 public event EventHandler KeyEvent { add { if (_stageKeyHandler == null) { _stageKeyCallbackDelegate = OnStageKey; KeyEventSignal().Connect(_stageKeyCallbackDelegate); } _stageKeyHandler += value; } remove { _stageKeyHandler -= value; if (_stageKeyHandler == null && KeyEventSignal().Empty() == false) { KeyEventSignal().Disconnect(_stageKeyCallbackDelegate); } } } // Callback for Stage KeyEventsignal private void OnStageKey(IntPtr data) { KeyEventArgs e = new KeyEventArgs(); if (data != null) { e.Key = Tizen.NUI.Key.GetKeyFromPtr(data); } if (_stageKeyHandler != null) { //here we send all data to user event handlers _stageKeyHandler(this, e); } } private event EventHandler _stageEventProcessingFinishedEventHandler; private EventCallbackDelegateType0 _stageEventProcessingFinishedEventCallbackDelegate; internal event EventHandler EventProcessingFinished { add { if (_stageEventProcessingFinishedEventHandler == null) { _stageEventProcessingFinishedEventCallbackDelegate = OnEventProcessingFinished; EventProcessingFinishedSignal().Connect(_stageEventProcessingFinishedEventCallbackDelegate); } _stageEventProcessingFinishedEventHandler += value; } remove { _stageEventProcessingFinishedEventHandler -= value; if (_stageEventProcessingFinishedEventHandler == null && EventProcessingFinishedSignal().Empty() == false) { EventProcessingFinishedSignal().Disconnect(_stageEventProcessingFinishedEventCallbackDelegate); } } } // Callback for Stage EventProcessingFinishedSignal private void OnEventProcessingFinished() { if (_stageEventProcessingFinishedEventHandler != null) { _stageEventProcessingFinishedEventHandler(this, null); } } private EventHandler _stageContextLostEventHandler; private EventCallbackDelegateType0 _stageContextLostEventCallbackDelegate; internal event EventHandler ContextLost { add { if (_stageContextLostEventHandler == null) { _stageContextLostEventCallbackDelegate = OnContextLost; ContextLostSignal().Connect(_stageContextLostEventCallbackDelegate); } _stageContextLostEventHandler += value; } remove { _stageContextLostEventHandler -= value; if (_stageContextLostEventHandler == null && ContextLostSignal().Empty() == false) { ContextLostSignal().Disconnect(_stageContextLostEventCallbackDelegate); } } } // Callback for Stage ContextLostSignal private void OnContextLost() { if (_stageContextLostEventHandler != null) { _stageContextLostEventHandler(this, null); } } private EventHandler _stageContextRegainedEventHandler; private EventCallbackDelegateType0 _stageContextRegainedEventCallbackDelegate; internal event EventHandler ContextRegained { add { if (_stageContextRegainedEventHandler == null) { _stageContextRegainedEventCallbackDelegate = OnContextRegained; ContextRegainedSignal().Connect(_stageContextRegainedEventCallbackDelegate); } _stageContextRegainedEventHandler += value; } remove { _stageContextRegainedEventHandler -= value; if (_stageContextRegainedEventHandler == null && ContextRegainedSignal().Empty() == false) { this.ContextRegainedSignal().Disconnect(_stageContextRegainedEventCallbackDelegate); } } } // Callback for Stage ContextRegainedSignal private void OnContextRegained() { if (_stageContextRegainedEventHandler != null) { _stageContextRegainedEventHandler(this, null); } } private EventHandler _stageSceneCreatedEventHandler; private EventCallbackDelegateType0 _stageSceneCreatedEventCallbackDelegate; internal event EventHandler SceneCreated { add { if (_stageSceneCreatedEventHandler == null) { _stageSceneCreatedEventCallbackDelegate = OnSceneCreated; SceneCreatedSignal().Connect(_stageSceneCreatedEventCallbackDelegate); } _stageSceneCreatedEventHandler += value; } remove { _stageSceneCreatedEventHandler -= value; if (_stageSceneCreatedEventHandler == null && SceneCreatedSignal().Empty() == false) { SceneCreatedSignal().Disconnect(_stageSceneCreatedEventCallbackDelegate); } } } // Callback for Stage SceneCreatedSignal private void OnSceneCreated() { if (_stageSceneCreatedEventHandler != null) { _stageSceneCreatedEventHandler(this, null); } } /// /// This resized event arguments. /// /// 3 public class ResizedEventArgs : EventArgs { Size2D _windowSize; /// /// This window size. /// /// 4 public Size2D WindowSize { get { return _windowSize; } set { _windowSize = value; } } } private WindowResizedEventCallbackType _windowResizedEventCallback; [UnmanagedFunctionPointer(CallingConvention.StdCall)] private delegate void WindowResizedEventCallbackType(IntPtr windowSize); private event EventHandler _windowResizedEventHandler; /// /// This event is emitted when the window resized. /// /// 3 public event EventHandler Resized { add { if (_windowResizedEventHandler == null) { _windowResizedEventCallback = OnResized; ResizedSignal().Connect(_windowResizedEventCallback); } _windowResizedEventHandler += value; } remove { _windowResizedEventHandler -= value; if (_windowResizedEventHandler == null && ResizedSignal().Empty() == false && _windowResizedEventCallback != null) { ResizedSignal().Disconnect(_windowResizedEventCallback); } } } private void OnResized(IntPtr windowSize) { ResizedEventArgs e = new ResizedEventArgs(); var val = new Uint16Pair(windowSize, false); e.WindowSize = new Size2D(val.GetWidth(), val.GetHeight()); val.Dispose(); if (_windowResizedEventHandler != null) { _windowResizedEventHandler(this, e); } } internal void SetWindowSize(Size2D size) { var val = new Uint16Pair((uint)size.Width, (uint)size.Height); NDalicManualPINVOKE.SetSize(swigCPtr, Uint16Pair.getCPtr(val)); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); } internal Size2D GetWindowSize() { var val = new Uint16Pair(NDalicManualPINVOKE.GetSize(swigCPtr), false); Size2D ret = new Size2D(val.GetWidth(), val.GetHeight()); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } internal void SetPosition(Position2D position) { var val = new Uint16Pair((uint)position.X, (uint)position.Y); NDalicManualPINVOKE.SetPosition(swigCPtr, Uint16Pair.getCPtr(val)); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); } internal Position2D GetPosition() { var val = new Uint16Pair(NDalicManualPINVOKE.GetPosition(swigCPtr), true); Position2D ret = new Position2D(val.GetX(), val.GetY()); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); return ret; } /// /// Sets whether the window is transparent or not. /// /// Whether the window is transparent. /// 5 public void SetTransparency(bool transparent) { NDalicManualPINVOKE.SetTransparency(swigCPtr, transparent); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); } /// /// The window size property (read-only). /// /// 3 public Size2D Size { get { Size2D ret = GetSize(); return ret; } } /// /// The background color property. /// /// 3 public Color BackgroundColor { set { SetBackgroundColor(value); } get { Color ret = GetBackgroundColor(); return ret; } } /// /// The DPI property (read-only).
/// Retrieves the DPI of the display device to which the Window is connected.
///
/// 3 public Vector2 Dpi { get { return GetDpi(); } } /// /// The layer count property (read-only).
/// Queries the number of on-Window layers.
///
/// 3 public uint LayerCount { get { return GetLayerCount(); } } /// /// Adds a layer to the stage. /// /// Layer to add. /// 3 public void AddLayer(Layer layer) { NDalicPINVOKE.Stage_Add(stageCPtr, Layer.getCPtr(layer)); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); LayersChildren.Add(layer); } /// /// Removes a layer from the stage. /// /// Layer to remove. /// 3 public void RemoveLayer(Layer layer) { NDalicPINVOKE.Stage_Remove(stageCPtr, Layer.getCPtr(layer)); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); LayersChildren.Remove(layer); } /// /// Please do not use! this will be deprecated /// /// 3 [Obsolete("Please do not use! This will be deprecated! Please use FocusChangedEventArgs instead! " + "Like: " + "Window.Instance.FocusChanged = OnFocusChanged; " + "private void OnFocusChanged(object source, Window.FocusChangedEventArgs args) {...}")] [EditorBrowsable(EditorBrowsableState.Never)] public class WindowFocusChangedEventArgs : EventArgs { /// /// Please do not use! this will be deprecated /// /// 3 public bool FocusGained { get; set; } } private WindowFocusChangedEventCallbackType _windowFocusChangedEventCallback2; [UnmanagedFunctionPointer(CallingConvention.StdCall)] private delegate void WindowFocusChangedEventCallbackType2(bool focusGained); private event EventHandler _windowFocusChangedEventHandler2; /// /// Please do not use! this will be deprecated. Please use 'FocusChanged' event instead. /// /// 3 /// Please do not use! this will be deprecated! /// Instead please use FocusChanged. [Obsolete("Please do not use! This will be deprecated! Please use FocusChanged instead! " + "Like: " + "Window.Instance.FocusChanged = OnFocusChanged; " + "private void OnFocusChanged(object source, Window.FocusChangedEventArgs args) {...}")] [EditorBrowsable(EditorBrowsableState.Never)] public event EventHandler WindowFocusChanged { add { if (_windowFocusChangedEventHandler2 == null) { _windowFocusChangedEventCallback2 = OnWindowFocusedChanged2; WindowFocusChangedSignal().Connect(_windowFocusChangedEventCallback2); } _windowFocusChangedEventHandler2 += value; } remove { _windowFocusChangedEventHandler2 -= value; if (_windowFocusChangedEventHandler2 == null && WindowFocusChangedSignal().Empty() == false && _windowFocusChangedEventCallback2 != null) { WindowFocusChangedSignal().Disconnect(_windowFocusChangedEventCallback2); } } } private void OnWindowFocusedChanged2(bool focusGained) { WindowFocusChangedEventArgs e = new WindowFocusChangedEventArgs(); e.FocusGained = focusGained; if (_windowFocusChangedEventHandler2 != null) { _windowFocusChangedEventHandler2(this, e); } } /// /// Gets or sets a size of the window. /// /// 4 public Size2D WindowSize { get { return GetWindowSize(); } set { SetWindowSize(value); } } /// /// Gets or sets a position of the window. /// /// 4 public Position2D WindowPosition { get { return GetPosition(); } set { SetPosition(value); } } /// /// Feed a key-event into the window. /// /// The key event to feed. /// 5 public void FeedKey(Key keyEvent) { NDalicManualPINVOKE.Window_FeedKeyEvent(Key.getCPtr(keyEvent)); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); } /// /// Feed a key-event into the window. /// /// The key event to feed. /// 4 [Obsolete("Please do not use! This will be deprecated! Please use FeedKey(Key keyEvent) instead!")] public static void FeedKeyEvent(Key keyEvent) { NDalicManualPINVOKE.Window_FeedKeyEvent(Key.getCPtr(keyEvent)); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); } /// /// Allows at least one more render, even when paused. /// The window should be shown, not minimised. /// /// 4 public void RenderOnce() { NDalicManualPINVOKE.Window_RenderOnce(swigCPtr); if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve(); } /// /// Contains and encapsulates Native Window handle. /// /// 4 public class SafeNativeWindowHandle : SafeHandle { /// /// Contructor, Native window handle is set to handle. /// /// 4 public SafeNativeWindowHandle() : base(IntPtr.Zero, false) { SetHandle(Tizen.NUI.Window.Instance.GetNativeWindowHandler()); } /// /// Null check if the handle is valid or not. /// /// 4 public override bool IsInvalid { get { return this.handle == IntPtr.Zero; } } /// /// Release handle itself. /// /// true when released successfully. /// 4 protected override bool ReleaseHandle() { return true; } } } }