/*
* Copyright(c) 2021 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.
*
*/
extern alias TizenSystemInformation;
using TizenSystemInformation.Tizen.System;
using System;
using System.ComponentModel;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using Tizen.NUI.BaseComponents;
namespace Tizen.NUI
{
///
/// The window class is used internally for drawing.
/// The window has an orientation and indicator properties.
///
/// 3
public partial class Window : BaseHandle
{
private HandleRef stageCPtr;
private Layer rootLayer;
private string windowTitle;
private List childLayers = new List();
private LayoutController localController;
static internal bool IsSupportedMultiWindow()
{
bool isSupported = false;
Information.TryGetValue("http://tizen.org/feature/opengles.surfaceless_context", out isSupported);
return isSupported;
}
internal Window(global::System.IntPtr cPtr, bool cMemoryOwn) : base(cPtr, cMemoryOwn)
{
if (Interop.Stage.IsInstalled())
{
stageCPtr = new global::System.Runtime.InteropServices.HandleRef(this, Interop.Stage.GetCurrent());
localController = new LayoutController(this);
NUILog.Debug("layoutController id:" + localController.GetId());
}
}
///
/// A helper method to get the current window where the view is added
///
/// The View added to the window
/// A Window.
[EditorBrowsable(EditorBrowsableState.Never)]
static public Window Get(View view)
{
if(view == null)
{
NUILog.Error("if there is no view, it can not get a window");
return null;
}
Window ret = Registry.GetManagedBaseHandleFromNativePtr(Interop.Window.Get(View.getCPtr(view))) as Window;
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
///
/// Creates a new Window.
/// This creates an extra window in addition to the default main window
///
/// The position and size of the Window.
/// Whether Window is translucent.
/// A new Window.
/// 6
/// http://tizen.org/feature/opengles.surfaceless_context
/// The required feature is not supported.
public Window(Rectangle windowPosition = null, bool isTranslucent = false) : this(Interop.Window.New(Rectangle.getCPtr(windowPosition), "", isTranslucent), true)
{
if (IsSupportedMultiWindow() == false)
{
NUILog.Error("This device does not support surfaceless_context. So Window cannot be created. ");
}
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
///
/// Creates a new Window with a specific name.
/// This creates an extra window in addition to the default main window
///
/// The name for extra window.
/// The position and size of the Window.
/// Whether Window is translucent.
/// A new Window.
/// 6
/// http://tizen.org/feature/opengles.surfaceless_context
/// The required feature is not supported.
public Window(string name, Rectangle windowPosition = null, bool isTranslucent = false) : this(Interop.Window.New(Rectangle.getCPtr(windowPosition), name, isTranslucent), true)
{
if (IsSupportedMultiWindow() == false)
{
NUILog.Error("This device does not support surfaceless_context. So Window cannot be created. ");
}
this.windowTitle = name;
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
///
/// 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,
///
/// No orientation. It is for the preferred orientation
/// Especially, NoOrientationPreference only has the effect for the preferred orientation.
/// It is used to unset the preferred orientation with SetPreferredOrientation.
///
[EditorBrowsable(EditorBrowsableState.Never)]
NoOrientationPreference = -1
}
///
/// 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 transition effect's state.
///
[Obsolete("Please do not use! This will be removed. Please use Window.EffectState instead!")]
[EditorBrowsable(EditorBrowsableState.Never)]
public enum EffectStates
{
///
/// None state.
///
[Obsolete("Please do not use! This will be removed. Please use Window.EffectState.None instead!")]
[EditorBrowsable(EditorBrowsableState.Never)]
None = 0,
///
/// Transition effect is started.
///
[Obsolete("Please do not use! This will be removed. Please use Window.EffectState.Start instead!")]
[EditorBrowsable(EditorBrowsableState.Never)]
Start,
///
/// Transition effect is ended.
///
[Obsolete("Please do not use! This will be removed. Please use Window.EffectState.End instead!")]
[EditorBrowsable(EditorBrowsableState.Never)]
End,
}
///
/// Enumeration for transition effect's state.
///
[EditorBrowsable(EditorBrowsableState.Never)]
public enum EffectState
{
///
/// None state.
///
[EditorBrowsable(EditorBrowsableState.Never)]
None = 0,
///
/// Transition effect is started.
///
[EditorBrowsable(EditorBrowsableState.Never)]
Start,
///
/// Transition effect is ended.
///
[EditorBrowsable(EditorBrowsableState.Never)]
End,
}
///
/// Enumeration for transition effect's type.
///
[Obsolete("Please do not use! This will be removed. Please use Window.EffectType instead!")]
[EditorBrowsable(EditorBrowsableState.Never)]
public enum EffectTypes
{
///
/// None type.
///
[Obsolete("Please do not use! This will be removed. Please use Window.EffectType.None instead!")]
[EditorBrowsable(EditorBrowsableState.Never)]
None = 0,
///
/// Window show effect.
///
[Obsolete("Please do not use! This will be removed. Please use Window.EffectType.Show instead!")]
[EditorBrowsable(EditorBrowsableState.Never)]
Show,
///
/// Window hide effect.
///
[Obsolete("Please do not use! This will be removed. Please use Window.EffectType.Hide instead!")]
[EditorBrowsable(EditorBrowsableState.Never)]
Hide,
}
///
/// Enumeration for transition effect's type.
///
[EditorBrowsable(EditorBrowsableState.Never)]
public enum EffectType
{
///
/// None type.
///
[EditorBrowsable(EditorBrowsableState.Never)]
None = 0,
///
/// Window show effect.
///
[EditorBrowsable(EditorBrowsableState.Never)]
Show,
///
/// Window hide effect.
///
[EditorBrowsable(EditorBrowsableState.Never)]
Hide,
}
///
/// Enumeration for result of window operation.
///
internal enum OperationResult
{
///
/// Failed for unknown reason
///
UnknownError = 0,
///
/// Succeed
///
Succeed,
///
/// Permission denied
///
PermissionDenied,
///
/// The operation is not supported.
///
NotSupported,
}
///
/// Enumeration for window resized mode by display server.
///
[EditorBrowsable(EditorBrowsableState.Never)]
public enum ResizeDirection
{
///
/// Start resizing window to the top-left edge.
///
[EditorBrowsable(EditorBrowsableState.Never)]
TopLeft = 1,
///
/// Start resizing window to the top side.
///
[EditorBrowsable(EditorBrowsableState.Never)]
Top = 2,
///
/// Start resizing window to the top-right edge.
///
[EditorBrowsable(EditorBrowsableState.Never)]
TopRight = 3,
///
/// Start resizing window to the left side.
///
[EditorBrowsable(EditorBrowsableState.Never)]
Left = 4,
///
/// Start resizing window to the right side.
///
[EditorBrowsable(EditorBrowsableState.Never)]
Right = 5,
///
/// Start resizing window to the bottom-left edge.
///
[EditorBrowsable(EditorBrowsableState.Never)]
BottomLeft = 6,
///
/// Start resizing window to the bottom side.
///
[EditorBrowsable(EditorBrowsableState.Never)]
Bottom = 7,
///
/// Start resizing window to the bottom-right edge.
///
[EditorBrowsable(EditorBrowsableState.Never)]
BottomRight = 8,
}
///
/// The stage instance property (read-only).
/// Gets the current window.
///
/// 3
public static Window Instance { get; internal set; }
///
/// Gets or sets a window type.
///
/// 3
public WindowType Type
{
get
{
WindowType ret = (WindowType)Interop.Window.GetType(SwigCPtr);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw new InvalidOperationException("FATAL: get Exception", NDalicPINVOKE.SWIGPendingException.Retrieve());
return ret;
}
set
{
Interop.Window.SetType(SwigCPtr, (int)value);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
}
///
/// Gets/Sets a window title.
///
/// 4
public string Title
{
get
{
return windowTitle;
}
set
{
windowTitle = value;
SetClass(windowTitle, "");
}
}
///
/// The rendering behavior of a Window.
///
/// 5
public RenderingBehaviorType RenderingBehavior
{
get
{
return GetRenderingBehavior();
}
set
{
SetRenderingBehavior(value);
}
}
///
/// 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();
}
}
///
/// Gets or sets a size of the window.
///
/// Thrown when value is null.
/// 4
public Size2D WindowSize
{
get
{
return GetWindowSize();
}
set
{
SetWindowSize(value);
}
}
///
/// Gets or sets a position of the window.
///
/// Thrown when value is null.
/// 4
public Position2D WindowPosition
{
get
{
return GetPosition();
}
set
{
SetPosition(value);
}
}
///
/// Sets position and size of the window. This API guarantees that
/// both moving and resizing of window will appear on the screen at once.
///
[EditorBrowsable(EditorBrowsableState.Never)]
public Rectangle WindowPositionSize
{
get
{
Position2D position = GetPosition();
Size2D size = GetSize();
Rectangle ret = new Rectangle(position.X, position.Y, size.Width, size.Height);
position.Dispose();
return ret;
}
set
{
SetPositionSize(value);
}
}
internal static Vector4 DEFAULT_BACKGROUND_COLOR
{
get
{
global::System.IntPtr cPtr = Interop.Stage.DefaultBackgroundColorGet();
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 = Interop.Stage.DebugBackgroundColorGet();
Vector4 ret = (cPtr == global::System.IntPtr.Zero) ? null : new Vector4(cPtr, false);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
}
internal List LayersChildren
{
get
{
return childLayers;
}
}
///
/// Get the LayoutController for this Window.
///
internal LayoutController LayoutController
{
get
{
return localController;
}
}
///
/// 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)
{
Interop.Window.FeedKeyEvent(Key.getCPtr(keyEvent));
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
///
/// 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)
{
Interop.Window.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 = Interop.Window.IsFocusAcceptable(SwigCPtr);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
///
/// Shows the window if it is hidden.
///
/// 3
public void Show()
{
Interop.Window.Show(SwigCPtr);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
///
/// Hides the window if it is showing.
///
/// 3
public void Hide()
{
Interop.Window.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 = Interop.Window.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 = Interop.Window.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 = Interop.Window.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 = Interop.Window.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 = Interop.Window.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 = Interop.Window.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 = Interop.Window.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 = Interop.Window.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)
{
Interop.Window.SetInputRegion(SwigCPtr, Rectangle.getCPtr(inputRegion));
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)
{
var ret = (OperationResult)Interop.Window.SetNotificationLevel(SwigCPtr, (int)level);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret == OperationResult.Succeed;
}
///
/// Gets a priority level for the specified notification window.
///
/// The notification window level.
/// 3
public NotificationLevel GetNotificationLevel()
{
NotificationLevel ret = (NotificationLevel)Interop.Window.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)
{
Interop.Window.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 = Interop.Window.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)
{
var ret = (OperationResult)Interop.Window.SetScreenOffMode(SwigCPtr, (int)screenOffMode);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret == OperationResult.Succeed;
}
///
/// Gets the screen mode of the window.
///
/// The screen off mode.
/// 4
public ScreenOffMode GetScreenOffMode()
{
ScreenOffMode ret = (ScreenOffMode)Interop.Window.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)
{
var ret = (OperationResult)Interop.Window.SetBrightness(SwigCPtr, brightness);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret == OperationResult.Succeed;
}
///
/// Gets the preferred brightness of the window.
///
/// The preferred brightness.
/// 3
public int GetBrightness()
{
int ret = Interop.Window.GetBrightness(SwigCPtr);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
///
/// 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)
{
Interop.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()
{
Interop.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()
{
Interop.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()
{
Interop.Window.Activate(SwigCPtr);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
///
/// Gets the default ( root ) layer.
///
/// The root layer.
/// 3
public Layer GetDefaultLayer()
{
return this.GetRootLayer();
}
///
/// Add a child view to window.
///
/// the child should be added to the window.
/// 3
public void Add(View view)
{
Interop.Actor.Add(Layer.getCPtr(GetRootLayer()), View.getCPtr(view));
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
this.GetRootLayer().AddViewToLayerList(view); // Maintain the children list in the Layer
if (null != view)
{
view.InternalParent = this.GetRootLayer();
}
}
///
/// Remove a child view from window.
///
/// the child to be removed.
/// 3
public void Remove(View view)
{
Interop.Actor.Remove(Layer.getCPtr(GetRootLayer()), View.getCPtr(view));
this.GetRootLayer().RemoveViewFromLayerList(view); // Maintain the children list in the Layer
if (null != view)
{
view.InternalParent = null;
}
}
///
/// 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;
}
}
///
/// Destroy the window immediately.
///
[EditorBrowsable(EditorBrowsableState.Never)]
public void Destroy()
{
this.Dispose();
}
///
/// 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)
{
Interop.Stage.KeepRendering(stageCPtr, durationSeconds);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
///
/// 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 = Interop.Window.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 = Interop.Window.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 = Interop.Window.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 = Interop.Window.UngrabKey(HandleRef.ToIntPtr(this.SwigCPtr), DaliKey);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
///
/// Sets the 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 = Interop.Window.SetKeyboardRepeatInfo(rate, delay);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
///
/// Gets the 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 = Interop.Window.GetKeyboardRepeatInfo(out rate, out delay);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
///
/// Adds a layer to the stage.
///
/// Layer to add.
/// Thrown when layer is null.
/// 3
public void AddLayer(Layer layer)
{
Add(layer);
}
///
/// Removes a layer from the stage.
///
/// Layer to remove.
/// Thrown when layer is null.
/// 3
public void RemoveLayer(Layer layer)
{
Remove(layer);
}
///
/// Feeds a key event into the window.
///
/// The key event to feed.
/// 5
public void FeedKey(Key keyEvent)
{
Interop.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()
{
Interop.Window.RenderOnce(SwigCPtr);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
///
/// Sets whether the window is transparent or not.
///
/// Whether the window is transparent or not.
/// 5
public void SetTransparency(bool transparent)
{
Interop.Window.SetTransparency(SwigCPtr, transparent);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
// Setting transparency of the window should request a relayout of the tree in the case the window changes from fully transparent.
}
///
/// Sets parent window of the window.
/// After setting that, these windows do together when raise-up, lower and iconified/deiconified.
/// Initially, the window is located on top of the parent. The window can go below parent by calling Lower().
/// If parent's window stack is changed by calling Raise() or Lower(), child windows are located on top of the parent again.
///
/// The parent window.
/// 6
/// http://tizen.org/feature/opengles.surfaceless_context
/// The required feature is not supported.
public void SetParent(Window parent)
{
if (IsSupportedMultiWindow() == false)
{
NUILog.Error("This device does not support surfaceless_context. So Window cannot be created. ");
}
Interop.Window.SetParent(SwigCPtr, Window.getCPtr(parent));
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
///
/// Unsets parent window of the window.
/// After unsetting, the window is disconnected his parent window.
///
/// 6
/// http://tizen.org/feature/opengles.surfaceless_context
/// The required feature is not supported.
public void Unparent()
{
if (IsSupportedMultiWindow() == false)
{
NUILog.Error("Fail to create window. because this device does not support opengles.surfaceless_context.");
}
Interop.Window.Unparent(SwigCPtr);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
///
/// Gets parent window of the window.
///
/// The parent window of the window.
/// 6
/// http://tizen.org/feature/opengles.surfaceless_context
/// The required feature is not supported.
[System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1721: Property names should not match get methods")]
public Window GetParent()
{
if (IsSupportedMultiWindow() == false)
{
NUILog.Error("This device does not support surfaceless_context. So Window cannot be created. ");
}
Window ret = Registry.GetManagedBaseHandleFromNativePtr(Interop.Window.GetParent(SwigCPtr)) as Window;
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
/// This will be public opened in tizen_next after ACR done. Before ACR, need to be hidden as inhouse API.
[EditorBrowsable(EditorBrowsableState.Never)]
public void ObjectDump()
{
Layer rootLayer = GetRootLayer();
foreach (View view in rootLayer.Children)
{
view.ObjectDump();
}
}
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 bool IsInstalled()
{
bool ret = Interop.Stage.IsInstalled();
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
///
/// Adds an orientation to the list of available orientations.
///
/// The available orientation to add
/// 6
public void AddAvailableOrientation(Window.WindowOrientation orientation)
{
Interop.Window.AddAvailableOrientation(SwigCPtr, (int)orientation);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
///
/// Removes an orientation from the list of available orientations.
///
/// The available orientation to remove.
/// 6
public void RemoveAvailableOrientation(Window.WindowOrientation orientation)
{
Interop.Window.RemoveAvailableOrientation(SwigCPtr, (int)orientation);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
///
/// Sets a preferred orientation.
///
/// The preferred orientation.
/// 6
public void SetPreferredOrientation(Window.WindowOrientation orientation)
{
Interop.Window.SetPreferredOrientation(SwigCPtr, (int)orientation);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
///
/// Gets the preferred orientation.
///
/// 6
/// The preferred orientation if previously set, or none.
public Window.WindowOrientation GetPreferredOrientation()
{
Window.WindowOrientation ret = (Window.WindowOrientation)Interop.Window.GetPreferredOrientation(SwigCPtr);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
///
/// Gets current orientation of the window.
///
/// 6
/// The current window orientation if previously set, or none.
[EditorBrowsable(EditorBrowsableState.Never)]
public Window.WindowOrientation GetCurrentOrientation()
{
Window.WindowOrientation ret = (Window.WindowOrientation)Interop.Window.GetCurrentOrientation(SwigCPtr);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
///
/// Sets available orientations of the window.
/// This API is for setting several orientations one time.
///
/// The list of orientations.
/// 6
[EditorBrowsable(EditorBrowsableState.Never)]
public void SetAvailableOrientations(List orientations)
{
if (null == orientations)
{
throw new ArgumentNullException(nameof(orientations));
}
PropertyArray orientationArray = new PropertyArray();
for (int i = 0; i < orientations.Count; i++)
{
PropertyValue value = new PropertyValue((int)orientations[i]);
orientationArray.PushBack(value);
value.Dispose();
}
Interop.Window.SetAvailableOrientations(SwigCPtr, PropertyArray.getCPtr(orientationArray), orientations.Count);
orientationArray.Dispose();
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
///
/// Sets window position and size for specific orientation.
/// This api reserves the position and size per orientation to display server.
/// When the device is rotated, the window is moved/resized with the reserved position/size by display server.
/// Currently, it only works when the window's type is WindowType::Ime.
/// It means this function is only for IME window of internal keyboard application.
/// It is only for internal keyboard application.
/// This should be hidden.
///
/// The reserved position and size for the orientation.
/// The orientation.
[EditorBrowsable(EditorBrowsableState.Never)]
public void SetPositionSizeWithOrientation(Rectangle positionSize, Window.WindowOrientation orientation)
{
Interop.Window.SetPositionSizeWithOrientation(SwigCPtr, Rectangle.getCPtr(positionSize), (int)orientation);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
///
/// Get native window ID
///
/// native window ID
[EditorBrowsable(EditorBrowsableState.Never)]
public int GetNativeId()
{
int ret = Interop.Window.GetNativeId(SwigCPtr);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
internal Any GetNativeHandle()
{
Any ret = new Any(Interop.WindowInternal.WindowGetNativeHandle(SwigCPtr), true);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
internal void Add(Layer layer)
{
if (null == layer)
{
throw new ArgumentNullException(nameof(layer));
}
Interop.Window.Add(SwigCPtr, Layer.getCPtr(layer));
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
LayersChildren?.Add(layer);
layer.SetWindow(this);
}
internal void Remove(Layer layer)
{
if (null == layer)
{
throw new ArgumentNullException(nameof(layer));
}
Interop.Window.Remove(SwigCPtr, Layer.getCPtr(layer));
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
LayersChildren?.Remove(layer);
layer.SetWindow(null);
}
internal Vector2 GetSize()
{
var val = new Uint16Pair(Interop.Window.GetSize(SwigCPtr), true);
Vector2 ret = new Vector2(val.GetWidth(), val.GetHeight());
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
/// This will be public opened in next tizen after ACR done. Before ACR, need to be hidden as inhouse API.
[EditorBrowsable(EditorBrowsableState.Never)]
public RenderTaskList GetRenderTaskList()
{
RenderTaskList ret = new RenderTaskList(Interop.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;
}
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(Interop.Window.GetRootLayer(SwigCPtr), true);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
LayersChildren?.Add(rootLayer);
rootLayer.SetWindow(this);
}
return rootLayer;
}
internal void SetBackgroundColor(Vector4 color)
{
Interop.Window.SetBackgroundColor(SwigCPtr, Vector4.getCPtr(color));
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
internal Vector4 GetBackgroundColor()
{
Vector4 ret = new Vector4(Interop.Window.GetBackgroundColor(SwigCPtr), true);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
internal Vector2 GetDpi()
{
Vector2 ret = new Vector2(Interop.Stage.GetDpi(stageCPtr), true);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
internal ObjectRegistry GetObjectRegistry()
{
ObjectRegistry ret = new ObjectRegistry(Interop.Stage.GetObjectRegistry(stageCPtr), true);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
internal void SetRenderingBehavior(RenderingBehaviorType renderingBehavior)
{
Interop.Stage.SetRenderingBehavior(stageCPtr, (int)renderingBehavior);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
internal RenderingBehaviorType GetRenderingBehavior()
{
RenderingBehaviorType ret = (RenderingBehaviorType)Interop.Stage.GetRenderingBehavior(stageCPtr);
if (NDalicPINVOKE.SWIGPendingException.Pending)
throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
internal void SetWindowSize(Size2D size)
{
if (null == size)
{
throw new ArgumentNullException(nameof(size));
}
var val = new Uint16Pair((uint)size.Width, (uint)size.Height);
Interop.Window.SetSize(SwigCPtr, Uint16Pair.getCPtr(val));
val.Dispose();
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
// Resetting Window size should request a relayout of the tree.
}
internal Size2D GetWindowSize()
{
var val = new Uint16Pair(Interop.Window.GetSize(SwigCPtr), true);
Size2D ret = new Size2D(val.GetWidth(), val.GetHeight());
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
internal void SetPosition(Position2D position)
{
if (null == position)
{
throw new ArgumentNullException(nameof(position));
}
var val = new Uint16Pair((uint)position.X, (uint)position.Y);
Interop.Window.SetPosition(SwigCPtr, Uint16Pair.getCPtr(val));
val.Dispose();
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
// Setting Position of the window should request a relayout of the tree.
}
internal Position2D GetPosition()
{
var val = new Uint16Pair(Interop.Window.GetPosition(SwigCPtr), true);
Position2D ret = new Position2D(val.GetX(), val.GetY());
val.Dispose();
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
internal void SetPositionSize(Rectangle positionSize)
{
Interop.Window.SetPositionSize(SwigCPtr, Rectangle.getCPtr(positionSize));
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
// Setting Position of the window should request a relayout of the tree.
}
///
/// Enables the floating mode of window.
/// The floating mode is to support window is moved or resized by display server.
/// For example, if the video-player window sets the floating mode,
/// then display server changes its geometry and handles it like a popup.
/// The way of handling floating mode window is decided by display server.
/// A special display server(as a Tizen display server) supports this mode.
///
/// Enable floating mode or not.
[EditorBrowsable(EditorBrowsableState.Never)]
public void EnableFloatingMode(bool enable)
{
Interop.Window.EnableFloatingMode(SwigCPtr, enable);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
///
/// Requests to display server for the window is moved by display server.
/// It can be work with setting window floating mode.
///
[EditorBrowsable(EditorBrowsableState.Never)]
public void RequestMoveToServer()
{
Interop.Window.RequestMoveToServer(SwigCPtr);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
///
/// Requests to display server for the window is resized by display server.
/// It can be work with setting window floating mode.
///
/// It is indicated the window's side or edge for starting point.
[EditorBrowsable(EditorBrowsableState.Never)]
public void RequestResizeToServer(ResizeDirection direction)
{
Interop.Window.RequestResizeToServer(SwigCPtr, (int)direction);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
///
/// Adds input region.
///
/// The added region to accept input events.
[EditorBrowsable(EditorBrowsableState.Never)]
public void AddInputRegion(Rectangle inputRegion)
{
Interop.Window.AddInputRegion(SwigCPtr, Rectangle.getCPtr(inputRegion));
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
///
/// Subtracts input region.
///
/// The subtracted region to except input events.
[EditorBrowsable(EditorBrowsableState.Never)]
public void SubtractInputRegion(Rectangle inputRegion)
{
Interop.Window.SubtractInputRegion(SwigCPtr, Rectangle.getCPtr(inputRegion));
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
///
/// Add FrameUpdateCallback
///
[EditorBrowsable(EditorBrowsableState.Never)]
public void AddFrameUpdateCallback(FrameUpdateCallbackInterface frameUpdateCallback)
{
frameUpdateCallback?.AddFrameUpdateCallback(stageCPtr, Layer.getCPtr(GetRootLayer()));
}
///
/// Remove FrameUpdateCallback
///
[EditorBrowsable(EditorBrowsableState.Never)]
public void RemoveFrameUpdateCallback(FrameUpdateCallbackInterface frameUpdateCallback)
{
frameUpdateCallback?.RemoveFrameUpdateCallback(stageCPtr);
}
///
/// Dispose for Window
///
[EditorBrowsable(EditorBrowsableState.Never)]
protected override void Dispose(DisposeTypes type)
{
if (disposed)
{
return;
}
if (type == DisposeTypes.Explicit)
{
//Called by User
//Release your own managed resources here.
//You should release all of your own disposable objects here.
if (rootLayer != null)
{
rootLayer.Dispose();
}
localController?.Dispose();
foreach (var layer in childLayers)
{
if (layer != null)
{
layer.Dispose();
}
}
childLayers.Clear();
}
this.DisconnectNativeSignals();
base.Dispose(type);
}
/// This will not be public opened.
[EditorBrowsable(EditorBrowsableState.Never)]
protected override void ReleaseSwigCPtr(System.Runtime.InteropServices.HandleRef swigCPtr)
{
Interop.Window.DeleteWindow(swigCPtr);
}
private static Dictionary frameCallbackList = new Dictionary();
private static readonly object locker = new object();
private static int key = 0;
private static FrameCallbackType internalHookFrameCallback = OnInternalHookFrameCallback;
private struct internalHookCallbackType
{
public FrameCallbackType userCallback;
public int frameId;
}
private static void OnInternalHookFrameCallback(int id)
{
lock (locker)
{
if (frameCallbackList.ContainsKey(id))
{
if (frameCallbackList[id].userCallback != null)
{
frameCallbackList[id].userCallback.Invoke(frameCallbackList[id].frameId);
frameCallbackList.Remove(id);
}
else
{
NUILog.Error($"found userCallback is NULL");
frameCallbackList.Remove(id);
}
}
}
}
private int AddInterHookCallback(FrameCallbackType callback, int frameId)
{
if (null == callback)
{
throw new ArgumentNullException(nameof(callback), "FrameCallbackType should not be null");
}
var assignedKey = 0;
lock (locker)
{
key++;
assignedKey = key;
frameCallbackList.Add(assignedKey, new internalHookCallbackType()
{
userCallback = callback,
frameId = frameId,
});
}
return assignedKey;
}
///
/// Type of callback which is called when the frame rendering is done by graphics driver or when the frame is displayed on display.
///
/// The Id to specify the frame. It will be passed when the callback is called.
[EditorBrowsable(EditorBrowsableState.Never)]
public delegate void FrameCallbackType(int frameId);
///
/// Adds a callback that is called when the frame rendering is done by the graphics driver.
/// A callback of the following type may be used:
///
/// void MyFunction( int frameId )
///
/// This callback will be deleted once it is called.
///
/// Ownership of the callback is passed onto this class
///
///
/// The function to call
/// The Id to specify the frame. It will be passed when the callback is called.
/// This exception can occur by the callback is null.
[EditorBrowsable(EditorBrowsableState.Never)]
public void AddFrameRenderedCallback(FrameCallbackType callback, int frameId)
{
var assignedKey = AddInterHookCallback(callback, frameId);
Interop.WindowInternal.AddFrameRenderedCallback(SwigCPtr, new HandleRef(this, Marshal.GetFunctionPointerForDelegate(internalHookFrameCallback)), assignedKey);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
///
/// Adds a callback that is called when the frame is displayed on the display.
/// A callback of the following type may be used:
///
/// void MyFunction( int frameId )
///
/// This callback will be deleted once it is called.
///
/// Ownership of the callback is passed onto this class
///
///
/// The function to call
/// The Id to specify the frame. It will be passed when the callback is called.
/// This exception can occur by the callback is null.
[EditorBrowsable(EditorBrowsableState.Never)]
public void AddFramePresentedCallback(FrameCallbackType callback, int frameId)
{
var assignedKey = AddInterHookCallback(callback, frameId);
Interop.WindowInternal.AddFramePresentedCallback(SwigCPtr, new HandleRef(this, Marshal.GetFunctionPointerForDelegate(internalHookFrameCallback)), assignedKey);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
///
/// Search through this Window for a Layer with the given unique ID.
///
/// The ID of the Layer to find.
/// Hidden-API
/// A handle to the Layer if found, or an empty handle if not.
[EditorBrowsable(EditorBrowsableState.Never)]
public Layer FindLayerByID(uint id)
{
Layer defaultLayer = this.GetDefaultLayer();
IntPtr cPtr = Interop.Actor.FindChildById(defaultLayer.SwigCPtr, id);
Layer ret = this.GetInstanceSafely(cPtr);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
}
}