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 RootLayerTouchDataCallbackType rootLayerInterceptTouchDataCallback;
36 private WheelEventCallbackType wheelEventCallback;
37 private EventCallbackDelegateType1 stageKeyCallbackDelegate;
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 WindowFocusSignalType windowFocusChangedSignal;
52 private WindowFocusSignalType windowFocusChangedSignal2;
53 private TouchDataSignal touchDataSignal;
54 private TouchSignal touchSignal;
55 private WheelSignal wheelSignal;
56 private StageWheelSignal stageWheelSignal;
57 private KeyEventSignal keyEventSignal;
58 private VoidSignal sceneCreatedSignal;
59 private ResizeSignal resizeSignal;
60 private VoidSignal eventProcessingFinishedSignal;
61 private VoidSignal contextLostSignal;
62 private VoidSignal contextRegainedSignal;
63 private AuxiliaryMessageEventCallbackType auxiliaryMessageEventCallback;
64 private TouchDataSignal interceptTouchDataSignal;
65 private TouchSignal interceptTouchSignal;
67 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
68 private delegate void WindowFocusChangedEventCallbackType(IntPtr window, bool focusGained);
69 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
70 private delegate bool RootLayerTouchDataCallbackType(IntPtr view, IntPtr touchData);
71 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
72 private delegate bool WheelEventCallbackType(IntPtr view, IntPtr wheelEvent);
73 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
74 private delegate void WindowResizeEventCallbackType(IntPtr window, IntPtr windowSize);
75 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
76 private delegate void WindowFocusChangedEventCallbackType2(IntPtr window, bool focusGained);
77 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
78 private delegate void TransitionEffectEventCallbackType(IntPtr window, int state, int type);
79 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
80 private delegate void KeyboardRepeatSettingsChangedEventCallbackType();
81 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
82 private delegate void AuxiliaryMessageEventCallbackType(IntPtr kData, IntPtr vData, IntPtr optionsArray);
85 /// FocusChanged event.
87 /// <since_tizen> 3 </since_tizen>
88 public event EventHandler<FocusChangedEventArgs> FocusChanged
92 if (windowFocusChangedEventHandler == null)
94 windowFocusChangedEventCallback = OnWindowFocusedChanged;
95 windowFocusChangedSignal = WindowFocusChangedSignal();
96 windowFocusChangedSignal?.Connect(windowFocusChangedEventCallback);
99 windowFocusChangedEventHandler += value;
103 windowFocusChangedEventHandler -= value;
105 if (windowFocusChangedEventHandler == null && windowFocusChangedSignal?.Empty() == false && windowFocusChangedEventCallback != null)
107 windowFocusChangedSignal?.Disconnect(windowFocusChangedEventCallback);
108 if (windowFocusChangedSignal?.Empty() == true)
110 windowFocusChangedEventCallback = null;
117 /// Emits the event when the screen is touched and when the touch ends.<br />
118 /// If there are multiple touch points then it is emitted when the first touch occurs and
119 /// when the last finger is lifted too.<br />
120 /// Even though incoming events are interrupted, the event occurs.<br />
122 /// <since_tizen> 3 </since_tizen>
123 public event EventHandler<TouchEventArgs> TouchEvent
127 if (rootLayerTouchDataEventHandler == null)
129 rootLayerTouchDataCallback = OnWindowTouch;
130 touchDataSignal = this.TouchDataSignal();
131 touchDataSignal?.Connect(rootLayerTouchDataCallback);
133 rootLayerTouchDataEventHandler += value;
137 rootLayerTouchDataEventHandler -= value;
138 touchSignal = TouchSignal();
139 if (rootLayerTouchDataEventHandler == null && touchSignal?.Empty() == false && rootLayerTouchDataCallback != null)
141 touchDataSignal?.Disconnect(rootLayerTouchDataCallback);
142 if (touchDataSignal?.Empty() == true)
144 rootLayerTouchDataCallback = null;
151 /// An event for the touched signal which can be used to subscribe or unsubscribe the event handler provided by the user.<br />
152 /// The touched signal is emitted when the touch input is received.<br />
153 /// This can receive touch events before child. <br />
154 /// If it returns false, the child can receive the touch event. If it returns true, the touch event is intercepted. So child cannot receive touch event.<br />
156 [EditorBrowsable(EditorBrowsableState.Never)]
157 public event ReturnTypeEventHandler<object, TouchEventArgs, bool> InterceptTouchEvent
161 if (rootLayerInterceptTouchDataEventHandler == null)
163 rootLayerInterceptTouchDataCallback = OnWindowInterceptTouch;
164 interceptTouchDataSignal = this.InterceptTouchDataSignal();
165 interceptTouchDataSignal?.Connect(rootLayerInterceptTouchDataCallback);
167 rootLayerInterceptTouchDataEventHandler += value;
171 rootLayerInterceptTouchDataEventHandler -= value;
172 interceptTouchSignal = TouchSignal();
173 if (rootLayerInterceptTouchDataEventHandler == null && interceptTouchSignal?.Empty() == false && rootLayerInterceptTouchDataCallback != null)
175 interceptTouchDataSignal?.Disconnect(rootLayerInterceptTouchDataCallback);
176 if (interceptTouchDataSignal?.Empty() == true)
178 rootLayerInterceptTouchDataCallback = null;
185 /// Emits the event when the wheel event is received.
187 /// <since_tizen> 3 </since_tizen>
188 public event EventHandler<WheelEventArgs> WheelEvent
192 if (stageWheelHandler == null)
194 wheelEventCallback = OnStageWheel;
195 wheelSignal = WheelEventSignal();
196 wheelSignal?.Connect(wheelEventCallback);
198 stageWheelHandler += value;
200 if (DetentEventHandler == null)
202 DetentEventCallback = OnDetentEvent;
203 stageWheelSignal = StageWheelEventSignal();
204 stageWheelSignal?.Connect(DetentEventCallback);
206 DetentEventHandler += value;
210 stageWheelHandler -= value;
211 if (stageWheelHandler == null && wheelSignal?.Empty() == false)
213 wheelSignal?.Disconnect(wheelEventCallback);
214 if (wheelSignal?.Empty() == true)
216 wheelEventCallback = null;
220 DetentEventHandler -= value;
221 if (DetentEventHandler == null && stageWheelSignal?.Empty() == false)
223 stageWheelSignal?.Disconnect(DetentEventCallback);
224 if (stageWheelSignal?.Empty() == true)
226 DetentEventCallback = null;
233 /// Emits the event when the key event is received.
235 /// <since_tizen> 3 </since_tizen>
236 public event EventHandler<KeyEventArgs> KeyEvent
240 if (stageKeyHandler == null)
242 stageKeyCallbackDelegate = OnStageKey;
243 keyEventSignal = KeyEventSignal();
244 keyEventSignal?.Connect(stageKeyCallbackDelegate);
246 stageKeyHandler += value;
250 stageKeyHandler -= value;
251 if (stageKeyHandler == null && keyEventSignal?.Empty() == false)
253 keyEventSignal?.Disconnect(stageKeyCallbackDelegate);
254 if (keyEventSignal?.Empty() == true)
256 stageKeyCallbackDelegate = null;
263 /// Emits the event when the window resized.
265 /// <since_tizen> 3 </since_tizen>
266 public event EventHandler<ResizedEventArgs> Resized
270 if (windowResizeEventHandler == null)
272 windowResizeEventCallback = OnResized;
273 resizeSignal = ResizeSignal();
274 resizeSignal?.Connect(windowResizeEventCallback);
277 windowResizeEventHandler += value;
281 windowResizeEventHandler -= value;
283 if (windowResizeEventHandler == null && resizeSignal?.Empty() == false && windowResizeEventCallback != null)
285 resizeSignal?.Disconnect(windowResizeEventCallback);
286 if (resizeSignal?.Empty() == true)
288 windowResizeEventCallback = null;
295 /// Please do not use! this will be deprecated. Please use 'FocusChanged' event instead.
297 /// <since_tizen> 3 </since_tizen>
298 /// Please do not use! this will be deprecated!
299 /// Instead please use FocusChanged.
300 [Obsolete("Please do not use! This will be deprecated! Please use FocusChanged instead! " +
302 "NUIApplication.GetDefaultWindow().FocusChanged = OnFocusChanged; " +
303 "private void OnFocusChanged(object source, Window.FocusChangedEventArgs args) {...}")]
304 [EditorBrowsable(EditorBrowsableState.Never)]
305 public event EventHandler<FocusChangedEventArgs> WindowFocusChanged
309 if (windowFocusChangedEventHandler2 == null)
311 windowFocusChangedEventCallback2 = OnWindowFocusedChanged2;
312 windowFocusChangedSignal2 = WindowFocusChangedSignal();
313 windowFocusChangedSignal2?.Connect(windowFocusChangedEventCallback2);
316 windowFocusChangedEventHandler2 += value;
320 windowFocusChangedEventHandler2 -= value;
322 if (windowFocusChangedEventHandler2 == null && windowFocusChangedSignal2?.Empty() == false && windowFocusChangedEventCallback2 != null)
324 windowFocusChangedSignal2?.Disconnect(windowFocusChangedEventCallback2);
325 if (windowFocusChangedSignal2?.Empty() == true)
327 windowFocusChangedEventCallback2 = null;
336 [EditorBrowsable(EditorBrowsableState.Never)]
337 public event EventHandler<TransitionEffectEventArgs> TransitionEffect
341 if (transitionEffectHandler == null)
343 transitionEffectEventCallback = OnTransitionEffect;
344 TransitionEffectEventSignal().Connect(transitionEffectEventCallback);
346 transitionEffectHandler += value;
350 transitionEffectHandler -= value;
351 if (transitionEffectHandler == null && TransitionEffectEventSignal().Empty() == false)
353 TransitionEffectEventSignal().Disconnect(transitionEffectEventCallback);
354 if (TransitionEffectEventSignal().Empty() == true)
356 transitionEffectEventCallback = null;
363 /// Keyboard Repeat Settings Changed
365 [EditorBrowsable(EditorBrowsableState.Never)]
366 public event EventHandler KeyboardRepeatSettingsChanged
370 if (keyboardRepeatSettingsChangedHandler == null)
372 keyboardRepeatSettingsChangedEventCallback = OnKeyboardRepeatSettingsChanged;
373 KeyboardRepeatSettingsChangedEventSignal().Connect(keyboardRepeatSettingsChangedEventCallback);
375 keyboardRepeatSettingsChangedHandler += value;
379 keyboardRepeatSettingsChangedHandler -= value;
380 if (keyboardRepeatSettingsChangedHandler == null && KeyboardRepeatSettingsChangedEventSignal().Empty() == false)
382 KeyboardRepeatSettingsChangedEventSignal().Disconnect(keyboardRepeatSettingsChangedEventCallback);
383 if (KeyboardRepeatSettingsChangedEventSignal().Empty() == true)
385 keyboardRepeatSettingsChangedEventCallback = null;
392 /// ViewAdded will be triggered when the view added on Window
394 /// <since_tizen> 6 </since_tizen>
395 /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
396 [EditorBrowsable(EditorBrowsableState.Never)]
397 public event EventHandler ViewAdded;
398 private event EventHandler<FocusChangedEventArgs> windowFocusChangedEventHandler;
399 private event EventHandler<TouchEventArgs> rootLayerTouchDataEventHandler;
400 private ReturnTypeEventHandler<object, TouchEventArgs, bool> rootLayerInterceptTouchDataEventHandler;
401 private event EventHandler<WheelEventArgs> stageWheelHandler;
402 private event EventHandler<KeyEventArgs> stageKeyHandler;
403 private event EventHandler stageEventProcessingFinishedEventHandler;
404 private event EventHandler<ResizedEventArgs> windowResizeEventHandler;
405 private event EventHandler<FocusChangedEventArgs> windowFocusChangedEventHandler2;
406 private event EventHandler<TransitionEffectEventArgs> transitionEffectHandler;
407 private event EventHandler keyboardRepeatSettingsChangedHandler;
408 private event EventHandler<AuxiliaryMessageEventArgs> auxiliaryMessageEventHandler;
410 internal void SendViewAdded(View view)
412 ViewAdded?.Invoke(view, EventArgs.Empty);
415 internal event EventHandler EventProcessingFinished
419 if (stageEventProcessingFinishedEventHandler == null)
421 stageEventProcessingFinishedEventCallbackDelegate = OnEventProcessingFinished;
422 eventProcessingFinishedSignal = EventProcessingFinishedSignal();
423 eventProcessingFinishedSignal?.Connect(stageEventProcessingFinishedEventCallbackDelegate);
425 stageEventProcessingFinishedEventHandler += value;
430 stageEventProcessingFinishedEventHandler -= value;
431 if (stageEventProcessingFinishedEventHandler == null && eventProcessingFinishedSignal?.Empty() == false)
433 eventProcessingFinishedSignal?.Disconnect(stageEventProcessingFinishedEventCallbackDelegate);
438 internal event EventHandler ContextLost
442 if (stageContextLostEventHandler == null)
444 stageContextLostEventCallbackDelegate = OnContextLost;
445 contextLostSignal = ContextLostSignal();
446 contextLostSignal?.Connect(stageContextLostEventCallbackDelegate);
448 stageContextLostEventHandler += value;
452 stageContextLostEventHandler -= value;
453 if (stageContextLostEventHandler == null && contextLostSignal?.Empty() == false)
455 contextLostSignal?.Disconnect(stageContextLostEventCallbackDelegate);
456 if (contextLostSignal?.Empty() == true)
458 stageContextLostEventCallbackDelegate = null;
464 internal event EventHandler ContextRegained
468 if (stageContextRegainedEventHandler == null)
470 stageContextRegainedEventCallbackDelegate = OnContextRegained;
471 contextRegainedSignal = ContextRegainedSignal();
472 contextRegainedSignal?.Connect(stageContextRegainedEventCallbackDelegate);
474 stageContextRegainedEventHandler += value;
478 stageContextRegainedEventHandler -= value;
479 if (stageContextRegainedEventHandler == null && contextRegainedSignal?.Empty() == false)
481 contextRegainedSignal?.Disconnect(stageContextRegainedEventCallbackDelegate);
482 if (contextRegainedSignal?.Empty() == true)
484 stageContextRegainedEventCallbackDelegate = null;
490 internal event EventHandler SceneCreated
494 if (stageSceneCreatedEventHandler == null)
496 stageSceneCreatedEventCallbackDelegate = OnSceneCreated;
497 sceneCreatedSignal = SceneCreatedSignal();
498 sceneCreatedSignal?.Connect(stageSceneCreatedEventCallbackDelegate);
500 stageSceneCreatedEventHandler += value;
504 stageSceneCreatedEventHandler -= value;
505 if (stageSceneCreatedEventHandler == null && sceneCreatedSignal?.Empty() == false)
507 sceneCreatedSignal?.Disconnect(stageSceneCreatedEventCallbackDelegate);
508 if (sceneCreatedSignal?.Empty() == true)
510 stageSceneCreatedEventCallbackDelegate = null;
516 internal WindowFocusSignalType WindowFocusChangedSignal()
518 WindowFocusSignalType ret = new WindowFocusSignalType(Interop.Window.FocusChangedSignal(SwigCPtr), false);
519 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
523 internal WindowFocusSignalType FocusChangedSignal()
525 WindowFocusSignalType ret = new WindowFocusSignalType(Interop.Window.FocusChangedSignal(SwigCPtr), false);
526 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
530 internal KeyEventSignal KeyEventSignal()
532 KeyEventSignal ret = new KeyEventSignal(Interop.Window.KeyEventSignal(SwigCPtr), false);
533 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
537 internal VoidSignal EventProcessingFinishedSignal()
539 VoidSignal ret = new VoidSignal(Interop.StageSignal.EventProcessingFinishedSignal(stageCPtr), false);
540 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
544 internal TouchSignal TouchSignal()
546 TouchSignal ret = new TouchSignal(Interop.Window.TouchSignal(SwigCPtr), false);
547 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
551 internal TouchDataSignal TouchDataSignal()
553 TouchDataSignal ret = new TouchDataSignal(Interop.ActorSignal.ActorTouchSignal(Layer.getCPtr(GetRootLayer())), false);
554 if (NDalicPINVOKE.SWIGPendingException.Pending)
555 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
559 internal TouchDataSignal InterceptTouchDataSignal()
561 TouchDataSignal ret = new TouchDataSignal(Interop.ActorSignal.ActorInterceptTouchSignal(Layer.getCPtr(GetRootLayer())), false);
562 if (NDalicPINVOKE.SWIGPendingException.Pending)
563 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
568 internal VoidSignal ContextLostSignal()
570 VoidSignal ret = new VoidSignal(Interop.StageSignal.ContextLostSignal(stageCPtr), false);
571 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
575 internal VoidSignal ContextRegainedSignal()
577 VoidSignal ret = new VoidSignal(Interop.StageSignal.ContextRegainedSignal(stageCPtr), false);
578 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
582 internal VoidSignal SceneCreatedSignal()
584 VoidSignal ret = new VoidSignal(Interop.StageSignal.SceneCreatedSignal(stageCPtr), false);
585 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
589 internal ResizeSignal ResizeSignal()
591 ResizeSignal ret = new ResizeSignal(Interop.Window.ResizeSignal(SwigCPtr), false);
592 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
596 internal System.IntPtr GetNativeWindowHandler()
598 System.IntPtr ret = Interop.Window.GetNativeWindowHandler(HandleRef.ToIntPtr(this.SwigCPtr));
599 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
604 /// Disconnect all native signals
606 /// <since_tizen> 5 </since_tizen>
607 internal void DisconnectNativeSignals()
609 if (windowFocusChangedEventCallback != null)
611 windowFocusChangedSignal?.Disconnect(windowFocusChangedEventCallback);
612 windowFocusChangedEventCallback = null;
615 if (rootLayerTouchDataCallback != null)
617 touchDataSignal?.Disconnect(rootLayerTouchDataCallback);
618 rootLayerTouchDataCallback = null;
621 if (rootLayerInterceptTouchDataCallback != null)
623 interceptTouchDataSignal?.Disconnect(rootLayerInterceptTouchDataCallback);
624 rootLayerInterceptTouchDataCallback = null;
627 if (wheelEventCallback != null)
629 wheelSignal?.Disconnect(wheelEventCallback);
630 wheelEventCallback = null;
633 if (DetentEventCallback != null)
635 stageWheelSignal?.Disconnect(DetentEventCallback);
636 DetentEventCallback = null;
639 if (stageKeyCallbackDelegate != null)
641 keyEventSignal?.Disconnect(stageKeyCallbackDelegate);
642 stageKeyCallbackDelegate = null;
645 if (stageEventProcessingFinishedEventCallbackDelegate != null)
647 eventProcessingFinishedSignal?.Disconnect(stageEventProcessingFinishedEventCallbackDelegate);
648 stageEventProcessingFinishedEventCallbackDelegate = null;
651 if (stageContextLostEventCallbackDelegate != null)
653 contextLostSignal?.Disconnect(stageContextLostEventCallbackDelegate);
654 stageContextLostEventCallbackDelegate = null;
657 if (stageContextRegainedEventCallbackDelegate != null)
659 contextRegainedSignal?.Disconnect(stageContextRegainedEventCallbackDelegate);
660 stageContextRegainedEventCallbackDelegate = null;
663 if (stageSceneCreatedEventCallbackDelegate != null)
665 sceneCreatedSignal?.Disconnect(stageSceneCreatedEventCallbackDelegate);
666 stageSceneCreatedEventCallbackDelegate = null;
669 if (windowResizeEventCallback != null)
671 resizeSignal?.Disconnect(windowResizeEventCallback);
672 windowResizeEventCallback = null;
675 if (windowFocusChangedEventCallback2 != null)
677 windowFocusChangedSignal2?.Disconnect(windowFocusChangedEventCallback2);
678 windowFocusChangedEventCallback2 = null;
681 if (transitionEffectSignal != null)
683 TransitionEffectEventSignal().Disconnect(transitionEffectEventCallback);
684 transitionEffectEventCallback = null;
687 if (keyboardRepeatSettingsChangedSignal != null)
689 KeyboardRepeatSettingsChangedEventSignal().Disconnect(keyboardRepeatSettingsChangedEventCallback);
690 keyboardRepeatSettingsChangedEventCallback = null;
693 if (auxiliaryMessageEventCallback != null)
695 using var signal = new WindowAuxiliaryMessageSignal(this);
696 signal.Disconnect(auxiliaryMessageEventCallback);
697 auxiliaryMessageEventHandler = null;
698 auxiliaryMessageEventCallback = null;
702 private StageWheelSignal StageWheelEventSignal()
704 StageWheelSignal ret = new StageWheelSignal(Interop.StageSignal.WheelEventSignal(stageCPtr), false);
705 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
709 private WheelSignal WheelEventSignal()
711 WheelSignal ret = new WheelSignal(Interop.ActorSignal.ActorWheelEventSignal(Layer.getCPtr(this.GetRootLayer())), false);
712 if (NDalicPINVOKE.SWIGPendingException.Pending)
713 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
717 private WindowTransitionEffectSignal TransitionEffectEventSignal()
719 if (transitionEffectSignal == null)
721 transitionEffectSignal = new WindowTransitionEffectSignal(this);
722 if (NDalicPINVOKE.SWIGPendingException.Pending)
723 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
725 return transitionEffectSignal;
728 private KeyboardRepeatSettingsChangedSignal KeyboardRepeatSettingsChangedEventSignal()
730 if (keyboardRepeatSettingsChangedSignal == null)
732 keyboardRepeatSettingsChangedSignal = new KeyboardRepeatSettingsChangedSignal(this);
733 if (NDalicPINVOKE.SWIGPendingException.Pending)
734 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
736 return keyboardRepeatSettingsChangedSignal;
739 private void OnWindowFocusedChanged(IntPtr window, bool focusGained)
741 if (window == IntPtr.Zero)
743 NUILog.Error("OnWindowFocusedChanged() Window is null! Do nothing!");
747 if (windowFocusChangedEventHandler != null)
749 FocusChangedEventArgs e = new FocusChangedEventArgs();
750 e.FocusGained = focusGained;
751 windowFocusChangedEventHandler(this, e);
755 private bool OnWindowTouch(IntPtr view, IntPtr touchData)
757 if (touchData == global::System.IntPtr.Zero)
759 NUILog.Error("touchData should not be null!");
763 if (rootLayerTouchDataEventHandler != null)
765 TouchEventArgs e = new TouchEventArgs();
766 e.Touch = Tizen.NUI.Touch.GetTouchFromPtr(touchData);
767 rootLayerTouchDataEventHandler(this, e);
772 private bool OnWindowInterceptTouch(IntPtr view, IntPtr touchData)
774 if (touchData == global::System.IntPtr.Zero)
776 NUILog.Error("touchData should not be null!");
780 bool consumed = false;
781 if (rootLayerInterceptTouchDataEventHandler != null)
783 TouchEventArgs e = new TouchEventArgs();
784 e.Touch = Tizen.NUI.Touch.GetTouchFromPtr(touchData);
785 consumed = rootLayerInterceptTouchDataEventHandler(this, e);
790 private bool OnStageWheel(IntPtr rootLayer, IntPtr wheelEvent)
792 if (wheelEvent == global::System.IntPtr.Zero)
794 NUILog.Error("wheelEvent should not be null!");
798 if (stageWheelHandler != null)
800 WheelEventArgs e = new WheelEventArgs();
801 e.Wheel = Tizen.NUI.Wheel.GetWheelFromPtr(wheelEvent);
802 stageWheelHandler(this, e);
807 // Callback for Stage KeyEventsignal
808 private void OnStageKey(IntPtr data)
810 if (stageKeyHandler != null)
812 KeyEventArgs e = new KeyEventArgs();
813 e.Key = Tizen.NUI.Key.GetKeyFromPtr(data);
814 //here we send all data to user event handlers
815 stageKeyHandler(this, e);
819 // Callback for Stage EventProcessingFinishedSignal
820 private void OnEventProcessingFinished()
822 stageEventProcessingFinishedEventHandler?.Invoke(this, null);
825 // Callback for Stage ContextLostSignal
826 private void OnContextLost()
828 stageContextLostEventHandler?.Invoke(this, null);
831 // Callback for Stage ContextRegainedSignal
832 private void OnContextRegained()
834 stageContextRegainedEventHandler?.Invoke(this, null);
837 // Callback for Stage SceneCreatedSignal
838 private void OnSceneCreated()
840 stageSceneCreatedEventHandler?.Invoke(this, null);
843 private void OnResized(IntPtr window, IntPtr windowSize)
845 if (window == IntPtr.Zero)
847 NUILog.Error("OnResized() Window is null! Do nothing!");
851 if (windowResizeEventHandler != null)
853 ResizedEventArgs e = new ResizedEventArgs();
854 // var val = new Uint16Pair(windowSize, false);
855 // e.WindowSize = new Size2D(val.GetWidth(), val.GetHeight());
858 // Workaround : windowSize should be valid pointer from dali,
859 // but currently it is fixed and is not Uint16Pair class.
860 // will be fixed later.
861 e.WindowSize = this.WindowSize;
862 windowResizeEventHandler(this, e);
866 private void OnWindowFocusedChanged2(IntPtr window, bool focusGained)
868 if (window == IntPtr.Zero)
870 NUILog.Error("OnWindowFocusedChanged() Window is null! Do nothing!");
874 if (windowFocusChangedEventHandler2 != null)
876 FocusChangedEventArgs e = new FocusChangedEventArgs();
877 e.FocusGained = focusGained;
878 windowFocusChangedEventHandler2(this, e);
882 private void OnTransitionEffect(IntPtr window, int state, int type)
884 if (window == global::System.IntPtr.Zero)
889 if (transitionEffectHandler != null)
891 TransitionEffectEventArgs e = new TransitionEffectEventArgs();
892 e.State = (EffectState)state;
893 e.Type = (EffectType)type;
894 transitionEffectHandler(this, e);
899 private void OnKeyboardRepeatSettingsChanged()
901 keyboardRepeatSettingsChangedHandler?.Invoke(this, null);
906 /// The focus changed event argument.
908 /// <since_tizen> 3 </since_tizen>
909 public class FocusChangedEventArgs : EventArgs
912 /// FocusGained flag.
914 /// <since_tizen> 3 </since_tizen>
915 public bool FocusGained
923 /// The touch event argument.
925 /// <since_tizen> 3 </since_tizen>
926 public class TouchEventArgs : EventArgs
933 /// <since_tizen> 3 </since_tizen>
948 /// Wheel event arguments.
950 /// <since_tizen> 3 </since_tizen>
951 public class WheelEventArgs : EventArgs
958 /// <since_tizen> 3 </since_tizen>
973 /// Key event arguments.
975 /// <since_tizen> 3 </since_tizen>
976 public class KeyEventArgs : EventArgs
983 /// <since_tizen> 3 </since_tizen>
998 /// Feeds a key event into the window.
999 /// This resized event arguments.
1001 /// <since_tizen> 3 </since_tizen>
1002 public class ResizedEventArgs : EventArgs
1007 /// This window size.
1009 /// <since_tizen> 4 </since_tizen>
1010 public Size2D WindowSize
1024 /// Please do not use! this will be deprecated
1026 /// <since_tizen> 3 </since_tizen>
1027 [Obsolete("Please do not use! This will be deprecated! Please use FocusChangedEventArgs instead! " +
1029 "NUIApplication.GetDefaultWindow().FocusChanged = OnFocusChanged; " +
1030 "private void OnFocusChanged(object source, Window.FocusChangedEventArgs args) {...}")]
1031 [EditorBrowsable(EditorBrowsableState.Never)]
1032 [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")]
1033 public class WindowFocusChangedEventArgs : EventArgs
1036 /// Please do not use! this will be deprecated
1038 /// <since_tizen> 3 </since_tizen>
1039 public bool FocusGained
1047 /// Contains and encapsulates Native Window handle.
1049 /// <since_tizen> 4 </since_tizen>
1050 [Obsolete("Deprecated in API9, will be removed in API11. Please use Window.NativeHandle instead!")]
1051 public class SafeNativeWindowHandle : SafeHandle
1054 ///Constructor, Native window handle is set to handle.
1056 /// <since_tizen> 4 </since_tizen>
1057 public SafeNativeWindowHandle() : base(IntPtr.Zero, false)
1059 SetHandle(NUIApplication.GetDefaultWindow().GetNativeWindowHandler());
1062 /// Null check if the handle is valid or not.
1064 /// <since_tizen> 4 </since_tizen>
1065 public override bool IsInvalid
1069 return this.handle == IntPtr.Zero;
1073 /// Release handle itself.
1075 /// <returns>true when released successfully.</returns>
1076 /// <since_tizen> 4 </since_tizen>
1077 protected override bool ReleaseHandle()
1084 /// TransitionEffectArgs
1086 [EditorBrowsable(EditorBrowsableState.Never)]
1087 public class TransitionEffectEventArgs : EventArgs
1089 private EffectState state;
1090 private EffectType type;
1095 [EditorBrowsable(EditorBrowsableState.Never)]
1096 public EffectState State
1110 [EditorBrowsable(EditorBrowsableState.Never)]
1111 public EffectType Type
1124 private EventHandler<WheelEventArgs> DetentEventHandler;
1126 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
1127 private delegate void DetentEventCallbackType(IntPtr arg1);
1129 private DetentEventCallbackType DetentEventCallback;
1131 private void OnDetentEvent(IntPtr wheelEvent)
1133 WheelEventArgs e = new WheelEventArgs();
1135 if (wheelEvent != global::System.IntPtr.Zero)
1137 e.Wheel = Wheel.GetWheelFromPtr(wheelEvent);
1140 DetentEventHandler?.Invoke(this, e);
1144 /// VisibilityChangedArgs
1146 [EditorBrowsable(EditorBrowsableState.Never)]
1147 public class VisibilityChangedEventArgs : EventArgs
1149 private bool visibility;
1153 [EditorBrowsable(EditorBrowsableState.Never)]
1154 public bool Visibility
1164 private void OnVisibilityChanged(IntPtr window, bool visibility)
1166 if (window == global::System.IntPtr.Zero)
1168 NUILog.Error("[ERR] OnVisibilityChanged() window is null");
1172 VisibilityChangedEventArgs e = new VisibilityChangedEventArgs();
1173 e.Visibility = visibility;
1174 if (VisibilityChangedEventHandler != null)
1176 VisibilityChangedEventHandler.Invoke(this, e);
1180 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
1181 private delegate void VisibilityChangedEventCallbackType(IntPtr window, bool visibility);
1182 private VisibilityChangedEventCallbackType VisibilityChangedEventCallback;
1183 private event EventHandler<VisibilityChangedEventArgs> VisibilityChangedEventHandler;
1184 private WindowVisibilityChangedEvent VisibilityChangedEventSignal;
1189 [EditorBrowsable(EditorBrowsableState.Never)]
1190 public event EventHandler<VisibilityChangedEventArgs> VisibilityChanged
1194 if (VisibilityChangedEventHandler == null)
1196 VisibilityChangedEventCallback = OnVisibilityChanged;
1197 VisibilityChangedEventSignal = new WindowVisibilityChangedEvent(this);
1198 VisibilityChangedEventSignal.Connect(VisibilityChangedEventCallback);
1200 VisibilityChangedEventHandler += value;
1204 VisibilityChangedEventHandler -= value;
1205 if (VisibilityChangedEventHandler == null)
1207 if (VisibilityChangedEventSignal != null)
1209 if (VisibilityChangedEventSignal.Empty() == false)
1211 VisibilityChangedEventSignal.Disconnect(VisibilityChangedEventCallback);
1219 /// VisibiltyChangedSignalEmit
1221 [EditorBrowsable(EditorBrowsableState.Never)]
1222 public void VisibiltyChangedSignalEmit(bool visibility)
1224 if (VisibilityChangedEventSignal == null)
1226 VisibilityChangedEventSignal = new WindowVisibilityChangedEvent(this);
1228 VisibilityChangedEventSignal.Emit(this, visibility);
1231 private void OnAuxiliaryMessage(IntPtr kData, IntPtr vData, IntPtr optionsArray)
1233 if(kData == IntPtr.Zero || vData == IntPtr.Zero)
1238 using var tmp = new PropertyArray(optionsArray, false);
1239 var size = tmp.Size();
1241 List<string> tmpList = new List<string>();
1243 for (int i = 0; i < size; i++)
1245 string option = "none";
1246 tmp.GetElementAt((uint)i).Get(out option);
1247 tmpList.Add(option);
1252 AuxiliaryMessageEventArgs e = new AuxiliaryMessageEventArgs();
1253 e.Key = StringToVoidSignal.GetResult(kData);
1254 e.Value = StringToVoidSignal.GetResult(vData);;
1255 e.Options = tmpList;
1257 auxiliaryMessageEventHandler?.Invoke(this, e);
1261 /// Auxiliary message is sent by displayer server when window's auxiliary was changed then display server sent the message.
1262 /// When client application added the window's auxiliary hint and if the auxiliary is changed,
1263 /// display server send the auxiliary message.
1264 /// Auxiliary message has the key, value and options.
1266 [EditorBrowsable(EditorBrowsableState.Never)]
1267 public event EventHandler<AuxiliaryMessageEventArgs> AuxiliaryMessage
1271 if (auxiliaryMessageEventHandler == null)
1273 auxiliaryMessageEventCallback = OnAuxiliaryMessage;
1274 using var signal = new WindowAuxiliaryMessageSignal(this);
1275 signal.Connect(auxiliaryMessageEventCallback);
1277 auxiliaryMessageEventHandler += value;
1281 auxiliaryMessageEventHandler -= value;
1282 if (auxiliaryMessageEventHandler == null)
1284 if (auxiliaryMessageEventCallback != null)
1286 using var signal = new WindowAuxiliaryMessageSignal(this);
1287 signal.Disconnect(auxiliaryMessageEventCallback);
1291 auxiliaryMessageEventCallback = null;