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);
99 /// Emits the event when the screen is touched and when the touch ends.<br />
100 /// If there are multiple touch points then it is emitted when the first touch occurs and
101 /// when the last finger is lifted too.<br />
102 /// Even though incoming events are interrupted, the event occurs.<br />
104 /// <since_tizen> 3 </since_tizen>
105 public event EventHandler<TouchEventArgs> TouchEvent
109 if (rootLayerTouchDataEventHandler == null)
111 rootLayerTouchDataCallback = OnWindowTouch;
112 using TouchDataSignal touchDataSignal = this.TouchDataSignal();
113 touchDataSignal?.Connect(rootLayerTouchDataCallback);
115 rootLayerTouchDataEventHandler += value;
119 rootLayerTouchDataEventHandler -= value;
120 using TouchDataSignal touchDataSignal = this.TouchDataSignal();
121 if (rootLayerTouchDataEventHandler == null && touchDataSignal?.Empty() == false && rootLayerTouchDataCallback != null)
123 touchDataSignal?.Disconnect(rootLayerTouchDataCallback);
129 /// Emits the event when the wheel event is received.
131 /// <since_tizen> 3 </since_tizen>
132 public event EventHandler<WheelEventArgs> WheelEvent
136 if (stageWheelHandler == null)
138 wheelEventCallback = OnStageWheel;
139 using WheelSignal wheelSignal = WheelEventSignal();
140 wheelSignal?.Connect(wheelEventCallback);
142 stageWheelHandler += value;
144 if (DetentEventHandler == null)
146 DetentEventCallback = OnDetentEvent;
147 using StageWheelSignal stageWheelSignal = StageWheelEventSignal();
148 stageWheelSignal?.Connect(DetentEventCallback);
150 DetentEventHandler += value;
154 stageWheelHandler -= value;
155 using WheelSignal wheelSignal = WheelEventSignal();
156 if (stageWheelHandler == null && wheelSignal?.Empty() == false)
158 wheelSignal?.Disconnect(wheelEventCallback);
161 DetentEventHandler -= value;
162 using StageWheelSignal stageWheelSignal = StageWheelEventSignal();
163 if (DetentEventHandler == null && stageWheelSignal?.Empty() == false)
165 stageWheelSignal?.Disconnect(DetentEventCallback);
171 /// Emits the event when the key event is received.
173 /// <since_tizen> 3 </since_tizen>
174 public event EventHandler<KeyEventArgs> KeyEvent
178 if (stageKeyHandler == null)
180 stageKeyCallbackDelegate = OnStageKey;
181 using KeyEventSignal keyEventSignal = KeyEventSignal();
182 keyEventSignal?.Connect(stageKeyCallbackDelegate);
184 stageKeyHandler += value;
188 stageKeyHandler -= value;
189 using KeyEventSignal keyEventSignal = KeyEventSignal();
190 if (stageKeyHandler == null && keyEventSignal?.Empty() == false)
192 keyEventSignal?.Disconnect(stageKeyCallbackDelegate);
198 /// Emits the event when the window resized.
200 /// <since_tizen> 3 </since_tizen>
201 public event EventHandler<ResizedEventArgs> Resized
205 if (windowResizeEventHandler == null)
207 windowResizeEventCallback = OnResized;
208 using ResizeSignal resizeSignal = ResizeSignal();
209 resizeSignal?.Connect(windowResizeEventCallback);
212 windowResizeEventHandler += value;
216 windowResizeEventHandler -= value;
218 using ResizeSignal resizeSignal = ResizeSignal();
219 if (windowResizeEventHandler == null && resizeSignal?.Empty() == false && windowResizeEventCallback != null)
221 resizeSignal?.Disconnect(windowResizeEventCallback);
222 windowResizeEventCallback = null;
228 /// Please do not use! this will be deprecated. Please use 'FocusChanged' event instead.
230 /// <since_tizen> 3 </since_tizen>
231 /// Please do not use! this will be deprecated!
232 /// Instead please use FocusChanged.
233 [Obsolete("Please do not use! This will be deprecated! Please use FocusChanged instead! " +
235 "NUIApplication.GetDefaultWindow().FocusChanged = OnFocusChanged; " +
236 "private void OnFocusChanged(object source, Window.FocusChangedEventArgs args) {...}")]
237 [EditorBrowsable(EditorBrowsableState.Never)]
238 public event EventHandler<FocusChangedEventArgs> WindowFocusChanged
242 if (windowFocusChangedEventHandler2 == null)
244 windowFocusChangedEventCallback2 = OnWindowFocusedChanged2;
245 using WindowFocusSignalType windowFocusChangedSignal2 = WindowFocusChangedSignal();
246 windowFocusChangedSignal2?.Connect(windowFocusChangedEventCallback2);
249 windowFocusChangedEventHandler2 += value;
253 windowFocusChangedEventHandler2 -= value;
255 using WindowFocusSignalType windowFocusChangedSignal2 = WindowFocusChangedSignal();
256 if (windowFocusChangedEventHandler2 == null && windowFocusChangedSignal2?.Empty() == false && windowFocusChangedEventCallback2 != null)
258 windowFocusChangedSignal2?.Disconnect(windowFocusChangedEventCallback2);
266 [EditorBrowsable(EditorBrowsableState.Never)]
267 public event EventHandler<TransitionEffectEventArgs> TransitionEffect
271 if (transitionEffectHandler == null)
273 transitionEffectEventCallback = OnTransitionEffect;
274 TransitionEffectEventSignal().Connect(transitionEffectEventCallback);
276 transitionEffectHandler += value;
280 transitionEffectHandler -= value;
281 if (transitionEffectHandler == null && TransitionEffectEventSignal().Empty() == false)
283 TransitionEffectEventSignal().Disconnect(transitionEffectEventCallback);
289 /// Keyboard Repeat Settings Changed
291 [EditorBrowsable(EditorBrowsableState.Never)]
292 public event EventHandler KeyboardRepeatSettingsChanged
296 if (keyboardRepeatSettingsChangedHandler == null)
298 keyboardRepeatSettingsChangedEventCallback = OnKeyboardRepeatSettingsChanged;
299 KeyboardRepeatSettingsChangedEventSignal().Connect(keyboardRepeatSettingsChangedEventCallback);
301 keyboardRepeatSettingsChangedHandler += value;
305 keyboardRepeatSettingsChangedHandler -= value;
306 if (keyboardRepeatSettingsChangedHandler == null && KeyboardRepeatSettingsChangedEventSignal().Empty() == false)
308 KeyboardRepeatSettingsChangedEventSignal().Disconnect(keyboardRepeatSettingsChangedEventCallback);
314 /// ViewAdded will be triggered when the view added on Window
316 /// <since_tizen> 6 </since_tizen>
317 /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
318 [EditorBrowsable(EditorBrowsableState.Never)]
319 public event EventHandler ViewAdded;
320 private event EventHandler<FocusChangedEventArgs> windowFocusChangedEventHandler;
321 private event EventHandler<TouchEventArgs> rootLayerTouchDataEventHandler;
322 private event EventHandler<WheelEventArgs> stageWheelHandler;
323 private event EventHandler<KeyEventArgs> stageKeyHandler;
324 private event EventHandler stageEventProcessingFinishedEventHandler;
325 private event EventHandler<ResizedEventArgs> windowResizeEventHandler;
326 private event EventHandler<FocusChangedEventArgs> windowFocusChangedEventHandler2;
327 private event EventHandler<TransitionEffectEventArgs> transitionEffectHandler;
328 private event EventHandler keyboardRepeatSettingsChangedHandler;
329 private event EventHandler<AuxiliaryMessageEventArgs> auxiliaryMessageEventHandler;
331 internal void SendViewAdded(View view)
333 ViewAdded?.Invoke(view, EventArgs.Empty);
336 internal event EventHandler EventProcessingFinished
340 if (stageEventProcessingFinishedEventHandler == null)
342 stageEventProcessingFinishedEventCallbackDelegate = OnEventProcessingFinished;
343 using VoidSignal eventProcessingFinishedSignal = EventProcessingFinishedSignal();
344 eventProcessingFinishedSignal?.Connect(stageEventProcessingFinishedEventCallbackDelegate);
346 stageEventProcessingFinishedEventHandler += value;
351 stageEventProcessingFinishedEventHandler -= value;
353 using VoidSignal eventProcessingFinishedSignal = EventProcessingFinishedSignal();
354 if (stageEventProcessingFinishedEventHandler == null && eventProcessingFinishedSignal?.Empty() == false)
356 eventProcessingFinishedSignal?.Disconnect(stageEventProcessingFinishedEventCallbackDelegate);
361 internal event EventHandler ContextLost
365 if (stageContextLostEventHandler == null)
367 stageContextLostEventCallbackDelegate = OnContextLost;
368 using VoidSignal contextLostSignal = ContextLostSignal();
369 contextLostSignal?.Connect(stageContextLostEventCallbackDelegate);
371 stageContextLostEventHandler += value;
375 stageContextLostEventHandler -= value;
377 using VoidSignal contextLostSignal = ContextLostSignal();
378 if (stageContextLostEventHandler == null && contextLostSignal?.Empty() == false)
380 contextLostSignal?.Disconnect(stageContextLostEventCallbackDelegate);
385 internal event EventHandler ContextRegained
389 if (stageContextRegainedEventHandler == null)
391 stageContextRegainedEventCallbackDelegate = OnContextRegained;
392 using VoidSignal contextRegainedSignal = ContextRegainedSignal();
393 contextRegainedSignal?.Connect(stageContextRegainedEventCallbackDelegate);
395 stageContextRegainedEventHandler += value;
399 stageContextRegainedEventHandler -= value;
401 using VoidSignal contextRegainedSignal = ContextRegainedSignal();
402 if (stageContextRegainedEventHandler == null && contextRegainedSignal?.Empty() == false)
404 contextRegainedSignal?.Disconnect(stageContextRegainedEventCallbackDelegate);
409 internal event EventHandler SceneCreated
413 if (stageSceneCreatedEventHandler == null)
415 stageSceneCreatedEventCallbackDelegate = OnSceneCreated;
416 using VoidSignal sceneCreatedSignal = SceneCreatedSignal();
417 sceneCreatedSignal?.Connect(stageSceneCreatedEventCallbackDelegate);
419 stageSceneCreatedEventHandler += value;
423 stageSceneCreatedEventHandler -= value;
425 using VoidSignal sceneCreatedSignal = SceneCreatedSignal();
426 if (stageSceneCreatedEventHandler == null && sceneCreatedSignal?.Empty() == false)
428 sceneCreatedSignal?.Disconnect(stageSceneCreatedEventCallbackDelegate);
433 internal WindowFocusSignalType WindowFocusChangedSignal()
435 WindowFocusSignalType ret = new WindowFocusSignalType(Interop.Window.FocusChangedSignal(SwigCPtr), false);
436 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
440 internal WindowFocusSignalType FocusChangedSignal()
442 WindowFocusSignalType ret = new WindowFocusSignalType(Interop.Window.FocusChangedSignal(SwigCPtr), false);
443 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
447 internal KeyEventSignal KeyEventSignal()
449 KeyEventSignal ret = new KeyEventSignal(Interop.Window.KeyEventSignal(SwigCPtr), false);
450 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
454 internal VoidSignal EventProcessingFinishedSignal()
456 VoidSignal ret = new VoidSignal(Interop.StageSignal.EventProcessingFinishedSignal(stageCPtr), false);
457 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
461 internal TouchSignal TouchSignal()
463 TouchSignal ret = new TouchSignal(Interop.Window.TouchSignal(SwigCPtr), false);
464 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
468 internal TouchDataSignal TouchDataSignal()
470 TouchDataSignal ret = new TouchDataSignal(Interop.ActorSignal.ActorTouchSignal(Layer.getCPtr(GetRootLayer())), false);
471 if (NDalicPINVOKE.SWIGPendingException.Pending)
472 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
476 internal VoidSignal ContextLostSignal()
478 VoidSignal ret = new VoidSignal(Interop.StageSignal.ContextLostSignal(stageCPtr), false);
479 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
483 internal VoidSignal ContextRegainedSignal()
485 VoidSignal ret = new VoidSignal(Interop.StageSignal.ContextRegainedSignal(stageCPtr), false);
486 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
490 internal VoidSignal SceneCreatedSignal()
492 VoidSignal ret = new VoidSignal(Interop.StageSignal.SceneCreatedSignal(stageCPtr), false);
493 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
497 internal ResizeSignal ResizeSignal()
499 ResizeSignal ret = new ResizeSignal(Interop.Window.ResizeSignal(SwigCPtr), false);
500 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
504 internal System.IntPtr GetNativeWindowHandler()
506 System.IntPtr ret = Interop.Window.GetNativeWindowHandler(HandleRef.ToIntPtr(this.SwigCPtr));
507 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
512 /// Disconnect all native signals
514 /// <since_tizen> 5 </since_tizen>
515 internal void DisconnectNativeSignals()
517 if (windowFocusChangedEventCallback != null)
519 using WindowFocusSignalType windowFocusChangedSignal = WindowFocusChangedSignal();
520 if( windowFocusChangedSignal?.Empty() == false )
522 windowFocusChangedSignal?.Disconnect(windowFocusChangedEventCallback);
523 windowFocusChangedEventCallback = null;
527 if (rootLayerTouchDataCallback != null)
529 using TouchDataSignal touchDataSignal = TouchDataSignal();
530 if( touchDataSignal?.Empty() == false )
532 touchDataSignal?.Disconnect(rootLayerTouchDataCallback);
536 if (wheelEventCallback != null)
538 using WheelSignal wheelSignal = WheelEventSignal();
539 if( wheelSignal?.Empty() == false )
541 wheelSignal?.Disconnect(wheelEventCallback);
545 if (DetentEventCallback != null)
547 using StageWheelSignal stageWheelSignal = StageWheelEventSignal();
548 if( stageWheelSignal?.Empty() == false )
550 stageWheelSignal?.Disconnect(DetentEventCallback);
551 DetentEventCallback = null;
555 if (stageKeyCallbackDelegate != null)
557 using KeyEventSignal keyEventSignal = KeyEventSignal();
558 if( keyEventSignal?.Empty() == false )
560 keyEventSignal?.Disconnect(stageKeyCallbackDelegate);
561 stageKeyCallbackDelegate = null;
565 if (stageEventProcessingFinishedEventCallbackDelegate != null)
567 using VoidSignal eventProcessingFinishedSignal = EventProcessingFinishedSignal();
568 if( eventProcessingFinishedSignal?.Empty() == false )
570 eventProcessingFinishedSignal?.Disconnect(stageEventProcessingFinishedEventCallbackDelegate);
571 stageEventProcessingFinishedEventCallbackDelegate = null;
575 if (stageContextLostEventCallbackDelegate != null)
577 using VoidSignal contextLostSignal = ContextLostSignal();
578 if( contextLostSignal?.Empty() == false )
580 contextLostSignal?.Disconnect(stageContextLostEventCallbackDelegate);
581 stageContextLostEventCallbackDelegate= null;
585 if (stageContextRegainedEventCallbackDelegate != null)
587 using VoidSignal contextRegainedSignal = ContextRegainedSignal();
588 if( contextRegainedSignal?.Empty() == false )
590 contextRegainedSignal?.Disconnect(stageContextRegainedEventCallbackDelegate);
591 stageContextRegainedEventCallbackDelegate = null;
595 if (stageSceneCreatedEventCallbackDelegate != null)
597 using VoidSignal sceneCreatedSignal = SceneCreatedSignal();
598 if( sceneCreatedSignal?.Empty() == false )
600 sceneCreatedSignal?.Disconnect(stageSceneCreatedEventCallbackDelegate);
601 stageSceneCreatedEventCallbackDelegate = null;
605 if (windowResizeEventCallback != null)
607 using ResizeSignal resizeSignal = ResizeSignal();
608 if( resizeSignal?.Empty() == false )
610 resizeSignal?.Disconnect(windowResizeEventCallback);
611 windowResizeEventCallback = null;
615 if (windowFocusChangedEventCallback2 != null)
617 using WindowFocusSignalType windowFocusChangedSignal2 = WindowFocusChangedSignal();
618 if( windowFocusChangedSignal2?.Empty() == false )
620 windowFocusChangedSignal2?.Disconnect(windowFocusChangedEventCallback2);
621 windowFocusChangedEventCallback2 = null;
625 if (transitionEffectSignal != null)
627 TransitionEffectEventSignal().Disconnect(transitionEffectEventCallback);
628 transitionEffectEventCallback = null;
631 if (keyboardRepeatSettingsChangedSignal != null)
633 KeyboardRepeatSettingsChangedEventSignal().Disconnect(keyboardRepeatSettingsChangedEventCallback);
634 keyboardRepeatSettingsChangedEventCallback = null;
637 if (auxiliaryMessageEventCallback != null)
639 using var signal = new WindowAuxiliaryMessageSignal(this);
640 signal.Disconnect(auxiliaryMessageEventCallback);
641 auxiliaryMessageEventHandler= null;
642 auxiliaryMessageEventCallback = null;
646 private StageWheelSignal StageWheelEventSignal()
648 StageWheelSignal ret = new StageWheelSignal(Interop.StageSignal.WheelEventSignal(stageCPtr), false);
649 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
653 private WheelSignal WheelEventSignal()
655 WheelSignal ret = new WheelSignal(Interop.ActorSignal.ActorWheelEventSignal(Layer.getCPtr(this.GetRootLayer())), false);
656 if (NDalicPINVOKE.SWIGPendingException.Pending)
657 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
661 private WindowTransitionEffectSignal TransitionEffectEventSignal()
663 if (transitionEffectSignal == null)
665 transitionEffectSignal = new WindowTransitionEffectSignal(this);
666 if (NDalicPINVOKE.SWIGPendingException.Pending)
667 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
669 return transitionEffectSignal;
672 private KeyboardRepeatSettingsChangedSignal KeyboardRepeatSettingsChangedEventSignal()
674 if (keyboardRepeatSettingsChangedSignal == null)
676 keyboardRepeatSettingsChangedSignal = new KeyboardRepeatSettingsChangedSignal(this);
677 if (NDalicPINVOKE.SWIGPendingException.Pending)
678 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
680 return keyboardRepeatSettingsChangedSignal;
683 private void OnWindowFocusedChanged(IntPtr window, bool focusGained)
685 if (window == IntPtr.Zero)
687 NUILog.Error("OnWindowFocusedChanged() Window is null! Do nothing!");
691 if (windowFocusChangedEventHandler != null)
693 FocusChangedEventArgs e = new FocusChangedEventArgs();
694 e.FocusGained = focusGained;
695 windowFocusChangedEventHandler(this, e);
699 private bool OnWindowTouch(IntPtr view, IntPtr touchData)
701 if (touchData == global::System.IntPtr.Zero)
703 NUILog.Error("touchData should not be null!");
707 if (rootLayerTouchDataEventHandler != null)
709 TouchEventArgs e = new TouchEventArgs();
710 e.Touch = Tizen.NUI.Touch.GetTouchFromPtr(touchData);
711 rootLayerTouchDataEventHandler(this, e);
716 private bool OnStageWheel(IntPtr rootLayer, IntPtr wheelEvent)
718 if (wheelEvent == global::System.IntPtr.Zero)
720 NUILog.Error("wheelEvent should not be null!");
724 if (stageWheelHandler != null)
726 WheelEventArgs e = new WheelEventArgs();
727 e.Wheel = Tizen.NUI.Wheel.GetWheelFromPtr(wheelEvent);
728 stageWheelHandler(this, e);
733 // Callback for Stage KeyEventsignal
734 private void OnStageKey(IntPtr data)
736 if (stageKeyHandler != null)
738 KeyEventArgs e = new KeyEventArgs();
739 e.Key = Tizen.NUI.Key.GetKeyFromPtr(data);
740 //here we send all data to user event handlers
741 stageKeyHandler(this, e);
745 // Callback for Stage EventProcessingFinishedSignal
746 private void OnEventProcessingFinished()
748 stageEventProcessingFinishedEventHandler?.Invoke(this, null);
751 // Callback for Stage ContextLostSignal
752 private void OnContextLost()
754 stageContextLostEventHandler?.Invoke(this, null);
757 // Callback for Stage ContextRegainedSignal
758 private void OnContextRegained()
760 stageContextRegainedEventHandler?.Invoke(this, null);
763 // Callback for Stage SceneCreatedSignal
764 private void OnSceneCreated()
766 stageSceneCreatedEventHandler?.Invoke(this, null);
769 private void OnResized(IntPtr window, IntPtr windowSize)
771 if (window == IntPtr.Zero)
773 NUILog.Error("OnResized() Window is null! Do nothing!");
777 if (windowResizeEventHandler != null)
779 ResizedEventArgs e = new ResizedEventArgs();
780 // var val = new Uint16Pair(windowSize, false);
781 // e.WindowSize = new Size2D(val.GetWidth(), val.GetHeight());
784 // Workaround : windowSize should be valid pointer from dali,
785 // but currently it is fixed and is not Uint16Pair class.
786 // will be fixed later.
787 e.WindowSize = this.WindowSize;
788 windowResizeEventHandler(this, e);
792 private void OnWindowFocusedChanged2(IntPtr window, bool focusGained)
794 if (window == IntPtr.Zero)
796 NUILog.Error("OnWindowFocusedChanged() Window is null! Do nothing!");
800 if (windowFocusChangedEventHandler2 != null)
802 FocusChangedEventArgs e = new FocusChangedEventArgs();
803 e.FocusGained = focusGained;
804 windowFocusChangedEventHandler2(this, e);
808 private void OnTransitionEffect(IntPtr window, int state, int type)
810 if (window == global::System.IntPtr.Zero)
815 if (transitionEffectHandler != null)
817 TransitionEffectEventArgs e = new TransitionEffectEventArgs();
818 e.State = (EffectState)state;
819 e.Type = (EffectType)type;
820 transitionEffectHandler(this, e);
825 private void OnKeyboardRepeatSettingsChanged()
827 keyboardRepeatSettingsChangedHandler?.Invoke(this, null);
832 /// The focus changed event argument.
834 /// <since_tizen> 3 </since_tizen>
835 public class FocusChangedEventArgs : EventArgs
838 /// FocusGained flag.
840 /// <since_tizen> 3 </since_tizen>
841 public bool FocusGained
849 /// The touch event argument.
851 /// <since_tizen> 3 </since_tizen>
852 public class TouchEventArgs : EventArgs
859 /// <since_tizen> 3 </since_tizen>
874 /// Wheel event arguments.
876 /// <since_tizen> 3 </since_tizen>
877 public class WheelEventArgs : EventArgs
884 /// <since_tizen> 3 </since_tizen>
899 /// Key event arguments.
901 /// <since_tizen> 3 </since_tizen>
902 public class KeyEventArgs : EventArgs
909 /// <since_tizen> 3 </since_tizen>
924 /// Feeds a key event into the window.
925 /// This resized event arguments.
927 /// <since_tizen> 3 </since_tizen>
928 public class ResizedEventArgs : EventArgs
933 /// This window size.
935 /// <since_tizen> 4 </since_tizen>
936 public Size2D WindowSize
950 /// Please do not use! this will be deprecated
952 /// <since_tizen> 3 </since_tizen>
953 [Obsolete("Please do not use! This will be deprecated! Please use FocusChangedEventArgs instead! " +
955 "NUIApplication.GetDefaultWindow().FocusChanged = OnFocusChanged; " +
956 "private void OnFocusChanged(object source, Window.FocusChangedEventArgs args) {...}")]
957 [EditorBrowsable(EditorBrowsableState.Never)]
958 [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")]
959 public class WindowFocusChangedEventArgs : EventArgs
962 /// Please do not use! this will be deprecated
964 /// <since_tizen> 3 </since_tizen>
965 public bool FocusGained
973 /// Contains and encapsulates Native Window handle.
975 /// <since_tizen> 4 </since_tizen>
976 [Obsolete("Deprecated in API9, will be removed in API11. Please use Window.NativeHandle instead!")]
977 public class SafeNativeWindowHandle : SafeHandle
980 ///Constructor, Native window handle is set to handle.
982 /// <since_tizen> 4 </since_tizen>
983 public SafeNativeWindowHandle() : base(IntPtr.Zero, false)
985 SetHandle(NUIApplication.GetDefaultWindow().GetNativeWindowHandler());
988 /// Null check if the handle is valid or not.
990 /// <since_tizen> 4 </since_tizen>
991 public override bool IsInvalid
995 return this.handle == IntPtr.Zero;
999 /// Release handle itself.
1001 /// <returns>true when released successfully.</returns>
1002 /// <since_tizen> 4 </since_tizen>
1003 protected override bool ReleaseHandle()
1010 /// TransitionEffectArgs
1012 [EditorBrowsable(EditorBrowsableState.Never)]
1013 public class TransitionEffectEventArgs : EventArgs
1015 private EffectState state;
1016 private EffectType type;
1021 [EditorBrowsable(EditorBrowsableState.Never)]
1022 public EffectState State
1036 [EditorBrowsable(EditorBrowsableState.Never)]
1037 public EffectType Type
1050 private EventHandler<WheelEventArgs> DetentEventHandler;
1052 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
1053 private delegate void DetentEventCallbackType(IntPtr arg1);
1055 private DetentEventCallbackType DetentEventCallback;
1057 private void OnDetentEvent(IntPtr wheelEvent)
1059 WheelEventArgs e = new WheelEventArgs();
1061 if (wheelEvent != global::System.IntPtr.Zero)
1063 e.Wheel = Wheel.GetWheelFromPtr(wheelEvent);
1066 DetentEventHandler?.Invoke(this, e);
1070 /// VisibilityChangedArgs
1072 [EditorBrowsable(EditorBrowsableState.Never)]
1073 public class VisibilityChangedEventArgs : EventArgs
1075 private bool visibility;
1079 [EditorBrowsable(EditorBrowsableState.Never)]
1080 public bool Visibility
1090 private void OnVisibilityChanged(IntPtr window, bool visibility)
1092 if (window == global::System.IntPtr.Zero)
1094 NUILog.Error("[ERR] OnVisibilityChanged() window is null");
1098 VisibilityChangedEventArgs e = new VisibilityChangedEventArgs();
1099 e.Visibility = visibility;
1100 if (VisibilityChangedEventHandler != null)
1102 VisibilityChangedEventHandler.Invoke(this, e);
1106 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
1107 private delegate void VisibilityChangedEventCallbackType(IntPtr window, bool visibility);
1108 private VisibilityChangedEventCallbackType VisibilityChangedEventCallback;
1109 private event EventHandler<VisibilityChangedEventArgs> VisibilityChangedEventHandler;
1110 private WindowVisibilityChangedEvent VisibilityChangedEventSignal;
1115 [EditorBrowsable(EditorBrowsableState.Never)]
1116 public event EventHandler<VisibilityChangedEventArgs> VisibilityChanged
1120 if (VisibilityChangedEventHandler == null)
1122 VisibilityChangedEventCallback = OnVisibilityChanged;
1123 VisibilityChangedEventSignal = new WindowVisibilityChangedEvent(this);
1124 VisibilityChangedEventSignal.Connect(VisibilityChangedEventCallback);
1126 VisibilityChangedEventHandler += value;
1130 VisibilityChangedEventHandler -= value;
1131 if (VisibilityChangedEventHandler == null)
1133 if (VisibilityChangedEventSignal != null)
1135 if (VisibilityChangedEventSignal.Empty() == false)
1137 VisibilityChangedEventSignal.Disconnect(VisibilityChangedEventCallback);
1145 /// VisibiltyChangedSignalEmit
1147 [EditorBrowsable(EditorBrowsableState.Never)]
1148 public void VisibiltyChangedSignalEmit(bool visibility)
1150 if (VisibilityChangedEventSignal == null)
1152 VisibilityChangedEventSignal = new WindowVisibilityChangedEvent(this);
1154 VisibilityChangedEventSignal.Emit(this, visibility);
1157 private void OnAuxiliaryMessage(IntPtr kData, IntPtr vData, IntPtr optionsArray)
1159 if(kData == IntPtr.Zero || vData == IntPtr.Zero)
1164 using var tmp = new PropertyArray(optionsArray, false);
1165 var size = tmp.Size();
1167 List<string> tmpList = new List<string>();
1169 for (int i = 0; i < size; i++)
1171 string option = "none";
1172 tmp.GetElementAt((uint)i).Get(out option);
1173 tmpList.Add(option);
1178 AuxiliaryMessageEventArgs e = new AuxiliaryMessageEventArgs();
1179 e.Key = StringToVoidSignal.GetResult(kData);
1180 e.Value = StringToVoidSignal.GetResult(vData);;
1181 e.Options = tmpList;
1183 auxiliaryMessageEventHandler?.Invoke(this, e);
1187 /// Auxiliary message is sent by displayer server when window's auxiliary was changed then display server sent the message.
1188 /// When client application added the window's auxiliary hint and if the auxiliary is changed,
1189 /// display server send the auxiliary message.
1190 /// Auxiliary message has the key, value and options.
1192 [EditorBrowsable(EditorBrowsableState.Never)]
1193 public event EventHandler<AuxiliaryMessageEventArgs> AuxiliaryMessage
1197 if (auxiliaryMessageEventHandler == null)
1199 auxiliaryMessageEventCallback = OnAuxiliaryMessage;
1200 using var signal = new WindowAuxiliaryMessageSignal(this);
1201 signal.Connect(auxiliaryMessageEventCallback);
1203 auxiliaryMessageEventHandler += value;
1207 auxiliaryMessageEventHandler -= value;
1208 if (auxiliaryMessageEventHandler == null)
1210 if (auxiliaryMessageEventCallback != null)
1212 using var signal = new WindowAuxiliaryMessageSignal(this);
1213 signal.Disconnect(auxiliaryMessageEventCallback);
1217 auxiliaryMessageEventCallback = null;