2 * Copyright(c) 2022 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 global::System.Diagnostics;
22 namespace Tizen.NUI.BaseComponents
25 /// View is the base class for all views.
27 /// <since_tizen> 3 </since_tizen>
28 public partial class View
30 internal string styleName;
32 internal virtual LayoutItem CreateDefaultLayout()
34 return new AbsoluteLayout();
37 internal class ThemeData
40 private enum States : byte
43 ControlStatePropagation = 1 << 0,
44 ThemeChangeSensitive = 1 << 1,
45 ThemeApplied = 1 << 2, // It is true when the view has valid style name or the platform theme has a component style for this view type.
46 // That indicates the view can have different styles by theme.
47 // Hence if the current state has ThemeApplied and ThemeChangeSensitive, the view will change its style by theme changing.
48 ListeningThemeChangeEvent = 1 << 3,
51 private States states = ThemeManager.ApplicationThemeChangeSensitive ? States.ThemeChangeSensitive : States.None;
52 public ViewStyle viewStyle;
53 public ControlState controlStates = ControlState.Normal;
54 public ViewSelectorData selectorData;
56 public bool ControlStatePropagation
58 get => ((states & States.ControlStatePropagation) != 0);
59 set => SetOption(States.ControlStatePropagation, value);
62 public bool ThemeChangeSensitive
64 get => ((states & States.ThemeChangeSensitive) != 0);
65 set => SetOption(States.ThemeChangeSensitive, value);
68 public bool ThemeApplied
70 get => ((states & States.ThemeApplied) != 0);
71 set => SetOption(States.ThemeApplied, value);
74 public bool ListeningThemeChangeEvent
76 get => ((states & States.ListeningThemeChangeEvent) != 0);
77 set => SetOption(States.ListeningThemeChangeEvent, value);
80 private void SetOption(States option, bool value)
82 if (value) states |= option;
83 else states &= ~option;
88 /// The color mode of View.
89 /// This specifies whether the View uses its own color, or inherits its parent color.
90 /// The default is ColorMode.UseOwnMultiplyParentColor.
92 internal ColorMode ColorMode
100 return GetColorMode();
104 internal LayoutLength SuggestedMinimumWidth
108 float result = Interop.Actor.GetSuggestedMinimumWidth(SwigCPtr);
109 if (NDalicPINVOKE.SWIGPendingException.Pending)
110 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
111 return new LayoutLength(result);
115 internal LayoutLength SuggestedMinimumHeight
119 float result = Interop.Actor.GetSuggestedMinimumHeight(SwigCPtr);
120 if (NDalicPINVOKE.SWIGPendingException.Pending)
121 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
122 return new LayoutLength(result);
126 internal float WorldPositionX
130 float returnValue = 0.0f;
131 PropertyValue wordPositionX = GetProperty(View.Property.WorldPositionX);
132 wordPositionX?.Get(out returnValue);
133 wordPositionX?.Dispose();
138 internal float WorldPositionY
142 float returnValue = 0.0f;
143 PropertyValue wordPositionY = GetProperty(View.Property.WorldPositionY);
144 wordPositionY?.Get(out returnValue);
145 wordPositionY?.Dispose();
150 internal float WorldPositionZ
154 float returnValue = 0.0f;
155 PropertyValue wordPositionZ = GetProperty(View.Property.WorldPositionZ);
156 wordPositionZ?.Get(out returnValue);
157 wordPositionZ?.Dispose();
162 internal bool FocusState
166 return IsKeyboardFocusable();
170 SetKeyboardFocusable(value);
174 internal void SetLayout(LayoutItem layout)
178 this.layout = layout;
179 this.layout?.AttachToOwner(this);
180 this.layout?.RequestLayout();
183 internal void AttachTransitionsToChildren(LayoutTransition transition)
185 // Iterate children, adding the transition unless a transition
186 // for the same condition and property has already been
188 foreach (View view in Children)
190 LayoutTransitionsHelper.AddTransitionForCondition(view.LayoutTransitions, transition.Condition, transition, false);
194 internal float ParentOriginX
198 float returnValue = 0.0f;
199 PropertyValue parentOriginX = GetProperty(View.Property.ParentOriginX);
200 parentOriginX?.Get(out returnValue);
201 parentOriginX?.Dispose();
206 PropertyValue setValue = new Tizen.NUI.PropertyValue(value);
207 SetProperty(View.Property.ParentOriginX, setValue);
209 NotifyPropertyChanged();
213 internal float ParentOriginY
217 float returnValue = 0.0f;
218 PropertyValue parentOriginY = GetProperty(View.Property.ParentOriginY);
219 parentOriginY?.Get(out returnValue);
220 parentOriginY?.Dispose();
225 PropertyValue setValue = new Tizen.NUI.PropertyValue(value);
226 SetProperty(View.Property.ParentOriginY, setValue);
228 NotifyPropertyChanged();
232 internal float ParentOriginZ
236 float returnValue = 0.0f;
237 PropertyValue parentOriginZ = GetProperty(View.Property.ParentOriginZ);
238 parentOriginZ?.Get(out returnValue);
239 parentOriginZ?.Dispose();
244 PropertyValue setValue = new Tizen.NUI.PropertyValue(value);
245 SetProperty(View.Property.ParentOriginZ, setValue);
247 NotifyPropertyChanged();
251 internal float PivotPointX
255 float returnValue = 0.0f;
256 PropertyValue anchorPointX = GetProperty(View.Property.AnchorPointX);
257 anchorPointX?.Get(out returnValue);
258 anchorPointX?.Dispose();
263 PropertyValue setValue = new Tizen.NUI.PropertyValue(value);
264 SetProperty(View.Property.AnchorPointX, setValue);
269 internal float PivotPointY
273 float returnValue = 0.0f;
274 PropertyValue anchorPointY = GetProperty(View.Property.AnchorPointY);
275 anchorPointY?.Get(out returnValue);
276 anchorPointY?.Dispose();
281 PropertyValue setValue = new Tizen.NUI.PropertyValue(value);
282 SetProperty(View.Property.AnchorPointY, setValue);
287 internal float PivotPointZ
291 float returnValue = 0.0f;
292 PropertyValue anchorPointZ = GetProperty(View.Property.AnchorPointZ);
293 anchorPointZ?.Get(out returnValue);
294 anchorPointZ?.Dispose();
299 PropertyValue setValue = new Tizen.NUI.PropertyValue(value);
300 SetProperty(View.Property.AnchorPointZ, setValue);
305 internal Matrix WorldMatrix
309 Matrix returnValue = new Matrix();
310 PropertyValue wordMatrix = GetProperty(View.Property.WorldMatrix);
311 wordMatrix?.Get(returnValue);
312 wordMatrix?.Dispose();
318 /// The number of layouts including view's layout and children's layouts.
319 /// This can be used to set/unset Process callback to calculate Layout.
321 internal int LayoutCount
330 if (layoutCount == value) return;
332 if (value < 0) throw new global::System.ArgumentOutOfRangeException(nameof(LayoutCount), "LayoutCount(" + LayoutCount + ") should not be less than zero");
334 int diff = value - layoutCount;
337 if (InternalParent != null)
339 var parentView = InternalParent as View;
340 if (parentView != null)
342 parentView.LayoutCount += diff;
346 var parentLayer = InternalParent as Layer;
347 if (parentLayer != null)
349 parentLayer.LayoutCount += diff;
357 /// Indicates that this View should listen Touch event to handle its ControlState.
359 private bool enableControlState = false;
361 private int LeftFocusableViewId
366 PropertyValue leftFocusableViewId = GetProperty(View.Property.LeftFocusableViewId);
367 leftFocusableViewId?.Get(out returnValue);
368 leftFocusableViewId?.Dispose();
373 PropertyValue setValue = new Tizen.NUI.PropertyValue(value);
374 SetProperty(View.Property.LeftFocusableViewId, setValue);
379 private int RightFocusableViewId
384 PropertyValue rightFocusableViewId = GetProperty(View.Property.RightFocusableViewId);
385 rightFocusableViewId?.Get(out returnValue);
386 rightFocusableViewId?.Dispose();
391 PropertyValue setValue = new Tizen.NUI.PropertyValue(value);
392 SetProperty(View.Property.RightFocusableViewId, setValue);
397 private int UpFocusableViewId
402 PropertyValue upFocusableViewId = GetProperty(View.Property.UpFocusableViewId);
403 upFocusableViewId?.Get(out returnValue);
404 upFocusableViewId?.Dispose();
409 PropertyValue setValue = new Tizen.NUI.PropertyValue(value);
410 SetProperty(View.Property.UpFocusableViewId, setValue);
415 private int DownFocusableViewId
420 PropertyValue downFocusableViewId = GetProperty(View.Property.DownFocusableViewId);
421 downFocusableViewId?.Get(out returnValue);
422 downFocusableViewId?.Dispose();
427 PropertyValue setValue = new Tizen.NUI.PropertyValue(value);
428 SetProperty(View.Property.DownFocusableViewId, setValue);
433 internal string GetName()
435 string ret = Interop.Actor.GetName(SwigCPtr);
436 if (NDalicPINVOKE.SWIGPendingException.Pending)
437 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
441 internal void SetName(string name)
443 Interop.Actor.SetName(SwigCPtr, name);
444 if (NDalicPINVOKE.SWIGPendingException.Pending)
445 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
448 internal uint GetId()
450 uint ret = Interop.Actor.GetId(SwigCPtr);
451 if (NDalicPINVOKE.SWIGPendingException.Pending)
452 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
456 internal bool IsRoot()
458 bool ret = Interop.ActorInternal.IsRoot(SwigCPtr);
459 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
463 internal bool OnWindow()
465 bool ret = Interop.Actor.OnStage(SwigCPtr);
466 if (NDalicPINVOKE.SWIGPendingException.Pending)
467 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
471 internal View FindChildById(uint id)
473 //to fix memory leak issue, match the handle count with native side.
474 IntPtr cPtr = Interop.Actor.FindChildById(SwigCPtr, id);
475 View ret = this.GetInstanceSafely<View>(cPtr);
476 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
480 internal override View FindCurrentChildById(uint id)
482 return FindChildById(id);
485 internal void SetParentOrigin(Vector3 origin)
487 Interop.ActorInternal.SetParentOrigin(SwigCPtr, Vector3.getCPtr(origin));
488 if (NDalicPINVOKE.SWIGPendingException.Pending)
489 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
492 internal Vector3 GetCurrentParentOrigin()
494 Vector3 ret = new Vector3(Interop.ActorInternal.GetCurrentParentOrigin(SwigCPtr), true);
495 if (NDalicPINVOKE.SWIGPendingException.Pending)
496 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
500 internal void SetAnchorPoint(Vector3 anchorPoint)
502 Interop.Actor.SetAnchorPoint(SwigCPtr, Vector3.getCPtr(anchorPoint));
503 if (NDalicPINVOKE.SWIGPendingException.Pending)
504 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
507 internal Vector3 GetCurrentAnchorPoint()
509 Vector3 ret = new Vector3(Interop.ActorInternal.GetCurrentAnchorPoint(SwigCPtr), true);
510 if (NDalicPINVOKE.SWIGPendingException.Pending)
511 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
515 internal void SetSize(float width, float height)
517 Interop.ActorInternal.SetSize(SwigCPtr, width, height);
518 if (NDalicPINVOKE.SWIGPendingException.Pending)
519 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
522 internal void SetSize(float width, float height, float depth)
524 Interop.ActorInternal.SetSize(SwigCPtr, width, height, depth);
525 if (NDalicPINVOKE.SWIGPendingException.Pending)
526 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
529 internal void SetSize(Vector2 size)
531 Interop.ActorInternal.SetSizeVector2(SwigCPtr, Vector2.getCPtr(size));
532 if (NDalicPINVOKE.SWIGPendingException.Pending)
533 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
536 internal void SetSize(Vector3 size)
538 Interop.ActorInternal.SetSizeVector3(SwigCPtr, Vector3.getCPtr(size));
539 if (NDalicPINVOKE.SWIGPendingException.Pending)
540 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
543 internal Vector3 GetTargetSize()
545 Vector3 ret = new Vector3(Interop.ActorInternal.GetTargetSize(SwigCPtr), true);
546 if (NDalicPINVOKE.SWIGPendingException.Pending)
547 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
551 internal Size2D GetCurrentSize()
553 Size ret = new Size(Interop.Actor.GetCurrentSize(SwigCPtr), true);
554 if (NDalicPINVOKE.SWIGPendingException.Pending)
555 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
556 Size2D size = new Size2D((int)ret.Width, (int)ret.Height);
561 internal Size2D GetCurrentSizeFloat()
563 Size ret = new Size(Interop.Actor.GetCurrentSize(SwigCPtr), true);
564 if (NDalicPINVOKE.SWIGPendingException.Pending)
565 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
570 /// GetNaturalSize() function behaviour can be changed for each subclass of View.
571 /// So we make GetNaturalSize() function virtual, and make subclass can define it's owned logic
573 internal virtual Vector3 GetNaturalSize()
575 Vector3 ret = new Vector3(Interop.Actor.GetNaturalSize(SwigCPtr), true);
576 if (NDalicPINVOKE.SWIGPendingException.Pending)
577 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
581 internal void SetPosition(float x, float y)
583 Interop.ActorInternal.SetPosition(SwigCPtr, x, y);
584 if (NDalicPINVOKE.SWIGPendingException.Pending)
585 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
588 internal void SetPosition(float x, float y, float z)
590 Interop.ActorInternal.SetPosition(SwigCPtr, x, y, z);
591 if (NDalicPINVOKE.SWIGPendingException.Pending)
592 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
595 internal void SetPosition(Vector3 position)
597 Interop.ActorInternal.SetPosition(SwigCPtr, Vector3.getCPtr(position));
598 if (NDalicPINVOKE.SWIGPendingException.Pending)
599 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
602 internal void SetX(float x)
604 Interop.ActorInternal.SetX(SwigCPtr, x);
605 if (NDalicPINVOKE.SWIGPendingException.Pending)
606 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
609 internal void SetY(float y)
611 Interop.ActorInternal.SetY(SwigCPtr, y);
612 if (NDalicPINVOKE.SWIGPendingException.Pending)
613 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
616 internal void SetZ(float z)
618 Interop.ActorInternal.SetZ(SwigCPtr, z);
619 if (NDalicPINVOKE.SWIGPendingException.Pending)
620 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
623 internal void TranslateBy(Vector3 distance)
625 Interop.ActorInternal.TranslateBy(SwigCPtr, Vector3.getCPtr(distance));
626 if (NDalicPINVOKE.SWIGPendingException.Pending)
627 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
630 internal Position GetCurrentPosition()
632 Position ret = new Position(Interop.Actor.GetCurrentPosition(SwigCPtr), true);
633 if (NDalicPINVOKE.SWIGPendingException.Pending)
634 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
638 internal Vector3 GetCurrentWorldPosition()
640 Vector3 ret = new Vector3(Interop.ActorInternal.GetCurrentWorldPosition(SwigCPtr), true);
641 if (NDalicPINVOKE.SWIGPendingException.Pending)
642 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
646 internal void SetInheritPosition(bool inherit)
648 Interop.ActorInternal.SetInheritPosition(SwigCPtr, inherit);
649 if (NDalicPINVOKE.SWIGPendingException.Pending)
650 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
653 internal bool IsPositionInherited()
655 bool ret = Interop.ActorInternal.IsPositionInherited(SwigCPtr);
656 if (NDalicPINVOKE.SWIGPendingException.Pending)
657 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
661 internal void SetOrientation(Degree angle, Vector3 axis)
663 Interop.ActorInternal.SetOrientationDegree(SwigCPtr, Degree.getCPtr(angle), Vector3.getCPtr(axis));
664 if (NDalicPINVOKE.SWIGPendingException.Pending)
665 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
668 internal void SetOrientation(Radian angle, Vector3 axis)
670 Interop.ActorInternal.SetOrientationRadian(SwigCPtr, Radian.getCPtr(angle), Vector3.getCPtr(axis));
671 if (NDalicPINVOKE.SWIGPendingException.Pending)
672 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
675 internal void SetOrientation(Rotation orientation)
677 Interop.ActorInternal.SetOrientationQuaternion(SwigCPtr, Rotation.getCPtr(orientation));
678 if (NDalicPINVOKE.SWIGPendingException.Pending)
679 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
682 internal Rotation GetCurrentOrientation()
684 Rotation ret = new Rotation(Interop.ActorInternal.GetCurrentOrientation(SwigCPtr), true);
685 if (NDalicPINVOKE.SWIGPendingException.Pending)
686 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
690 internal void SetInheritOrientation(bool inherit)
692 Interop.ActorInternal.SetInheritOrientation(SwigCPtr, inherit);
693 if (NDalicPINVOKE.SWIGPendingException.Pending)
694 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
697 internal bool IsOrientationInherited()
699 bool ret = Interop.ActorInternal.IsOrientationInherited(SwigCPtr);
700 if (NDalicPINVOKE.SWIGPendingException.Pending)
701 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
705 internal Rotation GetCurrentWorldOrientation()
707 Rotation ret = new Rotation(Interop.ActorInternal.GetCurrentWorldOrientation(SwigCPtr), true);
708 if (NDalicPINVOKE.SWIGPendingException.Pending)
709 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
713 internal void SetScale(float scale)
715 Interop.ActorInternal.SetScale(SwigCPtr, scale);
716 if (NDalicPINVOKE.SWIGPendingException.Pending)
717 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
720 internal void SetScale(float scaleX, float scaleY, float scaleZ)
722 Interop.ActorInternal.SetScale(SwigCPtr, scaleX, scaleY, scaleZ);
723 if (NDalicPINVOKE.SWIGPendingException.Pending)
724 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
727 internal void SetScale(Vector3 scale)
729 Interop.ActorInternal.SetScale(SwigCPtr, Vector3.getCPtr(scale));
730 if (NDalicPINVOKE.SWIGPendingException.Pending)
731 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
734 internal Vector3 GetCurrentScale()
736 Vector3 ret = new Vector3(Interop.ActorInternal.GetCurrentScale(SwigCPtr), true);
737 if (NDalicPINVOKE.SWIGPendingException.Pending)
738 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
742 internal Vector3 GetCurrentWorldScale()
744 Vector3 ret = new Vector3(Interop.ActorInternal.GetCurrentWorldScale(SwigCPtr), true);
745 if (NDalicPINVOKE.SWIGPendingException.Pending)
746 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
750 internal void SetInheritScale(bool inherit)
752 Interop.ActorInternal.SetInheritScale(SwigCPtr, inherit);
753 if (NDalicPINVOKE.SWIGPendingException.Pending)
754 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
757 internal bool IsScaleInherited()
759 bool ret = Interop.ActorInternal.IsScaleInherited(SwigCPtr);
760 if (NDalicPINVOKE.SWIGPendingException.Pending)
761 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
765 internal Matrix GetCurrentWorldMatrix()
767 Matrix ret = new Matrix(Interop.ActorInternal.GetCurrentWorldMatrix(SwigCPtr), true);
768 if (NDalicPINVOKE.SWIGPendingException.Pending)
769 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
773 internal void SetVisible(bool visible)
775 Interop.Actor.SetVisible(SwigCPtr, visible);
776 if (NDalicPINVOKE.SWIGPendingException.Pending)
777 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
780 internal bool IsVisible()
782 bool ret = Interop.ActorInternal.IsVisible(SwigCPtr);
783 if (NDalicPINVOKE.SWIGPendingException.Pending)
784 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
788 internal void SetOpacity(float opacity)
790 Interop.ActorInternal.SetOpacity(SwigCPtr, opacity);
791 if (NDalicPINVOKE.SWIGPendingException.Pending)
792 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
795 internal float GetCurrentOpacity()
797 float ret = Interop.ActorInternal.GetCurrentOpacity(SwigCPtr);
798 if (NDalicPINVOKE.SWIGPendingException.Pending)
799 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
803 internal Vector4 GetCurrentColor()
805 Vector4 ret = new Vector4(Interop.ActorInternal.GetCurrentColor(SwigCPtr), true);
806 if (NDalicPINVOKE.SWIGPendingException.Pending)
807 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
810 internal ColorMode GetColorMode()
812 ColorMode ret = (ColorMode)Interop.ActorInternal.GetColorMode(SwigCPtr);
813 if (NDalicPINVOKE.SWIGPendingException.Pending)
814 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
818 internal Vector4 GetCurrentWorldColor()
820 Vector4 ret = new Vector4(Interop.ActorInternal.GetCurrentWorldColor(SwigCPtr), true);
821 if (NDalicPINVOKE.SWIGPendingException.Pending)
822 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
826 internal void SetDrawMode(DrawModeType drawMode)
828 Interop.ActorInternal.SetDrawMode(SwigCPtr, (int)drawMode);
829 if (NDalicPINVOKE.SWIGPendingException.Pending)
830 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
833 internal DrawModeType GetDrawMode()
835 DrawModeType ret = (DrawModeType)Interop.ActorInternal.GetDrawMode(SwigCPtr);
836 if (NDalicPINVOKE.SWIGPendingException.Pending)
837 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
841 internal void SetKeyboardFocusable(bool focusable)
843 Interop.ActorInternal.SetKeyboardFocusable(SwigCPtr, focusable);
844 if (NDalicPINVOKE.SWIGPendingException.Pending)
845 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
848 internal bool IsKeyboardFocusable()
850 bool ret = Interop.ActorInternal.IsKeyboardFocusable(SwigCPtr);
851 if (NDalicPINVOKE.SWIGPendingException.Pending)
852 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
856 internal void SetKeyboardFocusableChildren(bool focusable)
858 Interop.ActorInternal.SetKeyboardFocusableChildren(SwigCPtr, focusable);
859 if (NDalicPINVOKE.SWIGPendingException.Pending)
860 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
863 internal bool AreChildrenKeyBoardFocusable()
865 bool ret = Interop.ActorInternal.AreChildrenKeyBoardFocusable(SwigCPtr);
866 if (NDalicPINVOKE.SWIGPendingException.Pending)
867 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
871 internal void SetFocusableInTouch(bool enabled)
873 Interop.ActorInternal.SetFocusableInTouch(SwigCPtr, enabled);
874 if (NDalicPINVOKE.SWIGPendingException.Pending)
875 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
878 internal bool IsFocusableInTouch()
880 bool ret = Interop.ActorInternal.IsFocusableInTouch(SwigCPtr);
881 if (NDalicPINVOKE.SWIGPendingException.Pending)
882 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
886 internal void SetResizePolicy(ResizePolicyType policy, DimensionType dimension)
888 Interop.Actor.SetResizePolicy(SwigCPtr, (int)policy, (int)dimension);
889 if (NDalicPINVOKE.SWIGPendingException.Pending)
890 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
893 internal ResizePolicyType GetResizePolicy(DimensionType dimension)
895 ResizePolicyType ret = (ResizePolicyType)Interop.Actor.GetResizePolicy(SwigCPtr, (int)dimension);
896 if (NDalicPINVOKE.SWIGPendingException.Pending)
897 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
901 internal Vector3 GetSizeModeFactor()
903 Vector3 ret = new Vector3(Interop.Actor.GetSizeModeFactor(SwigCPtr), true);
904 if (NDalicPINVOKE.SWIGPendingException.Pending)
905 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
909 internal void SetMinimumSize(Vector2 size)
911 Interop.ActorInternal.SetMinimumSize(SwigCPtr, Vector2.getCPtr(size));
912 if (NDalicPINVOKE.SWIGPendingException.Pending)
913 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
916 internal Vector2 GetMinimumSize()
918 Vector2 ret = new Vector2(Interop.ActorInternal.GetMinimumSize(SwigCPtr), true);
919 if (NDalicPINVOKE.SWIGPendingException.Pending)
920 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
924 internal void SetMaximumSize(Vector2 size)
926 Interop.ActorInternal.SetMaximumSize(SwigCPtr, Vector2.getCPtr(size));
927 if (NDalicPINVOKE.SWIGPendingException.Pending)
928 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
931 internal Vector2 GetMaximumSize()
933 Vector2 ret = new Vector2(Interop.ActorInternal.GetMaximumSize(SwigCPtr), true);
934 if (NDalicPINVOKE.SWIGPendingException.Pending)
935 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
939 internal int GetHierarchyDepth()
941 int ret = Interop.Actor.GetHierarchyDepth(SwigCPtr);
942 if (NDalicPINVOKE.SWIGPendingException.Pending)
943 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
947 internal uint GetRendererCount()
949 uint ret = Interop.Actor.GetRendererCount(SwigCPtr);
950 if (NDalicPINVOKE.SWIGPendingException.Pending)
951 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
955 internal static global::System.Runtime.InteropServices.HandleRef getCPtr(View obj)
957 return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.SwigCPtr;
960 internal bool IsTopLevelView()
962 if (GetParent() is Layer)
969 internal void SetKeyInputFocus()
971 Interop.ViewInternal.SetKeyInputFocus(SwigCPtr);
972 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
975 internal void ClearKeyInputFocus()
977 Interop.ViewInternal.ClearKeyInputFocus(SwigCPtr);
978 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
981 internal PinchGestureDetector GetPinchGestureDetector()
983 PinchGestureDetector ret = new PinchGestureDetector(Interop.ViewInternal.GetPinchGestureDetector(SwigCPtr), true);
984 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
988 internal PanGestureDetector GetPanGestureDetector()
990 PanGestureDetector ret = new PanGestureDetector(Interop.ViewInternal.GetPanGestureDetector(SwigCPtr), true);
991 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
995 internal TapGestureDetector GetTapGestureDetector()
997 TapGestureDetector ret = new TapGestureDetector(Interop.ViewInternal.GetTapGestureDetector(SwigCPtr), true);
998 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1002 internal LongPressGestureDetector GetLongPressGestureDetector()
1004 LongPressGestureDetector ret = new LongPressGestureDetector(Interop.ViewInternal.GetLongPressGestureDetector(SwigCPtr), true);
1005 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1009 internal IntPtr GetPtrfromView()
1011 return (IntPtr)SwigCPtr;
1014 internal void RemoveChild(View child)
1016 // Do actual child removal
1017 Interop.Actor.Remove(SwigCPtr, View.getCPtr(child));
1018 if (NDalicPINVOKE.SWIGPendingException.Pending)
1019 throw NDalicPINVOKE.SWIGPendingException.Retrieve();
1021 Children.Remove(child);
1022 child.InternalParent = null;
1023 LayoutCount -= child.LayoutCount;
1025 OnChildRemoved(child);
1026 if (ChildRemoved != null)
1028 ChildRemovedEventArgs e = new ChildRemovedEventArgs
1032 ChildRemoved(this, e);
1037 /// Removes the layout from this View.
1039 internal void ResetLayout()
1046 internal ResourceLoadingStatusType GetBackgroundResourceStatus()
1048 return (ResourceLoadingStatusType)Interop.View.GetVisualResourceStatus(this.SwigCPtr, Property.BACKGROUND);
1051 /// TODO open as a protected level
1052 internal virtual void ApplyCornerRadius()
1054 if (backgroundExtraData == null) return;
1056 var cornerRadiusValue = backgroundExtraData.CornerRadius == null ? new PropertyValue() : new PropertyValue(backgroundExtraData.CornerRadius);
1057 var cornerRadiusPolicyValue = new PropertyValue((int)backgroundExtraData.CornerRadiusPolicy);
1059 // Make current propertyMap
1060 PropertyMap currentPropertyMap = new PropertyMap();
1061 currentPropertyMap[Visual.Property.CornerRadius] = cornerRadiusValue;
1062 currentPropertyMap[Visual.Property.CornerRadiusPolicy] = cornerRadiusPolicyValue;
1063 var temp = new PropertyValue(currentPropertyMap);
1065 // Update corner radius properties to background and shadow by ActionUpdateProperty
1066 DoAction(View.Property.BACKGROUND, ActionUpdateProperty, temp);
1067 DoAction(View.Property.SHADOW, ActionUpdateProperty, temp);
1070 currentPropertyMap.Dispose();
1071 cornerRadiusValue.Dispose();
1072 cornerRadiusPolicyValue.Dispose();
1075 /// TODO open as a protected level
1076 internal virtual void ApplyBorderline()
1078 if (backgroundExtraData == null) return;
1080 // ActionUpdateProperty works well only if BACKGROUND visual setup before.
1081 // If view don't have BACKGROUND visual, we set transparent background color in default.
1082 using (PropertyMap backgroundPropertyMap = new PropertyMap())
1084 using (PropertyValue propertyValue = Object.GetProperty(SwigCPtr, Property.BACKGROUND))
1086 propertyValue?.Get(backgroundPropertyMap);
1087 if (backgroundPropertyMap.Empty())
1089 // BACKGROUND visual doesn't exist.
1090 SetBackgroundColor(Color.Transparent);
1091 // SetBackgroundColor function apply borderline internally.
1092 // So we can just return now.
1098 var borderlineWidthValue = new PropertyValue(backgroundExtraData.BorderlineWidth);
1099 var borderlineColorValue = backgroundExtraData.BorderlineColor == null ? new PropertyValue(Color.Black) : new PropertyValue(backgroundExtraData.BorderlineColor);
1100 var borderlineOffsetValue = new PropertyValue(backgroundExtraData.BorderlineOffset);
1102 // Make current propertyMap
1103 PropertyMap currentPropertyMap = new PropertyMap();
1104 currentPropertyMap[Visual.Property.BorderlineWidth] = borderlineWidthValue;
1105 currentPropertyMap[Visual.Property.BorderlineColor] = borderlineColorValue;
1106 currentPropertyMap[Visual.Property.BorderlineOffset] = borderlineOffsetValue;
1107 var temp = new PropertyValue(currentPropertyMap);
1109 // Update borderline properties to background by ActionUpdateProperty
1110 DoAction(View.Property.BACKGROUND, ActionUpdateProperty, temp);
1113 currentPropertyMap.Dispose();
1114 borderlineWidthValue.Dispose();
1115 borderlineColorValue.Dispose();
1116 borderlineOffsetValue.Dispose();
1120 /// Get selector value from the triggerable selector or related property.
1122 internal Selector<T> GetSelector<T>(TriggerableSelector<T> triggerableSelector, NUI.Binding.BindableProperty relatedProperty)
1124 var selector = triggerableSelector?.Get();
1125 if (selector != null)
1130 var value = (T)GetValue(relatedProperty);
1131 return value == null ? null : new Selector<T>(value);
1134 internal void SetThemeApplied()
1136 if (themeData == null) themeData = new ThemeData();
1137 themeData.ThemeApplied = true;
1139 if (ThemeChangeSensitive && !themeData.ListeningThemeChangeEvent)
1141 themeData.ListeningThemeChangeEvent = true;
1142 ThemeManager.ThemeChangedInternal.Add(OnThemeChanged);
1147 /// you can override it to clean-up your own resources.
1149 /// <param name="type">DisposeTypes</param>
1150 /// <since_tizen> 3 </since_tizen>
1151 protected override void Dispose(DisposeTypes type)
1158 disposeDebugging(type);
1160 //_mergedStyle = null;
1162 internalMaximumSize?.Dispose();
1163 internalMaximumSize = null;
1164 internalMinimumSize?.Dispose();
1165 internalMinimumSize = null;
1166 internalMargin?.Dispose();
1167 internalMargin = null;
1168 internalPadding?.Dispose();
1169 internalPadding = null;
1170 internalSizeModeFactor?.Dispose();
1171 internalSizeModeFactor = null;
1172 internalCellIndex?.Dispose();
1173 internalCellIndex = null;
1174 internalBackgroundColor?.Dispose();
1175 internalBackgroundColor = null;
1176 internalColor?.Dispose();
1177 internalColor = null;
1178 internalPivotPoint?.Dispose();
1179 internalPivotPoint = null;
1180 internalPosition?.Dispose();
1181 internalPosition = null;
1182 internalPosition2D?.Dispose();
1183 internalPosition2D = null;
1184 internalScale?.Dispose();
1185 internalScale = null;
1186 internalSize?.Dispose();
1187 internalSize = null;
1188 internalSize2D?.Dispose();
1189 internalSize2D = null;
1191 if (type == DisposeTypes.Explicit)
1194 //Release your own managed resources here.
1195 //You should release all of your own disposable objects here.
1196 if (themeData != null)
1198 themeData.selectorData?.Reset(this);
1199 if (themeData.ListeningThemeChangeEvent)
1201 ThemeManager.ThemeChangedInternal.Remove(OnThemeChanged);
1204 if (widthConstraint != null)
1206 widthConstraint.Remove();
1207 widthConstraint.Dispose();
1209 if (heightConstraint != null)
1211 heightConstraint.Remove();
1212 heightConstraint.Dispose();
1216 //Release your own unmanaged resources here.
1217 //You should not access any managed member here except static instance.
1218 //because the execution order of Finalizes is non-deterministic.
1220 DisConnectFromSignals();
1222 foreach (View view in Children)
1224 view.InternalParent = null;
1229 NUILog.Debug($"[Dispose] View.Dispose({type}) END");
1230 NUILog.Debug($"=============================");
1235 /// This will not be public opened.
1236 [EditorBrowsable(EditorBrowsableState.Never)]
1237 protected override void ReleaseSwigCPtr(System.Runtime.InteropServices.HandleRef swigCPtr)
1239 Interop.View.DeleteView(swigCPtr);
1243 /// The touch event handler for ControlState.
1244 /// Please change ControlState value by touch state if needed.
1246 /// <exception cref="ArgumentNullException"> Thrown when touch is null. </exception>
1247 [EditorBrowsable(EditorBrowsableState.Never)]
1248 protected virtual bool HandleControlStateOnTouch(Touch touch)
1252 throw new global::System.ArgumentNullException(nameof(touch));
1255 switch (touch.GetState(0))
1257 case PointStateType.Down:
1258 ControlState += ControlState.Pressed;
1260 case PointStateType.Interrupted:
1261 case PointStateType.Up:
1262 if (ControlState.Contains(ControlState.Pressed))
1264 ControlState -= ControlState.Pressed;
1274 /// Internal callback of enabled property changes.
1275 /// Inherited view can override this method to implements enabled property changes.
1277 [EditorBrowsable(EditorBrowsableState.Never)]
1278 protected virtual void OnEnabled(bool enabled)
1282 if (State == View.States.Disabled)
1284 State = View.States.Normal;
1286 if (enableControlState)
1288 ControlState -= ControlState.Disabled;
1293 State = View.States.Disabled;
1294 if (enableControlState)
1296 ControlState += ControlState.Disabled;
1302 private void DisConnectFromSignals()
1304 if (HasBody() == false)
1306 NUILog.Debug($"[Dispose] DisConnectFromSignals() No native body! No need to Disconnect Signals!");
1309 NUILog.Debug($"[Dispose] DisConnectFromSignals START");
1310 NUILog.Debug($"[Dispose] View.DisConnectFromSignals() type:{GetType()} copyNativeHandle:{GetBaseHandleCPtrHandleRef.Handle.ToString("X8")}");
1311 NUILog.Debug($"[Dispose] ID:{Interop.Actor.GetId(GetBaseHandleCPtrHandleRef)} Name:{Interop.Actor.GetName(GetBaseHandleCPtrHandleRef)}");
1313 if (onRelayoutEventCallback != null)
1315 NUILog.Debug($"[Dispose] onRelayoutEventCallback");
1317 using ViewSignal signal = new ViewSignal(Interop.ActorSignal.ActorOnRelayoutSignal(GetBaseHandleCPtrHandleRef), false);
1318 signal?.Disconnect(onRelayoutEventCallback);
1319 onRelayoutEventCallback = null;
1322 if (offWindowEventCallback != null)
1324 NUILog.Debug($"[Dispose] offWindowEventCallback");
1326 using ViewSignal signal = new ViewSignal(Interop.ActorSignal.ActorOffSceneSignal(GetBaseHandleCPtrHandleRef), false);
1327 signal?.Disconnect(offWindowEventCallback);
1328 offWindowEventCallback = null;
1331 if (onWindowEventCallback != null)
1333 NUILog.Debug($"[Dispose] onWindowEventCallback");
1335 using ViewSignal signal = new ViewSignal(Interop.ActorSignal.ActorOnSceneSignal(GetBaseHandleCPtrHandleRef), false);
1336 signal?.Disconnect(onWindowEventCallback);
1337 onWindowEventCallback = null;
1340 if (wheelEventCallback != null)
1342 NUILog.Debug($"[Dispose] wheelEventCallback");
1344 using WheelSignal signal = new WheelSignal(Interop.ActorSignal.ActorWheelEventSignal(GetBaseHandleCPtrHandleRef), false);
1345 signal?.Disconnect(wheelEventCallback);
1346 wheelEventCallback = null;
1349 if (hoverEventCallback != null)
1351 NUILog.Debug($"[Dispose] hoverEventCallback");
1353 using HoverSignal signal = new HoverSignal(Interop.ActorSignal.ActorHoveredSignal(GetBaseHandleCPtrHandleRef), false);
1354 signal?.Disconnect(hoverEventCallback);
1355 hoverEventCallback = null;
1358 if (hitTestResultDataCallback != null)
1360 NUILog.Debug($"[Dispose] hitTestResultDataCallback");
1362 using TouchDataSignal signal = new TouchDataSignal(Interop.ActorSignal.ActorHitTestResultSignal(GetBaseHandleCPtrHandleRef), false);
1363 signal?.Disconnect(hitTestResultDataCallback);
1364 hitTestResultDataCallback = null;
1368 if (interceptTouchDataCallback != null)
1370 NUILog.Debug($"[Dispose] interceptTouchDataCallback");
1372 using TouchDataSignal signal = new TouchDataSignal(Interop.ActorSignal.ActorInterceptTouchSignal(GetBaseHandleCPtrHandleRef), false);
1373 signal?.Disconnect(interceptTouchDataCallback);
1374 interceptTouchDataCallback = null;
1377 if (touchDataCallback != null)
1379 NUILog.Debug($"[Dispose] touchDataCallback");
1381 using TouchDataSignal signal = new TouchDataSignal(Interop.ActorSignal.ActorTouchSignal(GetBaseHandleCPtrHandleRef), false);
1382 signal?.Disconnect(touchDataCallback);
1383 touchDataCallback = null;
1386 if (ResourcesLoadedCallback != null)
1388 NUILog.Debug($"[Dispose] ResourcesLoadedCallback");
1390 using ViewSignal signal = new ViewSignal(Interop.View.ResourceReadySignal(GetBaseHandleCPtrHandleRef), false);
1391 signal?.Disconnect(ResourcesLoadedCallback);
1392 ResourcesLoadedCallback = null;
1395 if (keyCallback != null)
1397 NUILog.Debug($"[Dispose] keyCallback");
1399 using ControlKeySignal signal = new ControlKeySignal(Interop.ViewSignal.KeyEventSignal(GetBaseHandleCPtrHandleRef), false);
1400 signal?.Disconnect(keyCallback);
1404 if (keyInputFocusLostCallback != null)
1406 NUILog.Debug($"[Dispose] keyInputFocusLostCallback");
1408 using KeyInputFocusSignal signal = new KeyInputFocusSignal(Interop.ViewSignal.KeyInputFocusLostSignal(GetBaseHandleCPtrHandleRef), false);
1409 signal?.Disconnect(keyInputFocusLostCallback);
1410 keyInputFocusLostCallback = null;
1411 keyInputFocusLostEventHandler = null;
1414 if (keyInputFocusGainedCallback != null)
1416 NUILog.Debug($"[Dispose] keyInputFocusGainedCallback");
1418 using KeyInputFocusSignal signal = new KeyInputFocusSignal(Interop.ViewSignal.KeyInputFocusGainedSignal(GetBaseHandleCPtrHandleRef), false);
1419 signal?.Disconnect(keyInputFocusGainedCallback);
1420 keyInputFocusGainedCallback = null;
1421 keyInputFocusGainedEventHandler = null;
1424 if (backgroundResourceLoadedCallback != null)
1426 NUILog.Debug($"[Dispose] backgroundResourceLoadedCallback");
1428 using ViewSignal signal = new ViewSignal(Interop.View.ResourceReadySignal(GetBaseHandleCPtrHandleRef), false);
1429 signal?.Disconnect(backgroundResourceLoadedCallback);
1430 backgroundResourceLoadedCallback = null;
1433 if (onWindowSendEventCallback != null)
1435 NUILog.Debug($"[Dispose] onWindowSendEventCallback");
1437 using ViewSignal signal = new ViewSignal(Interop.ActorSignal.ActorOnSceneSignal(GetBaseHandleCPtrHandleRef), false);
1438 signal?.Disconnect(onWindowSendEventCallback);
1439 onWindowSendEventCallback = null;
1441 NUILog.Debug($"[Dispose] DisConnectFromSignals END");
1445 /// Apply initial style to the view.
1447 [EditorBrowsable(EditorBrowsableState.Never)]
1448 protected virtual void InitializeStyle(ViewStyle style = null)
1450 var initialStyle = ThemeManager.GetInitialStyleWithoutClone(GetType());
1453 ApplyStyle(initialStyle);
1457 var refinedStyle = style;
1458 if (style.IncludeDefaultStyle)
1460 refinedStyle = initialStyle?.Merge(style);
1462 ApplyStyle(refinedStyle);
1465 // Listen theme change event if needs.
1466 if (ThemeManager.PlatformThemeEnabled && initialStyle != null)
1472 private View ConvertIdToView(uint id)
1474 View view = GetParent()?.FindCurrentChildById(id);
1476 //If we can't find the parent's children, find in the top layer.
1479 Container parent = GetParent();
1480 while ((parent is View) && (parent != null))
1482 parent = parent.GetParent();
1483 if (parent is Layer)
1485 view = parent.FindCurrentChildById(id);
1494 private void OnScaleChanged(float x, float y, float z)
1496 Scale = new Vector3(x, y, z);
1499 private void OnBackgroundColorChanged(float r, float g, float b, float a)
1501 BackgroundColor = new Color(r, g, b, a);
1504 private void OnPaddingChanged(ushort start, ushort end, ushort top, ushort bottom)
1506 Padding = new Extents(start, end, top, bottom);
1509 private void OnMarginChanged(ushort start, ushort end, ushort top, ushort bottom)
1511 Margin = new Extents(start, end, top, bottom);
1514 private void OnAnchorPointChanged(float x, float y, float z)
1516 AnchorPoint = new Position(x, y, z);
1519 private void OnCellIndexChanged(float x, float y)
1521 CellIndex = new Vector2(x, y);
1524 private void OnFlexMarginChanged(float x, float y, float z, float w)
1526 FlexMargin = new Vector4(x, y, z, w);
1529 private void OnPaddingEXChanged(ushort start, ushort end, ushort top, ushort bottom)
1531 PaddingEX = new Extents(start, end, top, bottom);
1534 private void OnSizeModeFactorChanged(float x, float y, float z)
1536 SizeModeFactor = new Vector3(x, y, z);
1539 private bool EmptyOnTouch(object target, TouchEventArgs args)
1544 private ViewSelectorData EnsureSelectorData()
1546 if (themeData == null) themeData = new ThemeData();
1548 return themeData.selectorData ?? (themeData.selectorData = new ViewSelectorData());
1551 [Conditional("NUI_DEBUG_ON")]
1552 private void disposeDebugging(DisposeTypes type)
1554 DebugFileLogging.Instance.WriteLog($"View.Dispose({type}) START");
1555 DebugFileLogging.Instance.WriteLog($"type:{GetType()} copyNativeHandle:{GetBaseHandleCPtrHandleRef.Handle.ToString("X8")}");
1558 DebugFileLogging.Instance.WriteLog($"ID:{Interop.Actor.GetId(GetBaseHandleCPtrHandleRef)} Name:{Interop.Actor.GetName(GetBaseHandleCPtrHandleRef)}");
1562 DebugFileLogging.Instance.WriteLog($"has no native body!");