2 * Copyright(c) 2021 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 using System.ComponentModel;
20 using System.Runtime.InteropServices;
21 using Tizen.NUI.BaseComponents;
22 using System.Collections.Generic;
27 /// The window class is used internally for drawing.<br />
28 /// The window has an orientation and indicator properties.<br />
30 /// <since_tizen> 3 </since_tizen>
31 public partial class Window
33 private WindowFocusChangedEventCallbackType windowFocusChangedEventCallback;
34 private RootLayerTouchDataCallbackType rootLayerTouchDataCallback;
35 private WheelEventCallbackType wheelEventCallback;
36 private EventCallbackDelegateType1 stageKeyCallbackDelegate;
37 private InterceptKeyEventDelegateType stageInterceptKeyCallbackDelegate;
38 private EventCallbackDelegateType0 stageEventProcessingFinishedEventCallbackDelegate;
39 private EventHandler stageContextLostEventHandler;
40 private EventCallbackDelegateType0 stageContextLostEventCallbackDelegate;
41 private EventHandler stageContextRegainedEventHandler;
42 private EventCallbackDelegateType0 stageContextRegainedEventCallbackDelegate;
43 private EventHandler stageSceneCreatedEventHandler;
44 private EventCallbackDelegateType0 stageSceneCreatedEventCallbackDelegate;
45 private WindowResizeEventCallbackType windowResizeEventCallback;
46 private WindowFocusChangedEventCallbackType windowFocusChangedEventCallback2;
47 private TransitionEffectEventCallbackType transitionEffectEventCallback;
48 private WindowTransitionEffectSignal transitionEffectSignal;
49 private KeyboardRepeatSettingsChangedEventCallbackType keyboardRepeatSettingsChangedEventCallback;
50 private KeyboardRepeatSettingsChangedSignal keyboardRepeatSettingsChangedSignal;
51 private KeyEventSignal interceptKeyEventSignal;
52 private AuxiliaryMessageEventCallbackType auxiliaryMessageEventCallback;
54 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
55 private delegate void WindowFocusChangedEventCallbackType(IntPtr window, bool focusGained);
56 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
57 private delegate bool RootLayerTouchDataCallbackType(IntPtr view, IntPtr touchData);
58 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
59 private delegate bool WheelEventCallbackType(IntPtr view, IntPtr wheelEvent);
60 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
61 private delegate void WindowResizeEventCallbackType(IntPtr window, IntPtr windowSize);
62 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
63 private delegate void WindowFocusChangedEventCallbackType2(IntPtr window, bool focusGained);
64 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
65 private delegate void TransitionEffectEventCallbackType(IntPtr window, int state, int type);
66 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
67 private delegate void KeyboardRepeatSettingsChangedEventCallbackType();
68 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
69 private delegate void AuxiliaryMessageEventCallbackType(IntPtr kData, IntPtr vData, IntPtr optionsArray);
70 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
71 private delegate bool InterceptKeyEventDelegateType(IntPtr arg1);
74 /// FocusChanged event.
76 /// <since_tizen> 3 </since_tizen>
77 public event EventHandler<FocusChangedEventArgs> FocusChanged
81 if (windowFocusChangedEventHandler == null)
83 windowFocusChangedEventCallback = OnWindowFocusedChanged;
84 using WindowFocusSignalType signal = new WindowFocusSignalType(Interop.Window.FocusChangedSignal(SwigCPtr), false);
85 signal?.Connect(windowFocusChangedEventCallback);
87 windowFocusChangedEventHandler += value;
91 windowFocusChangedEventHandler -= value;
92 if (windowFocusChangedEventHandler == null && windowFocusChangedEventCallback != null)
94 using WindowFocusSignalType signal = new WindowFocusSignalType(Interop.Window.FocusChangedSignal(SwigCPtr), false);
95 signal?.Disconnect(windowFocusChangedEventCallback);
96 if (signal?.Empty() == true)
98 windowFocusChangedEventCallback = null;
105 /// Emits the event when the screen is touched and when the touch ends.<br />
106 /// If there are multiple touch points then it is emitted when the first touch occurs and
107 /// when the last finger is lifted too.<br />
108 /// Even though incoming events are interrupted, the event occurs.<br />
110 /// <since_tizen> 3 </since_tizen>
111 public event EventHandler<TouchEventArgs> TouchEvent
115 if (rootLayerTouchDataEventHandler == null)
117 rootLayerTouchDataCallback = OnWindowTouch;
118 using TouchDataSignal signal = new TouchDataSignal(Interop.ActorSignal.ActorTouchSignal(Layer.getCPtr(GetRootLayer())), false);
119 signal?.Connect(rootLayerTouchDataCallback);
121 rootLayerTouchDataEventHandler += value;
125 rootLayerTouchDataEventHandler -= value;
126 if (rootLayerTouchDataEventHandler == null && rootLayerTouchDataCallback != null)
128 using TouchDataSignal signal = new TouchDataSignal(Interop.ActorSignal.ActorTouchSignal(Layer.getCPtr(GetRootLayer())), false);
129 signal?.Disconnect(rootLayerTouchDataCallback);
130 if (signal?.Empty() == true)
132 rootLayerTouchDataCallback = null;
139 /// Emits the event when the wheel event is received.
141 /// <since_tizen> 3 </since_tizen>
142 public event EventHandler<WheelEventArgs> WheelEvent
146 if (stageWheelHandler == null)
148 wheelEventCallback = OnStageWheel;
149 using WheelSignal signal = new WheelSignal(Interop.ActorSignal.ActorWheelEventSignal(Layer.getCPtr(this.GetRootLayer())), false);
150 signal?.Connect(wheelEventCallback);
152 stageWheelHandler += value;
154 if (DetentEventHandler == null)
156 DetentEventCallback = OnDetentEvent;
157 using StageWheelSignal signal = new StageWheelSignal(Interop.StageSignal.WheelEventSignal(stageCPtr), false);
158 signal?.Connect(DetentEventCallback);
160 DetentEventHandler += value;
164 stageWheelHandler -= value;
165 if (stageWheelHandler == null && wheelEventCallback != null)
167 using WheelSignal signal = new WheelSignal(Interop.ActorSignal.ActorWheelEventSignal(Layer.getCPtr(this.GetRootLayer())), false);
168 signal?.Disconnect(wheelEventCallback);
169 if (signal?.Empty() == true)
171 wheelEventCallback = null;
175 DetentEventHandler -= value;
176 if (DetentEventHandler == null && DetentEventCallback != null)
178 using StageWheelSignal signal = new StageWheelSignal(Interop.StageSignal.WheelEventSignal(stageCPtr), false);
179 signal?.Disconnect(DetentEventCallback);
180 if (signal?.Empty() == true)
182 DetentEventCallback = null;
189 /// Emits the event when the key event is received.
191 /// <since_tizen> 3 </since_tizen>
192 public event EventHandler<KeyEventArgs> KeyEvent
196 if (stageKeyHandler == null)
198 stageKeyCallbackDelegate = OnStageKey;
199 using KeyEventSignal signal = new KeyEventSignal(Interop.Window.KeyEventSignal(SwigCPtr), false);
200 signal?.Connect(stageKeyCallbackDelegate);
202 stageKeyHandler += value;
206 stageKeyHandler -= value;
207 if (stageKeyHandler == null && stageKeyCallbackDelegate != null)
209 using KeyEventSignal signal = new KeyEventSignal(Interop.Window.KeyEventSignal(SwigCPtr), false);
210 signal?.Disconnect(stageKeyCallbackDelegate);
211 if (signal?.Empty() == true)
213 stageKeyCallbackDelegate = null;
220 /// Intercepts KeyEvents in the window before dispatching KeyEvents to the child.<br />
221 /// If it returns true(consumed), no KeyEvent is delivered to the child.
223 [EditorBrowsable(EditorBrowsableState.Never)]
224 public event ReturnTypeEventHandler<object, KeyEventArgs, bool> InterceptKeyEvent
228 if (stageInterceptKeyHandler == null)
230 stageInterceptKeyCallbackDelegate = OnStageInterceptKey;
231 using KeyEventSignal signal = new KeyEventSignal(Interop.Window.InterceptKeyEventSignal(SwigCPtr), false);
232 signal?.Connect(stageInterceptKeyCallbackDelegate);
234 stageInterceptKeyHandler += value;
238 stageInterceptKeyHandler -= value;
239 if (stageInterceptKeyHandler == null && stageInterceptKeyCallbackDelegate != null)
241 using KeyEventSignal signal = new KeyEventSignal(Interop.Window.InterceptKeyEventSignal(SwigCPtr), false);
242 signal?.Disconnect(stageInterceptKeyCallbackDelegate);
243 if (signal?.Empty() == true)
245 stageInterceptKeyCallbackDelegate = null;
252 /// Emits the event when the window resized.
254 /// <since_tizen> 3 </since_tizen>
255 public event EventHandler<ResizedEventArgs> Resized
259 if (windowResizeEventHandler == null)
261 windowResizeEventCallback = OnResized;
262 using ResizeSignal signal = new ResizeSignal(Interop.Window.ResizeSignal(SwigCPtr), false);
263 signal?.Connect(windowResizeEventCallback);
266 windowResizeEventHandler += value;
270 windowResizeEventHandler -= value;
271 if (windowResizeEventHandler == null && windowResizeEventCallback != null)
273 using ResizeSignal signal = new ResizeSignal(Interop.Window.ResizeSignal(SwigCPtr), false);
274 signal?.Disconnect(windowResizeEventCallback);
275 if (signal?.Empty() == true)
277 windowResizeEventCallback = null;
284 /// Do not use this, that will be deprecated. Use 'FocusChanged' event instead.
286 /// <since_tizen> 3 </since_tizen>
287 /// Do not use this, that will be deprecated.
288 /// Instead Use FocusChanged.
289 [Obsolete("Do not use this, that will be deprecated. Use FocusChanged instead. " +
291 "NUIApplication.GetDefaultWindow().FocusChanged = OnFocusChanged; " +
292 "private void OnFocusChanged(object source, Window.FocusChangedEventArgs args) {...}")]
293 [EditorBrowsable(EditorBrowsableState.Never)]
294 public event EventHandler<FocusChangedEventArgs> WindowFocusChanged
298 if (windowFocusChangedEventHandler2 == null)
300 windowFocusChangedEventCallback2 = OnWindowFocusedChanged2;
301 using WindowFocusSignalType signal = new WindowFocusSignalType(Interop.Window.FocusChangedSignal(SwigCPtr), false);
302 signal?.Connect(windowFocusChangedEventCallback2);
304 windowFocusChangedEventHandler2 += value;
308 windowFocusChangedEventHandler2 -= value;
309 if (windowFocusChangedEventHandler2 == null && windowFocusChangedEventCallback2 != null)
311 using WindowFocusSignalType signal = new WindowFocusSignalType(Interop.Window.FocusChangedSignal(SwigCPtr), false);
312 signal?.Disconnect(windowFocusChangedEventCallback2);
313 if (signal?.Empty() == true)
315 windowFocusChangedEventCallback2 = null;
324 [EditorBrowsable(EditorBrowsableState.Never)]
325 public event EventHandler<TransitionEffectEventArgs> TransitionEffect
329 if (transitionEffectHandler == null)
331 transitionEffectEventCallback = OnTransitionEffect;
332 using WindowTransitionEffectSignal signal = new WindowTransitionEffectSignal(Interop.WindowTransitionEffectSignal.GetSignal(SwigCPtr), false);
333 signal?.Connect(transitionEffectEventCallback);
335 transitionEffectHandler += value;
339 transitionEffectHandler -= value;
340 if (transitionEffectHandler == null && transitionEffectEventCallback != null)
342 using WindowTransitionEffectSignal signal = new WindowTransitionEffectSignal(Interop.WindowTransitionEffectSignal.GetSignal(SwigCPtr), false);
343 signal?.Disconnect(transitionEffectEventCallback);
344 if (signal?.Empty() == true)
346 transitionEffectEventCallback = null;
353 /// Keyboard Repeat Settings Changed
355 [EditorBrowsable(EditorBrowsableState.Never)]
356 public event EventHandler KeyboardRepeatSettingsChanged
360 if (keyboardRepeatSettingsChangedHandler == null)
362 keyboardRepeatSettingsChangedEventCallback = OnKeyboardRepeatSettingsChanged;
363 using KeyboardRepeatSettingsChangedSignal signal = new KeyboardRepeatSettingsChangedSignal(Interop.KeyboardRepeatSettingsChangedSignal.GetSignal(SwigCPtr), false);
364 signal?.Connect(keyboardRepeatSettingsChangedEventCallback);
366 keyboardRepeatSettingsChangedHandler += value;
370 keyboardRepeatSettingsChangedHandler -= value;
371 if (keyboardRepeatSettingsChangedHandler == null && keyboardRepeatSettingsChangedEventCallback != null)
373 using KeyboardRepeatSettingsChangedSignal signal = new KeyboardRepeatSettingsChangedSignal(Interop.KeyboardRepeatSettingsChangedSignal.GetSignal(SwigCPtr), false);
374 signal?.Disconnect(keyboardRepeatSettingsChangedEventCallback);
375 if (signal?.Empty() == true)
377 keyboardRepeatSettingsChangedEventCallback = null;
384 /// ViewAdded will be triggered when the view added on Window
386 /// <since_tizen> 6 </since_tizen>
387 /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
388 [EditorBrowsable(EditorBrowsableState.Never)]
389 public event EventHandler ViewAdded;
390 private event EventHandler<FocusChangedEventArgs> windowFocusChangedEventHandler;
391 private event EventHandler<TouchEventArgs> rootLayerTouchDataEventHandler;
392 private event EventHandler<WheelEventArgs> stageWheelHandler;
393 private event EventHandler<KeyEventArgs> stageKeyHandler;
394 private ReturnTypeEventHandler<object, KeyEventArgs, bool> stageInterceptKeyHandler;
395 private event EventHandler stageEventProcessingFinishedEventHandler;
396 private event EventHandler<ResizedEventArgs> windowResizeEventHandler;
397 private event EventHandler<FocusChangedEventArgs> windowFocusChangedEventHandler2;
398 private event EventHandler<TransitionEffectEventArgs> transitionEffectHandler;
399 private event EventHandler keyboardRepeatSettingsChangedHandler;
400 private event EventHandler<AuxiliaryMessageEventArgs> auxiliaryMessageEventHandler;
402 internal void SendViewAdded(View view)
404 ViewAdded?.Invoke(view, EventArgs.Empty);
407 internal event EventHandler EventProcessingFinished
411 if (stageEventProcessingFinishedEventHandler == null)
413 stageEventProcessingFinishedEventCallbackDelegate = OnEventProcessingFinished;
414 using VoidSignal signal = new VoidSignal(Interop.StageSignal.EventProcessingFinishedSignal(stageCPtr), false);
415 signal?.Connect(stageEventProcessingFinishedEventCallbackDelegate);
417 stageEventProcessingFinishedEventHandler += value;
421 stageEventProcessingFinishedEventHandler -= value;
422 if (stageEventProcessingFinishedEventHandler == null && stageEventProcessingFinishedEventCallbackDelegate != null)
424 using VoidSignal signal = new VoidSignal(Interop.StageSignal.EventProcessingFinishedSignal(stageCPtr), false);
425 signal?.Disconnect(stageEventProcessingFinishedEventCallbackDelegate);
426 if (signal?.Empty() == true)
428 stageEventProcessingFinishedEventCallbackDelegate = null;
434 internal event EventHandler ContextLost
438 if (stageContextLostEventHandler == null)
440 stageContextLostEventCallbackDelegate = OnContextLost;
441 using VoidSignal signal = new VoidSignal(Interop.StageSignal.ContextLostSignal(stageCPtr), false);
442 signal?.Connect(stageContextLostEventCallbackDelegate);
444 stageContextLostEventHandler += value;
448 stageContextLostEventHandler -= value;
449 if (stageContextLostEventHandler == null && stageContextLostEventCallbackDelegate != null)
451 using VoidSignal signal = new VoidSignal(Interop.StageSignal.ContextLostSignal(stageCPtr), false);
452 signal?.Disconnect(stageContextLostEventCallbackDelegate);
453 if (signal?.Empty() == true)
455 stageContextLostEventCallbackDelegate = null;
461 internal event EventHandler ContextRegained
465 if (stageContextRegainedEventHandler == null)
467 stageContextRegainedEventCallbackDelegate = OnContextRegained;
468 using VoidSignal signal = new VoidSignal(Interop.StageSignal.ContextRegainedSignal(stageCPtr), false);
469 signal?.Connect(stageContextRegainedEventCallbackDelegate);
471 stageContextRegainedEventHandler += value;
475 stageContextRegainedEventHandler -= value;
476 if (stageContextRegainedEventHandler == null && stageContextRegainedEventCallbackDelegate != null)
478 using VoidSignal signal = new VoidSignal(Interop.StageSignal.ContextRegainedSignal(stageCPtr), false);
479 signal?.Disconnect(stageContextRegainedEventCallbackDelegate);
480 if (signal?.Empty() == true)
482 stageContextRegainedEventCallbackDelegate = null;
488 internal event EventHandler SceneCreated
492 if (stageSceneCreatedEventHandler == null)
494 stageSceneCreatedEventCallbackDelegate = OnSceneCreated;
495 using VoidSignal signal = new VoidSignal(Interop.StageSignal.SceneCreatedSignal(stageCPtr), false);
496 signal?.Connect(stageSceneCreatedEventCallbackDelegate);
498 stageSceneCreatedEventHandler += value;
502 stageSceneCreatedEventHandler -= value;
503 if (stageSceneCreatedEventHandler == null && stageSceneCreatedEventCallbackDelegate != null)
505 using VoidSignal signal = new VoidSignal(Interop.StageSignal.SceneCreatedSignal(stageCPtr), false);
506 signal?.Disconnect(stageSceneCreatedEventCallbackDelegate);
507 if (signal?.Empty() == true)
509 stageSceneCreatedEventCallbackDelegate = null;
515 internal System.IntPtr GetNativeWindowHandler()
517 System.IntPtr ret = Interop.Window.GetNativeWindowHandler(HandleRef.ToIntPtr(this.SwigCPtr));
518 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
523 /// Disconnect all native signals
525 /// <since_tizen> 5 </since_tizen>
526 internal void DisconnectNativeSignals()
528 if (HasBody() == false)
530 NUILog.Debug($"[Dispose] DisConnectFromSignals() No native body! No need to Disconnect Signals!");
534 if (windowFocusChangedEventCallback != null)
536 using WindowFocusSignalType signal = new WindowFocusSignalType(Interop.Window.FocusChangedSignal(GetBaseHandleCPtrHandleRef), false);
537 signal?.Disconnect(windowFocusChangedEventCallback);
538 windowFocusChangedEventCallback = null;
541 if (rootLayerTouchDataCallback != null)
543 using TouchDataSignal signal = new TouchDataSignal(Interop.ActorSignal.ActorTouchSignal(Layer.getCPtr(GetRootLayer())), false);
544 signal?.Disconnect(rootLayerTouchDataCallback);
545 rootLayerTouchDataCallback = null;
547 if (wheelEventCallback != null)
549 using WheelSignal signal = new WheelSignal(Interop.ActorSignal.ActorWheelEventSignal(Layer.getCPtr(this.GetRootLayer())), false);
550 signal?.Disconnect(wheelEventCallback);
551 wheelEventCallback = null;
554 if (DetentEventCallback != null)
556 using StageWheelSignal signal = new StageWheelSignal(Interop.StageSignal.WheelEventSignal(stageCPtr), false);
557 signal?.Disconnect(DetentEventCallback);
558 DetentEventCallback = null;
561 if (stageKeyCallbackDelegate != null)
563 using KeyEventSignal signal = new KeyEventSignal(Interop.Window.KeyEventSignal(GetBaseHandleCPtrHandleRef), false);
564 signal?.Disconnect(stageKeyCallbackDelegate);
565 stageKeyCallbackDelegate = null;
568 if (stageInterceptKeyCallbackDelegate != null)
570 using KeyEventSignal signal = new KeyEventSignal(Interop.Window.InterceptKeyEventSignal(GetBaseHandleCPtrHandleRef), false);
571 signal?.Disconnect(stageInterceptKeyCallbackDelegate);
572 stageInterceptKeyCallbackDelegate = null;
575 if (stageEventProcessingFinishedEventCallbackDelegate != null)
577 using VoidSignal signal = new VoidSignal(Interop.StageSignal.EventProcessingFinishedSignal(stageCPtr), false);
578 signal?.Disconnect(stageEventProcessingFinishedEventCallbackDelegate);
579 stageEventProcessingFinishedEventCallbackDelegate = null;
582 if (stageContextLostEventCallbackDelegate != null)
584 using VoidSignal signal = new VoidSignal(Interop.StageSignal.ContextLostSignal(stageCPtr), false);
585 signal?.Disconnect(stageContextLostEventCallbackDelegate);
586 stageContextLostEventCallbackDelegate = null;
589 if (stageContextRegainedEventCallbackDelegate != null)
591 using VoidSignal signal = new VoidSignal(Interop.StageSignal.ContextRegainedSignal(stageCPtr), false);
592 signal?.Disconnect(stageContextRegainedEventCallbackDelegate);
593 stageContextRegainedEventCallbackDelegate = null;
596 if (stageSceneCreatedEventCallbackDelegate != null)
598 using VoidSignal signal = new VoidSignal(Interop.StageSignal.SceneCreatedSignal(stageCPtr), false);
599 signal?.Disconnect(stageSceneCreatedEventCallbackDelegate);
600 stageSceneCreatedEventCallbackDelegate = null;
603 if (windowResizeEventCallback != null)
605 using ResizeSignal signal = new ResizeSignal(Interop.Window.ResizeSignal(GetBaseHandleCPtrHandleRef), false);
606 signal?.Disconnect(windowResizeEventCallback);
607 windowResizeEventCallback = null;
610 if (windowFocusChangedEventCallback2 != null)
612 using WindowFocusSignalType signal = new WindowFocusSignalType(Interop.Window.FocusChangedSignal(GetBaseHandleCPtrHandleRef), false);
613 signal?.Disconnect(windowFocusChangedEventCallback2);
614 windowFocusChangedEventCallback2 = null;
617 if (transitionEffectEventCallback != null)
619 using WindowTransitionEffectSignal signal = new WindowTransitionEffectSignal(Interop.WindowTransitionEffectSignal.GetSignal(GetBaseHandleCPtrHandleRef), false);
620 signal?.Disconnect(transitionEffectEventCallback);
621 transitionEffectEventCallback = null;
624 if (keyboardRepeatSettingsChangedEventCallback != null)
626 using KeyboardRepeatSettingsChangedSignal signal = new KeyboardRepeatSettingsChangedSignal(Interop.KeyboardRepeatSettingsChangedSignal.GetSignal(GetBaseHandleCPtrHandleRef), false);
627 signal?.Disconnect(keyboardRepeatSettingsChangedEventCallback);
628 keyboardRepeatSettingsChangedEventCallback = null;
631 if (auxiliaryMessageEventCallback != null)
633 using WindowAuxiliaryMessageSignal signal = new WindowAuxiliaryMessageSignal(Interop.WindowAuxiliaryMessageSignalType.Get(GetBaseHandleCPtrHandleRef), false);
634 signal?.Disconnect(auxiliaryMessageEventCallback);
635 auxiliaryMessageEventCallback = null;
639 private void OnWindowFocusedChanged(IntPtr window, bool focusGained)
641 if (window == IntPtr.Zero)
643 NUILog.Error("OnWindowFocusedChanged() Window is null! Do nothing!");
647 if (windowFocusChangedEventHandler != null)
649 FocusChangedEventArgs e = new FocusChangedEventArgs();
650 e.FocusGained = focusGained;
651 windowFocusChangedEventHandler(this, e);
655 private bool OnWindowTouch(IntPtr view, IntPtr touchData)
657 if (touchData == global::System.IntPtr.Zero)
659 NUILog.Error("touchData should not be null!");
663 if (rootLayerTouchDataEventHandler != null)
665 TouchEventArgs e = new TouchEventArgs();
666 e.Touch = Tizen.NUI.Touch.GetTouchFromPtr(touchData);
667 rootLayerTouchDataEventHandler(this, e);
672 private bool OnStageWheel(IntPtr rootLayer, IntPtr wheelEvent)
674 if (wheelEvent == global::System.IntPtr.Zero)
676 NUILog.Error("wheelEvent should not be null!");
680 if (stageWheelHandler != null)
682 WheelEventArgs e = new WheelEventArgs();
683 e.Wheel = Tizen.NUI.Wheel.GetWheelFromPtr(wheelEvent);
684 stageWheelHandler(this, e);
689 // Callback for Stage KeyEventsignal
690 private void OnStageKey(IntPtr data)
692 if (stageKeyHandler != null)
694 KeyEventArgs e = new KeyEventArgs();
695 e.Key = Tizen.NUI.Key.GetKeyFromPtr(data);
696 //here we send all data to user event handlers
697 stageKeyHandler(this, e);
701 // Callback for Stage InterceptKeyEventsignal
702 private bool OnStageInterceptKey(IntPtr data)
704 bool consumed = false;
705 if (stageInterceptKeyHandler != null)
707 KeyEventArgs e = new KeyEventArgs();
708 e.Key = Tizen.NUI.Key.GetKeyFromPtr(data);
709 //here we send all data to user event handlers
710 consumed = stageInterceptKeyHandler(this, e);
715 // Callback for Stage EventProcessingFinishedSignal
716 private void OnEventProcessingFinished()
718 stageEventProcessingFinishedEventHandler?.Invoke(this, null);
721 // Callback for Stage ContextLostSignal
722 private void OnContextLost()
724 stageContextLostEventHandler?.Invoke(this, null);
727 // Callback for Stage ContextRegainedSignal
728 private void OnContextRegained()
730 stageContextRegainedEventHandler?.Invoke(this, null);
733 // Callback for Stage SceneCreatedSignal
734 private void OnSceneCreated()
736 stageSceneCreatedEventHandler?.Invoke(this, null);
739 private void OnResized(IntPtr window, IntPtr windowSize)
741 if (window == IntPtr.Zero)
743 NUILog.Error("OnResized() Window is null! Do nothing!");
747 if (windowResizeEventHandler != null)
749 ResizedEventArgs e = new ResizedEventArgs();
750 // var val = new Uint16Pair(windowSize, false);
751 // e.WindowSize = new Size2D(val.GetWidth(), val.GetHeight());
754 // Workaround : windowSize should be valid pointer from dali,
755 // but currently it is fixed and is not Uint16Pair class.
756 // will be fixed later.
757 e.WindowSize = this.WindowSize;
758 windowResizeEventHandler(this, e);
762 private void OnWindowFocusedChanged2(IntPtr window, bool focusGained)
764 if (window == IntPtr.Zero)
766 NUILog.Error("OnWindowFocusedChanged() Window is null! Do nothing!");
770 if (windowFocusChangedEventHandler2 != null)
772 FocusChangedEventArgs e = new FocusChangedEventArgs();
773 e.FocusGained = focusGained;
774 windowFocusChangedEventHandler2(this, e);
778 private void OnTransitionEffect(IntPtr window, int state, int type)
780 if (window == global::System.IntPtr.Zero)
785 if (transitionEffectHandler != null)
787 TransitionEffectEventArgs e = new TransitionEffectEventArgs();
788 e.State = (EffectState)state;
789 e.Type = (EffectType)type;
790 transitionEffectHandler(this, e);
795 private void OnKeyboardRepeatSettingsChanged()
797 keyboardRepeatSettingsChangedHandler?.Invoke(this, null);
802 /// The focus changed event argument.
804 /// <since_tizen> 3 </since_tizen>
805 public class FocusChangedEventArgs : EventArgs
808 /// FocusGained flag.
810 /// <since_tizen> 3 </since_tizen>
811 public bool FocusGained
819 /// The touch event argument.
821 /// <since_tizen> 3 </since_tizen>
822 public class TouchEventArgs : EventArgs
829 /// <since_tizen> 3 </since_tizen>
844 /// Wheel event arguments.
846 /// <since_tizen> 3 </since_tizen>
847 public class WheelEventArgs : EventArgs
854 /// <since_tizen> 3 </since_tizen>
869 /// Key event arguments.
871 /// <since_tizen> 3 </since_tizen>
872 public class KeyEventArgs : EventArgs
879 /// <since_tizen> 3 </since_tizen>
894 /// Feeds a key event into the window.
895 /// This resized event arguments.
897 /// <since_tizen> 3 </since_tizen>
898 public class ResizedEventArgs : EventArgs
903 /// This window size.
905 /// <since_tizen> 4 </since_tizen>
906 public Size2D WindowSize
920 /// Do not use this, that will be deprecated.
922 /// <since_tizen> 3 </since_tizen>
923 [Obsolete("Do not use this, that will be deprecated. Use FocusChangedEventArgs instead. " +
925 "NUIApplication.GetDefaultWindow().FocusChanged = OnFocusChanged; " +
926 "private void OnFocusChanged(object source, Window.FocusChangedEventArgs args) {...}")]
927 [EditorBrowsable(EditorBrowsableState.Never)]
928 [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible")]
929 public class WindowFocusChangedEventArgs : EventArgs
932 /// Do not use this, that will be deprecated.
934 /// <since_tizen> 3 </since_tizen>
935 public bool FocusGained
943 /// Contains and encapsulates Native Window handle.
945 /// <since_tizen> 4 </since_tizen>
946 [Obsolete("This has been deprecated in API9 and will be removed in API11. Use Window.NativeHandle instead.")]
947 public class SafeNativeWindowHandle : SafeHandle
950 ///Constructor, Native window handle is set to handle.
952 /// <since_tizen> 4 </since_tizen>
953 public SafeNativeWindowHandle() : base(IntPtr.Zero, false)
955 SetHandle(NUIApplication.GetDefaultWindow().GetNativeWindowHandler());
958 /// Null check if the handle is valid or not.
960 /// <since_tizen> 4 </since_tizen>
961 public override bool IsInvalid
965 return this.handle == IntPtr.Zero;
969 /// Release handle itself.
971 /// <returns>true when released successfully.</returns>
972 /// <since_tizen> 4 </since_tizen>
973 protected override bool ReleaseHandle()
980 /// TransitionEffectArgs
982 [EditorBrowsable(EditorBrowsableState.Never)]
983 public class TransitionEffectEventArgs : EventArgs
985 private EffectState state;
986 private EffectType type;
991 [EditorBrowsable(EditorBrowsableState.Never)]
992 public EffectState State
1006 [EditorBrowsable(EditorBrowsableState.Never)]
1007 public EffectType Type
1020 private EventHandler<WheelEventArgs> DetentEventHandler;
1022 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
1023 private delegate void DetentEventCallbackType(IntPtr arg1);
1025 private DetentEventCallbackType DetentEventCallback;
1027 private void OnDetentEvent(IntPtr wheelEvent)
1029 WheelEventArgs e = new WheelEventArgs();
1031 if (wheelEvent != global::System.IntPtr.Zero)
1033 e.Wheel = Wheel.GetWheelFromPtr(wheelEvent);
1036 DetentEventHandler?.Invoke(this, e);
1040 /// VisibilityChangedArgs
1042 [EditorBrowsable(EditorBrowsableState.Never)]
1043 public class VisibilityChangedEventArgs : EventArgs
1045 private bool visibility;
1049 [EditorBrowsable(EditorBrowsableState.Never)]
1050 public bool Visibility
1060 private void OnVisibilityChanged(IntPtr window, bool visibility)
1062 if (window == global::System.IntPtr.Zero)
1064 NUILog.Error("[ERR] OnVisibilityChanged() window is null");
1068 VisibilityChangedEventArgs e = new VisibilityChangedEventArgs();
1069 e.Visibility = visibility;
1070 if (VisibilityChangedEventHandler != null)
1072 VisibilityChangedEventHandler.Invoke(this, e);
1076 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
1077 private delegate void VisibilityChangedEventCallbackType(IntPtr window, bool visibility);
1078 private VisibilityChangedEventCallbackType VisibilityChangedEventCallback;
1079 private event EventHandler<VisibilityChangedEventArgs> VisibilityChangedEventHandler;
1080 private WindowVisibilityChangedEvent VisibilityChangedEventSignal;
1085 [EditorBrowsable(EditorBrowsableState.Never)]
1086 public event EventHandler<VisibilityChangedEventArgs> VisibilityChanged
1090 if (VisibilityChangedEventHandler == null)
1092 VisibilityChangedEventCallback = OnVisibilityChanged;
1093 using WindowVisibilityChangedEvent signal = new WindowVisibilityChangedEvent(Interop.WindowVisibilityChangedSignal.GetSignal(Window.getCPtr(this)), false);
1094 signal?.Connect(VisibilityChangedEventCallback);
1096 VisibilityChangedEventHandler += value;
1100 VisibilityChangedEventHandler -= value;
1101 if (VisibilityChangedEventHandler == null && VisibilityChangedEventCallback != null)
1103 using WindowVisibilityChangedEvent signal = new WindowVisibilityChangedEvent(Interop.WindowVisibilityChangedSignal.GetSignal(Window.getCPtr(this)), false);
1104 signal?.Disconnect(VisibilityChangedEventCallback);
1105 if (signal?.Empty() == true)
1107 VisibilityChangedEventCallback = null;
1114 /// VisibiltyChangedSignalEmit
1116 [EditorBrowsable(EditorBrowsableState.Never)]
1117 public void VisibiltyChangedSignalEmit(bool visibility)
1119 if (VisibilityChangedEventSignal == null)
1121 VisibilityChangedEventSignal = new WindowVisibilityChangedEvent(this);
1123 VisibilityChangedEventSignal.Emit(this, visibility);
1126 private void OnAuxiliaryMessage(IntPtr kData, IntPtr vData, IntPtr optionsArray)
1128 if (kData == IntPtr.Zero || vData == IntPtr.Zero)
1133 using var tmp = new PropertyArray(optionsArray, false);
1134 var size = tmp.Size();
1136 List<string> tmpList = new List<string>();
1138 for (int i = 0; i < size; i++)
1140 string option = "none";
1141 tmp.GetElementAt((uint)i).Get(out option);
1142 tmpList.Add(option);
1147 AuxiliaryMessageEventArgs e = new AuxiliaryMessageEventArgs();
1148 e.Key = StringToVoidSignal.GetResult(kData);
1149 e.Value = StringToVoidSignal.GetResult(vData); ;
1150 e.Options = tmpList;
1152 auxiliaryMessageEventHandler?.Invoke(this, e);
1156 /// Auxiliary message is sent by displayer server when window's auxiliary was changed then display server sent the message.
1157 /// When client application added the window's auxiliary hint and if the auxiliary is changed,
1158 /// display server send the auxiliary message.
1159 /// Auxiliary message has the key, value and options.
1161 [EditorBrowsable(EditorBrowsableState.Never)]
1162 public event EventHandler<AuxiliaryMessageEventArgs> AuxiliaryMessage
1166 if (auxiliaryMessageEventHandler == null)
1168 auxiliaryMessageEventCallback = OnAuxiliaryMessage;
1169 using WindowAuxiliaryMessageSignal signal = new WindowAuxiliaryMessageSignal(Interop.WindowAuxiliaryMessageSignalType.Get(SwigCPtr), false);
1170 signal?.Connect(auxiliaryMessageEventCallback);
1172 auxiliaryMessageEventHandler += value;
1176 auxiliaryMessageEventHandler -= value;
1177 if (auxiliaryMessageEventHandler == null && auxiliaryMessageEventCallback != null)
1179 using WindowAuxiliaryMessageSignal signal = new WindowAuxiliaryMessageSignal(Interop.WindowAuxiliaryMessageSignalType.Get(SwigCPtr), false);
1180 signal?.Disconnect(auxiliaryMessageEventCallback);
1181 if (signal?.Empty() == true)
1183 auxiliaryMessageEventCallback = null;