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 WindowFocusSignalType windowFocusChangedSignal;
51 private WindowFocusSignalType windowFocusChangedSignal2;
52 private TouchDataSignal touchDataSignal;
53 private TouchSignal touchSignal;
54 private WheelSignal wheelSignal;
55 private StageWheelSignal stageWheelSignal;
56 private KeyEventSignal keyEventSignal;
57 private VoidSignal sceneCreatedSignal;
58 private ResizeSignal resizeSignal;
59 private VoidSignal eventProcessingFinishedSignal;
60 private VoidSignal contextLostSignal;
61 private VoidSignal contextRegainedSignal;
62 private AuxiliaryMessageEventCallbackType auxiliaryMessageEventCallback;
64 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
65 private delegate void WindowFocusChangedEventCallbackType(IntPtr window, bool focusGained);
66 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
67 private delegate bool RootLayerTouchDataCallbackType(IntPtr view, IntPtr touchData);
68 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
69 private delegate bool WheelEventCallbackType(IntPtr view, IntPtr wheelEvent);
70 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
71 private delegate void WindowResizeEventCallbackType(IntPtr window, IntPtr windowSize);
72 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
73 private delegate void WindowFocusChangedEventCallbackType2(IntPtr window, bool focusGained);
74 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
75 private delegate void TransitionEffectEventCallbackType(IntPtr window, int state, int type);
76 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
77 private delegate void KeyboardRepeatSettingsChangedEventCallbackType();
78 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
79 private delegate void AuxiliaryMessageEventCallbackType(IntPtr kData, IntPtr vData, IntPtr optionsArray);
82 /// FocusChanged event.
84 /// <since_tizen> 3 </since_tizen>
85 public event EventHandler<FocusChangedEventArgs> FocusChanged
89 if (windowFocusChangedEventHandler == null)
91 windowFocusChangedEventCallback = OnWindowFocusedChanged;
92 windowFocusChangedSignal = WindowFocusChangedSignal();
93 windowFocusChangedSignal?.Connect(windowFocusChangedEventCallback);
96 windowFocusChangedEventHandler += value;
100 windowFocusChangedEventHandler -= value;
102 if (windowFocusChangedEventHandler == null && windowFocusChangedSignal?.Empty() == false && windowFocusChangedEventCallback != null)
104 windowFocusChangedSignal?.Disconnect(windowFocusChangedEventCallback);
110 /// Emits the event when the screen is touched and when the touch ends.<br />
111 /// If there are multiple touch points then it is emitted when the first touch occurs and
112 /// when the last finger is lifted too.<br />
113 /// Even though incoming events are interrupted, the event occurs.<br />
115 /// <since_tizen> 3 </since_tizen>
116 public event EventHandler<TouchEventArgs> TouchEvent
120 if (rootLayerTouchDataEventHandler == null)
122 rootLayerTouchDataCallback = OnWindowTouch;
123 touchDataSignal = this.TouchDataSignal();
124 touchDataSignal?.Connect(rootLayerTouchDataCallback);
126 rootLayerTouchDataEventHandler += value;
130 rootLayerTouchDataEventHandler -= value;
131 touchSignal = TouchSignal();
132 if (rootLayerTouchDataEventHandler == null && touchSignal?.Empty() == false && rootLayerTouchDataCallback != null)
134 touchDataSignal?.Disconnect(rootLayerTouchDataCallback);
140 /// Emits the event when the wheel event is received.
142 /// <since_tizen> 3 </since_tizen>
143 public event EventHandler<WheelEventArgs> WheelEvent
147 if (stageWheelHandler == null)
149 wheelEventCallback = OnStageWheel;
150 wheelSignal = WheelEventSignal();
151 wheelSignal?.Connect(wheelEventCallback);
153 stageWheelHandler += value;
155 if (DetentEventHandler == null)
157 DetentEventCallback = OnDetentEvent;
158 stageWheelSignal = StageWheelEventSignal();
159 stageWheelSignal?.Connect(DetentEventCallback);
161 DetentEventHandler += value;
165 stageWheelHandler -= value;
166 if (stageWheelHandler == null && wheelSignal?.Empty() == false)
168 wheelSignal?.Disconnect(wheelEventCallback);
171 DetentEventHandler -= value;
172 if (DetentEventHandler == null && stageWheelSignal?.Empty() == false)
174 stageWheelSignal?.Disconnect(DetentEventCallback);
180 /// Emits the event when the key event is received.
182 /// <since_tizen> 3 </since_tizen>
183 public event EventHandler<KeyEventArgs> KeyEvent
187 if (stageKeyHandler == null)
189 stageKeyCallbackDelegate = OnStageKey;
190 keyEventSignal = KeyEventSignal();
191 keyEventSignal?.Connect(stageKeyCallbackDelegate);
193 stageKeyHandler += value;
197 stageKeyHandler -= value;
198 if (stageKeyHandler == null && keyEventSignal?.Empty() == false)
200 keyEventSignal?.Disconnect(stageKeyCallbackDelegate);
206 /// Emits the event when the window resized.
208 /// <since_tizen> 3 </since_tizen>
209 public event EventHandler<ResizedEventArgs> Resized
213 if (windowResizeEventHandler == null)
215 windowResizeEventCallback = OnResized;
216 resizeSignal = ResizeSignal();
217 resizeSignal?.Connect(windowResizeEventCallback);
220 windowResizeEventHandler += value;
224 windowResizeEventHandler -= value;
226 if (windowResizeEventHandler == null && resizeSignal?.Empty() == false && windowResizeEventCallback != null)
228 resizeSignal?.Disconnect(windowResizeEventCallback);
234 /// Please do not use! this will be deprecated. Please use 'FocusChanged' event instead.
236 /// <since_tizen> 3 </since_tizen>
237 /// Please do not use! this will be deprecated!
238 /// Instead please use FocusChanged.
239 [Obsolete("Please do not use! This will be deprecated! Please use FocusChanged instead! " +
241 "NUIApplication.GetDefaultWindow().FocusChanged = OnFocusChanged; " +
242 "private void OnFocusChanged(object source, Window.FocusChangedEventArgs args) {...}")]
243 [EditorBrowsable(EditorBrowsableState.Never)]
244 public event EventHandler<FocusChangedEventArgs> WindowFocusChanged
248 if (windowFocusChangedEventHandler2 == null)
250 windowFocusChangedEventCallback2 = OnWindowFocusedChanged2;
251 windowFocusChangedSignal2 = WindowFocusChangedSignal();
252 windowFocusChangedSignal2?.Connect(windowFocusChangedEventCallback2);
255 windowFocusChangedEventHandler2 += value;
259 windowFocusChangedEventHandler2 -= value;
261 if (windowFocusChangedEventHandler2 == null && windowFocusChangedSignal2?.Empty() == false && windowFocusChangedEventCallback2 != null)
263 windowFocusChangedSignal2?.Disconnect(windowFocusChangedEventCallback2);
271 [EditorBrowsable(EditorBrowsableState.Never)]
272 public event EventHandler<TransitionEffectEventArgs> TransitionEffect
276 if (transitionEffectHandler == null)
278 transitionEffectEventCallback = OnTransitionEffect;
279 TransitionEffectEventSignal().Connect(transitionEffectEventCallback);
281 transitionEffectHandler += value;
285 transitionEffectHandler -= value;
286 if (transitionEffectHandler == null && TransitionEffectEventSignal().Empty() == false)
288 TransitionEffectEventSignal().Disconnect(transitionEffectEventCallback);
294 /// Keyboard Repeat Settings Changed
296 [EditorBrowsable(EditorBrowsableState.Never)]
297 public event EventHandler KeyboardRepeatSettingsChanged
301 if (keyboardRepeatSettingsChangedHandler == null)
303 keyboardRepeatSettingsChangedEventCallback = OnKeyboardRepeatSettingsChanged;
304 KeyboardRepeatSettingsChangedEventSignal().Connect(keyboardRepeatSettingsChangedEventCallback);
306 keyboardRepeatSettingsChangedHandler += value;
310 keyboardRepeatSettingsChangedHandler -= value;
311 if (keyboardRepeatSettingsChangedHandler == null && KeyboardRepeatSettingsChangedEventSignal().Empty() == false)
313 KeyboardRepeatSettingsChangedEventSignal().Disconnect(keyboardRepeatSettingsChangedEventCallback);
319 /// ViewAdded will be triggered when the view added on Window
321 /// <since_tizen> 6 </since_tizen>
322 /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
323 [EditorBrowsable(EditorBrowsableState.Never)]
324 public event EventHandler ViewAdded;
325 private event EventHandler<FocusChangedEventArgs> windowFocusChangedEventHandler;
326 private event EventHandler<TouchEventArgs> rootLayerTouchDataEventHandler;
327 private event EventHandler<WheelEventArgs> stageWheelHandler;
328 private event EventHandler<KeyEventArgs> stageKeyHandler;
329 private event EventHandler stageEventProcessingFinishedEventHandler;
330 private event EventHandler<ResizedEventArgs> windowResizeEventHandler;
331 private event EventHandler<FocusChangedEventArgs> windowFocusChangedEventHandler2;
332 private event EventHandler<TransitionEffectEventArgs> transitionEffectHandler;
333 private event EventHandler keyboardRepeatSettingsChangedHandler;
334 private event EventHandler<AuxiliaryMessageEventArgs> auxiliaryMessageEventHandler;
336 internal void SendViewAdded(View view)
338 ViewAdded?.Invoke(view, EventArgs.Empty);
341 internal event EventHandler EventProcessingFinished
345 if (stageEventProcessingFinishedEventHandler == null)
347 stageEventProcessingFinishedEventCallbackDelegate = OnEventProcessingFinished;
348 eventProcessingFinishedSignal = EventProcessingFinishedSignal();
349 eventProcessingFinishedSignal?.Connect(stageEventProcessingFinishedEventCallbackDelegate);
351 stageEventProcessingFinishedEventHandler += value;
356 stageEventProcessingFinishedEventHandler -= value;
357 if (stageEventProcessingFinishedEventHandler == null && eventProcessingFinishedSignal?.Empty() == false)
359 eventProcessingFinishedSignal?.Disconnect(stageEventProcessingFinishedEventCallbackDelegate);
364 internal event EventHandler ContextLost
368 if (stageContextLostEventHandler == null)
370 stageContextLostEventCallbackDelegate = OnContextLost;
371 contextLostSignal = ContextLostSignal();
372 contextLostSignal?.Connect(stageContextLostEventCallbackDelegate);
374 stageContextLostEventHandler += value;
378 stageContextLostEventHandler -= value;
379 if (stageContextLostEventHandler == null && contextLostSignal?.Empty() == false)
381 contextLostSignal?.Disconnect(stageContextLostEventCallbackDelegate);
386 internal event EventHandler ContextRegained
390 if (stageContextRegainedEventHandler == null)
392 stageContextRegainedEventCallbackDelegate = OnContextRegained;
393 contextRegainedSignal = ContextRegainedSignal();
394 contextRegainedSignal?.Connect(stageContextRegainedEventCallbackDelegate);
396 stageContextRegainedEventHandler += value;
400 stageContextRegainedEventHandler -= value;
401 if (stageContextRegainedEventHandler == null && contextRegainedSignal?.Empty() == false)
403 contextRegainedSignal?.Disconnect(stageContextRegainedEventCallbackDelegate);
408 internal event EventHandler SceneCreated
412 if (stageSceneCreatedEventHandler == null)
414 stageSceneCreatedEventCallbackDelegate = OnSceneCreated;
415 sceneCreatedSignal = SceneCreatedSignal();
416 sceneCreatedSignal?.Connect(stageSceneCreatedEventCallbackDelegate);
418 stageSceneCreatedEventHandler += value;
422 stageSceneCreatedEventHandler -= value;
423 if (stageSceneCreatedEventHandler == null && sceneCreatedSignal?.Empty() == false)
425 sceneCreatedSignal?.Disconnect(stageSceneCreatedEventCallbackDelegate);
430 internal WindowFocusSignalType WindowFocusChangedSignal()
432 WindowFocusSignalType ret = new WindowFocusSignalType(Interop.Window.FocusChangedSignal(SwigCPtr), false);
433 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
437 internal WindowFocusSignalType FocusChangedSignal()
439 WindowFocusSignalType ret = new WindowFocusSignalType(Interop.Window.FocusChangedSignal(SwigCPtr), false);
440 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
444 internal KeyEventSignal KeyEventSignal()
446 KeyEventSignal ret = new KeyEventSignal(Interop.Window.KeyEventSignal(SwigCPtr), false);
447 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
451 internal VoidSignal EventProcessingFinishedSignal()
453 VoidSignal ret = new VoidSignal(Interop.StageSignal.EventProcessingFinishedSignal(stageCPtr), false);
454 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
458 internal TouchSignal TouchSignal()
460 TouchSignal ret = new TouchSignal(Interop.Window.TouchSignal(SwigCPtr), false);
461 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
465 internal TouchDataSignal TouchDataSignal()
467 TouchDataSignal ret = new TouchDataSignal(Interop.ActorSignal.ActorTouchSignal(Layer.getCPtr(GetRootLayer())), false);
468 if (NDalicPINVOKE.SWIGPendingException.Pending)
469 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
473 internal VoidSignal ContextLostSignal()
475 VoidSignal ret = new VoidSignal(Interop.StageSignal.ContextLostSignal(stageCPtr), false);
476 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
480 internal VoidSignal ContextRegainedSignal()
482 VoidSignal ret = new VoidSignal(Interop.StageSignal.ContextRegainedSignal(stageCPtr), false);
483 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
487 internal VoidSignal SceneCreatedSignal()
489 VoidSignal ret = new VoidSignal(Interop.StageSignal.SceneCreatedSignal(stageCPtr), false);
490 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
494 internal ResizeSignal ResizeSignal()
496 ResizeSignal ret = new ResizeSignal(Interop.Window.ResizeSignal(SwigCPtr), false);
497 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
501 internal System.IntPtr GetNativeWindowHandler()
503 System.IntPtr ret = Interop.Window.GetNativeWindowHandler(HandleRef.ToIntPtr(this.SwigCPtr));
504 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
509 /// Disconnect all native signals
511 /// <since_tizen> 5 </since_tizen>
512 internal void DisconnectNativeSignals()
514 if (windowFocusChangedEventCallback != null)
516 windowFocusChangedSignal?.Disconnect(windowFocusChangedEventCallback);
519 if (rootLayerTouchDataCallback != null)
521 touchDataSignal?.Disconnect(rootLayerTouchDataCallback);
524 if (wheelEventCallback != null)
526 wheelSignal?.Disconnect(wheelEventCallback);
529 if (DetentEventCallback != null)
531 stageWheelSignal?.Disconnect(DetentEventCallback);
534 if (stageKeyCallbackDelegate != null)
536 keyEventSignal?.Disconnect(stageKeyCallbackDelegate);
539 if (stageEventProcessingFinishedEventCallbackDelegate != null)
541 eventProcessingFinishedSignal?.Disconnect(stageEventProcessingFinishedEventCallbackDelegate);
544 if (stageContextLostEventCallbackDelegate != null)
546 contextLostSignal?.Disconnect(stageContextLostEventCallbackDelegate);
549 if (stageContextRegainedEventCallbackDelegate != null)
551 contextRegainedSignal?.Disconnect(stageContextRegainedEventCallbackDelegate);
554 if (stageSceneCreatedEventCallbackDelegate != null)
556 sceneCreatedSignal?.Disconnect(stageSceneCreatedEventCallbackDelegate);
559 if (windowResizeEventCallback != null)
561 resizeSignal?.Disconnect(windowResizeEventCallback);
564 if (windowFocusChangedEventCallback2 != null)
566 windowFocusChangedSignal2?.Disconnect(windowFocusChangedEventCallback2);
569 if (transitionEffectSignal != null)
571 TransitionEffectEventSignal().Disconnect(transitionEffectEventCallback);
574 if (keyboardRepeatSettingsChangedSignal != null)
576 KeyboardRepeatSettingsChangedEventSignal().Disconnect(keyboardRepeatSettingsChangedEventCallback);
579 if (auxiliaryMessageEventCallback != null)
581 using var signal = new WindowAuxiliaryMessageSignal(this);
582 signal.Disconnect(auxiliaryMessageEventCallback);
583 auxiliaryMessageEventHandler= null;
584 auxiliaryMessageEventCallback = null;
588 private StageWheelSignal StageWheelEventSignal()
590 StageWheelSignal ret = new StageWheelSignal(Interop.StageSignal.WheelEventSignal(stageCPtr), false);
591 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
595 private WheelSignal WheelEventSignal()
597 WheelSignal ret = new WheelSignal(Interop.ActorSignal.ActorWheelEventSignal(Layer.getCPtr(this.GetRootLayer())), false);
598 if (NDalicPINVOKE.SWIGPendingException.Pending)
599 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
603 private WindowTransitionEffectSignal TransitionEffectEventSignal()
605 if (transitionEffectSignal == null)
607 transitionEffectSignal = new WindowTransitionEffectSignal(this);
608 if (NDalicPINVOKE.SWIGPendingException.Pending)
609 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
611 return transitionEffectSignal;
614 private KeyboardRepeatSettingsChangedSignal KeyboardRepeatSettingsChangedEventSignal()
616 if (keyboardRepeatSettingsChangedSignal == null)
618 keyboardRepeatSettingsChangedSignal = new KeyboardRepeatSettingsChangedSignal(this);
619 if (NDalicPINVOKE.SWIGPendingException.Pending)
620 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
622 return keyboardRepeatSettingsChangedSignal;
625 private void OnWindowFocusedChanged(IntPtr window, bool focusGained)
627 if (window == IntPtr.Zero)
629 NUILog.Error("OnWindowFocusedChanged() Window is null! Do nothing!");
633 if (windowFocusChangedEventHandler != null)
635 FocusChangedEventArgs e = new FocusChangedEventArgs();
636 e.FocusGained = focusGained;
637 windowFocusChangedEventHandler(this, e);
641 private bool OnWindowTouch(IntPtr view, IntPtr touchData)
643 if (touchData == global::System.IntPtr.Zero)
645 NUILog.Error("touchData should not be null!");
649 if (rootLayerTouchDataEventHandler != null)
651 TouchEventArgs e = new TouchEventArgs();
652 e.Touch = Tizen.NUI.Touch.GetTouchFromPtr(touchData);
653 rootLayerTouchDataEventHandler(this, e);
658 private bool OnStageWheel(IntPtr rootLayer, IntPtr wheelEvent)
660 if (wheelEvent == global::System.IntPtr.Zero)
662 NUILog.Error("wheelEvent should not be null!");
666 if (stageWheelHandler != null)
668 WheelEventArgs e = new WheelEventArgs();
669 e.Wheel = Tizen.NUI.Wheel.GetWheelFromPtr(wheelEvent);
670 stageWheelHandler(this, e);
675 // Callback for Stage KeyEventsignal
676 private void OnStageKey(IntPtr data)
678 if (stageKeyHandler != null)
680 KeyEventArgs e = new KeyEventArgs();
681 e.Key = Tizen.NUI.Key.GetKeyFromPtr(data);
682 //here we send all data to user event handlers
683 stageKeyHandler(this, e);
687 // Callback for Stage EventProcessingFinishedSignal
688 private void OnEventProcessingFinished()
690 stageEventProcessingFinishedEventHandler?.Invoke(this, null);
693 // Callback for Stage ContextLostSignal
694 private void OnContextLost()
696 stageContextLostEventHandler?.Invoke(this, null);
699 // Callback for Stage ContextRegainedSignal
700 private void OnContextRegained()
702 stageContextRegainedEventHandler?.Invoke(this, null);
705 // Callback for Stage SceneCreatedSignal
706 private void OnSceneCreated()
708 stageSceneCreatedEventHandler?.Invoke(this, null);
711 private void OnResized(IntPtr window, IntPtr windowSize)
713 if (window == IntPtr.Zero)
715 NUILog.Error("OnResized() Window is null! Do nothing!");
719 if (windowResizeEventHandler != null)
721 ResizedEventArgs e = new ResizedEventArgs();
722 // var val = new Uint16Pair(windowSize, false);
723 // e.WindowSize = new Size2D(val.GetWidth(), val.GetHeight());
726 // Workaround : windowSize should be valid pointer from dali,
727 // but currently it is fixed and is not Uint16Pair class.
728 // will be fixed later.
729 e.WindowSize = this.WindowSize;
730 windowResizeEventHandler(this, e);
734 private void OnWindowFocusedChanged2(IntPtr window, bool focusGained)
736 if (window == IntPtr.Zero)
738 NUILog.Error("OnWindowFocusedChanged() Window is null! Do nothing!");
742 if (windowFocusChangedEventHandler2 != null)
744 FocusChangedEventArgs e = new FocusChangedEventArgs();
745 e.FocusGained = focusGained;
746 windowFocusChangedEventHandler2(this, e);
750 private void OnTransitionEffect(IntPtr window, int state, int type)
752 if (window == global::System.IntPtr.Zero)
757 if (transitionEffectHandler != null)
759 TransitionEffectEventArgs e = new TransitionEffectEventArgs();
760 e.State = (EffectState)state;
761 e.Type = (EffectType)type;
762 transitionEffectHandler(this, e);
767 private void OnKeyboardRepeatSettingsChanged()
769 keyboardRepeatSettingsChangedHandler?.Invoke(this, null);
774 /// The focus changed event argument.
776 /// <since_tizen> 3 </since_tizen>
777 public class FocusChangedEventArgs : EventArgs
780 /// FocusGained flag.
782 /// <since_tizen> 3 </since_tizen>
783 public bool FocusGained
791 /// The touch event argument.
793 /// <since_tizen> 3 </since_tizen>
794 public class TouchEventArgs : EventArgs
801 /// <since_tizen> 3 </since_tizen>
816 /// Wheel event arguments.
818 /// <since_tizen> 3 </since_tizen>
819 public class WheelEventArgs : EventArgs
826 /// <since_tizen> 3 </since_tizen>
841 /// Key event arguments.
843 /// <since_tizen> 3 </since_tizen>
844 public class KeyEventArgs : EventArgs
851 /// <since_tizen> 3 </since_tizen>
866 /// Feeds a key event into the window.
867 /// This resized event arguments.
869 /// <since_tizen> 3 </since_tizen>
870 public class ResizedEventArgs : EventArgs
875 /// This window size.
877 /// <since_tizen> 4 </since_tizen>
878 public Size2D WindowSize
892 /// Please do not use! this will be deprecated
894 /// <since_tizen> 3 </since_tizen>
895 [Obsolete("Please do not use! This will be deprecated! Please use FocusChangedEventArgs instead! " +
897 "NUIApplication.GetDefaultWindow().FocusChanged = OnFocusChanged; " +
898 "private void OnFocusChanged(object source, Window.FocusChangedEventArgs args) {...}")]
899 [EditorBrowsable(EditorBrowsableState.Never)]
900 [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")]
901 public class WindowFocusChangedEventArgs : EventArgs
904 /// Please do not use! this will be deprecated
906 /// <since_tizen> 3 </since_tizen>
907 public bool FocusGained
915 /// Contains and encapsulates Native Window handle.
917 /// <since_tizen> 4 </since_tizen>
918 [Obsolete("Deprecated in API9, will be removed in API11. Please use Window.NativeHandle instead!")]
919 public class SafeNativeWindowHandle : SafeHandle
922 ///Constructor, Native window handle is set to handle.
924 /// <since_tizen> 4 </since_tizen>
925 public SafeNativeWindowHandle() : base(IntPtr.Zero, false)
927 SetHandle(NUIApplication.GetDefaultWindow().GetNativeWindowHandler());
930 /// Null check if the handle is valid or not.
932 /// <since_tizen> 4 </since_tizen>
933 public override bool IsInvalid
937 return this.handle == IntPtr.Zero;
941 /// Release handle itself.
943 /// <returns>true when released successfully.</returns>
944 /// <since_tizen> 4 </since_tizen>
945 protected override bool ReleaseHandle()
952 /// TransitionEffectArgs
954 [EditorBrowsable(EditorBrowsableState.Never)]
955 public class TransitionEffectEventArgs : EventArgs
957 private EffectState state;
958 private EffectType type;
963 [EditorBrowsable(EditorBrowsableState.Never)]
964 public EffectState State
978 [EditorBrowsable(EditorBrowsableState.Never)]
979 public EffectType Type
992 private EventHandler<WheelEventArgs> DetentEventHandler;
994 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
995 private delegate void DetentEventCallbackType(IntPtr arg1);
997 private DetentEventCallbackType DetentEventCallback;
999 private void OnDetentEvent(IntPtr wheelEvent)
1001 WheelEventArgs e = new WheelEventArgs();
1003 if (wheelEvent != global::System.IntPtr.Zero)
1005 e.Wheel = Wheel.GetWheelFromPtr(wheelEvent);
1008 DetentEventHandler?.Invoke(this, e);
1012 /// VisibilityChangedArgs
1014 [EditorBrowsable(EditorBrowsableState.Never)]
1015 public class VisibilityChangedEventArgs : EventArgs
1017 private bool visibility;
1021 [EditorBrowsable(EditorBrowsableState.Never)]
1022 public bool Visibility
1032 private void OnVisibilityChanged(IntPtr window, bool visibility)
1034 if (window == global::System.IntPtr.Zero)
1036 NUILog.Error("[ERR] OnVisibilityChanged() window is null");
1040 VisibilityChangedEventArgs e = new VisibilityChangedEventArgs();
1041 e.Visibility = visibility;
1042 if (VisibilityChangedEventHandler != null)
1044 VisibilityChangedEventHandler.Invoke(this, e);
1048 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
1049 private delegate void VisibilityChangedEventCallbackType(IntPtr window, bool visibility);
1050 private VisibilityChangedEventCallbackType VisibilityChangedEventCallback;
1051 private event EventHandler<VisibilityChangedEventArgs> VisibilityChangedEventHandler;
1052 private WindowVisibilityChangedEvent VisibilityChangedEventSignal;
1057 [EditorBrowsable(EditorBrowsableState.Never)]
1058 public event EventHandler<VisibilityChangedEventArgs> VisibilityChanged
1062 if (VisibilityChangedEventHandler == null)
1064 VisibilityChangedEventCallback = OnVisibilityChanged;
1065 VisibilityChangedEventSignal = new WindowVisibilityChangedEvent(this);
1066 VisibilityChangedEventSignal.Connect(VisibilityChangedEventCallback);
1068 VisibilityChangedEventHandler += value;
1072 VisibilityChangedEventHandler -= value;
1073 if (VisibilityChangedEventHandler == null)
1075 if (VisibilityChangedEventSignal != null)
1077 if (VisibilityChangedEventSignal.Empty() == false)
1079 VisibilityChangedEventSignal.Disconnect(VisibilityChangedEventCallback);
1087 /// VisibiltyChangedSignalEmit
1089 [EditorBrowsable(EditorBrowsableState.Never)]
1090 public void VisibiltyChangedSignalEmit(bool visibility)
1092 if (VisibilityChangedEventSignal == null)
1094 VisibilityChangedEventSignal = new WindowVisibilityChangedEvent(this);
1096 VisibilityChangedEventSignal.Emit(this, visibility);
1099 private void OnAuxiliaryMessage(IntPtr kData, IntPtr vData, IntPtr optionsArray)
1101 if(kData == IntPtr.Zero || vData == IntPtr.Zero)
1106 using var tmp = new PropertyArray(optionsArray, false);
1107 var size = tmp.Size();
1109 List<string> tmpList = new List<string>();
1111 for (int i = 0; i < size; i++)
1113 string option = "none";
1114 tmp.GetElementAt((uint)i).Get(out option);
1115 tmpList.Add(option);
1120 AuxiliaryMessageEventArgs e = new AuxiliaryMessageEventArgs();
1121 e.Key = StringToVoidSignal.GetResult(kData);
1122 e.Value = StringToVoidSignal.GetResult(vData);;
1123 e.Options = tmpList;
1125 auxiliaryMessageEventHandler?.Invoke(this, e);
1129 /// Auxiliary message is sent by displayer server when window's auxiliary was changed then display server sent the message.
1130 /// When client application added the window's auxiliary hint and if the auxiliary is changed,
1131 /// display server send the auxiliary message.
1132 /// Auxiliary message has the key, value and options.
1134 [EditorBrowsable(EditorBrowsableState.Never)]
1135 public event EventHandler<AuxiliaryMessageEventArgs> AuxiliaryMessage
1139 if (auxiliaryMessageEventHandler == null)
1141 auxiliaryMessageEventCallback = OnAuxiliaryMessage;
1142 using var signal = new WindowAuxiliaryMessageSignal(this);
1143 signal.Connect(auxiliaryMessageEventCallback);
1145 auxiliaryMessageEventHandler += value;
1149 auxiliaryMessageEventHandler -= value;
1150 if (auxiliaryMessageEventHandler == null)
1152 if (auxiliaryMessageEventCallback != null)
1154 using var signal = new WindowAuxiliaryMessageSignal(this);
1155 signal.Disconnect(auxiliaryMessageEventCallback);
1159 auxiliaryMessageEventCallback = null;