[NUI] Add DispatchHoverEvents and DispatchPrentHoverEvents
[platform/core/csapi/tizenfx.git] / src / Tizen.NUI / src / public / BaseComponents / View.cs
1 /*
2  * Copyright(c) 2022 Samsung Electronics Co., Ltd.
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  *
16  */
17 using System;
18 using System.Collections.Generic;
19 using System.ComponentModel;
20 using System.Runtime.InteropServices;
21 using Tizen.NUI.Binding;
22
23 namespace Tizen.NUI.BaseComponents
24 {
25     /// <summary>
26     /// View is the base class for all views.
27     /// </summary>
28     /// <since_tizen> 3 </since_tizen>
29     public partial class View : Container, IResourcesProvider
30     {
31         private static HashSet<BindableProperty> positionPropertyGroup = new HashSet<BindableProperty>();
32         private static HashSet<BindableProperty> sizePropertyGroup = new HashSet<BindableProperty>();
33         private static HashSet<BindableProperty> scalePropertyGroup = new HashSet<BindableProperty>();
34         private static bool defaultGrabTouchAfterLeave = false;
35         private static bool defaultAllowOnlyOwnTouch = false;
36
37         internal BackgroundExtraData backgroundExtraData;
38
39         private bool layoutSet = false;
40         private LayoutItem layout; // Exclusive layout assigned to this View.
41
42         // List of transitions paired with the condition that uses the transition.
43         private Dictionary<TransitionCondition, TransitionList> layoutTransitions;
44         private int widthPolicy = LayoutParamPolicies.WrapContent; // Layout width policy
45         private int heightPolicy = LayoutParamPolicies.WrapContent; // Layout height policy
46         private float weight = 0.0f; // Weighting of child View in a Layout
47         private bool backgroundImageSynchronousLoading = false;
48         private bool excludeLayouting = false;
49         private LayoutTransition layoutTransition;
50         private TransitionOptions transitionOptions = null;
51         private ThemeData themeData;
52         private bool isThemeChanged = false;
53
54         // List of constraints
55         private Constraint widthConstraint = null;
56         private Constraint heightConstraint = null;
57
58         private Size2D internalMaximumSize = null;
59         private Size2D internalMinimumSize = null;
60         private Extents internalMargin = null;
61         private Extents internalPadding = null;
62         private Vector3 internalSizeModeFactor = null;
63         private Vector2 internalCellIndex = null;
64         private Color internalBackgroundColor = null;
65         private Color internalColor = null;
66         private Position internalPivotPoint = null;
67         private Position internalPosition = null;
68         private Position2D internalPosition2D = null;
69         private Vector3 internalScale = null;
70         private Size internalSize = null;
71         private Size2D internalSize2D = null;
72         private int layoutCount = 0;
73         private ControlState propagatableControlStates = ControlState.All;
74
75         // List of dispatch Event
76         private PanGestureDetector panGestureDetector = null;
77         private LongPressGestureDetector longGestureDetector = null;
78         private PinchGestureDetector pinchGestureDetector = null;
79         private TapGestureDetector tapGestureDetector = null;
80         private RotationGestureDetector rotationGestureDetector = null;
81         private int configGestureCount = 0;
82         private bool dispatchTouchEvents = true;
83         private bool dispatchParentTouchEvents = true;
84         private bool dispatchHoverEvents = true;
85         private bool dispatchParentHoverEvents = true;
86         private bool dispatchGestureEvents = true;
87         private bool dispatchParentGestureEvents = true;
88         private string internalName = string.Empty;
89         private Position internalCurrentParentOrigin = null;
90         private Position internalCurrentAnchorPoint = null;
91         private Vector3 internalTargetSize = null;
92         private Size2D internalCurrentSize = null;
93         private Position internalCurrentPosition = null;
94         private Vector3 internalCurrentWorldPosition = null;
95         private Vector3 internalCurrentScale = null;
96         private Vector3 internalCurrentWorldScale = null;
97         private Vector4 internalCurrentColor = null;
98         private Vector4 internalCurrentWorldColor = null;
99         private Vector2 internalCurrentScreenPosition = null;
100
101         static View()
102         {
103             RegisterPropertyGroup(PositionProperty, positionPropertyGroup);
104             RegisterPropertyGroup(Position2DProperty, positionPropertyGroup);
105             RegisterPropertyGroup(PositionXProperty, positionPropertyGroup);
106             RegisterPropertyGroup(PositionYProperty, positionPropertyGroup);
107
108             RegisterPropertyGroup(SizeProperty, sizePropertyGroup);
109             RegisterPropertyGroup(Size2DProperty, sizePropertyGroup);
110             RegisterPropertyGroup(SizeWidthProperty, sizePropertyGroup);
111             RegisterPropertyGroup(SizeHeightProperty, sizePropertyGroup);
112
113             RegisterPropertyGroup(ScaleProperty, scalePropertyGroup);
114             RegisterPropertyGroup(ScaleXProperty, scalePropertyGroup);
115             RegisterPropertyGroup(ScaleYProperty, scalePropertyGroup);
116             RegisterPropertyGroup(ScaleZProperty, scalePropertyGroup);
117
118             RegisterAccessibilityDelegate();
119         }
120
121         /// <summary>
122         /// Accessibility mode for controlling View's Accessible implementation.
123         /// It is only relevant when deriving custom controls from View directly,
124         /// as classes derived from CustomView (or any of its subclasses) get the
125         /// Custom mode by default.
126         /// </summary>
127         [EditorBrowsable(EditorBrowsableState.Never)]
128         public enum ViewAccessibilityMode
129         {
130             /// <summary>
131             /// Default accessibility implementation. Overriding View.Accessibility...()
132             /// virtual methods will have no effect.
133             /// </summary>
134             [EditorBrowsable(EditorBrowsableState.Never)]
135             Default,
136             /// <summary>
137             /// Custom accessibility implementation. Overriding View.Accessibility...()
138             /// will be necessary to provide accessibility support for the View.
139             /// </summary>
140             [EditorBrowsable(EditorBrowsableState.Never)]
141             Custom,
142         }
143
144         private static IntPtr NewWithAccessibilityMode(ViewAccessibilityMode accessibilityMode)
145         {
146             switch (accessibilityMode)
147             {
148                 case ViewAccessibilityMode.Custom:
149                 {
150                     return Interop.View.NewCustom();
151                 }
152                 case ViewAccessibilityMode.Default:
153                 default:
154                 {
155                     return Interop.View.New();
156                 }
157             }
158         }
159
160         /// <summary>
161         /// Creates a new instance of a view.
162         /// </summary>
163         /// <since_tizen> 3 </since_tizen>
164         public View() : this(ViewAccessibilityMode.Default)
165         {
166         }
167
168         [EditorBrowsable(EditorBrowsableState.Never)]
169         public View(ViewAccessibilityMode accessibilityMode) : this(NewWithAccessibilityMode(accessibilityMode), true)
170         {
171             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
172         }
173
174         /// This will be public opened in next release of tizen after ACR done. Before ACR, it is used as HiddenAPI (InhouseAPI).
175         [EditorBrowsable(EditorBrowsableState.Never)]
176         public View(ViewStyle viewStyle) : this(Interop.View.New(), true, viewStyle)
177         {
178         }
179
180         /// <summary>
181         /// Create a new instance of a View with setting the status of shown or hidden.
182         /// </summary>
183         /// <param name="shown">false : Not displayed (hidden), true : displayed (shown)</param>
184         /// This will be public opened in next release of tizen after ACR done. Before ACR, it is used as HiddenAPI (InhouseAPI).
185         [EditorBrowsable(EditorBrowsableState.Never)]
186         public View(bool shown) : this(Interop.View.New(), true)
187         {
188             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
189             SetVisible(shown);
190         }
191
192         internal View(View uiControl, bool shown = true) : this(Interop.View.NewView(View.getCPtr(uiControl)), true)
193         {
194             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
195             if (!shown)
196             {
197                 SetVisible(false);
198             }
199
200             backgroundExtraData = uiControl.backgroundExtraData == null ? null : new BackgroundExtraData(uiControl.backgroundExtraData);
201         }
202
203         internal View(global::System.IntPtr cPtr, bool cMemoryOwn, ViewStyle viewStyle, bool shown = true) : this(cPtr, cMemoryOwn, shown)
204         {
205             InitializeStyle(viewStyle);
206         }
207
208         internal View(global::System.IntPtr cPtr, bool cMemoryOwn, bool shown = true) : base(cPtr, cMemoryOwn)
209         {
210             if (HasBody())
211             {
212                 PositionUsesPivotPoint = false;
213                 GrabTouchAfterLeave = defaultGrabTouchAfterLeave;
214                 AllowOnlyOwnTouch = defaultAllowOnlyOwnTouch;
215             }
216
217             if (!shown)
218             {
219                 SetVisible(false);
220             }
221         }
222
223         internal View(ViewImpl implementation, bool shown = true) : this(Interop.View.NewViewInternal(ViewImpl.getCPtr(implementation)), true)
224         {
225             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
226
227             if (!shown)
228             {
229                 SetVisible(false);
230             }
231         }
232
233         /// <summary>
234         /// The event that is triggered when the View's ControlState is changed.
235         /// </summary>
236         [EditorBrowsable(EditorBrowsableState.Never)]
237         public event EventHandler<ControlStateChangedEventArgs> ControlStateChangedEvent;
238
239         internal event EventHandler<ControlStateChangedEventArgs> ControlStateChangeEventInternal;
240
241
242         /// <summary>
243         /// Flag to indicate if layout set explicitly via API call or View was automatically given a Layout.
244         /// </summary>
245         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
246         [EditorBrowsable(EditorBrowsableState.Never)]
247         public bool LayoutSet
248         {
249             get
250             {
251                 return layoutSet;
252             }
253         }
254
255         /// <summary>
256         /// Flag to allow Layouting to be disabled for Views.
257         /// Once a View has a Layout set then any children added to Views from then on will receive
258         /// automatic Layouts.
259         /// </summary>
260         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
261         [EditorBrowsable(EditorBrowsableState.Never)]
262         public static bool LayoutingDisabled { get; set; } = true;
263
264         /// <summary>
265         /// If set to true, the <see cref="GrabTouchAfterLeave"/> property value is set to true when all Views are created.
266         /// </summary>
267         /// <param name="enable">Sets value of GrabTouchAfterLeave property</param>
268         [EditorBrowsable(EditorBrowsableState.Never)]
269         public static void SetDefaultGrabTouchAfterLeave(bool enable)
270         {
271             defaultGrabTouchAfterLeave = enable;
272         }
273
274         /// <summary>
275         /// If set to true, the <see cref="AllowOnlyOwnTouch"/> property value is set to true when all Views are created.
276         /// </summary>
277         /// <param name="enable">Sets value of AllowOnlyOwnTouch property</param>
278         [EditorBrowsable(EditorBrowsableState.Never)]
279         public static void SetDefaultAllowOnlyOwnTouch(bool enable)
280         {
281             defaultAllowOnlyOwnTouch = enable;
282         }
283
284         /// <summary>
285         /// Deprecate. Do not use this.
286         /// The style instance applied to this view.
287         /// Note that do not modify the ViewStyle.
288         /// Modifying ViewStyle will affect other views with same ViewStyle.
289         /// </summary>
290         [EditorBrowsable(EditorBrowsableState.Never)]
291         protected ViewStyle ViewStyle
292         {
293             get
294             {
295                 if (themeData == null) themeData = new ThemeData();
296
297                 if (themeData.viewStyle == null)
298                 {
299                     ApplyStyle(CreateViewStyle());
300                 }
301                 return themeData.viewStyle;
302             }
303         }
304
305         /// <summary>
306         /// Get/Set the control state.
307         /// Note that the ControlState only available for the classes derived from Control.
308         /// If the classes that are not derived from Control (such as View, ImageView and TextLabel) want to use this system,
309         /// please set <see cref="EnableControlState"/> to true.
310         /// </summary>
311         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
312         [EditorBrowsable(EditorBrowsableState.Never)]
313         public ControlState ControlState
314         {
315             get
316             {
317                 return themeData == null ? ControlState.Normal : themeData.controlStates;
318             }
319             protected set
320             {
321                 if (ControlState == value)
322                 {
323                     return;
324                 }
325
326                 var prevState = ControlState;
327
328                 if (themeData == null) themeData = new ThemeData();
329                 themeData.controlStates = value;
330
331                 var changeInfo = new ControlStateChangedEventArgs(prevState, value);
332
333                 ControlStateChangeEventInternal?.Invoke(this, changeInfo);
334
335                 if (themeData.ControlStatePropagation)
336                 {
337                     foreach (View child in Children)
338                     {
339                         ControlState allowed = child.PropagatableControlStates;
340                         if (allowed.Contains(ControlState.All))
341                         {
342                             child.ControlState = value;
343                         }
344                         else
345                         {
346                             ControlState newControlState = child.ControlState;
347
348                             if (allowed.Contains(ControlState.Normal))
349                             {
350                                 if (value.Contains(ControlState.Normal))
351                                 {
352                                     newControlState += ControlState.Normal;
353                                 }
354                                 else
355                                 {
356                                     newControlState -= ControlState.Normal;
357                                 }
358                             }
359
360                             if (allowed.Contains(ControlState.Disabled))
361                             {
362                                 if (value.Contains(ControlState.Disabled))
363                                 {
364                                     newControlState += ControlState.Disabled;
365                                 }
366                                 else
367                                 {
368                                     newControlState -= ControlState.Disabled;
369                                 }
370                             }
371
372                             if (allowed.Contains(ControlState.Selected))
373                             {
374                                 if (value.Contains(ControlState.Selected))
375                                 {
376                                     newControlState += ControlState.Selected;
377                                 }
378                                 else
379                                 {
380                                     newControlState -= ControlState.Selected;
381                                 }
382                             }
383
384                             if (allowed.Contains(ControlState.Pressed))
385                             {
386                                 if (value.Contains(ControlState.Pressed))
387                                 {
388                                     newControlState += ControlState.Pressed;
389                                 }
390                                 else
391                                 {
392                                     newControlState -= ControlState.Pressed;
393                                 }
394                             }
395
396                             if (allowed.Contains(ControlState.Focused))
397                             {
398                                 if (value.Contains(ControlState.Focused))
399                                 {
400                                     newControlState += ControlState.Focused;
401                                 }
402                                 else
403                                 {
404                                     newControlState -= ControlState.Focused;
405                                 }
406                             }
407
408                             if (allowed.Contains(ControlState.Other))
409                             {
410                                 if (value.Contains(ControlState.Other))
411                                 {
412                                     newControlState += ControlState.Other;
413                                 }
414                                 else
415                                 {
416                                     newControlState -= ControlState.Other;
417                                 }
418                             }
419
420                             if (child.ControlState != newControlState)
421                             child.ControlState = newControlState;
422                         }
423                     }
424                 }
425
426                 OnControlStateChanged(changeInfo);
427
428                 ControlStateChangedEvent?.Invoke(this, changeInfo);
429             }
430         }
431
432         /// <summary>
433         /// Gets / Sets the status of whether the view is excluded from its parent's layouting or not.
434         /// </summary>
435         /// This will be public opened later after ACR done. Before ACR, need to be hidden as inhouse API.
436         [EditorBrowsable(EditorBrowsableState.Never)]
437         public bool ExcludeLayouting
438         {
439             get
440             {
441                 return (bool)GetValue(ExcludeLayoutingProperty);
442             }
443             set
444             {
445                 SetValue(ExcludeLayoutingProperty, value);
446                 NotifyPropertyChanged();
447             }
448         }
449
450         private bool InternalExcludeLayouting
451         {
452             get
453             {
454                 return excludeLayouting;
455             }
456             set
457             {
458                 excludeLayouting = value;
459                 if (Layout != null && Layout.SetPositionByLayout == value)
460                 {
461                     Layout.SetPositionByLayout = !value;
462                     Layout.RequestLayout();
463                 }
464             }
465         }
466
467         /// <summary>
468         /// The StyleName, type string.
469         /// The value indicates DALi style name defined in json theme file.
470         /// </summary>
471         /// <since_tizen> 3 </since_tizen>
472         public string StyleName
473         {
474             get
475             {
476                 return (string)GetValue(StyleNameProperty);
477             }
478             set
479             {
480                 SetValue(StyleNameProperty, value);
481                 NotifyPropertyChanged();
482             }
483         }
484
485         /// <summary>
486         /// The KeyInputFocus, type bool.
487         /// </summary>
488         [EditorBrowsable(EditorBrowsableState.Never)]
489         public bool KeyInputFocus
490         {
491             get
492             {
493                 return (bool)GetValue(KeyInputFocusProperty);
494             }
495             set
496             {
497                 SetValue(KeyInputFocusProperty, value);
498                 NotifyPropertyChanged();
499             }
500         }
501
502         /// <summary>
503         /// The mutually exclusive with "backgroundImage" and "background" type Vector4.
504         /// </summary>
505         /// <remarks>
506         /// <para>
507         /// The property cascade chaining set is not recommended.
508         /// </para>
509         /// <para>
510         /// Animatable - This property can be animated using <c>Animation</c> class.
511         /// <code>
512         /// animation.AnimateTo(view, "BackgroundColor", new Color(r, g, b, a));
513         /// </code>
514         /// </para>
515         /// </remarks>
516         /// <example>
517         /// This way is recommended for setting the property
518         /// <code>
519         /// var view = new View();
520         /// view.BackgroundColor = new Color(0.5f, 0.1f, 0, 1);
521         /// </code>
522         /// This way to set the property is prohibited
523         /// <code>
524         /// view.BackgroundColor.R = 0.5f; //This does not guarantee a proper operation
525         /// </code>
526         /// </example>
527         /// <since_tizen> 3 </since_tizen>
528         public Color BackgroundColor
529         {
530             get
531             {
532                 return (Color)GetValue(BackgroundColorProperty);
533             }
534             set
535             {
536                 SetValue(BackgroundColorProperty, value);
537                 NotifyPropertyChanged();
538             }
539         }
540
541         /// <summary>
542         /// The mutually exclusive with "backgroundColor" and "background" type Map.
543         /// </summary>
544         /// <since_tizen> 3 </since_tizen>
545         public string BackgroundImage
546         {
547             get
548             {
549                 return (string)GetValue(BackgroundImageProperty);
550             }
551             set
552             {
553                 SetValue(BackgroundImageProperty, value);
554                 NotifyPropertyChanged();
555             }
556         }
557
558         /// <summary>
559         /// Get or set the border of background image.
560         /// </summary>
561         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
562         [EditorBrowsable(EditorBrowsableState.Never)]
563         public Rectangle BackgroundImageBorder
564         {
565             get
566             {
567                 return (Rectangle)GetValue(BackgroundImageBorderProperty);
568             }
569             set
570             {
571                 SetValue(BackgroundImageBorderProperty, value);
572                 NotifyPropertyChanged();
573             }
574         }
575
576         /// <summary>
577         /// The background of view.
578         /// </summary>
579         /// <since_tizen> 3 </since_tizen>
580         public Tizen.NUI.PropertyMap Background
581         {
582             get
583             {
584                 return (PropertyMap)GetValue(BackgroundProperty);
585             }
586             set
587             {
588                 SetValue(BackgroundProperty, value);
589                 NotifyPropertyChanged();
590             }
591         }
592
593         /// <summary>
594         /// Describes a shadow as an image for a View.
595         /// It is null by default.
596         /// </summary>
597         /// <remarks>
598         /// Getter returns copied instance of current shadow.
599         /// </remarks>
600         /// <remarks>
601         /// The mutually exclusive with "BoxShadow".
602         /// </remarks>
603         /// <remarks>
604         /// <para>
605         /// Animatable - This property can be animated using <c>Animation</c> class.
606         /// To animate this property, specify a sub-property with separator ".", for example, "ImageShadow.Offset".
607         /// <code>
608         /// animation.AnimateTo(view, "ImageShadow.Offset", new Vector2(10, 10));
609         /// </code>
610         /// Animatable sub-property : Offset.
611         /// </para>
612         /// </remarks>
613         [EditorBrowsable(EditorBrowsableState.Never)]
614         public ImageShadow ImageShadow
615         {
616             get
617             {
618                 return (ImageShadow)GetValue(ImageShadowProperty);
619             }
620             set
621             {
622                 SetValue(ImageShadowProperty, value);
623                 NotifyPropertyChanged();
624             }
625         }
626
627         /// <summary>
628         /// Describes a box shaped shadow drawing for a View.
629         /// It is null by default.
630         /// </summary>
631         /// <remarks>
632         /// The mutually exclusive with "ImageShadow".
633         /// </remarks>
634         /// <remarks>
635         /// <para>
636         /// Animatable - This property can be animated using <c>Animation</c> class.
637         /// To animate this property, specify a sub-property with separator ".", for example, "BoxShadow.BlurRadius".
638         /// <code>
639         /// animation.AnimateTo(view, "BoxShadow.BlurRadius", 10.0f);
640         /// </code>
641         /// Animatable sub-property : Offset, Color, BlurRadius.
642         /// </para>
643         /// </remarks>
644         /// <since_tizen> 9 </since_tizen>
645         public Shadow BoxShadow
646         {
647             get
648             {
649                 return (Shadow)GetValue(BoxShadowProperty);
650             }
651             set
652             {
653                 SetValue(BoxShadowProperty, value);
654                 NotifyPropertyChanged();
655             }
656         }
657
658         /// <summary>
659         /// The radius for the rounded corners of the View.
660         /// This will rounds background and shadow edges.
661         /// The values in Vector4 are used in clockwise order from top-left to bottom-left : Vector4(top-left-corner, top-right-corner, bottom-right-corner, bottom-left-corner).
662         /// Each radius will clamp internally to the half of smaller of the view's width or height.
663         /// Note that, an image background (or shadow) may not have rounded corners if it uses a Border property.
664         /// </summary>
665         /// <remarks>
666         /// <para>
667         /// Animatable - This property can be animated using <c>Animation</c> class.
668         /// <code>
669         /// animation.AnimateTo(view, "CornerRadius", new Vector4(10, 10, 10, 10));
670         /// </code>
671         /// </para>
672         /// </remarks>
673         /// <since_tizen> 9 </since_tizen>
674         public Vector4 CornerRadius
675         {
676             get
677             {
678                 return (Vector4)GetValue(CornerRadiusProperty);
679             }
680             set
681             {
682                 SetValue(CornerRadiusProperty, value);
683                 NotifyPropertyChanged();
684             }
685         }
686
687         /// <summary>
688         /// Whether the CornerRadius property value is relative (percentage [0.0f to 0.5f] of the view size) or absolute (in world units).
689         /// It is absolute by default.
690         /// When the policy is relative, the corner radius is relative to the smaller of the view's width and height.
691         /// </summary>
692         /// <since_tizen> 9 </since_tizen>
693         public VisualTransformPolicyType CornerRadiusPolicy
694         {
695             get => (VisualTransformPolicyType)GetValue(CornerRadiusPolicyProperty);
696             set => SetValue(CornerRadiusPolicyProperty, value);
697         }
698
699         /// <summary>
700         /// The width for the borderline of the View.
701         /// </summary>
702         /// <remarks>
703         /// <para>
704         /// Animatable - This property can be animated using <c>Animation</c> class.
705         /// <code>
706         /// animation.AnimateTo(view, "BorderlineWidth", 100.0f);
707         /// </code>
708         /// </para>
709         /// Note that, an image background may not have borderline if it uses the Border property.
710         /// </remarks>
711         /// <since_tizen> 9 </since_tizen>
712         public float BorderlineWidth
713         {
714             get
715             {
716                 return (float)GetValue(BorderlineWidthProperty);
717             }
718             set
719             {
720                 SetValue(BorderlineWidthProperty, value);
721                 NotifyPropertyChanged();
722             }
723         }
724
725         /// <summary>
726         /// The color for the borderline of the View.
727         /// It is Color.Black by default.
728         /// </summary>
729         /// <remarks>
730         /// <para>
731         /// Animatable - This property can be animated using <c>Animation</c> class.
732         /// <code>
733         /// animation.AnimateTo(view, "BorderlineColor", new Color(r, g, b, a));
734         /// </code>
735         /// </para>
736         /// </remarks>
737         /// <since_tizen> 9 </since_tizen>
738         public Color BorderlineColor
739         {
740             get
741             {
742                 return (Color)GetValue(BorderlineColorProperty);
743             }
744             set
745             {
746                 SetValue(BorderlineColorProperty, value);
747                 NotifyPropertyChanged();
748             }
749         }
750
751         /// <summary>
752         /// The color selector for the borderline of the View.
753         /// Like BackgroundColor, color selector typed BorderlineColor should be used in ViewStyle only.
754         /// So this API is internally used only.
755         /// </summary>
756         internal Selector<Color> BorderlineColorSelector
757         {
758             get
759             {
760                 return (Selector<Color>)GetValue(BorderlineColorSelectorProperty);
761             }
762             set
763             {
764                 SetValue(BorderlineColorSelectorProperty, value);
765                 NotifyPropertyChanged();
766             }
767         }
768
769         /// <summary>
770         /// The Relative offset for the borderline of the View.
771         /// Recommended range : [-1.0f to 1.0f].
772         /// If -1.0f, draw borderline inside of the View.
773         /// If 1.0f, draw borderline outside of the View.
774         /// If 0.0f, draw borderline half inside and half outside.
775         /// It is 0.0f by default.
776         /// </summary>
777         /// <remarks>
778         /// <para>
779         /// Animatable - This property can be animated using <c>Animation</c> class.
780         /// <code>
781         /// animation.AnimateTo(view, "BorderlineOffset", -1.0f);
782         /// </code>
783         /// </para>
784         /// </remarks>
785         /// <since_tizen> 9 </since_tizen>
786         public float BorderlineOffset
787         {
788             get
789             {
790                 return (float)GetValue(BorderlineOffsetProperty);
791             }
792             set
793             {
794                 SetValue(BorderlineOffsetProperty, value);
795                 NotifyPropertyChanged();
796             }
797         }
798
799         /// <summary>
800         /// The current state of the view.
801         /// </summary>
802         /// <since_tizen> 3 </since_tizen>
803         public States State
804         {
805             get
806             {
807                 return (States)GetValue(StateProperty);
808             }
809             set
810             {
811                 SetValue(StateProperty, value);
812                 NotifyPropertyChanged();
813             }
814         }
815
816         /// <summary>
817         /// The current sub state of the view.
818         /// </summary>
819         /// <since_tizen> 3 </since_tizen>
820         public States SubState
821         {
822             get
823             {
824                 return (States)GetValue(SubStateProperty);
825             }
826             set
827             {
828                 SetValue(SubStateProperty, value);
829                 NotifyPropertyChanged();
830             }
831         }
832
833         /// <summary>
834         /// Displays a tooltip
835         /// </summary>
836         /// <since_tizen> 3 </since_tizen>
837         public Tizen.NUI.PropertyMap Tooltip
838         {
839             get
840             {
841                 return (PropertyMap)GetValue(TooltipProperty);
842             }
843             set
844             {
845                 SetValue(TooltipProperty, value);
846                 NotifyPropertyChanged();
847             }
848         }
849
850         /// <summary>
851         /// Displays a tooltip as a text.
852         /// </summary>
853         /// <since_tizen> 3 </since_tizen>
854         public string TooltipText
855         {
856             get
857             {
858                 return GetValue(TooltipTextProperty) as string;
859             }
860             set
861             {
862                 SetValue(TooltipTextProperty, value);
863             }
864         }
865
866         private string InternalTooltipText
867         {
868             get
869             {
870                 using (var propertyValue = GetProperty(Property.TOOLTIP))
871                 {
872                     if (propertyValue != null && propertyValue.Get(out string retrivedValue))
873                     {
874                         return retrivedValue;
875                     }
876                     NUILog.Error($"[ERROR] Fail to get TooltipText! Return error MSG (error to get TooltipText)!");
877                     return "error to get TooltipText";
878                 }
879             }
880             set
881             {
882                 var temp = new Tizen.NUI.PropertyValue(value);
883                 SetProperty(View.Property.TOOLTIP, temp);
884                 temp.Dispose();
885                 NotifyPropertyChanged();
886             }
887         }
888
889         /// <summary>
890         /// The Child property of FlexContainer.<br />
891         /// The proportion of the free space in the container, the flex item will receive.<br />
892         /// If all items in the container set this property, their sizes will be proportional to the specified flex factor.<br />
893         /// </summary>
894         /// <since_tizen> 3 </since_tizen>
895         [Obsolete("Deprecated in API8, will be removed in API10.")]
896         public float Flex
897         {
898             get
899             {
900                 return (float)GetValue(FlexProperty);
901             }
902             set
903             {
904                 SetValue(FlexProperty, value);
905                 NotifyPropertyChanged();
906             }
907         }
908
909         /// <summary>
910         /// The Child property of FlexContainer.<br />
911         /// The alignment of the flex item along the cross axis, which, if set, overrides the default alignment for all items in the container.<br />
912         /// </summary>
913         /// <since_tizen> 3 </since_tizen>
914         [Obsolete("Deprecated in API8, will be removed in API10.")]
915         public int AlignSelf
916         {
917             get
918             {
919                 return (int)GetValue(AlignSelfProperty);
920             }
921             set
922             {
923                 SetValue(AlignSelfProperty, value);
924                 NotifyPropertyChanged();
925             }
926         }
927
928         /// <summary>
929         /// The Child property of FlexContainer.<br />
930         /// The space around the flex item.<br />
931         /// </summary>
932         /// <remarks>
933         /// The property cascade chaining set is possible. For example, this (view.FlexMargin.X = 0.1f;) is possible.
934         /// </remarks>
935         /// <since_tizen> 3 </since_tizen>
936         [Obsolete("Deprecated in API8, will be removed in API10.")]
937         public Vector4 FlexMargin
938         {
939             get
940             {
941                 Vector4 temp = (Vector4)GetValue(FlexMarginProperty);
942                 return new Vector4(OnFlexMarginChanged, temp.X, temp.Y, temp.Z, temp.W);
943             }
944             set
945             {
946                 SetValue(FlexMarginProperty, value);
947                 NotifyPropertyChanged();
948             }
949         }
950
951         /// <summary>
952         /// The top-left cell this child occupies, if not set, the first available cell is used.
953         /// </summary>
954         /// <remarks>
955         /// The property cascade chaining set is not recommended.
956         /// Also, this property is for <see cref="TableView"/> class. Please use the property for the child position of <see cref="TableView"/>.
957         /// </remarks>
958         /// <example>
959         /// This way is recommended for setting the property
960         /// <code>
961         /// var view = new View();
962         /// view.CellIndex = new Vector2(1, 3);
963         /// </code>
964         /// This way to set the property is prohibited
965         /// <code>
966         /// view.CellIndex.X = 1; //This does not guarantee a proper operation
967         /// </code>
968         /// </example>
969         /// <since_tizen> 3 </since_tizen>
970         public Vector2 CellIndex
971         {
972             get
973             {
974                 return (Vector2)GetValue(CellIndexProperty);
975             }
976             set
977             {
978                 SetValue(CellIndexProperty, value);
979                 NotifyPropertyChanged();
980             }
981         }
982
983         /// <summary>
984         /// The number of rows this child occupies, if not set, the default value is 1.
985         /// </summary>
986         /// <remarks>
987         /// This property is for <see cref="TableView"/> class. Use the property for the child position of <see cref="TableView"/>.
988         /// </remarks>
989         /// <since_tizen> 3 </since_tizen>
990         public float RowSpan
991         {
992             get
993             {
994                 return (float)GetValue(RowSpanProperty);
995             }
996             set
997             {
998                 SetValue(RowSpanProperty, value);
999                 NotifyPropertyChanged();
1000             }
1001         }
1002
1003         /// <summary>
1004         /// The number of columns this child occupies, if not set, the default value is 1.
1005         /// </summary>
1006         /// <remarks>
1007         /// This property is for <see cref="TableView"/> class. Use the property for the child position of <see cref="TableView"/>.
1008         /// </remarks>
1009         /// <since_tizen> 3 </since_tizen>
1010         public float ColumnSpan
1011         {
1012             get
1013             {
1014                 return (float)GetValue(ColumnSpanProperty);
1015             }
1016             set
1017             {
1018                 SetValue(ColumnSpanProperty, value);
1019                 NotifyPropertyChanged();
1020             }
1021         }
1022
1023         /// <summary>
1024         /// The horizontal alignment of this child inside the cells, if not set, the default value is 'left'.
1025         /// </summary>
1026         /// <remarks>
1027         /// This property is for <see cref="TableView"/> class. Use the property for the child position of <see cref="TableView"/>.
1028         /// </remarks>
1029         /// <since_tizen> 3 </since_tizen>
1030         public Tizen.NUI.HorizontalAlignmentType CellHorizontalAlignment
1031         {
1032             get
1033             {
1034                 return (HorizontalAlignmentType)GetValue(CellHorizontalAlignmentProperty);
1035             }
1036             set
1037             {
1038                 SetValue(CellHorizontalAlignmentProperty, value);
1039                 NotifyPropertyChanged();
1040             }
1041         }
1042
1043         /// <summary>
1044         /// The vertical alignment of this child inside the cells, if not set, the default value is 'top'.
1045         /// </summary>
1046         /// <remarks>
1047         /// This property is for <see cref="TableView"/> class. Use the property for the child position of <see cref="TableView"/>.
1048         /// </remarks>
1049         /// <since_tizen> 3 </since_tizen>
1050         public Tizen.NUI.VerticalAlignmentType CellVerticalAlignment
1051         {
1052             get
1053             {
1054                 return (VerticalAlignmentType)GetValue(CellVerticalAlignmentProperty);
1055             }
1056             set
1057             {
1058                 SetValue(CellVerticalAlignmentProperty, value);
1059                 NotifyPropertyChanged();
1060             }
1061         }
1062
1063         /// <summary>
1064         /// The left focusable view.<br />
1065         /// This will return null if not set.<br />
1066         /// This will also return null if the specified left focusable view is not on a window.<br />
1067         /// </summary>
1068         /// <since_tizen> 3 </since_tizen>
1069         public View LeftFocusableView
1070         {
1071             // As native side will be only storing IDs so need a logic to convert View to ID and vice-versa.
1072             get
1073             {
1074                 return (View)GetValue(LeftFocusableViewProperty);
1075             }
1076             set
1077             {
1078                 SetValue(LeftFocusableViewProperty, value);
1079                 NotifyPropertyChanged();
1080             }
1081         }
1082
1083         /// <summary>
1084         /// The right focusable view.<br />
1085         /// This will return null if not set.<br />
1086         /// This will also return null if the specified right focusable view is not on a window.<br />
1087         /// </summary>
1088         /// <since_tizen> 3 </since_tizen>
1089         public View RightFocusableView
1090         {
1091             // As native side will be only storing IDs so need a logic to convert View to ID and vice-versa.
1092             get
1093             {
1094                 return (View)GetValue(RightFocusableViewProperty);
1095             }
1096             set
1097             {
1098                 SetValue(RightFocusableViewProperty, value);
1099                 NotifyPropertyChanged();
1100             }
1101         }
1102
1103         /// <summary>
1104         /// The up focusable view.<br />
1105         /// This will return null if not set.<br />
1106         /// This will also return null if the specified up focusable view is not on a window.<br />
1107         /// </summary>
1108         /// <since_tizen> 3 </since_tizen>
1109         public View UpFocusableView
1110         {
1111             // As native side will be only storing IDs so need a logic to convert View to ID and vice-versa.
1112             get
1113             {
1114                 return (View)GetValue(UpFocusableViewProperty);
1115             }
1116             set
1117             {
1118                 SetValue(UpFocusableViewProperty, value);
1119                 NotifyPropertyChanged();
1120             }
1121         }
1122
1123         /// <summary>
1124         /// The down focusable view.<br />
1125         /// This will return null if not set.<br />
1126         /// This will also return null if the specified down focusable view is not on a window.<br />
1127         /// </summary>
1128         /// <since_tizen> 3 </since_tizen>
1129         public View DownFocusableView
1130         {
1131             // As native side will be only storing IDs so need a logic to convert View to ID and vice-versa.
1132             get
1133             {
1134                 return (View)GetValue(DownFocusableViewProperty);
1135             }
1136             set
1137             {
1138                 SetValue(DownFocusableViewProperty, value);
1139                 NotifyPropertyChanged();
1140             }
1141         }
1142
1143         /// <summary>
1144         /// The clockwise focusable view by rotary wheel.<br />
1145         /// This will return null if not set.<br />
1146         /// This will also return null if the specified clockwise focusable view is not on a window.<br />
1147         /// </summary>
1148         [EditorBrowsable(EditorBrowsableState.Never)]
1149         public View ClockwiseFocusableView
1150         {
1151             // As native side will be only storing IDs so need a logic to convert View to ID and vice-versa.
1152             get
1153             {
1154                 return (View)GetValue(ClockwiseFocusableViewProperty);
1155             }
1156             set
1157             {
1158                 SetValue(ClockwiseFocusableViewProperty, value);
1159                 NotifyPropertyChanged();
1160             }
1161         }
1162
1163         /// <summary>
1164         /// The counter clockwise focusable view by rotary wheel.<br />
1165         /// This will return null if not set.<br />
1166         /// This will also return null if the specified counter clockwise focusable view is not on a window.<br />
1167         /// </summary>
1168         [EditorBrowsable(EditorBrowsableState.Never)]
1169         public View CounterClockwiseFocusableView
1170         {
1171             // As native side will be only storing IDs so need a logic to convert View to ID and vice-versa.
1172             get
1173             {
1174                 return (View)GetValue(CounterClockwiseFocusableViewProperty);
1175             }
1176             set
1177             {
1178                 SetValue(CounterClockwiseFocusableViewProperty, value);
1179                 NotifyPropertyChanged();
1180             }
1181         }
1182
1183         /// <summary>
1184         /// Whether the view should be focusable by keyboard navigation.
1185         /// </summary>
1186         /// <since_tizen> 3 </since_tizen>
1187         public bool Focusable
1188         {
1189             set
1190             {
1191                 SetValue(FocusableProperty, value);
1192                 NotifyPropertyChanged();
1193             }
1194             get
1195             {
1196                 return (bool)GetValue(FocusableProperty);
1197             }
1198         }
1199
1200         /// <summary>
1201         /// Whether the children of this view can be focusable by keyboard navigation. If user sets this to false, the children of this actor view will not be focused.
1202         /// Note : Default value is true.
1203         /// </summary>
1204         [EditorBrowsable(EditorBrowsableState.Never)]
1205         public bool FocusableChildren
1206         {
1207             set
1208             {
1209                 SetValue(FocusableChildrenProperty, value);
1210                 NotifyPropertyChanged();
1211             }
1212             get
1213             {
1214                 return (bool)GetValue(FocusableChildrenProperty);
1215             }
1216         }
1217
1218         /// <summary>
1219         /// Whether this view can focus by touch.
1220         /// If Focusable is false, FocusableInTouch is disabled.
1221         /// If you want to have focus on touch, you need to set both Focusable and FocusableInTouch settings to true.
1222         /// </summary>
1223         [EditorBrowsable(EditorBrowsableState.Never)]
1224         public bool FocusableInTouch
1225         {
1226             set
1227             {
1228                 SetValue(FocusableInTouchProperty, value);
1229                 NotifyPropertyChanged();
1230             }
1231             get
1232             {
1233                 return (bool)GetValue(FocusableInTouchProperty);
1234             }
1235         }
1236
1237         /// <summary>
1238         /// Retrieves the position of the view.
1239         /// The coordinates are relative to the view's parent.
1240         /// </summary>
1241         /// <remarks>
1242         /// The <see cref="Size"/>, <see cref="Position"/>, <see cref="Color"/>, and <see cref="Scale"/> properties are set in the main thread.
1243         /// Therefore, it is not updated in real time when the value is changed in the render thread (for example, the value is changed during animation).
1244         /// However, <see cref="CurrentSize"/>, <see cref="CurrentPosition"/>, <see cref="CurrentColor"/>, and <see cref="CurrentScale"/> properties are updated in real time,
1245         /// and users can get the current actual values through them.
1246         /// </remarks>
1247         /// <since_tizen> 3 </since_tizen>
1248         public Position CurrentPosition
1249         {
1250             get
1251             {
1252                 return GetCurrentPosition();
1253             }
1254         }
1255
1256         /// <summary>
1257         /// Sets the size of a view for the width and the height.<br />
1258         /// Geometry can be scaled to fit within this area.<br />
1259         /// This does not interfere with the view's scale factor.<br />
1260         /// The views default depth is the minimum of width and height.<br />
1261         /// </summary>
1262         /// <remarks>
1263         /// The property cascade chaining set is not recommended.
1264         /// </remarks>
1265         /// <example>
1266         /// This way is recommended for setting the property
1267         /// <code>
1268         /// var view = new View();
1269         /// view.Size2D = new Size2D(100, 200);
1270         /// </code>
1271         /// This way to set the property is prohibited
1272         /// <code>
1273         /// view.Size2D.Width = 100; //This does not guarantee a proper operation
1274         /// </code>
1275         /// </example>
1276         /// <since_tizen> 3 </since_tizen>
1277         public Size2D Size2D
1278         {
1279             get
1280             {
1281                 var temp = (Size2D)GetValue(Size2DProperty);
1282
1283                 if (this.Layout == null)
1284                 {
1285                     if (temp.Width < 0) { temp.Width = 0; }
1286                     if (temp.Height < 0) { temp.Height = 0; }
1287                 }
1288
1289                 return temp;
1290             }
1291             set
1292             {
1293                 SetValue(Size2DProperty, value);
1294
1295                 NotifyPropertyChanged();
1296             }
1297         }
1298
1299         /// <summary>
1300         /// Retrieves the size of the view.
1301         /// The coordinates are relative to the view's parent.
1302         /// </summary>
1303         /// <remarks>
1304         /// The <see cref="Size"/>, <see cref="Position"/>, <see cref="Color"/>, and <see cref="Scale"/> properties are set in the main thread.
1305         /// Therefore, it is not updated in real time when the value is changed in the render thread (for example, the value is changed during animation).
1306         /// However, <see cref="CurrentSize"/>, <see cref="CurrentPosition"/>, <see cref="CurrentColor"/>, and <see cref="CurrentScale"/> properties are updated in real time,
1307         /// and users can get the current actual values through them.
1308         /// </remarks>
1309         /// <since_tizen> 3 </since_tizen>
1310         public Size2D CurrentSize
1311         {
1312             get
1313             {
1314                 return GetCurrentSize();
1315             }
1316         }
1317
1318         /// <summary>
1319         /// Retrieves and sets the view's opacity.<br />
1320         /// </summary>
1321         /// <remarks>
1322         /// <para>
1323         /// Animatable - This property can be animated using <c>Animation</c> class.
1324         /// <code>
1325         /// animation.AnimateTo(view, "Opacity", 0.5f);
1326         /// </code>
1327         /// </para>
1328         /// </remarks>
1329         /// <since_tizen> 3 </since_tizen>
1330         public float Opacity
1331         {
1332             get
1333             {
1334                 return (float)GetValue(OpacityProperty);
1335             }
1336             set
1337             {
1338                 SetValue(OpacityProperty, value);
1339                 NotifyPropertyChanged();
1340             }
1341         }
1342
1343         /// <summary>
1344         /// Sets the position of the view for X and Y.<br />
1345         /// By default, sets the position vector between the parent origin and the pivot point (default).<br />
1346         /// If the position inheritance is disabled, sets the world position.<br />
1347         /// </summary>
1348         /// <remarks>
1349         /// The property cascade chaining set is not recommended.
1350         ///</remarks>
1351         /// <example>
1352         /// This way is recommended for setting the property
1353         /// <code>
1354         /// var view = new View();
1355         /// view.Position2D = new Position2D(100, 200);
1356         /// </code>
1357         /// This way to set the property is prohibited
1358         /// <code>
1359         /// view.Position2D.X = 100; //This does not guarantee a proper operation
1360         /// </code>
1361         /// </example>
1362         /// <since_tizen> 3 </since_tizen>
1363         public Position2D Position2D
1364         {
1365             get
1366             {
1367                 return (Position2D)GetValue(Position2DProperty);
1368             }
1369             set
1370             {
1371                 SetValue(Position2DProperty, value);
1372                 NotifyPropertyChanged();
1373             }
1374         }
1375
1376         /// <summary>
1377         /// Retrieves the screen position of the view.<br />
1378         /// </summary>
1379         /// <since_tizen> 3 </since_tizen>
1380         public Vector2 ScreenPosition
1381         {
1382             get
1383             {
1384                 return GetCurrentScreenPosition();
1385             }
1386         }
1387
1388         /// <summary>
1389         /// Retrieves the screen position and size of the view.<br />
1390         /// </summary>
1391         /// <remarks>
1392         /// The float type Rectangle class is not ready yet.
1393         /// Therefore, it transmits data in Vector4 class.
1394         /// This type should later be changed to the appropriate data type.
1395         /// </remarks>
1396         [EditorBrowsable(EditorBrowsableState.Never)]
1397         public Vector4 ScreenPositionSize
1398         {
1399             get
1400             {
1401                 return GetCurrentScreenPositionSize();
1402             }
1403         }
1404
1405         /// <summary>
1406         /// Determines whether the pivot point should be used to determine the position of the view.
1407         /// This is false by default.
1408         /// </summary>
1409         /// <remarks>If false, then the top-left of the view is used for the position.
1410         /// Setting this to false will allow scaling or rotation around the pivot point without affecting the view's position.
1411         /// </remarks>
1412         /// <since_tizen> 3 </since_tizen>
1413         public bool PositionUsesPivotPoint
1414         {
1415             get
1416             {
1417                 return (bool)GetValue(PositionUsesPivotPointProperty);
1418             }
1419             set
1420             {
1421                 SetValue(PositionUsesPivotPointProperty, value);
1422                 NotifyPropertyChanged();
1423             }
1424         }
1425
1426         /// <summary>
1427         /// This has been deprecated in API5 and Will be removed in API8. Use PositionUsesPivotPoint instead.
1428         /// </summary>
1429         /// <since_tizen> 3 </since_tizen>
1430         [Obsolete("This has been deprecated in API5 and will be removed in API8. Use PositionUsesPivotPoint instead. " +
1431             "Like: " +
1432             "View view = new View(); " +
1433             "view.PivotPoint = PivotPoint.Center; " +
1434             "view.PositionUsesPivotPoint = true;" +
1435             " This has been deprecated in API5 and will be removed in API8")]
1436         [EditorBrowsable(EditorBrowsableState.Never)]
1437         public bool PositionUsesAnchorPoint
1438         {
1439             get
1440             {
1441                 return (bool)GetValue(PositionUsesAnchorPointProperty);
1442             }
1443             set
1444             {
1445                 SetValue(PositionUsesAnchorPointProperty, value);
1446             }
1447         }
1448
1449         private bool InternalPositionUsesAnchorPoint
1450         {
1451             get
1452             {
1453                 return Object.InternalGetPropertyBool(SwigCPtr, View.Property.PositionUsesAnchorPoint);
1454             }
1455             set
1456             {
1457                 Object.InternalSetPropertyBool(SwigCPtr, View.Property.PositionUsesAnchorPoint, value);
1458                 NotifyPropertyChanged();
1459             }
1460         }
1461
1462         /// <summary>
1463         /// Queries whether the view is connected to the stage.<br />
1464         /// When a view is connected, it will be directly or indirectly parented to the root view.<br />
1465         /// </summary>
1466         /// <since_tizen> 3 </since_tizen>
1467         public bool IsOnWindow
1468         {
1469             get
1470             {
1471                 return OnWindow();
1472             }
1473         }
1474
1475         /// <summary>
1476         /// Gets the depth in the hierarchy for the view.
1477         /// </summary>
1478         /// <since_tizen> 3 </since_tizen>
1479         public int HierarchyDepth
1480         {
1481             get
1482             {
1483                 return GetHierarchyDepth();
1484             }
1485         }
1486
1487         /// <summary>
1488         /// Sets the sibling order of the view so the depth position can be defined within the same parent.
1489         /// </summary>
1490         /// <remarks>
1491         /// Note the initial value is 0. SiblingOrder should be bigger than 0 or equal to 0.
1492         /// Raise, Lower, RaiseToTop, LowerToBottom, RaiseAbove, and LowerBelow will override the sibling order.
1493         /// The values set by this property will likely change.
1494         /// </remarks>
1495         /// <since_tizen> 3 </since_tizen>
1496         public int SiblingOrder
1497         {
1498             get
1499             {
1500                 return (int)GetValue(SiblingOrderProperty);
1501             }
1502             set
1503             {
1504                 SetValue(SiblingOrderProperty, value);
1505
1506                 Layout?.ChangeLayoutSiblingOrder(value);
1507
1508                 NotifyPropertyChanged();
1509             }
1510         }
1511
1512         /// <summary>
1513         /// Returns the natural size of the view.
1514         /// </summary>
1515         /// <remarks>
1516         /// Deriving classes stipulate the natural size and by default a view has a zero natural size.
1517         /// </remarks>
1518         /// <since_tizen> 5 </since_tizen>
1519         public Vector3 NaturalSize
1520         {
1521             get
1522             {
1523                 Vector3 ret = GetNaturalSize();
1524                 if (NDalicPINVOKE.SWIGPendingException.Pending) throw new InvalidOperationException("FATAL: get Exception", NDalicPINVOKE.SWIGPendingException.Retrieve());
1525                 return ret;
1526             }
1527         }
1528
1529         /// <summary>
1530         /// Returns the natural size (Size2D) of the view.
1531         /// </summary>
1532         /// <remarks>
1533         /// Deriving classes stipulate the natural size and by default a view has a zero natural size.
1534         /// </remarks>
1535         /// <since_tizen> 4 </since_tizen>
1536         public Size2D NaturalSize2D
1537         {
1538             get
1539             {
1540                 Vector3 temp = GetNaturalSize();
1541                 if (NDalicPINVOKE.SWIGPendingException.Pending) throw new InvalidOperationException("FATAL: get Exception", NDalicPINVOKE.SWIGPendingException.Retrieve());
1542                 Size2D sz = null;
1543                 if (temp != null)
1544                 {
1545                     sz = new Size2D((int)temp.Width, (int)temp.Height);
1546                     temp.Dispose();
1547                 }
1548                 return sz;
1549             }
1550         }
1551
1552         /// <summary>
1553         /// Gets or sets the origin of a view within its parent's area.<br />
1554         /// This is expressed in unit coordinates, such that (0.0, 0.0, 0.5) is the top-left corner of the parent, and (1.0, 1.0, 0.5) is the bottom-right corner.<br />
1555         /// The default parent-origin is ParentOrigin.TopLeft (0.0, 0.0, 0.5).<br />
1556         /// A view's position is the distance between this origin and the view's anchor-point.<br />
1557         /// </summary>
1558         /// <pre>The view has been initialized.</pre>
1559         /// <since_tizen> 3 </since_tizen>
1560         public Position ParentOrigin
1561         {
1562             get
1563             {
1564                 Position tmp = (Position)GetValue(ParentOriginProperty);
1565                 return new Position(OnParentOriginChanged, tmp.X, tmp.Y, tmp.Z);
1566             }
1567             set
1568             {
1569                 SetValue(ParentOriginProperty, value);
1570                 NotifyPropertyChanged();
1571             }
1572         }
1573
1574         /// <summary>
1575         /// Gets or sets the anchor-point of a view.<br />
1576         /// This is expressed in unit coordinates, such that (0.0, 0.0, 0.5) is the top-left corner of the view, and (1.0, 1.0, 0.5) is the bottom-right corner.<br />
1577         /// The default pivot point is PivotPoint.Center (0.5, 0.5, 0.5).<br />
1578         /// A view position is the distance between its parent-origin and this anchor-point.<br />
1579         /// A view's orientation is the rotation from its default orientation, the rotation is centered around its anchor-point.<br />
1580         /// <pre>The view has been initialized.</pre>
1581         /// </summary>
1582         /// <remarks>
1583         /// The property cascade chaining set is not recommended.
1584         ///</remarks>
1585         /// <example>
1586         /// This way is recommended for setting the property
1587         /// <code>
1588         /// var view = new View();
1589         /// view.PivotPoint = PivotPoint.Center;
1590         /// </code>
1591         /// This way to set the property is prohibited
1592         /// <code>
1593         /// view.PivotPoint.X = 0.5f; //This does not guarantee a proper operation
1594         /// </code>
1595         /// </example>
1596         /// <since_tizen> 3 </since_tizen>
1597         public Position PivotPoint
1598         {
1599             get
1600             {
1601                 return (Position)GetValue(PivotPointProperty);
1602             }
1603             set
1604             {
1605                 SetValue(PivotPointProperty, value);
1606                 NotifyPropertyChanged();
1607             }
1608         }
1609
1610         /// <summary>
1611         /// Gets or sets the size width of the view.
1612         /// </summary>
1613         /// <remarks>
1614         /// <para>
1615         /// Animatable - This property can be animated using <c>Animation</c> class.
1616         /// <code>
1617         /// animation.AnimateTo(view, "SizeWidth", 500.0f);
1618         /// </code>
1619         /// </para>
1620         /// </remarks>
1621         /// <since_tizen> 3 </since_tizen>
1622         public float SizeWidth
1623         {
1624             get
1625             {
1626                 return (float)GetValue(SizeWidthProperty);
1627             }
1628             set
1629             {
1630                 SetValue(SizeWidthProperty, value);
1631                 NotifyPropertyChanged();
1632             }
1633         }
1634
1635         /// <summary>
1636         /// Gets or sets the size height of the view.
1637         /// </summary>
1638         /// <remarks>
1639         /// <para>
1640         /// Animatable - This property can be animated using <c>Animation</c> class.
1641         /// </para>
1642         /// <code>
1643         /// animation.AnimateTo(view, "SizeHeight", 500.0f);
1644         /// </code>
1645         /// </remarks>
1646         /// <since_tizen> 3 </since_tizen>
1647         public float SizeHeight
1648         {
1649             get
1650             {
1651                 return (float)GetValue(SizeHeightProperty);
1652             }
1653             set
1654             {
1655                 SetValue(SizeHeightProperty, value);
1656                 NotifyPropertyChanged();
1657             }
1658         }
1659
1660         /// <summary>
1661         /// Gets or sets the position of the view.<br />
1662         /// By default, sets the position vector between the parent origin and pivot point (default).<br />
1663         /// If the position inheritance is disabled, sets the world position.<br />
1664         /// </summary>
1665         /// <remarks>
1666         /// <para>
1667         /// Animatable - This property can be animated using <c>Animation</c> class.
1668         /// <code>
1669         /// animation.AnimateTo(view, "Position", new Position(50, 0));
1670         /// </code>
1671         /// </para>
1672         /// The property cascade chaining set is not recommended.
1673         /// </remarks>
1674         /// <example>
1675         /// This way is recommended for setting the property
1676         /// <code>
1677         /// var view = new View();
1678         /// view.Position = new Position(100, 200.5f, 0);
1679         /// </code>
1680         /// This way to set the property is prohibited
1681         /// <code>
1682         /// view.Position.Y = 200.5f; //This does not guarantee a proper operation
1683         /// </code>
1684         /// </example>
1685         /// <since_tizen> 3 </since_tizen>
1686         public Position Position
1687         {
1688             get
1689             {
1690                 return (Position)GetValue(PositionProperty);
1691             }
1692             set
1693             {
1694                 SetValue(PositionProperty, value);
1695                 NotifyPropertyChanged();
1696             }
1697         }
1698
1699         /// <summary>
1700         /// Gets or sets the position X of the view.
1701         /// </summary>
1702         /// <remarks>
1703         /// <para>
1704         /// Animatable - This property can be animated using <c>Animation</c> class.
1705         /// <code>
1706         /// animation.AnimateTo(view, "PositionX", 50.0f);
1707         /// </code>
1708         /// </para>
1709         /// </remarks>
1710         /// <since_tizen> 3 </since_tizen>
1711         public float PositionX
1712         {
1713             get
1714             {
1715                 return (float)GetValue(PositionXProperty);
1716             }
1717             set
1718             {
1719                 SetValue(PositionXProperty, value);
1720                 NotifyPropertyChanged();
1721             }
1722         }
1723
1724         /// <summary>
1725         /// Gets or sets the position Y of the view.
1726         /// </summary>
1727         /// <remarks>
1728         /// <para>
1729         /// Animatable - This property can be animated using <c>Animation</c> class.
1730         /// <code>
1731         /// animation.AnimateTo(view, "PositionY", 50.0f);
1732         /// </code>
1733         /// </para>
1734         /// </remarks>
1735         /// <since_tizen> 3 </since_tizen>
1736         public float PositionY
1737         {
1738             get
1739             {
1740                 return (float)GetValue(PositionYProperty);
1741             }
1742             set
1743             {
1744                 SetValue(PositionYProperty, value);
1745                 NotifyPropertyChanged();
1746             }
1747         }
1748
1749         /// <summary>
1750         /// Gets or sets the position Z of the view.
1751         /// </summary>
1752         /// <remarks>
1753         /// <para>
1754         /// Animatable - This property can be animated using <c>Animation</c> class.
1755         /// <code>
1756         /// animation.AnimateTo(view, "PositionZ", 50.0f);
1757         /// </code>
1758         /// </para>
1759         /// </remarks>
1760         /// <since_tizen> 3 </since_tizen>
1761         public float PositionZ
1762         {
1763             get
1764             {
1765                 return (float)GetValue(PositionZProperty);
1766             }
1767             set
1768             {
1769                 SetValue(PositionZProperty, value);
1770                 NotifyPropertyChanged();
1771             }
1772         }
1773
1774         /// <summary>
1775         /// Gets or sets the world position of the view.
1776         /// </summary>
1777         /// <since_tizen> 3 </since_tizen>
1778         public Vector3 WorldPosition
1779         {
1780             get
1781             {
1782                 return GetCurrentWorldPosition();
1783             }
1784         }
1785
1786         /// <summary>
1787         /// Gets or sets the orientation of the view.<br />
1788         /// The view's orientation is the rotation from its default orientation, and the rotation is centered around its anchor-point.<br />
1789         /// </summary>
1790         /// <remarks>
1791         /// <para>
1792         /// This is an asynchronous method.
1793         /// </para>
1794         /// <para>
1795         /// Animatable - This property can be animated using <c>Animation</c> class.
1796         /// <code>
1797         /// animation.AnimateTo(view, "Orientation", new Rotation(new Radian((float)Math.PI), Vector3.XAxis));
1798         /// </code>
1799         /// </para>
1800         /// </remarks>
1801         /// <since_tizen> 3 </since_tizen>
1802         public Rotation Orientation
1803         {
1804             get
1805             {
1806                 return (Rotation)GetValue(OrientationProperty);
1807             }
1808             set
1809             {
1810                 SetValue(OrientationProperty, value);
1811                 NotifyPropertyChanged();
1812             }
1813         }
1814
1815         /// <summary>
1816         /// Gets or sets the world orientation of the view.<br />
1817         /// </summary>
1818         /// <since_tizen> 3 </since_tizen>
1819         public Rotation WorldOrientation
1820         {
1821             get
1822             {
1823                 Rotation temp = new Rotation();
1824                 var pValue = GetProperty(View.Property.WorldOrientation);
1825                 pValue.Get(temp);
1826                 pValue.Dispose();
1827                 return temp;
1828             }
1829         }
1830
1831         /// <summary>
1832         /// Gets or sets the scale factor applied to the view.<br />
1833         /// </summary>
1834         /// <remarks>
1835         /// <para>
1836         /// Animatable - This property can be animated using <c>Animation</c> class.
1837         /// <code>
1838         /// animation.AnimateTo(view, "Scale", new Vector3(1.5f, 1.5f, 1.0f));
1839         /// </code>
1840         /// </para>
1841         /// The property cascade chaining set is not recommended.
1842         /// </remarks>
1843         /// <example>
1844         /// This way is recommended for setting the property
1845         /// <code>
1846         /// var view = new View();
1847         /// view.Scale = new Vector3(1.5f, 2.0f, 1.0f);
1848         /// </code>
1849         /// This way to set the property is prohibited
1850         /// <code>
1851         /// view.Scale.Width = 1.5f; //This does not guarantee a proper operation
1852         /// </code>
1853         /// </example>
1854         /// <since_tizen> 3 </since_tizen>
1855         public Vector3 Scale
1856         {
1857             get
1858             {
1859                 return (Vector3)GetValue(ScaleProperty);
1860             }
1861             set
1862             {
1863                 SetValue(ScaleProperty, value);
1864                 NotifyPropertyChanged();
1865             }
1866         }
1867
1868         /// <summary>
1869         /// Gets or sets the scale X factor applied to the view.
1870         /// </summary>
1871         /// <remarks>
1872         /// <para>
1873         /// Animatable - This property can be animated using <c>Animation</c> class.
1874         /// <code>
1875         /// animation.AnimateTo(view, "ScaleX", 1.5f);
1876         /// </code>
1877         /// </para>
1878         /// </remarks>
1879         /// <since_tizen> 3 </since_tizen>
1880         public float ScaleX
1881         {
1882             get
1883             {
1884                 return (float)GetValue(ScaleXProperty);
1885             }
1886             set
1887             {
1888                 SetValue(ScaleXProperty, value);
1889                 NotifyPropertyChanged();
1890             }
1891         }
1892
1893         /// <summary>
1894         /// Gets or sets the scale Y factor applied to the view.
1895         /// </summary>
1896         /// <remarks>
1897         /// <para>
1898         /// Animatable - This property can be animated using <c>Animation</c> class.
1899         /// <code>
1900         /// animation.AnimateTo(view, "ScaleY", 1.5f);
1901         /// </code>
1902         /// </para>
1903         /// </remarks>
1904         /// <since_tizen> 3 </since_tizen>
1905         public float ScaleY
1906         {
1907             get
1908             {
1909                 return (float)GetValue(ScaleYProperty);
1910             }
1911             set
1912             {
1913                 SetValue(ScaleYProperty, value);
1914                 NotifyPropertyChanged();
1915             }
1916         }
1917
1918         /// <summary>
1919         /// Gets or sets the scale Z factor applied to the view.
1920         /// </summary>
1921         /// <remarks>
1922         /// <para>
1923         /// Animatable - This property can be animated using <c>Animation</c> class.
1924         /// <code>
1925         /// animation.AnimateTo(view, "ScaleZ", 1.5f);
1926         /// </code>
1927         /// </para>
1928         /// </remarks>
1929         /// <since_tizen> 3 </since_tizen>
1930         public float ScaleZ
1931         {
1932             get
1933             {
1934                 return (float)GetValue(ScaleZProperty);
1935             }
1936             set
1937             {
1938                 SetValue(ScaleZProperty, value);
1939                 NotifyPropertyChanged();
1940             }
1941         }
1942
1943         /// <summary>
1944         /// Gets the world scale of the view.
1945         /// </summary>
1946         /// <since_tizen> 3 </since_tizen>
1947         public Vector3 WorldScale
1948         {
1949             get
1950             {
1951                 return GetCurrentWorldScale();
1952             }
1953         }
1954
1955         /// <summary>
1956         /// Retrieves the visibility flag of the view.
1957         /// </summary>
1958         /// <remarks>
1959         /// <para>
1960         /// If the view is not visible, then the view and its children will not be rendered.
1961         /// This is regardless of the individual visibility values of the children, i.e., the view will only be rendered if all of its parents have visibility set to true.
1962         /// </para>
1963         /// <para>
1964         /// Animatable - This property can be animated using <c>Animation</c> class.
1965         /// <code>
1966         /// animation.AnimateTo(view, "Visibility", false);
1967         /// </code>
1968         /// </para>
1969         /// </remarks>
1970         /// <since_tizen> 3 </since_tizen>
1971         public bool Visibility
1972         {
1973             get
1974             {
1975                 return Object.InternalGetPropertyBool(SwigCPtr, View.Property.VISIBLE);
1976             }
1977         }
1978
1979         /// <summary>
1980         /// Gets the view's world color.
1981         /// </summary>
1982         /// <since_tizen> 3 </since_tizen>
1983         public Vector4 WorldColor
1984         {
1985             get
1986             {
1987                 return GetCurrentWorldColor();
1988             }
1989         }
1990
1991         /// <summary>
1992         /// Gets or sets the view's name.
1993         /// </summary>
1994         /// <since_tizen> 3 </since_tizen>
1995         public string Name
1996         {
1997             get
1998             {
1999                 return (string)GetValue(NameProperty);
2000             }
2001             set
2002             {
2003                 SetValue(NameProperty, value);
2004                 NotifyPropertyChanged();
2005             }
2006         }
2007
2008         /// <summary>
2009         /// Get the number of children held by the view.
2010         /// </summary>
2011         /// <since_tizen> 3 </since_tizen>
2012         public new uint ChildCount
2013         {
2014             get
2015             {
2016                 return Convert.ToUInt32(Children.Count);
2017             }
2018         }
2019
2020         /// <summary>
2021         /// Gets the view's ID.
2022         /// Read-only
2023         /// </summary>
2024         /// <since_tizen> 3 </since_tizen>
2025         public uint ID
2026         {
2027             get
2028             {
2029                 return GetId();
2030             }
2031         }
2032
2033         /// <summary>
2034         /// Gets or sets the status of whether the view should emit touch or hover signals.
2035         /// If a View is made insensitive, then the View and its children are not hittable.
2036         /// </summary>
2037         /// <since_tizen> 3 </since_tizen>
2038         public bool Sensitive
2039         {
2040             get
2041             {
2042                 return (bool)GetValue(SensitiveProperty);
2043             }
2044             set
2045             {
2046                 SetValue(SensitiveProperty, value);
2047                 NotifyPropertyChanged();
2048             }
2049         }
2050
2051         /// <summary>
2052         /// Gets or sets the status of whether the view should be enabled user interactions.
2053         /// If a View is made disabled, then user interactions including touch, focus, and actiavation is disabled.
2054         /// </summary>
2055         /// <since_tizen> tizen_next </since_tizen>
2056         [EditorBrowsable(EditorBrowsableState.Never)]
2057         public bool IsEnabled
2058         {
2059             get
2060             {
2061                 return (bool)GetValue(IsEnabledProperty);
2062             }
2063             set
2064             {
2065                 SetValue(IsEnabledProperty, value);
2066                 NotifyPropertyChanged();
2067             }
2068         }
2069
2070         /// <summary>
2071         /// Gets or sets the status of whether the view should receive a notification when touch or hover motion events leave the boundary of the view.
2072         /// </summary>
2073         /// <since_tizen> 3 </since_tizen>
2074         public bool LeaveRequired
2075         {
2076             get
2077             {
2078                 return (bool)GetValue(LeaveRequiredProperty);
2079             }
2080             set
2081             {
2082                 SetValue(LeaveRequiredProperty, value);
2083                 NotifyPropertyChanged();
2084             }
2085         }
2086
2087         /// <summary>
2088         /// Gets or sets the status of whether a child view inherits it's parent's orientation.
2089         /// </summary>
2090         /// <since_tizen> 3 </since_tizen>
2091         public bool InheritOrientation
2092         {
2093             get
2094             {
2095                 return (bool)GetValue(InheritOrientationProperty);
2096             }
2097             set
2098             {
2099                 SetValue(InheritOrientationProperty, value);
2100                 NotifyPropertyChanged();
2101             }
2102         }
2103
2104         /// <summary>
2105         /// Gets or sets the status of whether a child view inherits it's parent's scale.
2106         /// </summary>
2107         /// <since_tizen> 3 </since_tizen>
2108         public bool InheritScale
2109         {
2110             get
2111             {
2112                 return (bool)GetValue(InheritScaleProperty);
2113             }
2114             set
2115             {
2116                 SetValue(InheritScaleProperty, value);
2117                 NotifyPropertyChanged();
2118             }
2119         }
2120
2121         /// <summary>
2122         /// Gets or sets the status of how the view and its children should be drawn.<br />
2123         /// Not all views are renderable, but DrawMode can be inherited from any view.<br />
2124         /// If an object is in a 3D layer, it will be depth-tested against other objects in the world, i.e., it may be obscured if other objects are in front.<br />
2125         /// If DrawMode.Overlay2D is used, the view and its children will be drawn as a 2D overlay.<br />
2126         /// Overlay views are drawn in a separate pass, after all non-overlay views within the layer.<br />
2127         /// For overlay views, the drawing order is with respect to tree levels of views, and depth-testing will not be used.<br />
2128         /// </summary>
2129         /// <since_tizen> 3 </since_tizen>
2130         public DrawModeType DrawMode
2131         {
2132             get
2133             {
2134                 return (DrawModeType)GetValue(DrawModeProperty);
2135             }
2136             set
2137             {
2138                 SetValue(DrawModeProperty, value);
2139                 NotifyPropertyChanged();
2140             }
2141         }
2142
2143         /// <summary>
2144         /// Gets or sets the relative to parent size factor of the view.<br />
2145         /// This factor is only used when ResizePolicyType is set to either: ResizePolicyType.SizeRelativeToParent or ResizePolicyType.SizeFixedOffsetFromParent.<br />
2146         /// This view's size is set to the view's size multiplied by or added to this factor, depending on ResizePolicyType.<br />
2147         /// </summary>
2148         /// <remarks>
2149         /// The property cascade chaining set is not recommended.
2150         /// </remarks>
2151         /// <example>
2152         /// This way is recommended for setting the property
2153         /// <code>
2154         /// var text = new TextField();
2155         /// text.SizeModeFactor = new Vector3(1.0f, 0.45f, 1.0f);
2156         /// </code>
2157         /// This way to set the property is prohibited
2158         /// <code>
2159         /// text.SizeModeFactor.Width = 1.0f; //This does not guarantee a proper operation
2160         /// </code>
2161         /// </example>
2162         /// <since_tizen> 3 </since_tizen>
2163         public Vector3 SizeModeFactor
2164         {
2165             get
2166             {
2167                 return (Vector3)GetValue(SizeModeFactorProperty);
2168             }
2169             set
2170             {
2171                 SetValue(SizeModeFactorProperty, value);
2172                 NotifyPropertyChanged();
2173             }
2174         }
2175
2176         /// <summary>
2177         /// Gets or sets the width resize policy to be used.
2178         /// </summary>
2179         /// <since_tizen> 3 </since_tizen>
2180         public ResizePolicyType WidthResizePolicy
2181         {
2182             get
2183             {
2184                 return (ResizePolicyType)GetValue(WidthResizePolicyProperty);
2185             }
2186             set
2187             {
2188                 SetValue(WidthResizePolicyProperty, value);
2189                 NotifyPropertyChanged();
2190             }
2191         }
2192
2193         /// <summary>
2194         /// Gets or sets the height resize policy to be used.
2195         /// </summary>
2196         /// <since_tizen> 3 </since_tizen>
2197         public ResizePolicyType HeightResizePolicy
2198         {
2199             get
2200             {
2201                 return (ResizePolicyType)GetValue(HeightResizePolicyProperty);
2202             }
2203             set
2204             {
2205                 SetValue(HeightResizePolicyProperty, value);
2206                 NotifyPropertyChanged();
2207             }
2208         }
2209
2210         /// <summary>
2211         /// Gets or sets the policy to use when setting size with size negotiation.<br />
2212         /// Defaults to SizeScalePolicyType.UseSizeSet.<br />
2213         /// </summary>
2214         /// <since_tizen> 3 </since_tizen>
2215         public SizeScalePolicyType SizeScalePolicy
2216         {
2217             get
2218             {
2219                 return (SizeScalePolicyType)GetValue(SizeScalePolicyProperty);
2220             }
2221             set
2222             {
2223                 SetValue(SizeScalePolicyProperty, value);
2224                 NotifyPropertyChanged();
2225             }
2226         }
2227
2228         /// <summary>
2229         ///  Gets or sets the status of whether the width size is dependent on the height size.
2230         /// </summary>
2231         /// <since_tizen> 3 </since_tizen>
2232         public bool WidthForHeight
2233         {
2234             get
2235             {
2236                 return (bool)GetValue(WidthForHeightProperty);
2237             }
2238             set
2239             {
2240                 SetValue(WidthForHeightProperty, value);
2241                 NotifyPropertyChanged();
2242             }
2243         }
2244
2245         /// <summary>
2246         /// Gets or sets the status of whether the height size is dependent on the width size.
2247         /// </summary>
2248         /// <since_tizen> 3 </since_tizen>
2249         public bool HeightForWidth
2250         {
2251             get
2252             {
2253                 return (bool)GetValue(HeightForWidthProperty);
2254             }
2255             set
2256             {
2257                 SetValue(HeightForWidthProperty, value);
2258                 NotifyPropertyChanged();
2259             }
2260         }
2261
2262         /// <summary>
2263         /// Gets or sets the padding for use in layout.
2264         /// </summary>
2265         /// <remarks>
2266         /// The property cascade chaining set is not recommended.
2267         /// </remarks>
2268         /// <example>
2269         /// This way is recommended for setting the property
2270         /// <code>
2271         /// var view = new View();
2272         /// view.Padding = new Extents(5, 5, 5, 5);
2273         /// </code>
2274         /// This way to set the property is prohibited
2275         /// <code>
2276         /// view.Padding.Start = 5; //This does not guarantee a proper operation
2277         /// </code>
2278         /// </example>
2279         /// <since_tizen> 5 </since_tizen>
2280         public Extents Padding
2281         {
2282             get
2283             {
2284                 return (Extents)GetValue(PaddingProperty);
2285             }
2286             set
2287             {
2288                 SetValue(PaddingProperty, value);
2289                 NotifyPropertyChanged();
2290             }
2291         }
2292
2293         /// <summary>
2294         /// Gets or sets the minimum size the view can be assigned in size negotiation.
2295         /// </summary>
2296         /// <exception cref="ArgumentNullException"> Thrown when value is null. </exception>
2297         /// <remarks>
2298         /// The property cascade chaining set is not recommended.
2299         /// </remarks>
2300         /// <example>
2301         /// This way is recommended for setting the property
2302         /// <code>
2303         /// var view = new View();
2304         /// view.MinimumSize = new Size2D(100, 200);
2305         /// </code>
2306         /// This way to set the property is prohibited
2307         /// <code>
2308         /// view.MinimumSize.Width = 100; //This does not guarantee a proper operation
2309         /// </code>
2310         /// </example>
2311         /// <since_tizen> 3 </since_tizen>
2312         public Size2D MinimumSize
2313         {
2314             get
2315             {
2316                 return (Size2D)GetValue(MinimumSizeProperty);
2317             }
2318             set
2319             {
2320                 if (value == null)
2321                 {
2322                     throw new ArgumentNullException(nameof(value));
2323                 }
2324                 if (layout != null)
2325                 {
2326                     // Note: it only works if minimum size is >= than natural size.
2327                     // To force the size it should be done through the width&height spec or Size2D.
2328                     layout.MinimumWidth = new Tizen.NUI.LayoutLength(value.Width);
2329                     layout.MinimumHeight = new Tizen.NUI.LayoutLength(value.Height);
2330                     layout.RequestLayout();
2331                 }
2332                 SetValue(MinimumSizeProperty, value);
2333                 NotifyPropertyChanged();
2334             }
2335         }
2336
2337         /// <summary>
2338         /// Gets or sets the maximum size the view can be assigned in size negotiation.
2339         /// </summary>
2340         /// <example>
2341         /// This way is recommended for setting the property
2342         /// <code>
2343         /// var view = new View();
2344         /// view.MaximumSize = new Size2D(100, 200);
2345         /// </code>
2346         /// This way to set the property is prohibited
2347         /// <code>
2348         /// view.MaximumSize.Height = 200; //This does not guarantee a proper operation
2349         /// </code>
2350         /// </example>
2351         /// <since_tizen> 3 </since_tizen>
2352         public Size2D MaximumSize
2353         {
2354             get
2355             {
2356                 return (Size2D)GetValue(MaximumSizeProperty);
2357             }
2358             set
2359             {
2360                 // We don't have Layout.Maximum(Width|Height) so we cannot apply it to layout.
2361                 // MATCH_PARENT spec + parent container size can be used to limit
2362                 if (layout != null)
2363                 {
2364                     layout.RequestLayout();
2365                 }
2366                 SetValue(MaximumSizeProperty, value);
2367                 NotifyPropertyChanged();
2368             }
2369         }
2370
2371         /// <summary>
2372         /// Gets or sets whether a child view inherits it's parent's position.<br />
2373         /// Default is to inherit.<br />
2374         /// Switching this off means that using position sets the view's world position, i.e., translates from the world origin (0,0,0) to the pivot point of the view.<br />
2375         /// </summary>
2376         /// <since_tizen> 3 </since_tizen>
2377         public bool InheritPosition
2378         {
2379             get
2380             {
2381                 return (bool)GetValue(InheritPositionProperty);
2382             }
2383             set
2384             {
2385                 SetValue(InheritPositionProperty, value);
2386                 NotifyPropertyChanged();
2387             }
2388         }
2389
2390         /// <summary>
2391         /// Gets or sets the clipping behavior (mode) of it's children.
2392         /// </summary>
2393         /// <since_tizen> 3 </since_tizen>
2394         public ClippingModeType ClippingMode
2395         {
2396             get
2397             {
2398                 return (ClippingModeType)GetValue(ClippingModeProperty);
2399             }
2400             set
2401             {
2402                 SetValue(ClippingModeProperty, value);
2403                 NotifyPropertyChanged();
2404             }
2405         }
2406
2407         /// <summary>
2408         /// Gets the number of renderers held by the view.
2409         /// </summary>
2410         /// <since_tizen> 3 </since_tizen>
2411         public uint RendererCount
2412         {
2413             get
2414             {
2415                 return GetRendererCount();
2416             }
2417         }
2418
2419         /// <summary>
2420         /// This has been deprecated in API5 and will be removed in API8. Use PivotPoint instead.
2421         /// </summary>
2422         /// <remarks>
2423         /// The property cascade chaining set is possible. For example, this (view.AnchorPoint.X = 0.1f;) is possible.
2424         /// </remarks>
2425         /// <since_tizen> 3 </since_tizen>
2426         [Obsolete("This has been deprecated in API5 and will be removed in API8. Use PivotPoint instead. " +
2427             "Like: " +
2428             "View view = new View(); " +
2429             "view.PivotPoint = PivotPoint.Center; " +
2430             "view.PositionUsesPivotPoint = true;")]
2431         [EditorBrowsable(EditorBrowsableState.Never)]
2432         public Position AnchorPoint
2433         {
2434             get
2435             {
2436                 return GetValue(AnchorPointProperty) as Position;
2437             }
2438             set
2439             {
2440                 SetValue(AnchorPointProperty, value);
2441             }
2442         }
2443
2444         private Position InternalAnchorPoint
2445         {
2446             get
2447             {
2448                 return GetCurrentAnchorPoint();
2449             }
2450             set
2451             {
2452                 SetAnchorPoint(value);
2453                 NotifyPropertyChanged();
2454             }
2455         }
2456
2457         /// <summary>
2458         /// Sets the size of a view for the width, the height and the depth.<br />
2459         /// Geometry can be scaled to fit within this area.<br />
2460         /// This does not interfere with the view's scale factor.<br />
2461         /// The views default depth is the minimum of width and height.<br />
2462         /// </summary>
2463         /// <remarks>
2464         /// <para>
2465         /// Animatable - This property can be animated using <c>Animation</c> class.
2466         /// <code>
2467         /// animation.AnimateTo(view, "Size", new Size(100, 100));
2468         /// </code>
2469         /// </para>
2470         /// The property cascade chaining set is not recommended.
2471         /// </remarks>
2472         /// <example>
2473         /// This way is recommended for setting the property
2474         /// <code>
2475         /// var view = new View();
2476         /// view.Size = new Size(100.5f, 200, 0);
2477         /// </code>
2478         /// This way to set the property is prohibited
2479         /// <code>
2480         /// view.Size.Width = 100.5f; //This does not guarantee a proper operation
2481         /// </code>
2482         /// </example>
2483         /// <since_tizen> 5 </since_tizen>
2484         public Size Size
2485         {
2486             get
2487             {
2488                 return (Size)GetValue(SizeProperty);
2489             }
2490             set
2491             {
2492                 SetValue(SizeProperty, value);
2493                 NotifyPropertyChanged();
2494             }
2495         }
2496
2497         /// <summary>
2498         /// This has been deprecated in API5 and will be removed in API8. Use 'Container GetParent() for derived class' instead.
2499         /// </summary>
2500         /// <since_tizen> 3 </since_tizen>
2501         [Obsolete("This has been deprecated in API5 and will be removed in API8. Use 'Container GetParent() for derived class' instead. " +
2502             "Like: " +
2503             "Container parent =  view.GetParent(); " +
2504             "View view = parent as View;")]
2505         [EditorBrowsable(EditorBrowsableState.Never)]
2506         public new View Parent
2507         {
2508             get
2509             {
2510                 View ret;
2511                 IntPtr cPtr = Interop.Actor.GetParent(SwigCPtr);
2512                 HandleRef CPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
2513                 BaseHandle basehandle = Registry.GetManagedBaseHandleFromNativePtr(CPtr.Handle);
2514
2515                 if (basehandle is Layer layer)
2516                 {
2517                     ret = new View(Layer.getCPtr(layer).Handle, false);
2518                     NUILog.Error("This Parent property is deprecated, should do not be used");
2519                 }
2520                 else
2521                 {
2522                     ret = basehandle as View;
2523                 }
2524
2525                 Interop.BaseHandle.DeleteBaseHandle(CPtr);
2526                 CPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
2527
2528                 if (NDalicPINVOKE.SWIGPendingException.Pending) throw new InvalidOperationException("FATAL: get Exception", NDalicPINVOKE.SWIGPendingException.Retrieve());
2529                 return ret;
2530             }
2531         }
2532
2533         /// <summary>
2534         /// Gets/Sets whether inherit parent's the layout Direction.
2535         /// </summary>
2536         /// <since_tizen> 4 </since_tizen>
2537         public bool InheritLayoutDirection
2538         {
2539             get
2540             {
2541                 return (bool)GetValue(InheritLayoutDirectionProperty);
2542             }
2543             set
2544             {
2545                 SetValue(InheritLayoutDirectionProperty, value);
2546                 NotifyPropertyChanged();
2547             }
2548         }
2549
2550         /// <summary>
2551         /// Gets/Sets the layout Direction.
2552         /// </summary>
2553         /// <since_tizen> 4 </since_tizen>
2554         public ViewLayoutDirectionType LayoutDirection
2555         {
2556             get
2557             {
2558                 return (ViewLayoutDirectionType)GetValue(LayoutDirectionProperty);
2559             }
2560             set
2561             {
2562                 SetValue(LayoutDirectionProperty, value);
2563                 NotifyPropertyChanged();
2564                 layout?.RequestLayout();
2565             }
2566         }
2567
2568         /// <summary>
2569         /// Gets or sets the Margin for use in layout.
2570         /// </summary>
2571         /// <remarks>
2572         /// Margin property is supported by Layout algorithms and containers.
2573         /// Please Set Layout if you want to use Margin property.
2574         /// The property cascade chaining set is not recommended.
2575         /// </remarks>
2576         /// <example>
2577         /// This way is recommended for setting the property
2578         /// <code>
2579         /// var view = new View();
2580         /// view.Margin = new Extents(10, 5, 15, 20);
2581         /// </code>
2582         /// This way to set the property is prohibited
2583         /// <code>
2584         /// view.Margin.Top = 15; //This does not guarantee a proper operation
2585         /// </code>
2586         /// </example>
2587         /// <since_tizen> 4 </since_tizen>
2588         public Extents Margin
2589         {
2590             get
2591             {
2592                 return (Extents)GetValue(MarginProperty);
2593             }
2594             set
2595             {
2596                 SetValue(MarginProperty, value);
2597                 NotifyPropertyChanged();
2598             }
2599         }
2600
2601         ///<summary>
2602         /// The required policy for this dimension, <see cref="LayoutParamPolicies"/> values or exact value.
2603         ///</summary>
2604         /// <example>
2605         /// <code>
2606         /// // matchParentView matches its size to its parent size.
2607         /// matchParentView.WidthSpecification = LayoutParamPolicies.MatchParent;
2608         /// matchParentView.HeightSpecification = LayoutParamPolicies.MatchParent;
2609         ///
2610         /// // wrapContentView wraps its children with their desired size.
2611         /// wrapContentView.WidthSpecification = LayoutParamPolicies.WrapContent;
2612         /// wrapContentView.HeightSpecification = LayoutParamPolicies.WrapContent;
2613         ///
2614         /// // exactSizeView shows itself with an exact size.
2615         /// exactSizeView.WidthSpecification = 100;
2616         /// exactSizeView.HeightSpecification = 100;
2617         /// </code>
2618         /// </example>
2619         /// <since_tizen> 6 </since_tizen>
2620         [Binding.TypeConverter(typeof(IntGraphicsTypeConverter))]
2621         public int WidthSpecification
2622         {
2623             get
2624             {
2625                 return (int)GetValue(WidthSpecificationProperty);
2626             }
2627             set
2628             {
2629                 SetValue(WidthSpecificationProperty, value);
2630                 NotifyPropertyChanged();
2631             }
2632         }
2633
2634         private int InternalWidthSpecification
2635         {
2636             get
2637             {
2638                 return widthPolicy;
2639             }
2640             set
2641             {
2642                 if (value == widthPolicy)
2643                     return;
2644
2645                 widthPolicy = value;
2646                 if (widthPolicy >= 0)
2647                 {
2648                     SizeWidth = widthPolicy;
2649                 }
2650                 layout?.RequestLayout();
2651             }
2652         }
2653
2654         ///<summary>
2655         /// The required policy for this dimension, <see cref="LayoutParamPolicies"/> values or exact value.
2656         ///</summary>
2657         /// <example>
2658         /// <code>
2659         /// // matchParentView matches its size to its parent size.
2660         /// matchParentView.WidthSpecification = LayoutParamPolicies.MatchParent;
2661         /// matchParentView.HeightSpecification = LayoutParamPolicies.MatchParent;
2662         ///
2663         /// // wrapContentView wraps its children with their desired size.
2664         /// wrapContentView.WidthSpecification = LayoutParamPolicies.WrapContent;
2665         /// wrapContentView.HeightSpecification = LayoutParamPolicies.WrapContent;
2666         ///
2667         /// // exactSizeView shows itself with an exact size.
2668         /// exactSizeView.WidthSpecification = 100;
2669         /// exactSizeView.HeightSpecification = 100;
2670         /// </code>
2671         /// </example>
2672         /// <since_tizen> 6 </since_tizen>
2673         [Binding.TypeConverter(typeof(IntGraphicsTypeConverter))]
2674         public int HeightSpecification
2675         {
2676             get
2677             {
2678                 return (int)GetValue(HeightSpecificationProperty);
2679             }
2680             set
2681             {
2682                 SetValue(HeightSpecificationProperty, value);
2683                 NotifyPropertyChanged();
2684             }
2685         }
2686
2687         private int InternalHeightSpecification
2688         {
2689             get
2690             {
2691                 return heightPolicy;
2692             }
2693             set
2694             {
2695                 if (value == heightPolicy)
2696                     return;
2697
2698                 heightPolicy = value;
2699                 if (heightPolicy >= 0)
2700                 {
2701                     SizeHeight = heightPolicy;
2702                 }
2703                 layout?.RequestLayout();
2704             }
2705         }
2706
2707         ///<summary>
2708         /// Gets the List of transitions for this View.
2709         ///</summary>
2710         /// <since_tizen> 6 </since_tizen>
2711         public Dictionary<TransitionCondition, TransitionList> LayoutTransitions
2712         {
2713             get
2714             {
2715                 if (layoutTransitions == null)
2716                 {
2717                     layoutTransitions = new Dictionary<TransitionCondition, TransitionList>();
2718                 }
2719                 return layoutTransitions;
2720             }
2721         }
2722
2723         ///<summary>
2724         /// Sets a layout transitions for this View.
2725         ///</summary>
2726         /// <exception cref="ArgumentNullException"> Thrown when value is null. </exception>
2727         /// <remarks>
2728         /// Use LayoutTransitions to receive a collection of LayoutTransitions set on the View.
2729         /// </remarks>
2730         /// <since_tizen> 6 </since_tizen>
2731         public LayoutTransition LayoutTransition
2732         {
2733             get
2734             {
2735                 return GetValue(LayoutTransitionProperty) as LayoutTransition;
2736             }
2737             set
2738             {
2739                 SetValue(LayoutTransitionProperty, value);
2740                 NotifyPropertyChanged();
2741             }
2742         }
2743
2744         private LayoutTransition InternalLayoutTransition
2745         {
2746             get
2747             {
2748                 return layoutTransition;
2749             }
2750             set
2751             {
2752                 if (value == null)
2753                 {
2754                     throw new global::System.ArgumentNullException(nameof(value));
2755                 }
2756                 if (layoutTransitions == null)
2757                 {
2758                     layoutTransitions = new Dictionary<TransitionCondition, TransitionList>();
2759                 }
2760
2761                 LayoutTransitionsHelper.AddTransitionForCondition(layoutTransitions, value.Condition, value, true);
2762
2763                 AttachTransitionsToChildren(value);
2764
2765                 layoutTransition = value;
2766             }
2767         }
2768
2769         /// <summary>
2770         /// This has been deprecated in API5 and will be removed in API8. Use Padding instead.
2771         /// </summary>
2772         /// <remarks>
2773         /// The property cascade chaining set is possible. For example, this (view.DecorationBoundingBox.X = 0.1f;) is possible.
2774         /// </remarks>
2775         /// <since_tizen> 4 </since_tizen>
2776         [Obsolete("This has been deprecated in API5 and will be removed in API8. Use Padding instead.")]
2777         [EditorBrowsable(EditorBrowsableState.Never)]
2778         public Extents PaddingEX
2779         {
2780             get
2781             {
2782                 return GetValue(PaddingEXProperty) as Extents;
2783             }
2784             set
2785             {
2786                 SetValue(PaddingEXProperty, value);
2787             }
2788         }
2789
2790         private Extents InternalPaddingEX
2791         {
2792             get
2793             {
2794                 Extents temp = new Extents(0, 0, 0, 0);
2795                 var pValue = GetProperty(View.Property.PADDING);
2796                 pValue.Get(temp);
2797                 pValue.Dispose();
2798                 Extents ret = new Extents(OnPaddingEXChanged, temp.Start, temp.End, temp.Top, temp.Bottom);
2799                 temp.Dispose();
2800                 return ret;
2801             }
2802             set
2803             {
2804                 var temp = new Tizen.NUI.PropertyValue(value);
2805                 SetProperty(View.Property.PADDING, temp);
2806                 temp.Dispose();
2807                 NotifyPropertyChanged();
2808                 layout?.RequestLayout();
2809             }
2810         }
2811
2812         /// <summary>
2813         /// The Color of View. This is an RGBA value.
2814         /// Each RGBA components match as <see cref="ColorRed"/>, <see cref="ColorGreen"/>, <see cref="ColorBlue"/>, and <see cref="Opacity"/>.
2815         /// This property will multiply the final color of this view. (BackgroundColor, BorderlineColor, BackgroundImage, etc).
2816         /// For example, if view.BackgroundColor = Color.Yellow and view.Color = Color.Purple, this view will shown as Red.
2817         /// Inherient of color value depend on <see cref="ColorMode"/>.
2818         /// </summary>
2819         /// <remarks>
2820         /// <para>
2821         /// Animatable - This property can be animated using <c>Animation</c> class.
2822         /// </para>
2823         /// The property cascade chaining set is not recommended.
2824         /// </remarks>
2825         /// <example>
2826         /// This way is recommended for setting the property
2827         /// <code>
2828         /// var view = new View();
2829         /// view.Color = new Color(0.5f, 0.2f, 0.1f, 0.5f);
2830         /// </code>
2831         /// This way to set the property is prohibited
2832         /// <code>
2833         /// view.Color.A = 0.5f; //This does not guarantee a proper operation
2834         /// </code>
2835         /// </example>
2836         [EditorBrowsable(EditorBrowsableState.Never)]
2837         public Color Color
2838         {
2839             get
2840             {
2841                 return (Color)GetValue(ColorProperty);
2842             }
2843             set
2844             {
2845                 SetValue(ColorProperty, value);
2846                 NotifyPropertyChanged();
2847             }
2848         }
2849
2850         /// <summary>
2851         /// The Red component of View.Color.
2852         /// </summary>
2853         /// <remarks>
2854         /// <para>
2855         /// Animatable - This property can be animated using <c>Animation</c> class.
2856         /// </para>
2857         /// </remarks>
2858         [EditorBrowsable(EditorBrowsableState.Never)]
2859         public float ColorRed
2860         {
2861             get
2862             {
2863                 return (float)GetValue(ColorRedProperty);
2864             }
2865             set
2866             {
2867                 SetValue(ColorRedProperty, value);
2868                 NotifyPropertyChanged();
2869             }
2870         }
2871
2872         /// <summary>
2873         /// The Green component of View.Color.
2874         /// </summary>
2875         /// <remarks>
2876         /// <para>
2877         /// Animatable - This property can be animated using <c>Animation</c> class.
2878         /// </para>
2879         /// </remarks>
2880         [EditorBrowsable(EditorBrowsableState.Never)]
2881         public float ColorGreen
2882         {
2883             get
2884             {
2885                 return (float)GetValue(ColorGreenProperty);
2886             }
2887             set
2888             {
2889                 SetValue(ColorGreenProperty, value);
2890                 NotifyPropertyChanged();
2891             }
2892         }
2893
2894         /// <summary>
2895         /// The Blue component of View.Color.
2896         /// </summary>
2897         /// <remarks>
2898         /// <para>
2899         /// Animatable - This property can be animated using <c>Animation</c> class.
2900         /// </para>
2901         /// </remarks>
2902         [EditorBrowsable(EditorBrowsableState.Never)]
2903         public float ColorBlue
2904         {
2905             get
2906             {
2907                 return (float)GetValue(ColorBlueProperty);
2908             }
2909             set
2910             {
2911                 SetValue(ColorBlueProperty, value);
2912                 NotifyPropertyChanged();
2913             }
2914         }
2915
2916         /// <summary>
2917         /// Set the layout on this View. Replaces any existing Layout.
2918         /// </summary>
2919         /// <remarks>
2920         /// If this Layout is set as null explicitly, it means this View itself and it's child Views will not use Layout anymore.
2921         /// </remarks>
2922         /// <since_tizen> 6 </since_tizen>
2923         public LayoutItem Layout
2924         {
2925             get
2926             {
2927                 return GetValue(LayoutProperty) as LayoutItem;
2928             }
2929             set
2930             {
2931                 SetValue(LayoutProperty, value);
2932             }
2933         }
2934
2935         private LayoutItem InternalLayout
2936         {
2937             get
2938             {
2939                 return layout;
2940             }
2941             set
2942             {
2943                 // Do nothing if layout provided is already set on this View.
2944                 if (value == layout)
2945                 {
2946                     return;
2947                 }
2948
2949                 LayoutingDisabled = false;
2950                 layoutSet = true;
2951
2952                 // If new layout being set already has a owner then that owner receives a replacement default layout.
2953                 // First check if the layout to be set already has a owner.
2954                 if (value?.Owner != null)
2955                 {
2956                     // Previous owner of the layout gets a default layout as a replacement.
2957                     value.Owner.Layout = new AbsoluteLayout()
2958                     {
2959                         // Copy Margin and Padding to replacement LayoutGroup.
2960                         Margin = value.Margin,
2961                         Padding = value.Padding,
2962                     };
2963                 }
2964
2965                 // Copy Margin and Padding to new layout being set or restore padding and margin back to
2966                 // View if no replacement. Previously margin and padding values would have been moved from
2967                 // the View to the layout.
2968                 if (layout != null) // Existing layout
2969                 {
2970                     if (value != null)
2971                     {
2972                         // Existing layout being replaced so copy over margin and padding values.
2973                         value.Margin = layout.Margin;
2974                         value.Padding = layout.Padding;
2975                         value.SetPositionByLayout = !excludeLayouting;
2976                     }
2977                     else
2978                     {
2979                         // Layout not being replaced so restore margin and padding to View.
2980                         SetValue(MarginProperty, layout.Margin);
2981                         SetValue(PaddingProperty, layout.Padding);
2982                         NotifyPropertyChanged();
2983                     }
2984                 }
2985                 else
2986                 {
2987                     // First Layout to be added to the View hence copy
2988
2989                     // Do not try to set Margins or Padding on a null Layout (when a layout is being removed from a View)
2990                     if (value != null)
2991                     {
2992                         Extents margin = Margin;
2993                         Extents padding = Padding;
2994                         bool setMargin = false;
2995                         bool setPadding = false;
2996
2997                         if (margin.Top != 0 || margin.Bottom != 0 || margin.Start != 0 || margin.End != 0)
2998                         {
2999                             // If View already has a margin set then store it in Layout instead.
3000                             value.Margin = margin;
3001                             SetValue(MarginProperty, new Extents(0, 0, 0, 0));
3002                             setMargin = true;
3003                         }
3004
3005                         if (padding.Top != 0 || padding.Bottom != 0 || padding.Start != 0 || padding.End != 0)
3006                         {
3007                             // If View already has a padding set then store it in Layout instead.
3008                             value.Padding = padding;
3009                             SetValue(PaddingProperty, new Extents(0, 0, 0, 0));
3010                             setPadding = true;
3011                         }
3012
3013                         if (setMargin || setPadding)
3014                         {
3015                             NotifyPropertyChanged();
3016                         }
3017
3018                         value.SetPositionByLayout = !excludeLayouting;
3019                     }
3020                 }
3021
3022                 // Remove existing layout from it's parent layout group.
3023                 layout?.Unparent();
3024
3025                 // Set layout to this view
3026                 SetLayout(value);
3027             }
3028         }
3029
3030         /// <summary>
3031         /// The weight of the View, used to share available space in a layout with siblings.
3032         /// </summary>
3033         /// <since_tizen> 6 </since_tizen>
3034         public float Weight
3035         {
3036             get
3037             {
3038                 return weight;
3039             }
3040             set
3041             {
3042                 weight = value;
3043                 layout?.RequestLayout();
3044             }
3045         }
3046
3047         /// <summary>
3048         ///  Whether to load the BackgroundImage synchronously.
3049         ///  If not specified, the default is false, i.e. the BackgroundImage is loaded asynchronously.
3050         ///  Note: For Normal Quad images only.
3051         /// </summary>
3052         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
3053         [EditorBrowsable(EditorBrowsableState.Never)]
3054         public bool BackgroundImageSynchronosLoading
3055         {
3056             get
3057             {
3058                 return (bool)GetValue(BackgroundImageSynchronosLoadingProperty);
3059             }
3060             set
3061             {
3062                 SetValue(BackgroundImageSynchronosLoadingProperty, value);
3063                 NotifyPropertyChanged();
3064             }
3065         }
3066
3067         private bool InternalBackgroundImageSynchronosLoading
3068         {
3069             get
3070             {
3071                 return BackgroundImageSynchronousLoading;
3072             }
3073             set
3074             {
3075                 BackgroundImageSynchronousLoading = value;
3076             }
3077         }
3078
3079         /// <summary>
3080         ///  Whether to load the BackgroundImage synchronously.
3081         ///  If not specified, the default is false, i.e. the BackgroundImage is loaded asynchronously.
3082         ///  Note: For Normal Quad images only.
3083         /// </summary>
3084         /// This will be public opened in tizen_7.0 after ACR done. Before ACR, need to be hidden as inhouse API.
3085         [EditorBrowsable(EditorBrowsableState.Never)]
3086         public bool BackgroundImageSynchronousLoading
3087         {
3088             get
3089             {
3090                 return (bool)GetValue(BackgroundImageSynchronousLoadingProperty);
3091             }
3092             set
3093             {
3094                 SetValue(BackgroundImageSynchronousLoadingProperty, value);
3095                 NotifyPropertyChanged();
3096             }
3097         }
3098
3099         private bool InternalBackgroundImageSynchronousLoading
3100         {
3101             get
3102             {
3103                 return backgroundImageSynchronousLoading;
3104             }
3105             set
3106             {
3107                 backgroundImageSynchronousLoading = value;
3108
3109                 if (!string.IsNullOrEmpty(BackgroundImage))
3110                 {
3111                     PropertyMap bgMap = this.Background;
3112                     var temp = new PropertyValue(backgroundImageSynchronousLoading);
3113                     bgMap[ImageVisualProperty.SynchronousLoading] = temp;
3114                     temp.Dispose();
3115                     Background = bgMap;
3116                 }
3117             }
3118         }
3119
3120         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
3121         [EditorBrowsable(EditorBrowsableState.Never)]
3122         public Vector4 UpdateAreaHint
3123         {
3124             get
3125             {
3126                 return (Vector4)GetValue(UpdateAreaHintProperty);
3127             }
3128             set
3129             {
3130                 SetValue(UpdateAreaHintProperty, value);
3131                 NotifyPropertyChanged();
3132             }
3133         }
3134
3135         /// <summary>
3136         /// Enable/Disable ControlState propagation for children.
3137         /// It is false by default.
3138         /// If the View needs to share ControlState with descendants, please set it true.
3139         /// Please note that, changing the value will also changes children's EnableControlStatePropagation value recursively.
3140         /// </summary>
3141         [EditorBrowsable(EditorBrowsableState.Never)]
3142         public bool EnableControlStatePropagation
3143         {
3144             get
3145             {
3146                 return (bool)GetValue(EnableControlStatePropagationProperty);
3147             }
3148             set
3149             {
3150                 SetValue(EnableControlStatePropagationProperty, value);
3151                 NotifyPropertyChanged();
3152             }
3153         }
3154
3155         private bool InternalEnableControlStatePropagation
3156         {
3157             get => themeData?.ControlStatePropagation ?? false;
3158             set
3159             {
3160                 if (InternalEnableControlStatePropagation == value) return;
3161
3162                 if (themeData == null) themeData = new ThemeData();
3163
3164                 themeData.ControlStatePropagation = value;
3165
3166                 foreach (View child in Children)
3167                 {
3168                     child.EnableControlStatePropagation = value;
3169                 }
3170             }
3171         }
3172
3173         /// <summary>
3174         /// The ControlStates can propagate from the parent.
3175         /// Listed ControlStates will be accepted propagation of the parent ControlState changes
3176         /// if parent view EnableControlState is true.
3177         /// <see cref="EnableControlState"/>.
3178         /// Default is ControlState.All, so every ControlStates will be propagated from the parent.
3179         /// </summary>
3180         [EditorBrowsable(EditorBrowsableState.Never)]
3181         public ControlState PropagatableControlStates
3182         {
3183             get
3184             {
3185                 return (ControlState)GetValue(PropagatableControlStatesProperty);
3186             }
3187             set
3188             {
3189                 SetValue(PropagatableControlStatesProperty, value);
3190                 NotifyPropertyChanged();
3191             }
3192         }
3193
3194         private ControlState InternalPropagatableControlStates
3195         {
3196             get => propagatableControlStates;
3197             set => propagatableControlStates = value;
3198         }
3199
3200         /// <summary>
3201         /// By default, it is false in View, true in Control.
3202         /// Note that if the value is true, the View will be a touch receptor.
3203         /// </summary>
3204         [EditorBrowsable(EditorBrowsableState.Never)]
3205         public bool EnableControlState
3206         {
3207             get
3208             {
3209                 return (bool)GetValue(EnableControlStateProperty);
3210             }
3211             set
3212             {
3213                 SetValue(EnableControlStateProperty, value);
3214             }
3215         }
3216
3217         /// <summary>
3218         /// Whether the actor grab all touches even if touch leaves its boundary.
3219         /// </summary>
3220         /// <returns>true, if it grab all touch after start</returns>
3221         [EditorBrowsable(EditorBrowsableState.Never)]
3222         public bool GrabTouchAfterLeave
3223         {
3224             get
3225             {
3226                 return (bool)GetValue(GrabTouchAfterLeaveProperty);
3227             }
3228             set
3229             {
3230                 SetValue(GrabTouchAfterLeaveProperty, value);
3231             }
3232         }
3233
3234         private bool InternalGrabTouchAfterLeave
3235         {
3236             get
3237             {
3238                 return Object.InternalGetPropertyBool(SwigCPtr, View.Property.CaptureAllTouchAfterStart);
3239             }
3240             set
3241             {
3242                 Object.InternalSetPropertyBool(SwigCPtr, View.Property.CaptureAllTouchAfterStart, value);
3243
3244                 // Use custom HitTest callback only if GrabTouchAfterLeave is true.
3245                 if (value)
3246                 {
3247                     RegisterHitTestCallback();
3248                 }
3249                 else
3250                 {
3251                     UnregisterHitTestCallback();
3252                 }
3253
3254                 NotifyPropertyChanged();
3255             }
3256         }
3257
3258         /// <summary>
3259         /// Whether the view will only receive own touch.
3260         /// </summary>
3261         /// <returns>true, if it only receives touches that started from itself.</returns>
3262         [EditorBrowsable(EditorBrowsableState.Never)]
3263         public bool AllowOnlyOwnTouch
3264         {
3265             get
3266             {
3267                 return (bool)GetValue(AllowOnlyOwnTouchProperty);
3268             }
3269             set
3270             {
3271                 SetValue(AllowOnlyOwnTouchProperty, value);
3272             }
3273         }
3274
3275         private bool InternalAllowOnlyOwnTouch
3276         {
3277             get
3278             {
3279                 return Object.InternalGetPropertyBool(SwigCPtr, View.Property.AllowOnlyOwnTouch);
3280             }
3281             set
3282             {
3283                 Object.InternalSetPropertyBool(SwigCPtr, View.Property.AllowOnlyOwnTouch, value);
3284                 NotifyPropertyChanged();
3285             }
3286         }
3287
3288         /// <summary>
3289         /// Determines which blend equation will be used to render renderers of this actor.
3290         /// </summary>
3291         /// <returns>blend equation enum currently assigned</returns>
3292         /// This will be public opened in next tizen after ACR done. Before ACR, need to be hidden as inhouse API.
3293         [EditorBrowsable(EditorBrowsableState.Never)]
3294         public BlendEquationType BlendEquation
3295         {
3296             get
3297             {
3298                 return (BlendEquationType)GetValue(BlendEquationProperty);
3299             }
3300             set
3301             {
3302                 SetValue(BlendEquationProperty, value);
3303             }
3304         }
3305
3306         private BlendEquationType InternalBlendEquation
3307         {
3308             get
3309             {
3310                 return (BlendEquationType)Object.InternalGetPropertyInt(SwigCPtr, View.Property.BlendEquation);
3311             }
3312             set
3313             {
3314                 Object.InternalSetPropertyInt(SwigCPtr, View.Property.BlendEquation, (int)value);
3315                 NotifyPropertyChanged();
3316             }
3317         }
3318
3319         /// <summary>
3320         /// If the value is true, the View will change its style as the theme changes.
3321         /// The default value is false in normal case but it can be true when the NUIApplication is created with <see cref="NUIApplication.ThemeOptions.ThemeChangeSensitive"/>.
3322         /// </summary>
3323         /// <since_tizen> 9 </since_tizen>
3324         public bool ThemeChangeSensitive
3325         {
3326             get => (bool)GetValue(ThemeChangeSensitiveProperty);
3327             set => SetValue(ThemeChangeSensitiveProperty, value);
3328         }
3329
3330         /// <summary>
3331         /// Create Style, it is abstract function and must be override.
3332         /// </summary>
3333         [EditorBrowsable(EditorBrowsableState.Never)]
3334         protected virtual ViewStyle CreateViewStyle()
3335         {
3336             return new ViewStyle();
3337         }
3338
3339         /// <summary>
3340         /// Called after the View's ControlStates changed.
3341         /// </summary>
3342         /// <param name="controlStateChangedInfo">The information including state changed variables.</param>
3343         [EditorBrowsable(EditorBrowsableState.Never)]
3344         protected virtual void OnControlStateChanged(ControlStateChangedEventArgs controlStateChangedInfo)
3345         {
3346         }
3347
3348         /// <summary>
3349         /// </summary>
3350         [EditorBrowsable(EditorBrowsableState.Never)]
3351         protected virtual void OnThemeChanged(object sender, ThemeChangedEventArgs e)
3352         {
3353             isThemeChanged = true;
3354             if (string.IsNullOrEmpty(styleName)) ApplyStyle(ThemeManager.GetUpdateStyleWithoutClone(GetType()));
3355             else ApplyStyle(ThemeManager.GetUpdateStyleWithoutClone(styleName));
3356             isThemeChanged = false;
3357         }
3358
3359         /// <summary>
3360         /// Apply style instance to the view.
3361         /// Basically it sets the bindable property to the value of the bindable property with same name in the style.
3362         /// </summary>
3363         /// <since_tizen> 9 </since_tizen>
3364         public virtual void ApplyStyle(ViewStyle viewStyle)
3365         {
3366             if (viewStyle == null || themeData?.viewStyle == viewStyle) return;
3367
3368             if (themeData == null) themeData = new ThemeData();
3369
3370             themeData.viewStyle = viewStyle;
3371
3372             if (viewStyle.DirtyProperties == null || viewStyle.DirtyProperties.Count == 0)
3373             {
3374                 // Nothing to apply
3375                 return;
3376             }
3377
3378             BindableProperty.GetBindablePropertysOfType(GetType(), out var bindablePropertyOfView);
3379
3380             if (bindablePropertyOfView == null)
3381             {
3382                 return;
3383             }
3384
3385             var dirtyStyleProperties = new BindableProperty[viewStyle.DirtyProperties.Count];
3386             viewStyle.DirtyProperties.CopyTo(dirtyStyleProperties);
3387
3388             foreach (var sourceProperty in dirtyStyleProperties)
3389             {
3390                 var sourceValue = viewStyle.GetValue(sourceProperty);
3391
3392                 if (sourceValue == null)
3393                 {
3394                     continue;
3395                 }
3396
3397                 bindablePropertyOfView.TryGetValue(sourceProperty.PropertyName, out var destinationProperty);
3398
3399                 // Do not set value again when theme is changed and the value has been set already.
3400                 if (isThemeChanged && ChangedPropertiesSetExcludingStyle.Contains(destinationProperty))
3401                 {
3402                     continue;
3403                 }
3404
3405                 if (destinationProperty != null)
3406                 {
3407                     InternalSetValue(destinationProperty, sourceValue);
3408                 }
3409             }
3410         }
3411
3412         /// <summary>
3413         /// Get whether the View is culled or not.
3414         /// True means that the View is out of the view frustum.
3415         /// </summary>
3416         /// <remarks>
3417         /// Hidden-API (Inhouse-API).
3418         /// </remarks>
3419         [EditorBrowsable(EditorBrowsableState.Never)]
3420         public bool Culled
3421         {
3422             get
3423             {
3424                 return Object.InternalGetPropertyBool(SwigCPtr, View.Property.Culled);
3425             }
3426         }
3427
3428         /// <summary>
3429         /// Set or Get TransitionOptions for the page transition.
3430         /// This property is used to define how this view will be transitioned during Page switching.
3431         /// </summary>
3432         /// <since_tizen> 9 </since_tizen>
3433         public TransitionOptions TransitionOptions
3434         {
3435             get
3436             {
3437                 return GetValue(TransitionOptionsProperty) as TransitionOptions;
3438             }
3439             set
3440             {
3441                 SetValue(TransitionOptionsProperty, value);
3442                 NotifyPropertyChanged();
3443             }
3444         }
3445
3446         private TransitionOptions InternalTransitionOptions
3447         {
3448             set
3449             {
3450                 transitionOptions = value;
3451             }
3452             get
3453             {
3454                 return transitionOptions;
3455             }
3456         }
3457
3458         /// <summary>
3459         /// Gets or sets the status of whether the view should emit key event signals.
3460         /// If a View's DispatchKeyEvents is set to false, then itself and parents will not receive key event signals.
3461         /// </summary>
3462         [EditorBrowsable(EditorBrowsableState.Never)]
3463         public bool DispatchKeyEvents
3464         {
3465             get
3466             {
3467                 return (bool)GetValue(DispatchKeyEventsProperty);
3468             }
3469             set
3470             {
3471                 SetValue(DispatchKeyEventsProperty, value);
3472                 NotifyPropertyChanged();
3473             }
3474         }
3475
3476         /// <summary>
3477         /// Gets or sets the status of whether touch events can be dispatched.
3478         /// If a View's DispatchTouchEvents is set to false, then it's can not will receive touch and parents will not receive a touch event signal either.
3479         /// This works without adding a TouchEvent callback in the View.
3480         /// <note>
3481         /// If the <see cref="Tizen.NUI.BaseComponents.View.Sensitive"/> is a property that determines whether or not to be hittable, then this property prevents the propagation of the hit touch event.
3482         /// </note>
3483         /// </summary>
3484         [EditorBrowsable(EditorBrowsableState.Never)]
3485         public bool DispatchTouchEvents
3486         {
3487             get
3488             {
3489                 return dispatchTouchEvents;
3490             }
3491             set
3492             {
3493                 if (dispatchTouchEvents != value)
3494                 {
3495                     dispatchTouchEvents = value;
3496                     if (dispatchTouchEvents == false)
3497                     {
3498                         TouchEvent += OnDispatchTouchEvent;
3499                     }
3500                     else
3501                     {
3502                         TouchEvent -= OnDispatchTouchEvent;
3503                     }
3504                 }
3505             }
3506         }
3507
3508         private bool OnDispatchTouchEvent(object source, View.TouchEventArgs e)
3509         {
3510             return true;
3511         }
3512
3513         /// <summary>
3514         /// Gets or sets the status of whether touch events can be dispatched to the parent.
3515         /// If a View's DispatchParentTouchEvents is set to false, then parents will not receive a touch event signal either.
3516         /// This works without adding a TouchEvent callback in the View.
3517         /// <note>
3518         /// If the <see cref="Tizen.NUI.BaseComponents.View.Sensitive"/> is a property that determines whether or not to be hittable, then this property prevents the propagation of the hit touch event.
3519         /// </note>
3520         /// </summary>
3521         [EditorBrowsable(EditorBrowsableState.Never)]
3522         public bool DispatchParentTouchEvents
3523         {
3524             get
3525             {
3526                 return dispatchParentTouchEvents;
3527             }
3528             set
3529             {
3530                 if (dispatchParentTouchEvents != value)
3531                 {
3532                     dispatchParentTouchEvents = value;
3533                     if (dispatchParentTouchEvents == false)
3534                     {
3535                         TouchEvent += OnDispatchParentTouchEvent;
3536                     }
3537                     else
3538                     {
3539                         TouchEvent -= OnDispatchParentTouchEvent;
3540                     }
3541                 }
3542             }
3543         }
3544
3545         private bool OnDispatchParentTouchEvent(object source, View.TouchEventArgs e)
3546         {
3547             return true;
3548         }
3549
3550         /// <summary>
3551         /// Gets or sets the status of whether hover events can be dispatched.
3552         /// If a View's DispatchHoverEvents is set to false, then it's can not will receive hover event and parents will not receive a hover event signal either.
3553         /// This works without adding a HoverEvent callback in the View.
3554         /// <note>
3555         /// If the <see cref="Tizen.NUI.BaseComponents.View.Sensitive"/> is a property that determines whether or not to be hittable, then this property prevents the propagation of the hit hover event.
3556         /// </note>
3557         /// </summary>
3558         [EditorBrowsable(EditorBrowsableState.Never)]
3559         public bool DispatchHoverEvents
3560         {
3561             get
3562             {
3563                 return dispatchHoverEvents;
3564             }
3565             set
3566             {
3567                 if (dispatchHoverEvents != value)
3568                 {
3569                     dispatchHoverEvents = value;
3570                     if (dispatchHoverEvents == false)
3571                     {
3572                         HoverEvent += OnDispatchHoverEvent;
3573                     }
3574                     else
3575                     {
3576                         HoverEvent -= OnDispatchHoverEvent;
3577                     }
3578                 }
3579             }
3580         }
3581
3582         private bool OnDispatchHoverEvent(object source, View.HoverEventArgs e)
3583         {
3584             return true;
3585         }
3586
3587         /// <summary>
3588         /// Gets or sets the status of whether hover events can be dispatched to the parent.
3589         /// If a View's DispatchParentHoverEvents is set to false, then parents will not receive a hover event signal either.
3590         /// This works without adding a HoverEvent callback in the View.
3591         /// <note>
3592         /// If the <see cref="Tizen.NUI.BaseComponents.View.Sensitive"/> is a property that determines whether or not to be hittable, then this property prevents the propagation of the hit hover event.
3593         /// </note>
3594         /// </summary>
3595         [EditorBrowsable(EditorBrowsableState.Never)]
3596         public bool DispatchParentHoverEvents
3597         {
3598             get
3599             {
3600                 return dispatchParentHoverEvents;
3601             }
3602             set
3603             {
3604                 if (dispatchParentHoverEvents != value)
3605                 {
3606                     dispatchParentHoverEvents = value;
3607                     if (dispatchParentHoverEvents == false)
3608                     {
3609                         HoverEvent += OnDispatchParentHoverEvent;
3610                     }
3611                     else
3612                     {
3613                         HoverEvent -= OnDispatchParentHoverEvent;
3614                     }
3615                 }
3616             }
3617         }
3618
3619         private bool OnDispatchParentHoverEvent(object source, View.HoverEventArgs e)
3620         {
3621             return true;
3622         }
3623
3624         /// <summary>
3625         /// Gets or sets the status of whether the view should emit Gesture event signals.
3626         /// If a View's DispatchGestureEvents is set to false, then itself and parents will not receive all gesture event signals.
3627         /// The itself and parents does not receive tap, pinch, pan, rotation, or longpress gestures.
3628         /// </summary>
3629         [EditorBrowsable(EditorBrowsableState.Never)]
3630         public bool DispatchGestureEvents
3631         {
3632             get
3633             {
3634                 return dispatchGestureEvents;
3635             }
3636             set
3637             {
3638                 if (dispatchGestureEvents != value)
3639                 {
3640                     dispatchGestureEvents = value;
3641                     ConfigGestureDetector(dispatchGestureEvents);
3642                 }
3643             }
3644         }
3645
3646         /// <summary>
3647         /// Gets or sets the status of whether the view should emit Gesture event signals.
3648         /// If a View's DispatchParentGestureEvents is set to false, then parents will not receive all gesture event signals.
3649         /// The parents does not receive tap, pinch, pan, rotation, or longpress gestures.
3650         /// </summary>
3651         [EditorBrowsable(EditorBrowsableState.Never)]
3652         public bool DispatchParentGestureEvents
3653         {
3654             get
3655             {
3656                 return dispatchParentGestureEvents;
3657             }
3658             set
3659             {
3660                 if (dispatchParentGestureEvents != value)
3661                 {
3662                     dispatchParentGestureEvents = value;
3663                     ConfigGestureDetector(dispatchParentGestureEvents);
3664                 }
3665             }
3666         }
3667
3668         private void ConfigGestureDetector(bool dispatch)
3669         {
3670             if (panGestureDetector == null) panGestureDetector = new PanGestureDetector();
3671             if (longGestureDetector == null) longGestureDetector = new LongPressGestureDetector();
3672             if (pinchGestureDetector == null) pinchGestureDetector = new PinchGestureDetector();
3673             if (tapGestureDetector == null) tapGestureDetector = new TapGestureDetector();
3674             if (rotationGestureDetector == null) rotationGestureDetector = new RotationGestureDetector();
3675
3676             if (dispatch == true)
3677             {
3678                 configGestureCount = configGestureCount > 0 ? configGestureCount - 1 : 0;
3679                 if (configGestureCount == 0)
3680                 {
3681                     panGestureDetector.Detach(this);
3682                     longGestureDetector.Detach(this);
3683                     pinchGestureDetector.Detach(this);
3684                     tapGestureDetector.Detach(this);
3685                     rotationGestureDetector.Detach(this);
3686
3687                     panGestureDetector.Detected -= OnGestureDetected;
3688                     longGestureDetector.Detected -= OnGestureDetected;
3689                     pinchGestureDetector.Detected -= OnGestureDetected;
3690                     tapGestureDetector.Detected -= OnGestureDetected;
3691                     rotationGestureDetector.Detected -= OnGestureDetected;
3692                 }
3693             }
3694             else
3695             {
3696                 if (configGestureCount == 0)
3697                 {
3698                     panGestureDetector.Attach(this);
3699                     longGestureDetector.Attach(this);
3700                     pinchGestureDetector.Attach(this);
3701                     tapGestureDetector.Attach(this);
3702                     rotationGestureDetector.Attach(this);
3703
3704                     panGestureDetector.Detected += OnGestureDetected;
3705                     longGestureDetector.Detected += OnGestureDetected;
3706                     pinchGestureDetector.Detected += OnGestureDetected;
3707                     tapGestureDetector.Detected += OnGestureDetected;
3708                     rotationGestureDetector.Detected += OnGestureDetected;
3709                 }
3710                 configGestureCount++;
3711             }
3712         }
3713
3714         private void OnGestureDetected(object source, EventArgs e)
3715         {
3716             // Does notting. This is to consume the gesture.
3717         }
3718
3719         /// <summary>
3720         /// Called when the view is hit through TouchEvent or GestureEvent.
3721         /// If it returns true, it means that it was hit, and the touch/gesture event is called from the view.
3722         /// If it returns false, it means that it will not be hit, and the hit-test continues to the next view.
3723         /// User can override whether hit or not in HitTest.
3724         /// You can get the coordinates relative to tthe top-left of the hit view by touch.GetLocalPosition(0).
3725         /// or you can get the coordinates relative to the top-left of the screen by touch.GetScreenPosition(0).
3726         /// </summary>
3727         // <param name="touch"><see cref="Tizen.NUI.Touch"/>The touch data</param>
3728         [EditorBrowsable(EditorBrowsableState.Never)]
3729         protected virtual bool HitTest(Touch touch)
3730         {
3731             return true;
3732         }
3733
3734         /// <summary>
3735         /// Retrieve the View's current Color.
3736         /// </summary>
3737         /// <remarks>
3738         /// The <see cref="Size"/>, <see cref="Position"/>, <see cref="Color"/>, and <see cref="Scale"/> properties are set in the main thread.
3739         /// Therefore, it is not updated in real time when the value is changed in the render thread (for example, the value is changed during animation).
3740         /// However, <see cref="CurrentSize"/>, <see cref="CurrentPosition"/>, <see cref="CurrentColor"/>, and <see cref="CurrentScale"/> properties are updated in real time,
3741         /// and users can get the current actual values through them.
3742         /// </remarks>
3743         [EditorBrowsable(EditorBrowsableState.Never)]
3744         public Color CurrentColor => GetCurrentColor();
3745
3746         /// <summary>
3747         /// Retrieve the current scale factor applied to the View.
3748         /// </summary>
3749         /// <remarks>
3750         /// The <see cref="Size"/>, <see cref="Position"/>, <see cref="Color"/>, and <see cref="Scale"/> properties are set in the main thread.
3751         /// Therefore, it is not updated in real time when the value is changed in the render thread (for example, the value is changed during animation).
3752         /// However, <see cref="CurrentSize"/>, <see cref="CurrentPosition"/>, <see cref="CurrentColor"/>, and <see cref="CurrentScale"/> properties are updated in real time,
3753         /// and users can get the current actual values through them.
3754         /// </remarks>
3755         [EditorBrowsable(EditorBrowsableState.Never)]
3756         public Vector3 CurrentScale => GetCurrentScale();
3757
3758     }
3759 }