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.
19 using System.ComponentModel;
20 using System.Runtime.InteropServices;
21 using Tizen.NUI.BaseComponents;
22 using System.Collections.Generic;
27 /// The window class is used internally for drawing.<br />
28 /// The window has an orientation and indicator properties.<br />
30 /// <since_tizen> 3 </since_tizen>
31 public partial class Window
33 private WindowFocusChangedEventCallbackType windowFocusChangedEventCallback;
34 private RootLayerTouchDataCallbackType rootLayerTouchDataCallback;
35 private WheelEventCallbackType wheelEventCallback;
36 private EventCallbackDelegateType1 stageKeyCallbackDelegate;
37 private EventCallbackDelegateType0 stageEventProcessingFinishedEventCallbackDelegate;
38 private EventHandler stageContextLostEventHandler;
39 private EventCallbackDelegateType0 stageContextLostEventCallbackDelegate;
40 private EventHandler stageContextRegainedEventHandler;
41 private EventCallbackDelegateType0 stageContextRegainedEventCallbackDelegate;
42 private EventHandler stageSceneCreatedEventHandler;
43 private EventCallbackDelegateType0 stageSceneCreatedEventCallbackDelegate;
44 private WindowResizeEventCallbackType windowResizeEventCallback;
45 private WindowFocusChangedEventCallbackType windowFocusChangedEventCallback2;
46 private TransitionEffectEventCallbackType transitionEffectEventCallback;
47 private WindowTransitionEffectSignal transitionEffectSignal;
48 private KeyboardRepeatSettingsChangedEventCallbackType keyboardRepeatSettingsChangedEventCallback;
49 private KeyboardRepeatSettingsChangedSignal keyboardRepeatSettingsChangedSignal;
50 private AuxiliaryMessageEventCallbackType auxiliaryMessageEventCallback;
52 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
53 private delegate void WindowFocusChangedEventCallbackType(IntPtr window, bool focusGained);
54 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
55 private delegate bool RootLayerTouchDataCallbackType(IntPtr view, IntPtr touchData);
56 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
57 private delegate bool WheelEventCallbackType(IntPtr view, IntPtr wheelEvent);
58 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
59 private delegate void WindowResizeEventCallbackType(IntPtr window, IntPtr windowSize);
60 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
61 private delegate void WindowFocusChangedEventCallbackType2(IntPtr window, bool focusGained);
62 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
63 private delegate void TransitionEffectEventCallbackType(IntPtr window, int state, int type);
64 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
65 private delegate void KeyboardRepeatSettingsChangedEventCallbackType();
66 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
67 private delegate void AuxiliaryMessageEventCallbackType(IntPtr kData, IntPtr vData, IntPtr optionsArray);
70 /// FocusChanged event.
72 /// <since_tizen> 3 </since_tizen>
73 public event EventHandler<FocusChangedEventArgs> FocusChanged
77 if (windowFocusChangedEventHandler == null)
79 windowFocusChangedEventCallback = OnWindowFocusedChanged;
80 using WindowFocusSignalType windowFocusChangedSignal = WindowFocusChangedSignal();
81 windowFocusChangedSignal?.Connect(windowFocusChangedEventCallback);
84 windowFocusChangedEventHandler += value;
88 windowFocusChangedEventHandler -= value;
90 using WindowFocusSignalType windowFocusChangedSignal = WindowFocusChangedSignal();
91 if (windowFocusChangedEventHandler == null && windowFocusChangedSignal?.Empty() == false && windowFocusChangedEventCallback != null)
93 windowFocusChangedSignal?.Disconnect(windowFocusChangedEventCallback);
94 if(windowFocusChangedSignal?.Empty() == true)
96 windowFocusChangedEventCallback = null;
103 /// Emits the event when the screen is touched and when the touch ends.<br />
104 /// If there are multiple touch points then it is emitted when the first touch occurs and
105 /// when the last finger is lifted too.<br />
106 /// Even though incoming events are interrupted, the event occurs.<br />
108 /// <since_tizen> 3 </since_tizen>
109 public event EventHandler<TouchEventArgs> TouchEvent
113 if (rootLayerTouchDataEventHandler == null)
115 rootLayerTouchDataCallback = OnWindowTouch;
116 using TouchDataSignal touchDataSignal = this.TouchDataSignal();
117 touchDataSignal?.Connect(rootLayerTouchDataCallback);
119 rootLayerTouchDataEventHandler += value;
123 rootLayerTouchDataEventHandler -= value;
124 using TouchDataSignal touchDataSignal = this.TouchDataSignal();
125 if (rootLayerTouchDataEventHandler == null && touchDataSignal?.Empty() == false && rootLayerTouchDataCallback != null)
127 touchDataSignal?.Disconnect(rootLayerTouchDataCallback);
128 if(touchDataSignal?.Empty() == true)
130 rootLayerTouchDataCallback = null;
137 /// Emits the event when the wheel event is received.
139 /// <since_tizen> 3 </since_tizen>
140 public event EventHandler<WheelEventArgs> WheelEvent
144 if (stageWheelHandler == null)
146 wheelEventCallback = OnStageWheel;
147 using WheelSignal wheelSignal = WheelEventSignal();
148 wheelSignal?.Connect(wheelEventCallback);
150 stageWheelHandler += value;
152 if (DetentEventHandler == null)
154 DetentEventCallback = OnDetentEvent;
155 using StageWheelSignal stageWheelSignal = StageWheelEventSignal();
156 stageWheelSignal?.Connect(DetentEventCallback);
158 DetentEventHandler += value;
162 stageWheelHandler -= value;
163 using WheelSignal wheelSignal = WheelEventSignal();
164 if (stageWheelHandler == null && wheelSignal?.Empty() == false)
166 wheelSignal?.Disconnect(wheelEventCallback);
167 if(wheelSignal?.Empty() == true)
169 wheelEventCallback = null;
173 DetentEventHandler -= value;
174 using StageWheelSignal stageWheelSignal = StageWheelEventSignal();
175 if (DetentEventHandler == null && stageWheelSignal?.Empty() == false)
177 stageWheelSignal?.Disconnect(DetentEventCallback);
178 if(stageWheelSignal?.Empty() == true)
180 DetentEventCallback = null;
187 /// Emits the event when the key event is received.
189 /// <since_tizen> 3 </since_tizen>
190 public event EventHandler<KeyEventArgs> KeyEvent
194 if (stageKeyHandler == null)
196 stageKeyCallbackDelegate = OnStageKey;
197 using KeyEventSignal keyEventSignal = KeyEventSignal();
198 keyEventSignal?.Connect(stageKeyCallbackDelegate);
200 stageKeyHandler += value;
204 stageKeyHandler -= value;
205 using KeyEventSignal keyEventSignal = KeyEventSignal();
206 if (stageKeyHandler == null && keyEventSignal?.Empty() == false)
208 keyEventSignal?.Disconnect(stageKeyCallbackDelegate);
209 if(keyEventSignal?.Empty() == true)
211 stageKeyCallbackDelegate = null;
218 /// Emits the event when the window resized.
220 /// <since_tizen> 3 </since_tizen>
221 public event EventHandler<ResizedEventArgs> Resized
225 if (windowResizeEventHandler == null)
227 windowResizeEventCallback = OnResized;
228 using ResizeSignal resizeSignal = ResizeSignal();
229 resizeSignal?.Connect(windowResizeEventCallback);
232 windowResizeEventHandler += value;
236 windowResizeEventHandler -= value;
238 using ResizeSignal resizeSignal = ResizeSignal();
239 if (windowResizeEventHandler == null && resizeSignal?.Empty() == false && windowResizeEventCallback != null)
241 resizeSignal?.Disconnect(windowResizeEventCallback);
242 if(resizeSignal?.Empty() == true)
244 windowResizeEventCallback = null;
251 /// Please do not use! this will be deprecated. Please use 'FocusChanged' event instead.
253 /// <since_tizen> 3 </since_tizen>
254 /// Please do not use! this will be deprecated!
255 /// Instead please use FocusChanged.
256 [Obsolete("Please do not use! This will be deprecated! Please use FocusChanged instead! " +
258 "NUIApplication.GetDefaultWindow().FocusChanged = OnFocusChanged; " +
259 "private void OnFocusChanged(object source, Window.FocusChangedEventArgs args) {...}")]
260 [EditorBrowsable(EditorBrowsableState.Never)]
261 public event EventHandler<FocusChangedEventArgs> WindowFocusChanged
265 if (windowFocusChangedEventHandler2 == null)
267 windowFocusChangedEventCallback2 = OnWindowFocusedChanged2;
268 using WindowFocusSignalType windowFocusChangedSignal2 = WindowFocusChangedSignal();
269 windowFocusChangedSignal2?.Connect(windowFocusChangedEventCallback2);
272 windowFocusChangedEventHandler2 += value;
276 windowFocusChangedEventHandler2 -= value;
278 using WindowFocusSignalType windowFocusChangedSignal2 = WindowFocusChangedSignal();
279 if (windowFocusChangedEventHandler2 == null && windowFocusChangedSignal2?.Empty() == false && windowFocusChangedEventCallback2 != null)
281 windowFocusChangedSignal2?.Disconnect(windowFocusChangedEventCallback2);
282 if(windowFocusChangedSignal2?.Empty() == true)
284 windowFocusChangedEventCallback2 = null;
293 [EditorBrowsable(EditorBrowsableState.Never)]
294 public event EventHandler<TransitionEffectEventArgs> TransitionEffect
298 if (transitionEffectHandler == null)
300 transitionEffectEventCallback = OnTransitionEffect;
301 TransitionEffectEventSignal().Connect(transitionEffectEventCallback);
303 transitionEffectHandler += value;
307 transitionEffectHandler -= value;
308 if (transitionEffectHandler == null && TransitionEffectEventSignal().Empty() == false)
310 TransitionEffectEventSignal().Disconnect(transitionEffectEventCallback);
311 if(TransitionEffectEventSignal().Empty() == true)
313 transitionEffectEventCallback = null;
320 /// Keyboard Repeat Settings Changed
322 [EditorBrowsable(EditorBrowsableState.Never)]
323 public event EventHandler KeyboardRepeatSettingsChanged
327 if (keyboardRepeatSettingsChangedHandler == null)
329 keyboardRepeatSettingsChangedEventCallback = OnKeyboardRepeatSettingsChanged;
330 KeyboardRepeatSettingsChangedEventSignal().Connect(keyboardRepeatSettingsChangedEventCallback);
332 keyboardRepeatSettingsChangedHandler += value;
336 keyboardRepeatSettingsChangedHandler -= value;
337 if (keyboardRepeatSettingsChangedHandler == null && KeyboardRepeatSettingsChangedEventSignal().Empty() == false)
339 KeyboardRepeatSettingsChangedEventSignal().Disconnect(keyboardRepeatSettingsChangedEventCallback);
340 if(KeyboardRepeatSettingsChangedEventSignal().Empty() == true)
342 keyboardRepeatSettingsChangedEventCallback = null;
349 /// ViewAdded will be triggered when the view added on Window
351 /// <since_tizen> 6 </since_tizen>
352 /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
353 [EditorBrowsable(EditorBrowsableState.Never)]
354 public event EventHandler ViewAdded;
355 private event EventHandler<FocusChangedEventArgs> windowFocusChangedEventHandler;
356 private event EventHandler<TouchEventArgs> rootLayerTouchDataEventHandler;
357 private event EventHandler<WheelEventArgs> stageWheelHandler;
358 private event EventHandler<KeyEventArgs> stageKeyHandler;
359 private event EventHandler stageEventProcessingFinishedEventHandler;
360 private event EventHandler<ResizedEventArgs> windowResizeEventHandler;
361 private event EventHandler<FocusChangedEventArgs> windowFocusChangedEventHandler2;
362 private event EventHandler<TransitionEffectEventArgs> transitionEffectHandler;
363 private event EventHandler keyboardRepeatSettingsChangedHandler;
364 private event EventHandler<AuxiliaryMessageEventArgs> auxiliaryMessageEventHandler;
366 internal void SendViewAdded(View view)
368 ViewAdded?.Invoke(view, EventArgs.Empty);
371 internal event EventHandler EventProcessingFinished
375 if (stageEventProcessingFinishedEventHandler == null)
377 stageEventProcessingFinishedEventCallbackDelegate = OnEventProcessingFinished;
378 using VoidSignal eventProcessingFinishedSignal = EventProcessingFinishedSignal();
379 eventProcessingFinishedSignal?.Connect(stageEventProcessingFinishedEventCallbackDelegate);
381 stageEventProcessingFinishedEventHandler += value;
386 stageEventProcessingFinishedEventHandler -= value;
388 using VoidSignal eventProcessingFinishedSignal = EventProcessingFinishedSignal();
389 if (stageEventProcessingFinishedEventHandler == null && eventProcessingFinishedSignal?.Empty() == false)
391 eventProcessingFinishedSignal?.Disconnect(stageEventProcessingFinishedEventCallbackDelegate);
392 if(eventProcessingFinishedSignal?.Empty() == true)
394 stageEventProcessingFinishedEventCallbackDelegate = null;
400 internal event EventHandler ContextLost
404 if (stageContextLostEventHandler == null)
406 stageContextLostEventCallbackDelegate = OnContextLost;
407 using VoidSignal contextLostSignal = ContextLostSignal();
408 contextLostSignal?.Connect(stageContextLostEventCallbackDelegate);
410 stageContextLostEventHandler += value;
414 stageContextLostEventHandler -= value;
416 using VoidSignal contextLostSignal = ContextLostSignal();
417 if (stageContextLostEventHandler == null && contextLostSignal?.Empty() == false)
419 contextLostSignal?.Disconnect(stageContextLostEventCallbackDelegate);
420 if(contextLostSignal?.Empty() == true)
422 stageContextLostEventCallbackDelegate = null;
428 internal event EventHandler ContextRegained
432 if (stageContextRegainedEventHandler == null)
434 stageContextRegainedEventCallbackDelegate = OnContextRegained;
435 using VoidSignal contextRegainedSignal = ContextRegainedSignal();
436 contextRegainedSignal?.Connect(stageContextRegainedEventCallbackDelegate);
438 stageContextRegainedEventHandler += value;
442 stageContextRegainedEventHandler -= value;
444 using VoidSignal contextRegainedSignal = ContextRegainedSignal();
445 if (stageContextRegainedEventHandler == null && contextRegainedSignal?.Empty() == false)
447 contextRegainedSignal?.Disconnect(stageContextRegainedEventCallbackDelegate);
448 if(contextRegainedSignal?.Empty() == true)
450 stageContextRegainedEventCallbackDelegate = null;
456 internal event EventHandler SceneCreated
460 if (stageSceneCreatedEventHandler == null)
462 stageSceneCreatedEventCallbackDelegate = OnSceneCreated;
463 using VoidSignal sceneCreatedSignal = SceneCreatedSignal();
464 sceneCreatedSignal?.Connect(stageSceneCreatedEventCallbackDelegate);
466 stageSceneCreatedEventHandler += value;
470 stageSceneCreatedEventHandler -= value;
472 using VoidSignal sceneCreatedSignal = SceneCreatedSignal();
473 if (stageSceneCreatedEventHandler == null && sceneCreatedSignal?.Empty() == false)
475 sceneCreatedSignal?.Disconnect(stageSceneCreatedEventCallbackDelegate);
476 if(sceneCreatedSignal?.Empty() == true)
478 stageSceneCreatedEventCallbackDelegate = null;
484 internal WindowFocusSignalType WindowFocusChangedSignal()
486 WindowFocusSignalType ret = new WindowFocusSignalType(Interop.Window.FocusChangedSignal(SwigCPtr), false);
487 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
491 internal WindowFocusSignalType FocusChangedSignal()
493 WindowFocusSignalType ret = new WindowFocusSignalType(Interop.Window.FocusChangedSignal(SwigCPtr), false);
494 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
498 internal KeyEventSignal KeyEventSignal()
500 KeyEventSignal ret = new KeyEventSignal(Interop.Window.KeyEventSignal(SwigCPtr), false);
501 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
505 internal VoidSignal EventProcessingFinishedSignal()
507 VoidSignal ret = new VoidSignal(Interop.StageSignal.EventProcessingFinishedSignal(stageCPtr), false);
508 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
512 internal TouchSignal TouchSignal()
514 TouchSignal ret = new TouchSignal(Interop.Window.TouchSignal(SwigCPtr), false);
515 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
519 internal TouchDataSignal TouchDataSignal()
521 TouchDataSignal ret = new TouchDataSignal(Interop.ActorSignal.ActorTouchSignal(Layer.getCPtr(GetRootLayer())), false);
522 if (NDalicPINVOKE.SWIGPendingException.Pending)
523 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
527 internal VoidSignal ContextLostSignal()
529 VoidSignal ret = new VoidSignal(Interop.StageSignal.ContextLostSignal(stageCPtr), false);
530 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
534 internal VoidSignal ContextRegainedSignal()
536 VoidSignal ret = new VoidSignal(Interop.StageSignal.ContextRegainedSignal(stageCPtr), false);
537 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
541 internal VoidSignal SceneCreatedSignal()
543 VoidSignal ret = new VoidSignal(Interop.StageSignal.SceneCreatedSignal(stageCPtr), false);
544 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
548 internal ResizeSignal ResizeSignal()
550 ResizeSignal ret = new ResizeSignal(Interop.Window.ResizeSignal(SwigCPtr), false);
551 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
555 internal System.IntPtr GetNativeWindowHandler()
557 System.IntPtr ret = Interop.Window.GetNativeWindowHandler(HandleRef.ToIntPtr(this.SwigCPtr));
558 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
563 /// Disconnect all native signals
565 /// <since_tizen> 5 </since_tizen>
566 internal void DisconnectNativeSignals()
568 if (windowFocusChangedEventCallback != null)
570 using WindowFocusSignalType windowFocusChangedSignal = WindowFocusChangedSignal();
571 if( windowFocusChangedSignal?.Empty() == false )
573 windowFocusChangedSignal?.Disconnect(windowFocusChangedEventCallback);
574 windowFocusChangedEventCallback = null;
578 if (rootLayerTouchDataCallback != null)
580 using TouchDataSignal touchDataSignal = TouchDataSignal();
581 if( touchDataSignal?.Empty() == false )
583 touchDataSignal?.Disconnect(rootLayerTouchDataCallback);
584 rootLayerTouchDataCallback = null;
588 if (wheelEventCallback != null)
590 using WheelSignal wheelSignal = WheelEventSignal();
591 if( wheelSignal?.Empty() == false )
593 wheelSignal?.Disconnect(wheelEventCallback);
594 wheelEventCallback = null;
598 if (DetentEventCallback != null)
600 using StageWheelSignal stageWheelSignal = StageWheelEventSignal();
601 if( stageWheelSignal?.Empty() == false )
603 stageWheelSignal?.Disconnect(DetentEventCallback);
604 DetentEventCallback = null;
608 if (stageKeyCallbackDelegate != null)
610 using KeyEventSignal keyEventSignal = KeyEventSignal();
611 if( keyEventSignal?.Empty() == false )
613 keyEventSignal?.Disconnect(stageKeyCallbackDelegate);
614 stageKeyCallbackDelegate = null;
618 if (stageEventProcessingFinishedEventCallbackDelegate != null)
620 using VoidSignal eventProcessingFinishedSignal = EventProcessingFinishedSignal();
621 if( eventProcessingFinishedSignal?.Empty() == false )
623 eventProcessingFinishedSignal?.Disconnect(stageEventProcessingFinishedEventCallbackDelegate);
624 stageEventProcessingFinishedEventCallbackDelegate = null;
628 if (stageContextLostEventCallbackDelegate != null)
630 using VoidSignal contextLostSignal = ContextLostSignal();
631 if( contextLostSignal?.Empty() == false )
633 contextLostSignal?.Disconnect(stageContextLostEventCallbackDelegate);
634 stageContextLostEventCallbackDelegate= null;
638 if (stageContextRegainedEventCallbackDelegate != null)
640 using VoidSignal contextRegainedSignal = ContextRegainedSignal();
641 if( contextRegainedSignal?.Empty() == false )
643 contextRegainedSignal?.Disconnect(stageContextRegainedEventCallbackDelegate);
644 stageContextRegainedEventCallbackDelegate = null;
648 if (stageSceneCreatedEventCallbackDelegate != null)
650 using VoidSignal sceneCreatedSignal = SceneCreatedSignal();
651 if( sceneCreatedSignal?.Empty() == false )
653 sceneCreatedSignal?.Disconnect(stageSceneCreatedEventCallbackDelegate);
654 stageSceneCreatedEventCallbackDelegate = null;
658 if (windowResizeEventCallback != null)
660 using ResizeSignal resizeSignal = ResizeSignal();
661 if( resizeSignal?.Empty() == false )
663 resizeSignal?.Disconnect(windowResizeEventCallback);
664 windowResizeEventCallback = null;
668 if (windowFocusChangedEventCallback2 != null)
670 using WindowFocusSignalType windowFocusChangedSignal2 = WindowFocusChangedSignal();
671 if( windowFocusChangedSignal2?.Empty() == false )
673 windowFocusChangedSignal2?.Disconnect(windowFocusChangedEventCallback2);
674 windowFocusChangedEventCallback2 = null;
678 if (transitionEffectSignal != null)
680 TransitionEffectEventSignal().Disconnect(transitionEffectEventCallback);
681 transitionEffectEventCallback = null;
684 if (keyboardRepeatSettingsChangedSignal != null)
686 KeyboardRepeatSettingsChangedEventSignal().Disconnect(keyboardRepeatSettingsChangedEventCallback);
687 keyboardRepeatSettingsChangedEventCallback = null;
690 if (auxiliaryMessageEventCallback != null)
692 using var signal = new WindowAuxiliaryMessageSignal(this);
693 signal.Disconnect(auxiliaryMessageEventCallback);
694 auxiliaryMessageEventHandler = null;
695 auxiliaryMessageEventCallback = null;
699 private StageWheelSignal StageWheelEventSignal()
701 StageWheelSignal ret = new StageWheelSignal(Interop.StageSignal.WheelEventSignal(stageCPtr), false);
702 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
706 private WheelSignal WheelEventSignal()
708 WheelSignal ret = new WheelSignal(Interop.ActorSignal.ActorWheelEventSignal(Layer.getCPtr(this.GetRootLayer())), false);
709 if (NDalicPINVOKE.SWIGPendingException.Pending)
710 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
714 private WindowTransitionEffectSignal TransitionEffectEventSignal()
716 if (transitionEffectSignal == null)
718 transitionEffectSignal = new WindowTransitionEffectSignal(this);
719 if (NDalicPINVOKE.SWIGPendingException.Pending)
720 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
722 return transitionEffectSignal;
725 private KeyboardRepeatSettingsChangedSignal KeyboardRepeatSettingsChangedEventSignal()
727 if (keyboardRepeatSettingsChangedSignal == null)
729 keyboardRepeatSettingsChangedSignal = new KeyboardRepeatSettingsChangedSignal(this);
730 if (NDalicPINVOKE.SWIGPendingException.Pending)
731 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
733 return keyboardRepeatSettingsChangedSignal;
736 private void OnWindowFocusedChanged(IntPtr window, bool focusGained)
738 if (window == IntPtr.Zero)
740 NUILog.Error("OnWindowFocusedChanged() Window is null! Do nothing!");
744 if (windowFocusChangedEventHandler != null)
746 FocusChangedEventArgs e = new FocusChangedEventArgs();
747 e.FocusGained = focusGained;
748 windowFocusChangedEventHandler(this, e);
752 private bool OnWindowTouch(IntPtr view, IntPtr touchData)
754 if (touchData == global::System.IntPtr.Zero)
756 NUILog.Error("touchData should not be null!");
760 if (rootLayerTouchDataEventHandler != null)
762 TouchEventArgs e = new TouchEventArgs();
763 e.Touch = Tizen.NUI.Touch.GetTouchFromPtr(touchData);
764 rootLayerTouchDataEventHandler(this, e);
769 private bool OnStageWheel(IntPtr rootLayer, IntPtr wheelEvent)
771 if (wheelEvent == global::System.IntPtr.Zero)
773 NUILog.Error("wheelEvent should not be null!");
777 if (stageWheelHandler != null)
779 WheelEventArgs e = new WheelEventArgs();
780 e.Wheel = Tizen.NUI.Wheel.GetWheelFromPtr(wheelEvent);
781 stageWheelHandler(this, e);
786 // Callback for Stage KeyEventsignal
787 private void OnStageKey(IntPtr data)
789 if (stageKeyHandler != null)
791 KeyEventArgs e = new KeyEventArgs();
792 e.Key = Tizen.NUI.Key.GetKeyFromPtr(data);
793 //here we send all data to user event handlers
794 stageKeyHandler(this, e);
798 // Callback for Stage EventProcessingFinishedSignal
799 private void OnEventProcessingFinished()
801 stageEventProcessingFinishedEventHandler?.Invoke(this, null);
804 // Callback for Stage ContextLostSignal
805 private void OnContextLost()
807 stageContextLostEventHandler?.Invoke(this, null);
810 // Callback for Stage ContextRegainedSignal
811 private void OnContextRegained()
813 stageContextRegainedEventHandler?.Invoke(this, null);
816 // Callback for Stage SceneCreatedSignal
817 private void OnSceneCreated()
819 stageSceneCreatedEventHandler?.Invoke(this, null);
822 private void OnResized(IntPtr window, IntPtr windowSize)
824 if (window == IntPtr.Zero)
826 NUILog.Error("OnResized() Window is null! Do nothing!");
830 if (windowResizeEventHandler != null)
832 ResizedEventArgs e = new ResizedEventArgs();
833 // var val = new Uint16Pair(windowSize, false);
834 // e.WindowSize = new Size2D(val.GetWidth(), val.GetHeight());
837 // Workaround : windowSize should be valid pointer from dali,
838 // but currently it is fixed and is not Uint16Pair class.
839 // will be fixed later.
840 e.WindowSize = this.WindowSize;
841 windowResizeEventHandler(this, e);
845 private void OnWindowFocusedChanged2(IntPtr window, bool focusGained)
847 if (window == IntPtr.Zero)
849 NUILog.Error("OnWindowFocusedChanged() Window is null! Do nothing!");
853 if (windowFocusChangedEventHandler2 != null)
855 FocusChangedEventArgs e = new FocusChangedEventArgs();
856 e.FocusGained = focusGained;
857 windowFocusChangedEventHandler2(this, e);
861 private void OnTransitionEffect(IntPtr window, int state, int type)
863 if (window == global::System.IntPtr.Zero)
868 if (transitionEffectHandler != null)
870 TransitionEffectEventArgs e = new TransitionEffectEventArgs();
871 e.State = (EffectState)state;
872 e.Type = (EffectType)type;
873 transitionEffectHandler(this, e);
878 private void OnKeyboardRepeatSettingsChanged()
880 keyboardRepeatSettingsChangedHandler?.Invoke(this, null);
885 /// The focus changed event argument.
887 /// <since_tizen> 3 </since_tizen>
888 public class FocusChangedEventArgs : EventArgs
891 /// FocusGained flag.
893 /// <since_tizen> 3 </since_tizen>
894 public bool FocusGained
902 /// The touch event argument.
904 /// <since_tizen> 3 </since_tizen>
905 public class TouchEventArgs : EventArgs
912 /// <since_tizen> 3 </since_tizen>
927 /// Wheel event arguments.
929 /// <since_tizen> 3 </since_tizen>
930 public class WheelEventArgs : EventArgs
937 /// <since_tizen> 3 </since_tizen>
952 /// Key event arguments.
954 /// <since_tizen> 3 </since_tizen>
955 public class KeyEventArgs : EventArgs
962 /// <since_tizen> 3 </since_tizen>
977 /// Feeds a key event into the window.
978 /// This resized event arguments.
980 /// <since_tizen> 3 </since_tizen>
981 public class ResizedEventArgs : EventArgs
986 /// This window size.
988 /// <since_tizen> 4 </since_tizen>
989 public Size2D WindowSize
1003 /// Please do not use! this will be deprecated
1005 /// <since_tizen> 3 </since_tizen>
1006 [Obsolete("Please do not use! This will be deprecated! Please use FocusChangedEventArgs instead! " +
1008 "NUIApplication.GetDefaultWindow().FocusChanged = OnFocusChanged; " +
1009 "private void OnFocusChanged(object source, Window.FocusChangedEventArgs args) {...}")]
1010 [EditorBrowsable(EditorBrowsableState.Never)]
1011 [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")]
1012 public class WindowFocusChangedEventArgs : EventArgs
1015 /// Please do not use! this will be deprecated
1017 /// <since_tizen> 3 </since_tizen>
1018 public bool FocusGained
1026 /// Contains and encapsulates Native Window handle.
1028 /// <since_tizen> 4 </since_tizen>
1029 [Obsolete("Deprecated in API9, will be removed in API11. Please use Window.NativeHandle instead!")]
1030 public class SafeNativeWindowHandle : SafeHandle
1033 ///Constructor, Native window handle is set to handle.
1035 /// <since_tizen> 4 </since_tizen>
1036 public SafeNativeWindowHandle() : base(IntPtr.Zero, false)
1038 SetHandle(NUIApplication.GetDefaultWindow().GetNativeWindowHandler());
1041 /// Null check if the handle is valid or not.
1043 /// <since_tizen> 4 </since_tizen>
1044 public override bool IsInvalid
1048 return this.handle == IntPtr.Zero;
1052 /// Release handle itself.
1054 /// <returns>true when released successfully.</returns>
1055 /// <since_tizen> 4 </since_tizen>
1056 protected override bool ReleaseHandle()
1063 /// TransitionEffectArgs
1065 [EditorBrowsable(EditorBrowsableState.Never)]
1066 public class TransitionEffectEventArgs : EventArgs
1068 private EffectState state;
1069 private EffectType type;
1074 [EditorBrowsable(EditorBrowsableState.Never)]
1075 public EffectState State
1089 [EditorBrowsable(EditorBrowsableState.Never)]
1090 public EffectType Type
1103 private EventHandler<WheelEventArgs> DetentEventHandler;
1105 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
1106 private delegate void DetentEventCallbackType(IntPtr arg1);
1108 private DetentEventCallbackType DetentEventCallback;
1110 private void OnDetentEvent(IntPtr wheelEvent)
1112 WheelEventArgs e = new WheelEventArgs();
1114 if (wheelEvent != global::System.IntPtr.Zero)
1116 e.Wheel = Wheel.GetWheelFromPtr(wheelEvent);
1119 DetentEventHandler?.Invoke(this, e);
1123 /// VisibilityChangedArgs
1125 [EditorBrowsable(EditorBrowsableState.Never)]
1126 public class VisibilityChangedEventArgs : EventArgs
1128 private bool visibility;
1132 [EditorBrowsable(EditorBrowsableState.Never)]
1133 public bool Visibility
1143 private void OnVisibilityChanged(IntPtr window, bool visibility)
1145 if (window == global::System.IntPtr.Zero)
1147 NUILog.Error("[ERR] OnVisibilityChanged() window is null");
1151 VisibilityChangedEventArgs e = new VisibilityChangedEventArgs();
1152 e.Visibility = visibility;
1153 if (VisibilityChangedEventHandler != null)
1155 VisibilityChangedEventHandler.Invoke(this, e);
1159 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
1160 private delegate void VisibilityChangedEventCallbackType(IntPtr window, bool visibility);
1161 private VisibilityChangedEventCallbackType VisibilityChangedEventCallback;
1162 private event EventHandler<VisibilityChangedEventArgs> VisibilityChangedEventHandler;
1163 private WindowVisibilityChangedEvent VisibilityChangedEventSignal;
1168 [EditorBrowsable(EditorBrowsableState.Never)]
1169 public event EventHandler<VisibilityChangedEventArgs> VisibilityChanged
1173 if (VisibilityChangedEventHandler == null)
1175 VisibilityChangedEventCallback = OnVisibilityChanged;
1176 VisibilityChangedEventSignal = new WindowVisibilityChangedEvent(this);
1177 VisibilityChangedEventSignal.Connect(VisibilityChangedEventCallback);
1179 VisibilityChangedEventHandler += value;
1183 VisibilityChangedEventHandler -= value;
1184 if (VisibilityChangedEventHandler == null)
1186 if (VisibilityChangedEventSignal != null)
1188 if (VisibilityChangedEventSignal.Empty() == false)
1190 VisibilityChangedEventSignal.Disconnect(VisibilityChangedEventCallback);
1191 if (VisibilityChangedEventSignal.Empty())
1193 VisibilityChangedEventCallback = null;
1202 /// VisibiltyChangedSignalEmit
1204 [EditorBrowsable(EditorBrowsableState.Never)]
1205 public void VisibiltyChangedSignalEmit(bool visibility)
1207 if (VisibilityChangedEventSignal == null)
1209 VisibilityChangedEventSignal = new WindowVisibilityChangedEvent(this);
1211 VisibilityChangedEventSignal.Emit(this, visibility);
1214 private void OnAuxiliaryMessage(IntPtr kData, IntPtr vData, IntPtr optionsArray)
1216 if(kData == IntPtr.Zero || vData == IntPtr.Zero)
1221 using var tmp = new PropertyArray(optionsArray, false);
1222 var size = tmp.Size();
1224 List<string> tmpList = new List<string>();
1226 for (int i = 0; i < size; i++)
1228 string option = "none";
1229 tmp.GetElementAt((uint)i).Get(out option);
1230 tmpList.Add(option);
1235 AuxiliaryMessageEventArgs e = new AuxiliaryMessageEventArgs();
1236 e.Key = StringToVoidSignal.GetResult(kData);
1237 e.Value = StringToVoidSignal.GetResult(vData);;
1238 e.Options = tmpList;
1240 auxiliaryMessageEventHandler?.Invoke(this, e);
1244 /// Auxiliary message is sent by displayer server when window's auxiliary was changed then display server sent the message.
1245 /// When client application added the window's auxiliary hint and if the auxiliary is changed,
1246 /// display server send the auxiliary message.
1247 /// Auxiliary message has the key, value and options.
1249 [EditorBrowsable(EditorBrowsableState.Never)]
1250 public event EventHandler<AuxiliaryMessageEventArgs> AuxiliaryMessage
1254 if (auxiliaryMessageEventHandler == null)
1256 auxiliaryMessageEventCallback = OnAuxiliaryMessage;
1257 using var signal = new WindowAuxiliaryMessageSignal(this);
1258 signal.Connect(auxiliaryMessageEventCallback);
1260 auxiliaryMessageEventHandler += value;
1264 auxiliaryMessageEventHandler -= value;
1265 if (auxiliaryMessageEventHandler == null)
1267 if (auxiliaryMessageEventCallback != null)
1269 using var signal = new WindowAuxiliaryMessageSignal(this);
1270 signal.Disconnect(auxiliaryMessageEventCallback);
1274 auxiliaryMessageEventCallback = null;