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 InterceptKeyEventDelegateType stageInterceptKeyCallbackDelegate;
38 private EventCallbackDelegateType0 stageEventProcessingFinishedEventCallbackDelegate;
39 private EventHandler stageContextLostEventHandler;
40 private EventCallbackDelegateType0 stageContextLostEventCallbackDelegate;
41 private EventHandler stageContextRegainedEventHandler;
42 private EventCallbackDelegateType0 stageContextRegainedEventCallbackDelegate;
43 private EventHandler stageSceneCreatedEventHandler;
44 private EventCallbackDelegateType0 stageSceneCreatedEventCallbackDelegate;
45 private WindowResizeEventCallbackType windowResizeEventCallback;
46 private WindowFocusChangedEventCallbackType windowFocusChangedEventCallback2;
47 private TransitionEffectEventCallbackType transitionEffectEventCallback;
48 private WindowTransitionEffectSignal transitionEffectSignal;
49 private KeyboardRepeatSettingsChangedEventCallbackType keyboardRepeatSettingsChangedEventCallback;
50 private KeyboardRepeatSettingsChangedSignal keyboardRepeatSettingsChangedSignal;
51 private KeyEventSignal interceptKeyEventSignal;
52 private AuxiliaryMessageEventCallbackType auxiliaryMessageEventCallback;
54 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
55 private delegate void WindowFocusChangedEventCallbackType(IntPtr window, bool focusGained);
56 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
57 private delegate bool RootLayerTouchDataCallbackType(IntPtr view, IntPtr touchData);
58 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
59 private delegate bool WheelEventCallbackType(IntPtr view, IntPtr wheelEvent);
60 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
61 private delegate void WindowResizeEventCallbackType(IntPtr window, IntPtr windowSize);
62 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
63 private delegate void WindowFocusChangedEventCallbackType2(IntPtr window, bool focusGained);
64 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
65 private delegate void TransitionEffectEventCallbackType(IntPtr window, int state, int type);
66 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
67 private delegate void KeyboardRepeatSettingsChangedEventCallbackType();
68 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
69 private delegate void AuxiliaryMessageEventCallbackType(IntPtr kData, IntPtr vData, IntPtr optionsArray);
70 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
71 private delegate bool InterceptKeyEventDelegateType(IntPtr arg1);
74 /// FocusChanged event.
76 /// <since_tizen> 3 </since_tizen>
77 public event EventHandler<FocusChangedEventArgs> FocusChanged
81 if (windowFocusChangedEventHandler == null)
83 windowFocusChangedEventCallback = OnWindowFocusedChanged;
84 using WindowFocusSignalType windowFocusChangedSignal = WindowFocusChangedSignal();
85 windowFocusChangedSignal?.Connect(windowFocusChangedEventCallback);
88 windowFocusChangedEventHandler += value;
92 windowFocusChangedEventHandler -= value;
94 using WindowFocusSignalType windowFocusChangedSignal = WindowFocusChangedSignal();
95 if (windowFocusChangedEventHandler == null && windowFocusChangedSignal?.Empty() == false && windowFocusChangedEventCallback != null)
97 windowFocusChangedSignal?.Disconnect(windowFocusChangedEventCallback);
98 if(windowFocusChangedSignal?.Empty() == true)
100 windowFocusChangedEventCallback = null;
107 /// Emits the event when the screen is touched and when the touch ends.<br />
108 /// If there are multiple touch points then it is emitted when the first touch occurs and
109 /// when the last finger is lifted too.<br />
110 /// Even though incoming events are interrupted, the event occurs.<br />
112 /// <since_tizen> 3 </since_tizen>
113 public event EventHandler<TouchEventArgs> TouchEvent
117 if (rootLayerTouchDataEventHandler == null)
119 rootLayerTouchDataCallback = OnWindowTouch;
120 using TouchDataSignal touchDataSignal = this.TouchDataSignal();
121 touchDataSignal?.Connect(rootLayerTouchDataCallback);
123 rootLayerTouchDataEventHandler += value;
127 rootLayerTouchDataEventHandler -= value;
128 using TouchDataSignal touchDataSignal = this.TouchDataSignal();
129 if (rootLayerTouchDataEventHandler == null && touchDataSignal?.Empty() == false && rootLayerTouchDataCallback != null)
131 touchDataSignal?.Disconnect(rootLayerTouchDataCallback);
132 if(touchDataSignal?.Empty() == true)
134 rootLayerTouchDataCallback = null;
141 /// Emits the event when the wheel event is received.
143 /// <since_tizen> 3 </since_tizen>
144 public event EventHandler<WheelEventArgs> WheelEvent
148 if (stageWheelHandler == null)
150 wheelEventCallback = OnStageWheel;
151 using WheelSignal wheelSignal = WheelEventSignal();
152 wheelSignal?.Connect(wheelEventCallback);
154 stageWheelHandler += value;
156 if (DetentEventHandler == null)
158 DetentEventCallback = OnDetentEvent;
159 using StageWheelSignal stageWheelSignal = StageWheelEventSignal();
160 stageWheelSignal?.Connect(DetentEventCallback);
162 DetentEventHandler += value;
166 stageWheelHandler -= value;
167 using WheelSignal wheelSignal = WheelEventSignal();
168 if (stageWheelHandler == null && wheelSignal?.Empty() == false)
170 wheelSignal?.Disconnect(wheelEventCallback);
171 if(wheelSignal?.Empty() == true)
173 wheelEventCallback = null;
177 DetentEventHandler -= value;
178 using StageWheelSignal stageWheelSignal = StageWheelEventSignal();
179 if (DetentEventHandler == null && stageWheelSignal?.Empty() == false)
181 stageWheelSignal?.Disconnect(DetentEventCallback);
182 if(stageWheelSignal?.Empty() == true)
184 DetentEventCallback = null;
191 /// Emits the event when the key event is received.
193 /// <since_tizen> 3 </since_tizen>
194 public event EventHandler<KeyEventArgs> KeyEvent
198 if (stageKeyHandler == null)
200 stageKeyCallbackDelegate = OnStageKey;
201 using KeyEventSignal keyEventSignal = KeyEventSignal();
202 keyEventSignal?.Connect(stageKeyCallbackDelegate);
204 stageKeyHandler += value;
208 stageKeyHandler -= value;
209 using KeyEventSignal keyEventSignal = KeyEventSignal();
210 if (stageKeyHandler == null && keyEventSignal?.Empty() == false)
212 keyEventSignal?.Disconnect(stageKeyCallbackDelegate);
213 if(keyEventSignal?.Empty() == true)
215 stageKeyCallbackDelegate = null;
222 /// Intercepts KeyEvents in the window before dispatching KeyEvents to the child.<br />
223 /// If it returns true(consumed), no KeyEvent is delivered to the child.
225 [EditorBrowsable(EditorBrowsableState.Never)]
226 public event ReturnTypeEventHandler<object, KeyEventArgs, bool> InterceptKeyEvent
230 if (stageInterceptKeyHandler == null)
232 stageInterceptKeyCallbackDelegate = OnStageInterceptKey;
233 interceptKeyEventSignal = InterceptKeyEventSignal();
234 interceptKeyEventSignal?.Connect(stageInterceptKeyCallbackDelegate);
236 stageInterceptKeyHandler += value;
240 stageInterceptKeyHandler -= value;
241 if (stageInterceptKeyHandler == null && interceptKeyEventSignal?.Empty() == false)
243 interceptKeyEventSignal?.Disconnect(stageInterceptKeyCallbackDelegate);
244 if (interceptKeyEventSignal?.Empty() == true)
246 stageInterceptKeyCallbackDelegate = null;
254 /// Emits the event when the window resized.
256 /// <since_tizen> 3 </since_tizen>
257 public event EventHandler<ResizedEventArgs> Resized
261 if (windowResizeEventHandler == null)
263 windowResizeEventCallback = OnResized;
264 using ResizeSignal resizeSignal = ResizeSignal();
265 resizeSignal?.Connect(windowResizeEventCallback);
268 windowResizeEventHandler += value;
272 windowResizeEventHandler -= value;
274 using ResizeSignal resizeSignal = ResizeSignal();
275 if (windowResizeEventHandler == null && resizeSignal?.Empty() == false && windowResizeEventCallback != null)
277 resizeSignal?.Disconnect(windowResizeEventCallback);
278 if(resizeSignal?.Empty() == true)
280 windowResizeEventCallback = null;
287 /// Do not use this, that will be deprecated. Use 'FocusChanged' event instead.
289 /// <since_tizen> 3 </since_tizen>
290 /// Do not use this, that will be deprecated.
291 /// Instead Use FocusChanged.
292 [Obsolete("Do not use this, that will be deprecated. Use FocusChanged instead. " +
294 "NUIApplication.GetDefaultWindow().FocusChanged = OnFocusChanged; " +
295 "private void OnFocusChanged(object source, Window.FocusChangedEventArgs args) {...}")]
296 [EditorBrowsable(EditorBrowsableState.Never)]
297 public event EventHandler<FocusChangedEventArgs> WindowFocusChanged
301 if (windowFocusChangedEventHandler2 == null)
303 windowFocusChangedEventCallback2 = OnWindowFocusedChanged2;
304 using WindowFocusSignalType windowFocusChangedSignal2 = WindowFocusChangedSignal();
305 windowFocusChangedSignal2?.Connect(windowFocusChangedEventCallback2);
308 windowFocusChangedEventHandler2 += value;
312 windowFocusChangedEventHandler2 -= value;
314 using WindowFocusSignalType windowFocusChangedSignal2 = WindowFocusChangedSignal();
315 if (windowFocusChangedEventHandler2 == null && windowFocusChangedSignal2?.Empty() == false && windowFocusChangedEventCallback2 != null)
317 windowFocusChangedSignal2?.Disconnect(windowFocusChangedEventCallback2);
318 if(windowFocusChangedSignal2?.Empty() == true)
320 windowFocusChangedEventCallback2 = null;
329 [EditorBrowsable(EditorBrowsableState.Never)]
330 public event EventHandler<TransitionEffectEventArgs> TransitionEffect
334 if (transitionEffectHandler == null)
336 transitionEffectEventCallback = OnTransitionEffect;
337 TransitionEffectEventSignal().Connect(transitionEffectEventCallback);
339 transitionEffectHandler += value;
343 transitionEffectHandler -= value;
344 if (transitionEffectHandler == null && TransitionEffectEventSignal().Empty() == false)
346 TransitionEffectEventSignal().Disconnect(transitionEffectEventCallback);
347 if(TransitionEffectEventSignal().Empty() == true)
349 transitionEffectEventCallback = null;
356 /// Keyboard Repeat Settings Changed
358 [EditorBrowsable(EditorBrowsableState.Never)]
359 public event EventHandler KeyboardRepeatSettingsChanged
363 if (keyboardRepeatSettingsChangedHandler == null)
365 keyboardRepeatSettingsChangedEventCallback = OnKeyboardRepeatSettingsChanged;
366 KeyboardRepeatSettingsChangedEventSignal().Connect(keyboardRepeatSettingsChangedEventCallback);
368 keyboardRepeatSettingsChangedHandler += value;
372 keyboardRepeatSettingsChangedHandler -= value;
373 if (keyboardRepeatSettingsChangedHandler == null && KeyboardRepeatSettingsChangedEventSignal().Empty() == false)
375 KeyboardRepeatSettingsChangedEventSignal().Disconnect(keyboardRepeatSettingsChangedEventCallback);
376 if(KeyboardRepeatSettingsChangedEventSignal().Empty() == true)
378 keyboardRepeatSettingsChangedEventCallback = null;
385 /// ViewAdded will be triggered when the view added on Window
387 /// <since_tizen> 6 </since_tizen>
388 /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
389 [EditorBrowsable(EditorBrowsableState.Never)]
390 public event EventHandler ViewAdded;
391 private event EventHandler<FocusChangedEventArgs> windowFocusChangedEventHandler;
392 private event EventHandler<TouchEventArgs> rootLayerTouchDataEventHandler;
393 private event EventHandler<WheelEventArgs> stageWheelHandler;
394 private event EventHandler<KeyEventArgs> stageKeyHandler;
395 private ReturnTypeEventHandler<object, KeyEventArgs, bool> stageInterceptKeyHandler;
396 private event EventHandler stageEventProcessingFinishedEventHandler;
397 private event EventHandler<ResizedEventArgs> windowResizeEventHandler;
398 private event EventHandler<FocusChangedEventArgs> windowFocusChangedEventHandler2;
399 private event EventHandler<TransitionEffectEventArgs> transitionEffectHandler;
400 private event EventHandler keyboardRepeatSettingsChangedHandler;
401 private event EventHandler<AuxiliaryMessageEventArgs> auxiliaryMessageEventHandler;
403 internal void SendViewAdded(View view)
405 ViewAdded?.Invoke(view, EventArgs.Empty);
408 internal event EventHandler EventProcessingFinished
412 if (stageEventProcessingFinishedEventHandler == null)
414 stageEventProcessingFinishedEventCallbackDelegate = OnEventProcessingFinished;
415 using VoidSignal eventProcessingFinishedSignal = EventProcessingFinishedSignal();
416 eventProcessingFinishedSignal?.Connect(stageEventProcessingFinishedEventCallbackDelegate);
418 stageEventProcessingFinishedEventHandler += value;
423 stageEventProcessingFinishedEventHandler -= value;
425 using VoidSignal eventProcessingFinishedSignal = EventProcessingFinishedSignal();
426 if (stageEventProcessingFinishedEventHandler == null && eventProcessingFinishedSignal?.Empty() == false)
428 eventProcessingFinishedSignal?.Disconnect(stageEventProcessingFinishedEventCallbackDelegate);
429 if(eventProcessingFinishedSignal?.Empty() == true)
431 stageEventProcessingFinishedEventCallbackDelegate = null;
437 internal event EventHandler ContextLost
441 if (stageContextLostEventHandler == null)
443 stageContextLostEventCallbackDelegate = OnContextLost;
444 using VoidSignal contextLostSignal = ContextLostSignal();
445 contextLostSignal?.Connect(stageContextLostEventCallbackDelegate);
447 stageContextLostEventHandler += value;
451 stageContextLostEventHandler -= value;
453 using VoidSignal contextLostSignal = ContextLostSignal();
454 if (stageContextLostEventHandler == null && contextLostSignal?.Empty() == false)
456 contextLostSignal?.Disconnect(stageContextLostEventCallbackDelegate);
457 if(contextLostSignal?.Empty() == true)
459 stageContextLostEventCallbackDelegate = null;
465 internal event EventHandler ContextRegained
469 if (stageContextRegainedEventHandler == null)
471 stageContextRegainedEventCallbackDelegate = OnContextRegained;
472 using VoidSignal contextRegainedSignal = ContextRegainedSignal();
473 contextRegainedSignal?.Connect(stageContextRegainedEventCallbackDelegate);
475 stageContextRegainedEventHandler += value;
479 stageContextRegainedEventHandler -= value;
481 using VoidSignal contextRegainedSignal = ContextRegainedSignal();
482 if (stageContextRegainedEventHandler == null && contextRegainedSignal?.Empty() == false)
484 contextRegainedSignal?.Disconnect(stageContextRegainedEventCallbackDelegate);
485 if(contextRegainedSignal?.Empty() == true)
487 stageContextRegainedEventCallbackDelegate = null;
493 internal event EventHandler SceneCreated
497 if (stageSceneCreatedEventHandler == null)
499 stageSceneCreatedEventCallbackDelegate = OnSceneCreated;
500 using VoidSignal sceneCreatedSignal = SceneCreatedSignal();
501 sceneCreatedSignal?.Connect(stageSceneCreatedEventCallbackDelegate);
503 stageSceneCreatedEventHandler += value;
507 stageSceneCreatedEventHandler -= value;
509 using VoidSignal sceneCreatedSignal = SceneCreatedSignal();
510 if (stageSceneCreatedEventHandler == null && sceneCreatedSignal?.Empty() == false)
512 sceneCreatedSignal?.Disconnect(stageSceneCreatedEventCallbackDelegate);
513 if(sceneCreatedSignal?.Empty() == true)
515 stageSceneCreatedEventCallbackDelegate = null;
521 internal WindowFocusSignalType WindowFocusChangedSignal()
523 WindowFocusSignalType ret = new WindowFocusSignalType(Interop.Window.FocusChangedSignal(SwigCPtr), false);
524 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
528 internal WindowFocusSignalType FocusChangedSignal()
530 WindowFocusSignalType ret = new WindowFocusSignalType(Interop.Window.FocusChangedSignal(SwigCPtr), false);
531 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
535 internal KeyEventSignal KeyEventSignal()
537 KeyEventSignal ret = new KeyEventSignal(Interop.Window.KeyEventSignal(SwigCPtr), false);
538 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
542 internal KeyEventSignal InterceptKeyEventSignal()
544 KeyEventSignal ret = new KeyEventSignal(Interop.Window.InterceptKeyEventSignal(SwigCPtr), false);
545 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
549 internal VoidSignal EventProcessingFinishedSignal()
551 VoidSignal ret = new VoidSignal(Interop.StageSignal.EventProcessingFinishedSignal(stageCPtr), false);
552 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
556 internal TouchSignal TouchSignal()
558 TouchSignal ret = new TouchSignal(Interop.Window.TouchSignal(SwigCPtr), false);
559 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
563 internal TouchDataSignal TouchDataSignal()
565 TouchDataSignal ret = new TouchDataSignal(Interop.ActorSignal.ActorTouchSignal(Layer.getCPtr(GetRootLayer())), false);
566 if (NDalicPINVOKE.SWIGPendingException.Pending)
567 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
571 internal VoidSignal ContextLostSignal()
573 VoidSignal ret = new VoidSignal(Interop.StageSignal.ContextLostSignal(stageCPtr), false);
574 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
578 internal VoidSignal ContextRegainedSignal()
580 VoidSignal ret = new VoidSignal(Interop.StageSignal.ContextRegainedSignal(stageCPtr), false);
581 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
585 internal VoidSignal SceneCreatedSignal()
587 VoidSignal ret = new VoidSignal(Interop.StageSignal.SceneCreatedSignal(stageCPtr), false);
588 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
592 internal ResizeSignal ResizeSignal()
594 ResizeSignal ret = new ResizeSignal(Interop.Window.ResizeSignal(SwigCPtr), false);
595 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
599 internal System.IntPtr GetNativeWindowHandler()
601 System.IntPtr ret = Interop.Window.GetNativeWindowHandler(HandleRef.ToIntPtr(this.SwigCPtr));
602 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
607 /// Disconnect all native signals
609 /// <since_tizen> 5 </since_tizen>
610 internal void DisconnectNativeSignals()
612 if (windowFocusChangedEventCallback != null)
614 using WindowFocusSignalType windowFocusChangedSignal = WindowFocusChangedSignal();
615 if( windowFocusChangedSignal?.Empty() == false )
617 windowFocusChangedSignal?.Disconnect(windowFocusChangedEventCallback);
618 windowFocusChangedEventCallback = null;
622 if (rootLayerTouchDataCallback != null)
624 using TouchDataSignal touchDataSignal = TouchDataSignal();
625 if( touchDataSignal?.Empty() == false )
627 touchDataSignal?.Disconnect(rootLayerTouchDataCallback);
628 rootLayerTouchDataCallback = null;
632 if (wheelEventCallback != null)
634 using WheelSignal wheelSignal = WheelEventSignal();
635 if( wheelSignal?.Empty() == false )
637 wheelSignal?.Disconnect(wheelEventCallback);
638 wheelEventCallback = null;
642 if (DetentEventCallback != null)
644 using StageWheelSignal stageWheelSignal = StageWheelEventSignal();
645 if( stageWheelSignal?.Empty() == false )
647 stageWheelSignal?.Disconnect(DetentEventCallback);
648 DetentEventCallback = null;
652 if (stageKeyCallbackDelegate != null)
654 using KeyEventSignal keyEventSignal = KeyEventSignal();
655 if( keyEventSignal?.Empty() == false )
657 keyEventSignal?.Disconnect(stageKeyCallbackDelegate);
658 stageKeyCallbackDelegate = null;
662 if (stageInterceptKeyCallbackDelegate != null)
664 interceptKeyEventSignal?.Disconnect(stageInterceptKeyCallbackDelegate);
665 stageInterceptKeyCallbackDelegate = null;
668 if (stageEventProcessingFinishedEventCallbackDelegate != null)
670 using VoidSignal eventProcessingFinishedSignal = EventProcessingFinishedSignal();
671 if( eventProcessingFinishedSignal?.Empty() == false )
673 eventProcessingFinishedSignal?.Disconnect(stageEventProcessingFinishedEventCallbackDelegate);
674 stageEventProcessingFinishedEventCallbackDelegate = null;
678 if (stageContextLostEventCallbackDelegate != null)
680 using VoidSignal contextLostSignal = ContextLostSignal();
681 if( contextLostSignal?.Empty() == false )
683 contextLostSignal?.Disconnect(stageContextLostEventCallbackDelegate);
684 stageContextLostEventCallbackDelegate= null;
688 if (stageContextRegainedEventCallbackDelegate != null)
690 using VoidSignal contextRegainedSignal = ContextRegainedSignal();
691 if( contextRegainedSignal?.Empty() == false )
693 contextRegainedSignal?.Disconnect(stageContextRegainedEventCallbackDelegate);
694 stageContextRegainedEventCallbackDelegate = null;
698 if (stageSceneCreatedEventCallbackDelegate != null)
700 using VoidSignal sceneCreatedSignal = SceneCreatedSignal();
701 if( sceneCreatedSignal?.Empty() == false )
703 sceneCreatedSignal?.Disconnect(stageSceneCreatedEventCallbackDelegate);
704 stageSceneCreatedEventCallbackDelegate = null;
708 if (windowResizeEventCallback != null)
710 using ResizeSignal resizeSignal = ResizeSignal();
711 if( resizeSignal?.Empty() == false )
713 resizeSignal?.Disconnect(windowResizeEventCallback);
714 windowResizeEventCallback = null;
718 if (windowFocusChangedEventCallback2 != null)
720 using WindowFocusSignalType windowFocusChangedSignal2 = WindowFocusChangedSignal();
721 if( windowFocusChangedSignal2?.Empty() == false )
723 windowFocusChangedSignal2?.Disconnect(windowFocusChangedEventCallback2);
724 windowFocusChangedEventCallback2 = null;
728 if (transitionEffectSignal != null)
730 TransitionEffectEventSignal().Disconnect(transitionEffectEventCallback);
731 transitionEffectEventCallback = null;
734 if (keyboardRepeatSettingsChangedSignal != null)
736 KeyboardRepeatSettingsChangedEventSignal().Disconnect(keyboardRepeatSettingsChangedEventCallback);
737 keyboardRepeatSettingsChangedEventCallback = null;
740 if (auxiliaryMessageEventCallback != null)
742 using var signal = new WindowAuxiliaryMessageSignal(this);
743 signal.Disconnect(auxiliaryMessageEventCallback);
744 auxiliaryMessageEventHandler = null;
745 auxiliaryMessageEventCallback = null;
749 private StageWheelSignal StageWheelEventSignal()
751 StageWheelSignal ret = new StageWheelSignal(Interop.StageSignal.WheelEventSignal(stageCPtr), false);
752 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
756 private WheelSignal WheelEventSignal()
758 WheelSignal ret = new WheelSignal(Interop.ActorSignal.ActorWheelEventSignal(Layer.getCPtr(this.GetRootLayer())), false);
759 if (NDalicPINVOKE.SWIGPendingException.Pending)
760 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
764 private WindowTransitionEffectSignal TransitionEffectEventSignal()
766 if (transitionEffectSignal == null)
768 transitionEffectSignal = new WindowTransitionEffectSignal(this);
769 if (NDalicPINVOKE.SWIGPendingException.Pending)
770 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
772 return transitionEffectSignal;
775 private KeyboardRepeatSettingsChangedSignal KeyboardRepeatSettingsChangedEventSignal()
777 if (keyboardRepeatSettingsChangedSignal == null)
779 keyboardRepeatSettingsChangedSignal = new KeyboardRepeatSettingsChangedSignal(this);
780 if (NDalicPINVOKE.SWIGPendingException.Pending)
781 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
783 return keyboardRepeatSettingsChangedSignal;
786 private void OnWindowFocusedChanged(IntPtr window, bool focusGained)
788 if (window == IntPtr.Zero)
790 NUILog.Error("OnWindowFocusedChanged() Window is null! Do nothing!");
794 if (windowFocusChangedEventHandler != null)
796 FocusChangedEventArgs e = new FocusChangedEventArgs();
797 e.FocusGained = focusGained;
798 windowFocusChangedEventHandler(this, e);
802 private bool OnWindowTouch(IntPtr view, IntPtr touchData)
804 if (touchData == global::System.IntPtr.Zero)
806 NUILog.Error("touchData should not be null!");
810 if (rootLayerTouchDataEventHandler != null)
812 TouchEventArgs e = new TouchEventArgs();
813 e.Touch = Tizen.NUI.Touch.GetTouchFromPtr(touchData);
814 rootLayerTouchDataEventHandler(this, e);
819 private bool OnStageWheel(IntPtr rootLayer, IntPtr wheelEvent)
821 if (wheelEvent == global::System.IntPtr.Zero)
823 NUILog.Error("wheelEvent should not be null!");
827 if (stageWheelHandler != null)
829 WheelEventArgs e = new WheelEventArgs();
830 e.Wheel = Tizen.NUI.Wheel.GetWheelFromPtr(wheelEvent);
831 stageWheelHandler(this, e);
836 // Callback for Stage KeyEventsignal
837 private void OnStageKey(IntPtr data)
839 if (stageKeyHandler != null)
841 KeyEventArgs e = new KeyEventArgs();
842 e.Key = Tizen.NUI.Key.GetKeyFromPtr(data);
843 //here we send all data to user event handlers
844 stageKeyHandler(this, e);
848 // Callback for Stage InterceptKeyEventsignal
849 private bool OnStageInterceptKey(IntPtr data)
851 bool consumed = false;
852 if (stageInterceptKeyHandler != null)
854 KeyEventArgs e = new KeyEventArgs();
855 e.Key = Tizen.NUI.Key.GetKeyFromPtr(data);
856 //here we send all data to user event handlers
857 consumed = stageInterceptKeyHandler(this, e);
862 // Callback for Stage EventProcessingFinishedSignal
863 private void OnEventProcessingFinished()
865 stageEventProcessingFinishedEventHandler?.Invoke(this, null);
868 // Callback for Stage ContextLostSignal
869 private void OnContextLost()
871 stageContextLostEventHandler?.Invoke(this, null);
874 // Callback for Stage ContextRegainedSignal
875 private void OnContextRegained()
877 stageContextRegainedEventHandler?.Invoke(this, null);
880 // Callback for Stage SceneCreatedSignal
881 private void OnSceneCreated()
883 stageSceneCreatedEventHandler?.Invoke(this, null);
886 private void OnResized(IntPtr window, IntPtr windowSize)
888 if (window == IntPtr.Zero)
890 NUILog.Error("OnResized() Window is null! Do nothing!");
894 if (windowResizeEventHandler != null)
896 ResizedEventArgs e = new ResizedEventArgs();
897 // var val = new Uint16Pair(windowSize, false);
898 // e.WindowSize = new Size2D(val.GetWidth(), val.GetHeight());
901 // Workaround : windowSize should be valid pointer from dali,
902 // but currently it is fixed and is not Uint16Pair class.
903 // will be fixed later.
904 e.WindowSize = this.WindowSize;
905 windowResizeEventHandler(this, e);
909 private void OnWindowFocusedChanged2(IntPtr window, bool focusGained)
911 if (window == IntPtr.Zero)
913 NUILog.Error("OnWindowFocusedChanged() Window is null! Do nothing!");
917 if (windowFocusChangedEventHandler2 != null)
919 FocusChangedEventArgs e = new FocusChangedEventArgs();
920 e.FocusGained = focusGained;
921 windowFocusChangedEventHandler2(this, e);
925 private void OnTransitionEffect(IntPtr window, int state, int type)
927 if (window == global::System.IntPtr.Zero)
932 if (transitionEffectHandler != null)
934 TransitionEffectEventArgs e = new TransitionEffectEventArgs();
935 e.State = (EffectState)state;
936 e.Type = (EffectType)type;
937 transitionEffectHandler(this, e);
942 private void OnKeyboardRepeatSettingsChanged()
944 keyboardRepeatSettingsChangedHandler?.Invoke(this, null);
949 /// The focus changed event argument.
951 /// <since_tizen> 3 </since_tizen>
952 public class FocusChangedEventArgs : EventArgs
955 /// FocusGained flag.
957 /// <since_tizen> 3 </since_tizen>
958 public bool FocusGained
966 /// The touch event argument.
968 /// <since_tizen> 3 </since_tizen>
969 public class TouchEventArgs : EventArgs
976 /// <since_tizen> 3 </since_tizen>
991 /// Wheel event arguments.
993 /// <since_tizen> 3 </since_tizen>
994 public class WheelEventArgs : EventArgs
1001 /// <since_tizen> 3 </since_tizen>
1016 /// Key event arguments.
1018 /// <since_tizen> 3 </since_tizen>
1019 public class KeyEventArgs : EventArgs
1026 /// <since_tizen> 3 </since_tizen>
1041 /// Feeds a key event into the window.
1042 /// This resized event arguments.
1044 /// <since_tizen> 3 </since_tizen>
1045 public class ResizedEventArgs : EventArgs
1050 /// This window size.
1052 /// <since_tizen> 4 </since_tizen>
1053 public Size2D WindowSize
1067 /// Do not use this, that will be deprecated.
1069 /// <since_tizen> 3 </since_tizen>
1070 [Obsolete("Do not use this, that will be deprecated. Use FocusChangedEventArgs instead. " +
1072 "NUIApplication.GetDefaultWindow().FocusChanged = OnFocusChanged; " +
1073 "private void OnFocusChanged(object source, Window.FocusChangedEventArgs args) {...}")]
1074 [EditorBrowsable(EditorBrowsableState.Never)]
1075 [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")]
1076 public class WindowFocusChangedEventArgs : EventArgs
1079 /// Do not use this, that will be deprecated.
1081 /// <since_tizen> 3 </since_tizen>
1082 public bool FocusGained
1090 /// Contains and encapsulates Native Window handle.
1092 /// <since_tizen> 4 </since_tizen>
1093 [Obsolete("This has been deprecated in API9 and will be removed in API11. Use Window.NativeHandle instead.")]
1094 public class SafeNativeWindowHandle : SafeHandle
1097 ///Constructor, Native window handle is set to handle.
1099 /// <since_tizen> 4 </since_tizen>
1100 public SafeNativeWindowHandle() : base(IntPtr.Zero, false)
1102 SetHandle(NUIApplication.GetDefaultWindow().GetNativeWindowHandler());
1105 /// Null check if the handle is valid or not.
1107 /// <since_tizen> 4 </since_tizen>
1108 public override bool IsInvalid
1112 return this.handle == IntPtr.Zero;
1116 /// Release handle itself.
1118 /// <returns>true when released successfully.</returns>
1119 /// <since_tizen> 4 </since_tizen>
1120 protected override bool ReleaseHandle()
1127 /// TransitionEffectArgs
1129 [EditorBrowsable(EditorBrowsableState.Never)]
1130 public class TransitionEffectEventArgs : EventArgs
1132 private EffectState state;
1133 private EffectType type;
1138 [EditorBrowsable(EditorBrowsableState.Never)]
1139 public EffectState State
1153 [EditorBrowsable(EditorBrowsableState.Never)]
1154 public EffectType Type
1167 private EventHandler<WheelEventArgs> DetentEventHandler;
1169 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
1170 private delegate void DetentEventCallbackType(IntPtr arg1);
1172 private DetentEventCallbackType DetentEventCallback;
1174 private void OnDetentEvent(IntPtr wheelEvent)
1176 WheelEventArgs e = new WheelEventArgs();
1178 if (wheelEvent != global::System.IntPtr.Zero)
1180 e.Wheel = Wheel.GetWheelFromPtr(wheelEvent);
1183 DetentEventHandler?.Invoke(this, e);
1187 /// VisibilityChangedArgs
1189 [EditorBrowsable(EditorBrowsableState.Never)]
1190 public class VisibilityChangedEventArgs : EventArgs
1192 private bool visibility;
1196 [EditorBrowsable(EditorBrowsableState.Never)]
1197 public bool Visibility
1207 private void OnVisibilityChanged(IntPtr window, bool visibility)
1209 if (window == global::System.IntPtr.Zero)
1211 NUILog.Error("[ERR] OnVisibilityChanged() window is null");
1215 VisibilityChangedEventArgs e = new VisibilityChangedEventArgs();
1216 e.Visibility = visibility;
1217 if (VisibilityChangedEventHandler != null)
1219 VisibilityChangedEventHandler.Invoke(this, e);
1223 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
1224 private delegate void VisibilityChangedEventCallbackType(IntPtr window, bool visibility);
1225 private VisibilityChangedEventCallbackType VisibilityChangedEventCallback;
1226 private event EventHandler<VisibilityChangedEventArgs> VisibilityChangedEventHandler;
1227 private WindowVisibilityChangedEvent VisibilityChangedEventSignal;
1232 [EditorBrowsable(EditorBrowsableState.Never)]
1233 public event EventHandler<VisibilityChangedEventArgs> VisibilityChanged
1237 if (VisibilityChangedEventHandler == null)
1239 VisibilityChangedEventCallback = OnVisibilityChanged;
1240 VisibilityChangedEventSignal = new WindowVisibilityChangedEvent(this);
1241 VisibilityChangedEventSignal.Connect(VisibilityChangedEventCallback);
1243 VisibilityChangedEventHandler += value;
1247 VisibilityChangedEventHandler -= value;
1248 if (VisibilityChangedEventHandler == null)
1250 if (VisibilityChangedEventSignal != null)
1252 if (VisibilityChangedEventSignal.Empty() == false)
1254 VisibilityChangedEventSignal.Disconnect(VisibilityChangedEventCallback);
1255 if (VisibilityChangedEventSignal.Empty())
1257 VisibilityChangedEventCallback = null;
1266 /// VisibiltyChangedSignalEmit
1268 [EditorBrowsable(EditorBrowsableState.Never)]
1269 public void VisibiltyChangedSignalEmit(bool visibility)
1271 if (VisibilityChangedEventSignal == null)
1273 VisibilityChangedEventSignal = new WindowVisibilityChangedEvent(this);
1275 VisibilityChangedEventSignal.Emit(this, visibility);
1278 private void OnAuxiliaryMessage(IntPtr kData, IntPtr vData, IntPtr optionsArray)
1280 if(kData == IntPtr.Zero || vData == IntPtr.Zero)
1285 using var tmp = new PropertyArray(optionsArray, false);
1286 var size = tmp.Size();
1288 List<string> tmpList = new List<string>();
1290 for (int i = 0; i < size; i++)
1292 string option = "none";
1293 tmp.GetElementAt((uint)i).Get(out option);
1294 tmpList.Add(option);
1299 AuxiliaryMessageEventArgs e = new AuxiliaryMessageEventArgs();
1300 e.Key = StringToVoidSignal.GetResult(kData);
1301 e.Value = StringToVoidSignal.GetResult(vData);;
1302 e.Options = tmpList;
1304 auxiliaryMessageEventHandler?.Invoke(this, e);
1308 /// Auxiliary message is sent by displayer server when window's auxiliary was changed then display server sent the message.
1309 /// When client application added the window's auxiliary hint and if the auxiliary is changed,
1310 /// display server send the auxiliary message.
1311 /// Auxiliary message has the key, value and options.
1313 [EditorBrowsable(EditorBrowsableState.Never)]
1314 public event EventHandler<AuxiliaryMessageEventArgs> AuxiliaryMessage
1318 if (auxiliaryMessageEventHandler == null)
1320 auxiliaryMessageEventCallback = OnAuxiliaryMessage;
1321 using var signal = new WindowAuxiliaryMessageSignal(this);
1322 signal.Connect(auxiliaryMessageEventCallback);
1324 auxiliaryMessageEventHandler += value;
1328 auxiliaryMessageEventHandler -= value;
1329 if (auxiliaryMessageEventHandler == null)
1331 if (auxiliaryMessageEventCallback != null)
1333 using var signal = new WindowAuxiliaryMessageSignal(this);
1334 signal.Disconnect(auxiliaryMessageEventCallback);
1338 auxiliaryMessageEventCallback = null;