f3f4a18fa82d7291b222e65e9f8e4a5f44af59a2
[platform/core/csapi/tizenfx.git] / src / Tizen.NUI / src / public / BaseComponents / View.cs
1 /*
2  * Copyright(c) 2021 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
35         internal BackgroundExtraData backgroundExtraData;
36
37         private bool layoutSet = false;
38         private LayoutItem layout; // Exclusive layout assigned to this View.
39
40         // List of transitions paired with the condition that uses the transition.
41         private Dictionary<TransitionCondition, TransitionList> layoutTransitions;
42         private int widthPolicy = LayoutParamPolicies.WrapContent; // Layout width policy
43         private int heightPolicy = LayoutParamPolicies.WrapContent; // Layout height policy
44         private float weight = 0.0f; // Weighting of child View in a Layout
45         private bool backgroundImageSynchronousLoading = false;
46         private bool excludeLayouting = false;
47         private LayoutTransition layoutTransition;
48         private TransitionOptions transitionOptions = null;
49         private ThemeData themeData;
50
51         // List of constraints
52         private Constraint widthConstraint = null;
53         private Constraint heightConstraint = null;
54
55         private Size2D internalSize2D = null;
56
57         static View()
58         {
59             RegisterPropertyGroup(PositionProperty, positionPropertyGroup);
60             RegisterPropertyGroup(Position2DProperty, positionPropertyGroup);
61             RegisterPropertyGroup(PositionXProperty, positionPropertyGroup);
62             RegisterPropertyGroup(PositionYProperty, positionPropertyGroup);
63
64             RegisterPropertyGroup(SizeProperty, sizePropertyGroup);
65             RegisterPropertyGroup(Size2DProperty, sizePropertyGroup);
66             RegisterPropertyGroup(SizeWidthProperty, sizePropertyGroup);
67             RegisterPropertyGroup(SizeHeightProperty, sizePropertyGroup);
68
69             RegisterPropertyGroup(ScaleProperty, scalePropertyGroup);
70             RegisterPropertyGroup(ScaleXProperty, scalePropertyGroup);
71             RegisterPropertyGroup(ScaleYProperty, scalePropertyGroup);
72             RegisterPropertyGroup(ScaleZProperty, scalePropertyGroup);
73         }
74
75         /// <summary>
76         /// Creates a new instance of a view.
77         /// </summary>
78         /// <since_tizen> 3 </since_tizen>
79         public View() : this(Interop.View.New(), true)
80         {
81             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
82         }
83
84         /// This will be public opened in next release of tizen after ACR done. Before ACR, it is used as HiddenAPI (InhouseAPI).
85         [EditorBrowsable(EditorBrowsableState.Never)]
86         public View(ViewStyle viewStyle) : this(Interop.View.New(), true, viewStyle)
87         {
88         }
89
90         /// <summary>
91         /// Create a new instance of a View with setting the status of shown or hidden.
92         /// </summary>
93         /// <param name="shown">false : Not displayed (hidden), true : displayed (shown)</param>
94         /// This will be public opened in next release of tizen after ACR done. Before ACR, it is used as HiddenAPI (InhouseAPI).
95         [EditorBrowsable(EditorBrowsableState.Never)]
96         public View(bool shown) : this(Interop.View.New(), true)
97         {
98             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
99             SetVisible(shown);
100         }
101
102         internal View(View uiControl, bool shown = true) : this(Interop.View.NewView(View.getCPtr(uiControl)), true)
103         {
104             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
105             if (!shown)
106             {
107                 SetVisible(false);
108             }
109
110             backgroundExtraData = uiControl.backgroundExtraData == null ? null : new BackgroundExtraData(uiControl.backgroundExtraData);
111         }
112
113         internal View(global::System.IntPtr cPtr, bool cMemoryOwn, ViewStyle viewStyle, bool shown = true) : this(cPtr, cMemoryOwn, shown)
114         {
115             InitializeStyle(viewStyle);
116         }
117
118         internal View(global::System.IntPtr cPtr, bool cMemoryOwn, bool shown = true) : base(cPtr, cMemoryOwn)
119         {
120             if (HasBody())
121             {
122                 PositionUsesPivotPoint = false;
123             }
124
125             onWindowSendEventCallback = SendViewAddedEventToWindow;
126             using ViewSignal signal = new ViewSignal(Interop.ActorSignal.ActorOnSceneSignal(SwigCPtr), false);
127             signal?.Connect(onWindowSendEventCallback);
128
129             if (!shown)
130             {
131                 SetVisible(false);
132             }
133         }
134
135         internal View(ViewImpl implementation, bool shown = true) : this(Interop.View.NewViewInternal(ViewImpl.getCPtr(implementation)), true)
136         {
137             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
138
139             if (!shown)
140             {
141                 SetVisible(false);
142             }
143         }
144
145         /// <summary>
146         /// The event that is triggered when the View's ControlState is changed.
147         /// </summary>
148         [EditorBrowsable(EditorBrowsableState.Never)]
149         public event EventHandler<ControlStateChangedEventArgs> ControlStateChangedEvent;
150
151         internal event EventHandler<ControlStateChangedEventArgs> ControlStateChangeEventInternal;
152
153
154         /// <summary>
155         /// Flag to indicate if layout set explicitly via API call or View was automatically given a Layout.
156         /// </summary>
157         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
158         [EditorBrowsable(EditorBrowsableState.Never)]
159         public bool LayoutSet
160         {
161             get
162             {
163                 return layoutSet;
164             }
165         }
166
167         /// <summary>
168         /// Flag to allow Layouting to be disabled for Views.
169         /// Once a View has a Layout set then any children added to Views from then on will receive
170         /// automatic Layouts.
171         /// </summary>
172         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
173         [EditorBrowsable(EditorBrowsableState.Never)]
174         public static bool LayoutingDisabled { get; set; } = true;
175
176         /// <summary>
177         /// Deprecate. Please do not use this.
178         /// The style instance applied to this view.
179         /// Note that please do not modify the ViewStyle.
180         /// Modifying ViewStyle will affect other views with same ViewStyle.
181         /// </summary>
182         [EditorBrowsable(EditorBrowsableState.Never)]
183         protected ViewStyle ViewStyle
184         {
185             get
186             {
187                 if (themeData == null) themeData = new ThemeData();
188
189                 if (themeData.viewStyle == null)
190                 {
191                     ApplyStyle(CreateViewStyle());
192                 }
193                 return themeData.viewStyle;
194             }
195         }
196
197         /// <summary>
198         /// Get/Set the control state.
199         /// Note that the ControlState only available for the classes derived from Control.
200         /// If the classes that are not derived from Control (such as View, ImageView and TextLabel) want to use this system,
201         /// please set <see cref="EnableControlState"/> to true.
202         /// </summary>
203         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
204         [EditorBrowsable(EditorBrowsableState.Never)]
205         public ControlState ControlState
206         {
207             get
208             {
209                 return themeData == null ? ControlState.Normal : themeData.controlStates;
210             }
211             protected set
212             {
213                 if (ControlState == value)
214                 {
215                     return;
216                 }
217
218                 var prevState = ControlState;
219
220                 if (themeData == null) themeData = new ThemeData();
221                 themeData.controlStates = value;
222
223                 var changeInfo = new ControlStateChangedEventArgs(prevState, value);
224
225                 ControlStateChangeEventInternal?.Invoke(this, changeInfo);
226
227                 if (themeData.ControlStatePropagation)
228                 {
229                     foreach (View child in Children)
230                     {
231                         child.ControlState = value;
232                     }
233                 }
234
235                 OnControlStateChanged(changeInfo);
236
237                 ControlStateChangedEvent?.Invoke(this, changeInfo);
238             }
239         }
240
241         /// <summary>
242         /// Gets / Sets the status of whether the view is excluded from its parent's layouting or not.
243         /// </summary>
244         /// This will be public opened later after ACR done. Before ACR, need to be hidden as inhouse API.
245         [EditorBrowsable(EditorBrowsableState.Never)]
246         public bool ExcludeLayouting
247         {
248             get
249             {
250                 return (bool)GetValue(ExcludeLayoutingProperty);
251             }
252             set
253             {
254                 SetValue(ExcludeLayoutingProperty, value);
255                 NotifyPropertyChanged();
256             }
257         }
258
259         private bool InternalExcludeLayouting
260         {
261             get
262             {
263                 return excludeLayouting;
264             }
265             set
266             {
267                 excludeLayouting = value;
268                 if (Layout != null && Layout.SetPositionByLayout == value)
269                 {
270                     Layout.SetPositionByLayout = !value;
271                     Layout.RequestLayout();
272                 }
273             }
274         }
275
276         /// This will be public opened in tizen_5.0 after ACR done. Before ACR, need to be hidden as inhouse API.
277         [EditorBrowsable(EditorBrowsableState.Never)]
278         public bool IsResourcesCreated
279         {
280             get
281             {
282                 return Application.Current.IsResourcesCreated;
283             }
284         }
285
286         /// This will be public opened in tizen_5.0 after ACR done. Before ACR, need to be hidden as inhouse API.
287         [EditorBrowsable(EditorBrowsableState.Never)]
288         public ResourceDictionary XamlResources
289         {
290             get
291             {
292                 return Application.Current.XamlResources;
293             }
294             set
295             {
296                 Application.Current.XamlResources = value;
297             }
298         }
299
300         /// <summary>
301         /// The StyleName, type string.
302         /// The value indicates DALi style name defined in json theme file.
303         /// </summary>
304         /// <since_tizen> 3 </since_tizen>
305         public string StyleName
306         {
307             get
308             {
309                 return (string)GetValue(StyleNameProperty);
310             }
311             set
312             {
313                 SetValue(StyleNameProperty, value);
314                 NotifyPropertyChanged();
315             }
316         }
317
318         /// <summary>
319         /// The KeyInputFocus, type bool.
320         /// </summary>
321         [EditorBrowsable(EditorBrowsableState.Never)]
322         public bool KeyInputFocus
323         {
324             get
325             {
326                 return (bool)GetValue(KeyInputFocusProperty);
327             }
328             set
329             {
330                 SetValue(KeyInputFocusProperty, value);
331                 NotifyPropertyChanged();
332             }
333         }
334
335         /// <summary>
336         /// The mutually exclusive with "backgroundImage" and "background" type Vector4.
337         /// </summary>
338         /// <remarks>
339         /// <para>
340         /// The property cascade chaining set is possible. For example, this (view.BackgroundColor.X = 0.1f;) is possible.
341         /// </para>
342         /// <para>
343         /// Animatable - This property can be animated using <c>Animation</c> class.
344         /// <code>
345         /// animation.AnimateTo(view, "BackgroundColor", new Color(r, g, b, a));
346         /// </code>
347         /// </para>
348         /// </remarks>
349         /// <since_tizen> 3 </since_tizen>
350         public Color BackgroundColor
351         {
352             get
353             {
354                 Color temp = (Color)GetValue(BackgroundColorProperty);
355                 return new Color(OnBackgroundColorChanged, temp.R, temp.G, temp.B, temp.A);
356             }
357             set
358             {
359                 SetValue(BackgroundColorProperty, value);
360                 NotifyPropertyChanged();
361             }
362         }
363
364         /// <summary>
365         /// The mutually exclusive with "backgroundColor" and "background" type Map.
366         /// </summary>
367         /// <since_tizen> 3 </since_tizen>
368         public string BackgroundImage
369         {
370             get
371             {
372                 return (string)GetValue(BackgroundImageProperty);
373             }
374             set
375             {
376                 SetValue(BackgroundImageProperty, value);
377                 NotifyPropertyChanged();
378             }
379         }
380
381         /// <summary>
382         /// Get or set the border of background image.
383         /// </summary>
384         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
385         [EditorBrowsable(EditorBrowsableState.Never)]
386         public Rectangle BackgroundImageBorder
387         {
388             get
389             {
390                 return (Rectangle)GetValue(BackgroundImageBorderProperty);
391             }
392             set
393             {
394                 SetValue(BackgroundImageBorderProperty, value);
395                 NotifyPropertyChanged();
396             }
397         }
398
399         /// <summary>
400         /// The background of view.
401         /// </summary>
402         /// <since_tizen> 3 </since_tizen>
403         public Tizen.NUI.PropertyMap Background
404         {
405             get
406             {
407                 return (PropertyMap)GetValue(BackgroundProperty);
408             }
409             set
410             {
411                 SetValue(BackgroundProperty, value);
412                 NotifyPropertyChanged();
413             }
414         }
415
416         /// <summary>
417         /// Describes a shadow as an image for a View.
418         /// It is null by default.
419         /// </summary>
420         /// <remarks>
421         /// Getter returns copied instance of current shadow.
422         /// </remarks>
423         /// <remarks>
424         /// The mutually exclusive with "BoxShadow".
425         /// </remarks>
426         /// <remarks>
427         /// <para>
428         /// Animatable - This property can be animated using <c>Animation</c> class.
429         /// To animate this property, specify a sub-property with separator ".", for example, "ImageShadow.Offset".
430         /// <code>
431         /// animation.AnimateTo(view, "ImageShadow.Offset", new Vector2(10, 10));
432         /// </code>
433         /// Animatable sub-property : Offset.
434         /// </para>
435         /// </remarks>
436         [EditorBrowsable(EditorBrowsableState.Never)]
437         public ImageShadow ImageShadow
438         {
439             get
440             {
441                 return (ImageShadow)GetValue(ImageShadowProperty);
442             }
443             set
444             {
445                 SetValue(ImageShadowProperty, value);
446                 NotifyPropertyChanged();
447             }
448         }
449
450         /// <summary>
451         /// Describes a box shaped shadow drawing for a View.
452         /// It is null by default.
453         /// </summary>
454         /// <remarks>
455         /// The mutually exclusive with "ImageShadow".
456         /// </remarks>
457         /// <remarks>
458         /// <para>
459         /// Animatable - This property can be animated using <c>Animation</c> class.
460         /// To animate this property, specify a sub-property with separator ".", for example, "BoxShadow.BlurRadius".
461         /// <code>
462         /// animation.AnimateTo(view, "BoxShadow.BlurRadius", 10.0f);
463         /// </code>
464         /// Animatable sub-property : Offset, Color, BlurRadius.
465         /// </para>
466         /// </remarks>
467         /// <since_tizen> 9 </since_tizen>
468         public Shadow BoxShadow
469         {
470             get
471             {
472                 return (Shadow)GetValue(BoxShadowProperty);
473             }
474             set
475             {
476                 SetValue(BoxShadowProperty, value);
477                 NotifyPropertyChanged();
478             }
479         }
480
481         /// <summary>
482         /// The radius for the rounded corners of the View.
483         /// This will rounds background and shadow edges.
484         /// 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).
485         /// Each radius will clamp internally to the half of smaller of the view's width or height.
486         /// Note that, an image background (or shadow) may not have rounded corners if it uses a Border property.
487         /// </summary>
488         /// <remarks>
489         /// <para>
490         /// Animatable - This property can be animated using <c>Animation</c> class.
491         /// <code>
492         /// animation.AnimateTo(view, "CornerRadius", new Vector4(10, 10, 10, 10));
493         /// </code>
494         /// </para>
495         /// </remarks>
496         /// <since_tizen> 9 </since_tizen>
497         public Vector4 CornerRadius
498         {
499             get
500             {
501                 return (Vector4)GetValue(CornerRadiusProperty);
502             }
503             set
504             {
505                 SetValue(CornerRadiusProperty, value);
506                 NotifyPropertyChanged();
507             }
508         }
509
510         /// <summary>
511         /// Whether the CornerRadius property value is relative (percentage [0.0f to 0.5f] of the view size) or absolute (in world units).
512         /// It is absolute by default.
513         /// When the policy is relative, the corner radius is relative to the smaller of the view's width and height.
514         /// </summary>
515         /// <since_tizen> 9 </since_tizen>
516         public VisualTransformPolicyType CornerRadiusPolicy
517         {
518             get => (VisualTransformPolicyType)GetValue(CornerRadiusPolicyProperty);
519             set => SetValue(CornerRadiusPolicyProperty, value);
520         }
521
522         /// <summary>
523         /// The width for the borderline of the View.
524         /// </summary>
525         /// <remarks>
526         /// <para>
527         /// Animatable - This property can be animated using <c>Animation</c> class.
528         /// <code>
529         /// animation.AnimateTo(view, "BorderlineWidth", 100.0f);
530         /// </code>
531         /// </para>
532         /// Note that, an image background may not have borderline if it uses the Border property.
533         /// </remarks>
534         /// <since_tizen> 9 </since_tizen>
535         public float BorderlineWidth
536         {
537             get
538             {
539                 return (float)GetValue(BorderlineWidthProperty);
540             }
541             set
542             {
543                 SetValue(BorderlineWidthProperty, value);
544                 NotifyPropertyChanged();
545             }
546         }
547
548         /// <summary>
549         /// The color for the borderline of the View.
550         /// It is Color.Black by default.
551         /// </summary>
552         /// <remarks>
553         /// <para>
554         /// Animatable - This property can be animated using <c>Animation</c> class.
555         /// <code>
556         /// animation.AnimateTo(view, "BorderlineColor", new Color(r, g, b, a));
557         /// </code>
558         /// </para>
559         /// </remarks>
560         /// <since_tizen> 9 </since_tizen>
561         public Color BorderlineColor
562         {
563             get
564             {
565                 return (Color)GetValue(BorderlineColorProperty);
566             }
567             set
568             {
569                 SetValue(BorderlineColorProperty, value);
570                 NotifyPropertyChanged();
571             }
572         }
573
574         /// <summary>
575         /// The Relative offset for the borderline of the View.
576         /// Recommended range : [-1.0f to 1.0f].
577         /// If -1.0f, draw borderline inside of the View.
578         /// If 1.0f, draw borderline outside of the View.
579         /// If 0.0f, draw borderline half inside and half outside.
580         /// It is 0.0f by default.
581         /// </summary>
582         /// <remarks>
583         /// <para>
584         /// Animatable - This property can be animated using <c>Animation</c> class.
585         /// <code>
586         /// animation.AnimateTo(view, "BorderlineOffset", -1.0f);
587         /// </code>
588         /// </para>
589         /// </remarks>
590         /// <since_tizen> 9 </since_tizen>
591         public float BorderlineOffset
592         {
593             get
594             {
595                 return (float)GetValue(BorderlineOffsetProperty);
596             }
597             set
598             {
599                 SetValue(BorderlineOffsetProperty, value);
600                 NotifyPropertyChanged();
601             }
602         }
603
604         /// <summary>
605         /// The current state of the view.
606         /// </summary>
607         /// <since_tizen> 3 </since_tizen>
608         public States State
609         {
610             get
611             {
612                 return (States)GetValue(StateProperty);
613             }
614             set
615             {
616                 SetValue(StateProperty, value);
617                 NotifyPropertyChanged();
618             }
619         }
620
621         /// <summary>
622         /// The current sub state of the view.
623         /// </summary>
624         /// <since_tizen> 3 </since_tizen>
625         public States SubState
626         {
627             get
628             {
629                 return (States)GetValue(SubStateProperty);
630             }
631             set
632             {
633                 SetValue(SubStateProperty, value);
634                 NotifyPropertyChanged();
635             }
636         }
637
638         /// <summary>
639         /// Displays a tooltip
640         /// </summary>
641         /// <since_tizen> 3 </since_tizen>
642         public Tizen.NUI.PropertyMap Tooltip
643         {
644             get
645             {
646                 return (PropertyMap)GetValue(TooltipProperty);
647             }
648             set
649             {
650                 SetValue(TooltipProperty, value);
651                 NotifyPropertyChanged();
652             }
653         }
654
655         /// <summary>
656         /// Displays a tooltip as a text.
657         /// </summary>
658         /// <since_tizen> 3 </since_tizen>
659         public string TooltipText
660         {
661             get
662             {
663                 return GetValue(TooltipTextProperty) as string;
664             }
665             set
666             {
667                 SetValue(TooltipTextProperty, value);
668             }
669         }
670
671         private string InternalTooltipText
672         {
673             get
674             {
675                 using (var propertyValue = GetProperty(Property.TOOLTIP))
676                 {
677                     if (propertyValue != null && propertyValue.Get(out string retrivedValue))
678                     {
679                         return retrivedValue;
680                     }
681                     NUILog.Error($"[ERROR] Fail to get TooltipText! Return error MSG (error to get TooltipText)!");
682                     return "error to get TooltipText";
683                 }
684             }
685             set
686             {
687                 var temp = new Tizen.NUI.PropertyValue(value);
688                 SetProperty(View.Property.TOOLTIP, temp);
689                 temp.Dispose();
690                 NotifyPropertyChanged();
691             }
692         }
693
694         /// <summary>
695         /// The Child property of FlexContainer.<br />
696         /// The proportion of the free space in the container, the flex item will receive.<br />
697         /// If all items in the container set this property, their sizes will be proportional to the specified flex factor.<br />
698         /// </summary>
699         /// <since_tizen> 3 </since_tizen>
700         [Obsolete("Deprecated in API8, will be removed in API10.")]
701         public float Flex
702         {
703             get
704             {
705                 return (float)GetValue(FlexProperty);
706             }
707             set
708             {
709                 SetValue(FlexProperty, value);
710                 NotifyPropertyChanged();
711             }
712         }
713
714         /// <summary>
715         /// The Child property of FlexContainer.<br />
716         /// The alignment of the flex item along the cross axis, which, if set, overrides the default alignment for all items in the container.<br />
717         /// </summary>
718         /// <since_tizen> 3 </since_tizen>
719         [Obsolete("Deprecated in API8, will be removed in API10.")]
720         public int AlignSelf
721         {
722             get
723             {
724                 return (int)GetValue(AlignSelfProperty);
725             }
726             set
727             {
728                 SetValue(AlignSelfProperty, value);
729                 NotifyPropertyChanged();
730             }
731         }
732
733         /// <summary>
734         /// The Child property of FlexContainer.<br />
735         /// The space around the flex item.<br />
736         /// </summary>
737         /// <remarks>
738         /// The property cascade chaining set is possible. For example, this (view.FlexMargin.X = 0.1f;) is possible.
739         /// </remarks>
740         /// <since_tizen> 3 </since_tizen>
741         [Obsolete("Deprecated in API8, will be removed in API10.")]
742         public Vector4 FlexMargin
743         {
744             get
745             {
746                 Vector4 temp = (Vector4)GetValue(FlexMarginProperty);
747                 return new Vector4(OnFlexMarginChanged, temp.X, temp.Y, temp.Z, temp.W);
748             }
749             set
750             {
751                 SetValue(FlexMarginProperty, value);
752                 NotifyPropertyChanged();
753             }
754         }
755
756         /// <summary>
757         /// The top-left cell this child occupies, if not set, the first available cell is used.
758         /// </summary>
759         /// <remarks>
760         /// The property cascade chaining set is possible. For example, this (view.CellIndex.X = 0.1f;) is possible.
761         /// Also, this property is for <see cref="TableView"/> class. Please use the property for the child position of <see cref="TableView"/>.
762         /// </remarks>
763         /// <since_tizen> 3 </since_tizen>
764         public Vector2 CellIndex
765         {
766             get
767             {
768                 Vector2 temp = (Vector2)GetValue(CellIndexProperty);
769                 return new Vector2(OnCellIndexChanged, temp.X, temp.Y);
770             }
771             set
772             {
773                 SetValue(CellIndexProperty, value);
774                 NotifyPropertyChanged();
775             }
776         }
777
778         /// <summary>
779         /// The number of rows this child occupies, if not set, the default value is 1.
780         /// </summary>
781         /// <remarks>
782         /// This property is for <see cref="TableView"/> class. Please use the property for the child position of <see cref="TableView"/>.
783         /// </remarks>
784         /// <since_tizen> 3 </since_tizen>
785         public float RowSpan
786         {
787             get
788             {
789                 return (float)GetValue(RowSpanProperty);
790             }
791             set
792             {
793                 SetValue(RowSpanProperty, value);
794                 NotifyPropertyChanged();
795             }
796         }
797
798         /// <summary>
799         /// The number of columns this child occupies, if not set, the default value is 1.
800         /// </summary>
801         /// <remarks>
802         /// This property is for <see cref="TableView"/> class. Please use the property for the child position of <see cref="TableView"/>.
803         /// </remarks>
804         /// <since_tizen> 3 </since_tizen>
805         public float ColumnSpan
806         {
807             get
808             {
809                 return (float)GetValue(ColumnSpanProperty);
810             }
811             set
812             {
813                 SetValue(ColumnSpanProperty, value);
814                 NotifyPropertyChanged();
815             }
816         }
817
818         /// <summary>
819         /// The horizontal alignment of this child inside the cells, if not set, the default value is 'left'.
820         /// </summary>
821         /// <remarks>
822         /// This property is for <see cref="TableView"/> class. Please use the property for the child position of <see cref="TableView"/>.
823         /// </remarks>
824         /// <since_tizen> 3 </since_tizen>
825         public Tizen.NUI.HorizontalAlignmentType CellHorizontalAlignment
826         {
827             get
828             {
829                 return (HorizontalAlignmentType)GetValue(CellHorizontalAlignmentProperty);
830             }
831             set
832             {
833                 SetValue(CellHorizontalAlignmentProperty, value);
834                 NotifyPropertyChanged();
835             }
836         }
837
838         /// <summary>
839         /// The vertical alignment of this child inside the cells, if not set, the default value is 'top'.
840         /// </summary>
841         /// <remarks>
842         /// This property is for <see cref="TableView"/> class. Please use the property for the child position of <see cref="TableView"/>.
843         /// </remarks>
844         /// <since_tizen> 3 </since_tizen>
845         public Tizen.NUI.VerticalAlignmentType CellVerticalAlignment
846         {
847             get
848             {
849                 return (VerticalAlignmentType)GetValue(CellVerticalAlignmentProperty);
850             }
851             set
852             {
853                 SetValue(CellVerticalAlignmentProperty, value);
854                 NotifyPropertyChanged();
855             }
856         }
857
858         /// <summary>
859         /// The left focusable view.<br />
860         /// This will return null if not set.<br />
861         /// This will also return null if the specified left focusable view is not on a window.<br />
862         /// </summary>
863         /// <since_tizen> 3 </since_tizen>
864         public View LeftFocusableView
865         {
866             // As native side will be only storing IDs so need a logic to convert View to ID and vice-versa.
867             get
868             {
869                 return (View)GetValue(LeftFocusableViewProperty);
870             }
871             set
872             {
873                 SetValue(LeftFocusableViewProperty, value);
874                 NotifyPropertyChanged();
875             }
876         }
877
878         /// <summary>
879         /// The right focusable view.<br />
880         /// This will return null if not set.<br />
881         /// This will also return null if the specified right focusable view is not on a window.<br />
882         /// </summary>
883         /// <since_tizen> 3 </since_tizen>
884         public View RightFocusableView
885         {
886             // As native side will be only storing IDs so need a logic to convert View to ID and vice-versa.
887             get
888             {
889                 return (View)GetValue(RightFocusableViewProperty);
890             }
891             set
892             {
893                 SetValue(RightFocusableViewProperty, value);
894                 NotifyPropertyChanged();
895             }
896         }
897
898         /// <summary>
899         /// The up focusable view.<br />
900         /// This will return null if not set.<br />
901         /// This will also return null if the specified up focusable view is not on a window.<br />
902         /// </summary>
903         /// <since_tizen> 3 </since_tizen>
904         public View UpFocusableView
905         {
906             // As native side will be only storing IDs so need a logic to convert View to ID and vice-versa.
907             get
908             {
909                 return (View)GetValue(UpFocusableViewProperty);
910             }
911             set
912             {
913                 SetValue(UpFocusableViewProperty, value);
914                 NotifyPropertyChanged();
915             }
916         }
917
918         /// <summary>
919         /// The down focusable view.<br />
920         /// This will return null if not set.<br />
921         /// This will also return null if the specified down focusable view is not on a window.<br />
922         /// </summary>
923         /// <since_tizen> 3 </since_tizen>
924         public View DownFocusableView
925         {
926             // As native side will be only storing IDs so need a logic to convert View to ID and vice-versa.
927             get
928             {
929                 return (View)GetValue(DownFocusableViewProperty);
930             }
931             set
932             {
933                 SetValue(DownFocusableViewProperty, value);
934                 NotifyPropertyChanged();
935             }
936         }
937
938         /// <summary>
939         /// Whether the view should be focusable by keyboard navigation.
940         /// </summary>
941         /// <since_tizen> 3 </since_tizen>
942         public bool Focusable
943         {
944             set
945             {
946                 SetValue(FocusableProperty, value);
947                 NotifyPropertyChanged();
948             }
949             get
950             {
951                 return (bool)GetValue(FocusableProperty);
952             }
953         }
954
955         /// <summary>
956         /// 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.
957         /// Note : Default value is true.
958         /// </summary>
959         [EditorBrowsable(EditorBrowsableState.Never)]
960         public bool FocusableChildren
961         {
962             set
963             {
964                 SetValue(FocusableChildrenProperty, value);
965                 NotifyPropertyChanged();
966             }
967             get
968             {
969                 return (bool)GetValue(FocusableChildrenProperty);
970             }
971         }
972
973         /// <summary>
974         /// Whether this view can focus by touch.
975         /// If Focusable is false, FocusableInTouch is disabled.
976         /// If you want to have focus on touch, you need to set both Focusable and FocusableInTouch settings to true.
977         /// </summary>
978         [EditorBrowsable(EditorBrowsableState.Never)]
979         public bool FocusableInTouch
980         {
981             set
982             {
983                 SetValue(FocusableInTouchProperty, value);
984                 NotifyPropertyChanged();
985             }
986             get
987             {
988                 return (bool)GetValue(FocusableInTouchProperty);
989             }
990         }
991
992         /// <summary>
993         ///  Retrieves the position of the view.<br />
994         ///  The coordinates are relative to the view's parent.<br />
995         /// </summary>
996         /// <since_tizen> 3 </since_tizen>
997         public Position CurrentPosition
998         {
999             get
1000             {
1001                 return GetCurrentPosition();
1002             }
1003         }
1004
1005         /// <summary>
1006         /// Sets the size of a view for the width and the height.<br />
1007         /// Geometry can be scaled to fit within this area.<br />
1008         /// This does not interfere with the view's scale factor.<br />
1009         /// The views default depth is the minimum of width and height.<br />
1010         /// </summary>
1011         /// <remarks>
1012         /// This NUI object (Size2D) typed property can be configured by multiple cascade setting. <br />
1013         /// For example, this code ( view.Size2D.Width = 100; view.Size2D.Height = 100; ) is equivalent to this ( view.Size2D = new Size2D(100, 100); ). <br />
1014         /// </remarks>
1015         /// <since_tizen> 3 </since_tizen>
1016         public Size2D Size2D
1017         {
1018             get
1019             {
1020                 var temp = (Size2D)GetValue(Size2DProperty);
1021
1022                 if (this.Layout == null)
1023                 {
1024                     if (temp.Width < 0) { temp.Width = 0; }
1025                     if (temp.Height < 0) { temp.Height = 0; }
1026                 }
1027
1028                 return temp;
1029             }
1030             set
1031             {
1032                 SetValue(Size2DProperty, value);
1033
1034                 NotifyPropertyChanged();
1035             }
1036         }
1037
1038         /// <summary>
1039         ///  Retrieves the size of the view.<br />
1040         ///  The coordinates are relative to the view's parent.<br />
1041         /// </summary>
1042         /// <since_tizen> 3 </since_tizen>
1043         public Size2D CurrentSize
1044         {
1045             get
1046             {
1047                 return GetCurrentSize();
1048             }
1049         }
1050
1051         /// <summary>
1052         /// Retrieves and sets the view's opacity.<br />
1053         /// </summary>
1054         /// <remarks>
1055         /// <para>
1056         /// Animatable - This property can be animated using <c>Animation</c> class.
1057         /// <code>
1058         /// animation.AnimateTo(view, "Opacity", 0.5f);
1059         /// </code>
1060         /// </para>
1061         /// </remarks>
1062         /// <since_tizen> 3 </since_tizen>
1063         public float Opacity
1064         {
1065             get
1066             {
1067                 return (float)GetValue(OpacityProperty);
1068             }
1069             set
1070             {
1071                 SetValue(OpacityProperty, value);
1072                 NotifyPropertyChanged();
1073             }
1074         }
1075
1076         /// <summary>
1077         /// Sets the position of the view for X and Y.<br />
1078         /// By default, sets the position vector between the parent origin and the pivot point (default).<br />
1079         /// If the position inheritance is disabled, sets the world position.<br />
1080         /// </summary>
1081         /// <remarks>
1082         /// This NUI object (Position2D) typed property can be configured by multiple cascade setting. <br />
1083         /// For example, this code ( view.Position2D.X = 100; view.Position2D.Y = 100; ) is equivalent to this ( view.Position2D = new Position2D(100, 100); ). <br />
1084         /// </remarks>
1085         /// <since_tizen> 3 </since_tizen>
1086         public Position2D Position2D
1087         {
1088             get
1089             {
1090                 Position2D temp = (Position2D)GetValue(Position2DProperty);
1091                 return new Position2D(OnPosition2DChanged, temp.X, temp.Y);
1092             }
1093             set
1094             {
1095                 SetValue(Position2DProperty, value);
1096                 NotifyPropertyChanged();
1097             }
1098         }
1099
1100         /// <summary>
1101         /// Retrieves the screen position of the view.<br />
1102         /// </summary>
1103         /// <since_tizen> 3 </since_tizen>
1104         public Vector2 ScreenPosition
1105         {
1106             get
1107             {
1108                 Vector2 temp = new Vector2(0.0f, 0.0f);
1109                 var pValue = GetProperty(View.Property.ScreenPosition);
1110                 pValue.Get(temp);
1111                 pValue.Dispose();
1112                 return temp;
1113             }
1114         }
1115
1116         /// <summary>
1117         /// Determines whether the pivot point should be used to determine the position of the view.
1118         /// This is false by default.
1119         /// </summary>
1120         /// <remarks>If false, then the top-left of the view is used for the position.
1121         /// Setting this to false will allow scaling or rotation around the pivot point without affecting the view's position.
1122         /// </remarks>
1123         /// <since_tizen> 3 </since_tizen>
1124         public bool PositionUsesPivotPoint
1125         {
1126             get
1127             {
1128                 return (bool)GetValue(PositionUsesPivotPointProperty);
1129             }
1130             set
1131             {
1132                 SetValue(PositionUsesPivotPointProperty, value);
1133                 NotifyPropertyChanged();
1134             }
1135         }
1136
1137         /// <summary>
1138         /// Deprecated in API5; Will be removed in API8. Please use PositionUsesPivotPoint instead!
1139         /// </summary>
1140         /// <since_tizen> 3 </since_tizen>
1141         [Obsolete("Deprecated in API5; Will be removed in API8. Please use PositionUsesPivotPoint instead! " +
1142             "Like: " +
1143             "View view = new View(); " +
1144             "view.PivotPoint = PivotPoint.Center; " +
1145             "view.PositionUsesPivotPoint = true;" +
1146             " Deprecated in API5: Will be removed in API8")]
1147         [EditorBrowsable(EditorBrowsableState.Never)]
1148         public bool PositionUsesAnchorPoint
1149         {
1150             get
1151             {
1152                 return (bool)GetValue(PositionUsesAnchorPointProperty);
1153             }
1154             set
1155             {
1156                 SetValue(PositionUsesAnchorPointProperty, value);
1157             }
1158         }
1159
1160         private bool InternalPositionUsesAnchorPoint
1161         {
1162             get
1163             {
1164                 bool temp = false;
1165                 var pValue = GetProperty(View.Property.PositionUsesAnchorPoint);
1166                 pValue.Get(out temp);
1167                 pValue.Dispose();
1168                 return temp;
1169             }
1170             set
1171             {
1172                 var temp = new Tizen.NUI.PropertyValue(value);
1173                 SetProperty(View.Property.PositionUsesAnchorPoint, temp);
1174                 temp.Dispose();
1175                 NotifyPropertyChanged();
1176             }
1177         }
1178
1179         /// <summary>
1180         /// Queries whether the view is connected to the stage.<br />
1181         /// When a view is connected, it will be directly or indirectly parented to the root view.<br />
1182         /// </summary>
1183         /// <since_tizen> 3 </since_tizen>
1184         public bool IsOnWindow
1185         {
1186             get
1187             {
1188                 return OnWindow();
1189             }
1190         }
1191
1192         /// <summary>
1193         /// Gets the depth in the hierarchy for the view.
1194         /// </summary>
1195         /// <since_tizen> 3 </since_tizen>
1196         public int HierarchyDepth
1197         {
1198             get
1199             {
1200                 return GetHierarchyDepth();
1201             }
1202         }
1203
1204         /// <summary>
1205         /// Sets the sibling order of the view so the depth position can be defined within the same parent.
1206         /// </summary>
1207         /// <remarks>
1208         /// Note the initial value is 0. SiblingOrder should be bigger than 0 or equal to 0.
1209         /// Raise, Lower, RaiseToTop, LowerToBottom, RaiseAbove, and LowerBelow will override the sibling order.
1210         /// The values set by this property will likely change.
1211         /// </remarks>
1212         /// <since_tizen> 3 </since_tizen>
1213         public int SiblingOrder
1214         {
1215             get
1216             {
1217                 return (int)GetValue(SiblingOrderProperty);
1218             }
1219             set
1220             {
1221                 SetValue(SiblingOrderProperty, value);
1222
1223                 Layout?.ChangeLayoutSiblingOrder(value);
1224
1225                 NotifyPropertyChanged();
1226             }
1227         }
1228
1229         /// <summary>
1230         /// Returns the natural size of the view.
1231         /// </summary>
1232         /// <remarks>
1233         /// Deriving classes stipulate the natural size and by default a view has a zero natural size.
1234         /// </remarks>
1235         /// <since_tizen> 5 </since_tizen>
1236         public Vector3 NaturalSize
1237         {
1238             get
1239             {
1240                 Vector3 ret = new Vector3(Interop.Actor.GetNaturalSize(SwigCPtr), true);
1241                 if (NDalicPINVOKE.SWIGPendingException.Pending) throw new InvalidOperationException("FATAL: get Exception", NDalicPINVOKE.SWIGPendingException.Retrieve());
1242                 return ret;
1243             }
1244         }
1245
1246         /// <summary>
1247         /// Returns the natural size (Size2D) of the view.
1248         /// </summary>
1249         /// <remarks>
1250         /// Deriving classes stipulate the natural size and by default a view has a zero natural size.
1251         /// </remarks>
1252         /// <since_tizen> 4 </since_tizen>
1253         public Size2D NaturalSize2D
1254         {
1255             get
1256             {
1257                 Vector3 temp = new Vector3(Interop.Actor.GetNaturalSize(SwigCPtr), true);
1258                 if (NDalicPINVOKE.SWIGPendingException.Pending) throw new InvalidOperationException("FATAL: get Exception", NDalicPINVOKE.SWIGPendingException.Retrieve());
1259
1260                 Size2D sz = new Size2D((int)temp.Width, (int)temp.Height);
1261                 temp.Dispose();
1262                 return sz;
1263             }
1264         }
1265
1266         /// <summary>
1267         /// Gets or sets the origin of a view within its parent's area.<br />
1268         /// 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 />
1269         /// The default parent-origin is ParentOrigin.TopLeft (0.0, 0.0, 0.5).<br />
1270         /// A view's position is the distance between this origin and the view's anchor-point.<br />
1271         /// </summary>
1272         /// <pre>The view has been initialized.</pre>
1273         /// <since_tizen> 3 </since_tizen>
1274         public Position ParentOrigin
1275         {
1276             get
1277             {
1278                 Position tmp = (Position)GetValue(ParentOriginProperty);
1279                 return new Position(OnParentOriginChanged, tmp.X, tmp.Y, tmp.Z);
1280             }
1281             set
1282             {
1283                 SetValue(ParentOriginProperty, value);
1284                 NotifyPropertyChanged();
1285             }
1286         }
1287
1288         /// <summary>
1289         /// Gets or sets the anchor-point of a view.<br />
1290         /// 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 />
1291         /// The default pivot point is PivotPoint.Center (0.5, 0.5, 0.5).<br />
1292         /// A view position is the distance between its parent-origin and this anchor-point.<br />
1293         /// A view's orientation is the rotation from its default orientation, the rotation is centered around its anchor-point.<br />
1294         /// <pre>The view has been initialized.</pre>
1295         /// </summary>
1296         /// <remarks>
1297         /// The property cascade chaining set is possible. For example, this (view.PivotPoint.X = 0.1f;) is possible.
1298         /// </remarks>
1299         /// <since_tizen> 3 </since_tizen>
1300         public Position PivotPoint
1301         {
1302             get
1303             {
1304                 Position tmp = (Position)GetValue(PivotPointProperty);
1305                 return new Position(OnPivotPointChanged, tmp.X, tmp.Y, tmp.Z);
1306             }
1307             set
1308             {
1309                 SetValue(PivotPointProperty, value);
1310                 NotifyPropertyChanged();
1311             }
1312         }
1313
1314         /// <summary>
1315         /// Gets or sets the size width of the view.
1316         /// </summary>
1317         /// <remarks>
1318         /// <para>
1319         /// Animatable - This property can be animated using <c>Animation</c> class.
1320         /// <code>
1321         /// animation.AnimateTo(view, "SizeWidth", 500.0f);
1322         /// </code>
1323         /// </para>
1324         /// </remarks>
1325         /// <since_tizen> 3 </since_tizen>
1326         public float SizeWidth
1327         {
1328             get
1329             {
1330                 return (float)GetValue(SizeWidthProperty);
1331             }
1332             set
1333             {
1334                 SetValue(SizeWidthProperty, value);
1335                 NotifyPropertyChanged();
1336             }
1337         }
1338
1339         /// <summary>
1340         /// Gets or sets the size height of the view.
1341         /// </summary>
1342         /// <remarks>
1343         /// <para>
1344         /// Animatable - This property can be animated using <c>Animation</c> class.
1345         /// </para>
1346         /// <code>
1347         /// animation.AnimateTo(view, "SizeHeight", 500.0f);
1348         /// </code>
1349         /// </remarks>
1350         /// <since_tizen> 3 </since_tizen>
1351         public float SizeHeight
1352         {
1353             get
1354             {
1355                 return (float)GetValue(SizeHeightProperty);
1356             }
1357             set
1358             {
1359                 SetValue(SizeHeightProperty, value);
1360                 NotifyPropertyChanged();
1361             }
1362         }
1363
1364         /// <summary>
1365         /// Gets or sets the position of the view.<br />
1366         /// By default, sets the position vector between the parent origin and pivot point (default).<br />
1367         /// If the position inheritance is disabled, sets the world position.<br />
1368         /// </summary>
1369         /// <remarks>
1370         /// <para>
1371         /// Animatable - This property can be animated using <c>Animation</c> class.
1372         /// <code>
1373         /// animation.AnimateTo(view, "Position", new Position(50, 0));
1374         /// </code>
1375         /// </para>
1376         /// The property cascade chaining set is possible. For example, this (view.Position.X = 1.0f;) is possible.
1377         /// </remarks>
1378         /// <since_tizen> 3 </since_tizen>
1379         public Position Position
1380         {
1381             get
1382             {
1383                 Position tmp = (Position)GetValue(PositionProperty);
1384                 return new Position(OnPositionChanged, tmp.X, tmp.Y, tmp.Z);
1385             }
1386             set
1387             {
1388                 SetValue(PositionProperty, value);
1389                 NotifyPropertyChanged();
1390             }
1391         }
1392
1393         /// <summary>
1394         /// Gets or sets the position X of the view.
1395         /// </summary>
1396         /// <remarks>
1397         /// <para>
1398         /// Animatable - This property can be animated using <c>Animation</c> class.
1399         /// <code>
1400         /// animation.AnimateTo(view, "PositionX", 50.0f);
1401         /// </code>
1402         /// </para>
1403         /// </remarks>
1404         /// <since_tizen> 3 </since_tizen>
1405         public float PositionX
1406         {
1407             get
1408             {
1409                 return (float)GetValue(PositionXProperty);
1410             }
1411             set
1412             {
1413                 SetValue(PositionXProperty, value);
1414                 NotifyPropertyChanged();
1415             }
1416         }
1417
1418         /// <summary>
1419         /// Gets or sets the position Y of the view.
1420         /// </summary>
1421         /// <remarks>
1422         /// <para>
1423         /// Animatable - This property can be animated using <c>Animation</c> class.
1424         /// <code>
1425         /// animation.AnimateTo(view, "PositionY", 50.0f);
1426         /// </code>
1427         /// </para>
1428         /// </remarks>
1429         /// <since_tizen> 3 </since_tizen>
1430         public float PositionY
1431         {
1432             get
1433             {
1434                 return (float)GetValue(PositionYProperty);
1435             }
1436             set
1437             {
1438                 SetValue(PositionYProperty, value);
1439                 NotifyPropertyChanged();
1440             }
1441         }
1442
1443         /// <summary>
1444         /// Gets or sets the position Z of the view.
1445         /// </summary>
1446         /// <remarks>
1447         /// <para>
1448         /// Animatable - This property can be animated using <c>Animation</c> class.
1449         /// <code>
1450         /// animation.AnimateTo(view, "PositionZ", 50.0f);
1451         /// </code>
1452         /// </para>
1453         /// </remarks>
1454         /// <since_tizen> 3 </since_tizen>
1455         public float PositionZ
1456         {
1457             get
1458             {
1459                 return (float)GetValue(PositionZProperty);
1460             }
1461             set
1462             {
1463                 SetValue(PositionZProperty, value);
1464                 NotifyPropertyChanged();
1465             }
1466         }
1467
1468         /// <summary>
1469         /// Gets or sets the world position of the view.
1470         /// </summary>
1471         /// <since_tizen> 3 </since_tizen>
1472         public Vector3 WorldPosition
1473         {
1474             get
1475             {
1476                 Vector3 temp = new Vector3(0.0f, 0.0f, 0.0f);
1477                 var pValue = GetProperty(View.Property.WorldPosition);
1478                 pValue.Get(temp);
1479                 pValue.Dispose();
1480                 return temp;
1481             }
1482         }
1483
1484         /// <summary>
1485         /// Gets or sets the orientation of the view.<br />
1486         /// The view's orientation is the rotation from its default orientation, and the rotation is centered around its anchor-point.<br />
1487         /// </summary>
1488         /// <remarks>
1489         /// <para>
1490         /// This is an asynchronous method.
1491         /// </para>
1492         /// <para>
1493         /// Animatable - This property can be animated using <c>Animation</c> class.
1494         /// <code>
1495         /// animation.AnimateTo(view, "Orientation", new Rotation(new Radian((float)Math.PI), Vector3.XAxis));
1496         /// </code>
1497         /// </para>
1498         /// </remarks>
1499         /// <since_tizen> 3 </since_tizen>
1500         public Rotation Orientation
1501         {
1502             get
1503             {
1504                 return (Rotation)GetValue(OrientationProperty);
1505             }
1506             set
1507             {
1508                 SetValue(OrientationProperty, value);
1509                 NotifyPropertyChanged();
1510             }
1511         }
1512
1513         /// <summary>
1514         /// Gets or sets the world orientation of the view.<br />
1515         /// </summary>
1516         /// <since_tizen> 3 </since_tizen>
1517         public Rotation WorldOrientation
1518         {
1519             get
1520             {
1521                 Rotation temp = new Rotation();
1522                 var pValue = GetProperty(View.Property.WorldOrientation);
1523                 pValue.Get(temp);
1524                 pValue.Dispose();
1525                 return temp;
1526             }
1527         }
1528
1529         /// <summary>
1530         /// Gets or sets the scale factor applied to the view.<br />
1531         /// </summary>
1532         /// <remarks>
1533         /// <para>
1534         /// Animatable - This property can be animated using <c>Animation</c> class.
1535         /// <code>
1536         /// animation.AnimateTo(view, "Scale", new Vector3(1.5f, 1.5f, 1.0f));
1537         /// </code>
1538         /// </para>
1539         /// The property cascade chaining set is possible. For example, this (view.Scale.X = 0.1f;) is possible.
1540         /// </remarks>
1541         /// <since_tizen> 3 </since_tizen>
1542         public Vector3 Scale
1543         {
1544             get
1545             {
1546                 Vector3 temp = (Vector3)GetValue(ScaleProperty);
1547                 return new Vector3(OnScaleChanged, temp.X, temp.Y, temp.Z);
1548             }
1549             set
1550             {
1551                 SetValue(ScaleProperty, value);
1552                 NotifyPropertyChanged();
1553             }
1554         }
1555
1556         /// <summary>
1557         /// Gets or sets the scale X factor applied to the view.
1558         /// </summary>
1559         /// <remarks>
1560         /// <para>
1561         /// Animatable - This property can be animated using <c>Animation</c> class.
1562         /// <code>
1563         /// animation.AnimateTo(view, "ScaleX", 1.5f);
1564         /// </code>
1565         /// </para>
1566         /// </remarks>
1567         /// <since_tizen> 3 </since_tizen>
1568         public float ScaleX
1569         {
1570             get
1571             {
1572                 return (float)GetValue(ScaleXProperty);
1573             }
1574             set
1575             {
1576                 SetValue(ScaleXProperty, value);
1577                 NotifyPropertyChanged();
1578             }
1579         }
1580
1581         /// <summary>
1582         /// Gets or sets the scale Y factor applied to the view.
1583         /// </summary>
1584         /// <remarks>
1585         /// <para>
1586         /// Animatable - This property can be animated using <c>Animation</c> class.
1587         /// <code>
1588         /// animation.AnimateTo(view, "ScaleY", 1.5f);
1589         /// </code>
1590         /// </para>
1591         /// </remarks>
1592         /// <since_tizen> 3 </since_tizen>
1593         public float ScaleY
1594         {
1595             get
1596             {
1597                 return (float)GetValue(ScaleYProperty);
1598             }
1599             set
1600             {
1601                 SetValue(ScaleYProperty, value);
1602                 NotifyPropertyChanged();
1603             }
1604         }
1605
1606         /// <summary>
1607         /// Gets or sets the scale Z factor applied to the view.
1608         /// </summary>
1609         /// <remarks>
1610         /// <para>
1611         /// Animatable - This property can be animated using <c>Animation</c> class.
1612         /// <code>
1613         /// animation.AnimateTo(view, "ScaleZ", 1.5f);
1614         /// </code>
1615         /// </para>
1616         /// </remarks>
1617         /// <since_tizen> 3 </since_tizen>
1618         public float ScaleZ
1619         {
1620             get
1621             {
1622                 return (float)GetValue(ScaleZProperty);
1623             }
1624             set
1625             {
1626                 SetValue(ScaleZProperty, value);
1627                 NotifyPropertyChanged();
1628             }
1629         }
1630
1631         /// <summary>
1632         /// Gets the world scale of the view.
1633         /// </summary>
1634         /// <since_tizen> 3 </since_tizen>
1635         public Vector3 WorldScale
1636         {
1637             get
1638             {
1639                 Vector3 temp = new Vector3(0.0f, 0.0f, 0.0f);
1640                 var pValue = GetProperty(View.Property.WorldScale);
1641                 pValue.Get(temp);
1642                 pValue.Dispose();
1643                 return temp;
1644             }
1645         }
1646
1647         /// <summary>
1648         /// Retrieves the visibility flag of the view.
1649         /// </summary>
1650         /// <remarks>
1651         /// <para>
1652         /// If the view is not visible, then the view and its children will not be rendered.
1653         /// 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.
1654         /// </para>
1655         /// <para>
1656         /// Animatable - This property can be animated using <c>Animation</c> class.
1657         /// <code>
1658         /// animation.AnimateTo(view, "Visibility", false);
1659         /// </code>
1660         /// </para>
1661         /// </remarks>
1662         /// <since_tizen> 3 </since_tizen>
1663         public bool Visibility
1664         {
1665             get
1666             {
1667                 bool temp = false;
1668                 var pValue = GetProperty(View.Property.VISIBLE);
1669                 pValue.Get(out temp);
1670                 pValue.Dispose();
1671                 return temp;
1672             }
1673         }
1674
1675         /// <summary>
1676         /// Gets the view's world color.
1677         /// </summary>
1678         /// <since_tizen> 3 </since_tizen>
1679         public Vector4 WorldColor
1680         {
1681             get
1682             {
1683                 Vector4 temp = new Vector4(0.0f, 0.0f, 0.0f, 0.0f);
1684                 var pValue = GetProperty(View.Property.WorldColor);
1685                 pValue.Get(temp);
1686                 pValue.Dispose();
1687                 return temp;
1688             }
1689         }
1690
1691         /// <summary>
1692         /// Gets or sets the view's name.
1693         /// </summary>
1694         /// <since_tizen> 3 </since_tizen>
1695         public string Name
1696         {
1697             get
1698             {
1699                 return (string)GetValue(NameProperty);
1700             }
1701             set
1702             {
1703                 SetValue(NameProperty, value);
1704                 NotifyPropertyChanged();
1705             }
1706         }
1707
1708         /// <summary>
1709         /// Get the number of children held by the view.
1710         /// </summary>
1711         /// <since_tizen> 3 </since_tizen>
1712         public new uint ChildCount
1713         {
1714             get
1715             {
1716                 return Convert.ToUInt32(Children.Count);
1717             }
1718         }
1719
1720         /// <summary>
1721         /// Gets the view's ID.
1722         /// Read-only
1723         /// </summary>
1724         /// <since_tizen> 3 </since_tizen>
1725         public uint ID
1726         {
1727             get
1728             {
1729                 return GetId();
1730             }
1731         }
1732
1733         /// <summary>
1734         /// Gets or sets the status of whether the view should emit touch or hover signals.
1735         /// If a View is made insensitive, then the View and its children are not hittable.
1736         /// </summary>
1737         /// <since_tizen> 3 </since_tizen>
1738         public bool Sensitive
1739         {
1740             get
1741             {
1742                 return (bool)GetValue(SensitiveProperty);
1743             }
1744             set
1745             {
1746                 SetValue(SensitiveProperty, value);
1747                 NotifyPropertyChanged();
1748             }
1749         }
1750
1751         /// <summary>
1752         /// 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.
1753         /// </summary>
1754         /// <since_tizen> 3 </since_tizen>
1755         public bool LeaveRequired
1756         {
1757             get
1758             {
1759                 return (bool)GetValue(LeaveRequiredProperty);
1760             }
1761             set
1762             {
1763                 SetValue(LeaveRequiredProperty, value);
1764                 NotifyPropertyChanged();
1765             }
1766         }
1767
1768         /// <summary>
1769         /// Gets or sets the status of whether a child view inherits it's parent's orientation.
1770         /// </summary>
1771         /// <since_tizen> 3 </since_tizen>
1772         public bool InheritOrientation
1773         {
1774             get
1775             {
1776                 return (bool)GetValue(InheritOrientationProperty);
1777             }
1778             set
1779             {
1780                 SetValue(InheritOrientationProperty, value);
1781                 NotifyPropertyChanged();
1782             }
1783         }
1784
1785         /// <summary>
1786         /// Gets or sets the status of whether a child view inherits it's parent's scale.
1787         /// </summary>
1788         /// <since_tizen> 3 </since_tizen>
1789         public bool InheritScale
1790         {
1791             get
1792             {
1793                 return (bool)GetValue(InheritScaleProperty);
1794             }
1795             set
1796             {
1797                 SetValue(InheritScaleProperty, value);
1798                 NotifyPropertyChanged();
1799             }
1800         }
1801
1802         /// <summary>
1803         /// Gets or sets the status of how the view and its children should be drawn.<br />
1804         /// Not all views are renderable, but DrawMode can be inherited from any view.<br />
1805         /// 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 />
1806         /// If DrawMode.Overlay2D is used, the view and its children will be drawn as a 2D overlay.<br />
1807         /// Overlay views are drawn in a separate pass, after all non-overlay views within the layer.<br />
1808         /// For overlay views, the drawing order is with respect to tree levels of views, and depth-testing will not be used.<br />
1809         /// </summary>
1810         /// <since_tizen> 3 </since_tizen>
1811         public DrawModeType DrawMode
1812         {
1813             get
1814             {
1815                 return (DrawModeType)GetValue(DrawModeProperty);
1816             }
1817             set
1818             {
1819                 SetValue(DrawModeProperty, value);
1820                 NotifyPropertyChanged();
1821             }
1822         }
1823
1824         /// <summary>
1825         /// Gets or sets the relative to parent size factor of the view.<br />
1826         /// This factor is only used when ResizePolicyType is set to either: ResizePolicyType.SizeRelativeToParent or ResizePolicyType.SizeFixedOffsetFromParent.<br />
1827         /// This view's size is set to the view's size multiplied by or added to this factor, depending on ResizePolicyType.<br />
1828         /// </summary>
1829         /// <remarks>
1830         /// The property cascade chaining set is possible. For example, this (view.DecorationBoundingBox.X = 0.1f;) is possible.
1831         /// </remarks>
1832         /// <since_tizen> 3 </since_tizen>
1833         public Vector3 SizeModeFactor
1834         {
1835             get
1836             {
1837                 Vector3 temp = (Vector3)GetValue(SizeModeFactorProperty);
1838                 return new Vector3(OnSizeModeFactorChanged, temp.X, temp.Y, temp.Z);
1839             }
1840             set
1841             {
1842                 SetValue(SizeModeFactorProperty, value);
1843                 NotifyPropertyChanged();
1844             }
1845         }
1846
1847         /// <summary>
1848         /// Gets or sets the width resize policy to be used.
1849         /// </summary>
1850         /// <since_tizen> 3 </since_tizen>
1851         public ResizePolicyType WidthResizePolicy
1852         {
1853             get
1854             {
1855                 return (ResizePolicyType)GetValue(WidthResizePolicyProperty);
1856             }
1857             set
1858             {
1859                 // Store ResizePolicy to restore it when Layout is unset.
1860                 widthResizePolicy = value;
1861
1862                 SetValue(WidthResizePolicyProperty, value);
1863                 NotifyPropertyChanged();
1864             }
1865         }
1866
1867         /// <summary>
1868         /// Gets or sets the height resize policy to be used.
1869         /// </summary>
1870         /// <since_tizen> 3 </since_tizen>
1871         public ResizePolicyType HeightResizePolicy
1872         {
1873             get
1874             {
1875                 return (ResizePolicyType)GetValue(HeightResizePolicyProperty);
1876             }
1877             set
1878             {
1879                 // Store ResizePolicy to restore it when Layout is unset.
1880                 heightResizePolicy = value;
1881
1882                 SetValue(HeightResizePolicyProperty, value);
1883                 NotifyPropertyChanged();
1884             }
1885         }
1886
1887         /// <summary>
1888         /// Gets or sets the policy to use when setting size with size negotiation.<br />
1889         /// Defaults to SizeScalePolicyType.UseSizeSet.<br />
1890         /// </summary>
1891         /// <since_tizen> 3 </since_tizen>
1892         public SizeScalePolicyType SizeScalePolicy
1893         {
1894             get
1895             {
1896                 return (SizeScalePolicyType)GetValue(SizeScalePolicyProperty);
1897             }
1898             set
1899             {
1900                 SetValue(SizeScalePolicyProperty, value);
1901                 NotifyPropertyChanged();
1902             }
1903         }
1904
1905         /// <summary>
1906         ///  Gets or sets the status of whether the width size is dependent on the height size.
1907         /// </summary>
1908         /// <since_tizen> 3 </since_tizen>
1909         public bool WidthForHeight
1910         {
1911             get
1912             {
1913                 return (bool)GetValue(WidthForHeightProperty);
1914             }
1915             set
1916             {
1917                 SetValue(WidthForHeightProperty, value);
1918                 NotifyPropertyChanged();
1919             }
1920         }
1921
1922         /// <summary>
1923         /// Gets or sets the status of whether the height size is dependent on the width size.
1924         /// </summary>
1925         /// <since_tizen> 3 </since_tizen>
1926         public bool HeightForWidth
1927         {
1928             get
1929             {
1930                 return (bool)GetValue(HeightForWidthProperty);
1931             }
1932             set
1933             {
1934                 SetValue(HeightForWidthProperty, value);
1935                 NotifyPropertyChanged();
1936             }
1937         }
1938
1939         /// <summary>
1940         /// Gets or sets the padding for use in layout.
1941         /// </summary>
1942         /// <remarks>
1943         /// The property cascade chaining set is possible. For example, this (view.Padding.X = 0.1f;) is possible.
1944         /// </remarks>
1945         /// <since_tizen> 5 </since_tizen>
1946         public Extents Padding
1947         {
1948             get
1949             {
1950                 // If View has a Layout then padding in stored in the base Layout class
1951                 if (Layout != null)
1952                 {
1953                     return Layout.Padding;
1954                 }
1955                 else
1956                 {
1957                     Extents temp = (Extents)GetValue(PaddingProperty);
1958                     return new Extents(OnPaddingChanged, temp.Start, temp.End, temp.Top, temp.Bottom);
1959                 }
1960                 // Two return points to prevent creating a zeroed Extent native object before assignment
1961             }
1962             set
1963             {
1964                 Extents padding = value;
1965                 if (Layout != null)
1966                 {
1967                     // Layout set so store Padding in LayoutItem instead of in View.
1968                     // If View stores the Padding value then Legacy Size Negotiation will overwrite
1969                     // the position and sizes measure in the Layouting.
1970                     Layout.Padding = value;
1971                     // If Layout is a LayoutItem then it could be a View that handles it's own padding.
1972                     // Let the View keeps it's padding.  Still store Padding in Layout to reduce code paths.
1973                     if (typeof(LayoutGroup).IsAssignableFrom(Layout.GetType())) // If a Layout container of some kind.
1974                     {
1975                         padding = new Extents(0, 0, 0, 0); // Reset value stored in View.
1976                     }
1977                 }
1978
1979                 SetValue(PaddingProperty, padding);
1980                 NotifyPropertyChanged();
1981             }
1982         }
1983
1984         /// <summary>
1985         /// Gets or sets the minimum size the view can be assigned in size negotiation.
1986         /// </summary>
1987         /// <exception cref="ArgumentNullException"> Thrown when value is null. </exception>
1988         /// <remarks>
1989         /// The property cascade chaining set is possible. For example, this (view.MinimumSize.Width = 1;) is possible.
1990         /// </remarks>
1991         /// <since_tizen> 3 </since_tizen>
1992         public Size2D MinimumSize
1993         {
1994             get
1995             {
1996                 Size2D tmp = (Size2D)GetValue(MinimumSizeProperty);
1997                 return new Size2D(OnMinimumSizeChanged, tmp.Width, tmp.Height);
1998             }
1999             set
2000             {
2001                 if (value == null)
2002                 {
2003                     throw new ArgumentNullException(nameof(value));
2004                 }
2005                 if (layout != null)
2006                 {
2007                     // Note: it only works if minimum size is >= than natural size.
2008                     // To force the size it should be done through the width&height spec or Size2D.
2009                     layout.MinimumWidth = new Tizen.NUI.LayoutLength(value.Width);
2010                     layout.MinimumHeight = new Tizen.NUI.LayoutLength(value.Height);
2011                     layout.RequestLayout();
2012                 }
2013                 SetValue(MinimumSizeProperty, value);
2014                 NotifyPropertyChanged();
2015             }
2016         }
2017
2018         /// <summary>
2019         /// Gets or sets the maximum size the view can be assigned in size negotiation.
2020         /// </summary>
2021         /// <remarks>
2022         /// The property cascade chaining set is possible. For example, this (view.MaximumSize.Width = 1;) is possible.
2023         /// </remarks>
2024         /// <since_tizen> 3 </since_tizen>
2025         public Size2D MaximumSize
2026         {
2027             get
2028             {
2029                 Size2D tmp = (Size2D)GetValue(MaximumSizeProperty);
2030                 return new Size2D(OnMaximumSizeChanged, tmp.Width, tmp.Height);
2031             }
2032             set
2033             {
2034                 // We don't have Layout.Maximum(Width|Height) so we cannot apply it to layout.
2035                 // MATCH_PARENT spec + parent container size can be used to limit
2036                 if (layout != null)
2037                 {
2038                     layout.RequestLayout();
2039                 }
2040                 SetValue(MaximumSizeProperty, value);
2041                 NotifyPropertyChanged();
2042             }
2043         }
2044
2045         /// <summary>
2046         /// Gets or sets whether a child view inherits it's parent's position.<br />
2047         /// Default is to inherit.<br />
2048         /// 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 />
2049         /// </summary>
2050         /// <since_tizen> 3 </since_tizen>
2051         public bool InheritPosition
2052         {
2053             get
2054             {
2055                 return (bool)GetValue(InheritPositionProperty);
2056             }
2057             set
2058             {
2059                 SetValue(InheritPositionProperty, value);
2060                 NotifyPropertyChanged();
2061             }
2062         }
2063
2064         /// <summary>
2065         /// Gets or sets the clipping behavior (mode) of it's children.
2066         /// </summary>
2067         /// <since_tizen> 3 </since_tizen>
2068         public ClippingModeType ClippingMode
2069         {
2070             get
2071             {
2072                 return (ClippingModeType)GetValue(ClippingModeProperty);
2073             }
2074             set
2075             {
2076                 SetValue(ClippingModeProperty, value);
2077                 NotifyPropertyChanged();
2078             }
2079         }
2080
2081         /// <summary>
2082         /// Gets the number of renderers held by the view.
2083         /// </summary>
2084         /// <since_tizen> 3 </since_tizen>
2085         public uint RendererCount
2086         {
2087             get
2088             {
2089                 return GetRendererCount();
2090             }
2091         }
2092
2093         /// <summary>
2094         /// Deprecated in API5; Will be removed in API8. Please use PivotPoint instead!
2095         /// </summary>
2096         /// <remarks>
2097         /// The property cascade chaining set is possible. For example, this (view.AnchorPoint.X = 0.1f;) is possible.
2098         /// </remarks>
2099         /// <since_tizen> 3 </since_tizen>
2100         [Obsolete("Deprecated in API5; Will be removed in API8. Please use PivotPoint instead! " +
2101             "Like: " +
2102             "View view = new View(); " +
2103             "view.PivotPoint = PivotPoint.Center; " +
2104             "view.PositionUsesPivotPoint = true;")]
2105         [EditorBrowsable(EditorBrowsableState.Never)]
2106         public Position AnchorPoint
2107         {
2108             get
2109             {
2110                 return GetValue(AnchorPointProperty) as Position;
2111             }
2112             set
2113             {
2114                 SetValue(AnchorPointProperty, value);
2115             }
2116         }
2117
2118         private Position InternalAnchorPoint
2119         {
2120             get
2121             {
2122                 Position temp = new Position(0.0f, 0.0f, 0.0f);
2123                 var pValue = GetProperty(View.Property.AnchorPoint);
2124                 pValue.Get(temp);
2125                 pValue.Dispose();
2126                 Position ret = new Position(OnAnchorPointChanged, temp.X, temp.Y, temp.Z);
2127                 temp.Dispose();
2128                 return ret;
2129             }
2130             set
2131             {
2132                 var temp = new Tizen.NUI.PropertyValue(value);
2133                 SetProperty(View.Property.AnchorPoint, temp);
2134                 temp.Dispose();
2135                 NotifyPropertyChanged();
2136             }
2137         }
2138
2139         /// <summary>
2140         /// Sets the size of a view for the width, the height and the depth.<br />
2141         /// Geometry can be scaled to fit within this area.<br />
2142         /// This does not interfere with the view's scale factor.<br />
2143         /// The views default depth is the minimum of width and height.<br />
2144         /// </summary>
2145         /// <remarks>
2146         /// <para>
2147         /// Animatable - This property can be animated using <c>Animation</c> class.
2148         /// <code>
2149         /// animation.AnimateTo(view, "Size", new Size(100, 100));
2150         /// </code>
2151         /// </para>
2152         /// The property cascade chaining set is possible. For example, this (view.Size.Width = 1.0f;) is possible.
2153         /// </remarks>
2154         /// <since_tizen> 5 </since_tizen>
2155         public Size Size
2156         {
2157             get
2158             {
2159                 Size tmp = (Size)GetValue(SizeProperty);
2160                 return new Size(OnSizeChanged, tmp.Width, tmp.Height, tmp.Depth);
2161             }
2162             set
2163             {
2164                 SetValue(SizeProperty, value);
2165                 NotifyPropertyChanged();
2166             }
2167         }
2168
2169         /// <summary>
2170         /// Deprecated in API5; Will be removed in API8. Please use 'Container GetParent() for derived class' instead!
2171         /// </summary>
2172         /// <since_tizen> 3 </since_tizen>
2173         [Obsolete("Deprecated in API5; Will be removed in API8. Please use 'Container GetParent() for derived class' instead! " +
2174             "Like: " +
2175             "Container parent =  view.GetParent(); " +
2176             "View view = parent as View;")]
2177         [EditorBrowsable(EditorBrowsableState.Never)]
2178         public new View Parent
2179         {
2180             get
2181             {
2182                 View ret;
2183                 IntPtr cPtr = Interop.Actor.GetParent(SwigCPtr);
2184                 HandleRef CPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
2185                 BaseHandle basehandle = Registry.GetManagedBaseHandleFromNativePtr(CPtr.Handle);
2186
2187                 if (basehandle is Layer layer)
2188                 {
2189                     ret = new View(Layer.getCPtr(layer).Handle, false);
2190                     NUILog.Error("This Parent property is deprecated, should do not be used");
2191                 }
2192                 else
2193                 {
2194                     ret = basehandle as View;
2195                 }
2196
2197                 Interop.BaseHandle.DeleteBaseHandle(CPtr);
2198                 CPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
2199
2200                 if (NDalicPINVOKE.SWIGPendingException.Pending) throw new InvalidOperationException("FATAL: get Exception", NDalicPINVOKE.SWIGPendingException.Retrieve());
2201                 return ret;
2202             }
2203         }
2204
2205         /// <summary>
2206         /// Gets/Sets whether inherit parent's the layout Direction.
2207         /// </summary>
2208         /// <since_tizen> 4 </since_tizen>
2209         public bool InheritLayoutDirection
2210         {
2211             get
2212             {
2213                 return (bool)GetValue(InheritLayoutDirectionProperty);
2214             }
2215             set
2216             {
2217                 SetValue(InheritLayoutDirectionProperty, value);
2218                 NotifyPropertyChanged();
2219             }
2220         }
2221
2222         /// <summary>
2223         /// Gets/Sets the layout Direction.
2224         /// </summary>
2225         /// <since_tizen> 4 </since_tizen>
2226         public ViewLayoutDirectionType LayoutDirection
2227         {
2228             get
2229             {
2230                 return (ViewLayoutDirectionType)GetValue(LayoutDirectionProperty);
2231             }
2232             set
2233             {
2234                 SetValue(LayoutDirectionProperty, value);
2235                 NotifyPropertyChanged();
2236                 layout?.RequestLayout();
2237             }
2238         }
2239
2240         /// <summary>
2241         /// Gets or sets the Margin for use in layout.
2242         /// </summary>
2243         /// <remarks>
2244         /// Margin property is supported by Layout algorithms and containers.
2245         /// Please Set Layout if you want to use Margin property.
2246         /// The property cascade chaining set is possible. For example, this (view.Margin.X = 0.1f;) is possible.
2247         /// </remarks>
2248         /// <since_tizen> 4 </since_tizen>
2249         public Extents Margin
2250         {
2251             get
2252             {
2253                 // If View has a Layout then margin is stored in Layout.
2254                 if (Layout != null)
2255                 {
2256                     return Layout.Margin;
2257                 }
2258                 else
2259                 {
2260                     // If Layout not set then return margin stored in View.
2261                     Extents temp = (Extents)GetValue(MarginProperty);
2262                     return new Extents(OnMarginChanged, temp.Start, temp.End, temp.Top, temp.Bottom);
2263                 }
2264                 // Two return points to prevent creating a zeroed Extent native object before assignment
2265             }
2266             set
2267             {
2268                 if (Layout != null)
2269                 {
2270                     // Layout set so store Margin in LayoutItem instead of View.
2271                     // If View stores the Margin too then the Legacy Size Negotiation will
2272                     // overwrite the position and size values measured in the Layouting.
2273                     Layout.Margin = value;
2274                     SetValue(MarginProperty, new Extents(0, 0, 0, 0));
2275                     layout?.RequestLayout();
2276                 }
2277                 else
2278                 {
2279                     SetValue(MarginProperty, value);
2280                 }
2281                 NotifyPropertyChanged();
2282                 layout?.RequestLayout();
2283             }
2284         }
2285
2286         ///<summary>
2287         /// The required policy for this dimension, <see cref="LayoutParamPolicies"/> values or exact value.
2288         ///</summary>
2289         /// <example>
2290         /// <code>
2291         /// // matchParentView matches its size to its parent size.
2292         /// matchParentView.WidthSpecification = LayoutParamPolicies.MatchParent;
2293         /// matchParentView.HeightSpecification = LayoutParamPolicies.MatchParent;
2294         ///
2295         /// // wrapContentView wraps its children with their desired size.
2296         /// wrapContentView.WidthSpecification = LayoutParamPolicies.WrapContent;
2297         /// wrapContentView.HeightSpecification = LayoutParamPolicies.WrapContent;
2298         ///
2299         /// // exactSizeView shows itself with an exact size.
2300         /// exactSizeView.WidthSpecification = 100;
2301         /// exactSizeView.HeightSpecification = 100;
2302         /// </code>
2303         /// </example>
2304         /// <since_tizen> 6 </since_tizen>
2305         [Binding.TypeConverter(typeof(IntDpTypeConverter))]
2306         public int WidthSpecification
2307         {
2308             get
2309             {
2310                 return (int)GetValue(WidthSpecificationProperty);
2311             }
2312             set
2313             {
2314                 SetValue(WidthSpecificationProperty, value);
2315                 NotifyPropertyChanged();
2316             }
2317         }
2318
2319         private int InternalWidthSpecification
2320         {
2321             get
2322             {
2323                 return widthPolicy;
2324             }
2325             set
2326             {
2327                 if (value == widthPolicy)
2328                     return;
2329
2330                 widthPolicy = value;
2331                 if (widthPolicy >= 0)
2332                 {
2333                     if (heightPolicy >= 0) // Policy an exact value
2334                     {
2335                         // Create Size2D only both _widthPolicy and _heightPolicy are set.
2336                         Size2D = new Size2D(widthPolicy, heightPolicy);
2337                     }
2338                 }
2339                 layout?.RequestLayout();
2340             }
2341         }
2342
2343         ///<summary>
2344         /// The required policy for this dimension, <see cref="LayoutParamPolicies"/> values or exact value.
2345         ///</summary>
2346         /// <example>
2347         /// <code>
2348         /// // matchParentView matches its size to its parent size.
2349         /// matchParentView.WidthSpecification = LayoutParamPolicies.MatchParent;
2350         /// matchParentView.HeightSpecification = LayoutParamPolicies.MatchParent;
2351         ///
2352         /// // wrapContentView wraps its children with their desired size.
2353         /// wrapContentView.WidthSpecification = LayoutParamPolicies.WrapContent;
2354         /// wrapContentView.HeightSpecification = LayoutParamPolicies.WrapContent;
2355         ///
2356         /// // exactSizeView shows itself with an exact size.
2357         /// exactSizeView.WidthSpecification = 100;
2358         /// exactSizeView.HeightSpecification = 100;
2359         /// </code>
2360         /// </example>
2361         /// <since_tizen> 6 </since_tizen>
2362         [Binding.TypeConverter(typeof(IntDpTypeConverter))]
2363         public int HeightSpecification
2364         {
2365             get
2366             {
2367                 return (int)GetValue(HeightSpecificationProperty);
2368             }
2369             set
2370             {
2371                 SetValue(HeightSpecificationProperty, value);
2372                 NotifyPropertyChanged();
2373             }
2374         }
2375
2376         private int InternalHeightSpecification
2377         {
2378             get
2379             {
2380                 return heightPolicy;
2381             }
2382             set
2383             {
2384                 if (value == heightPolicy)
2385                     return;
2386
2387                 heightPolicy = value;
2388                 if (heightPolicy >= 0)
2389                 {
2390                     if (widthPolicy >= 0) // Policy an exact value
2391                     {
2392                         // Create Size2D only both _widthPolicy and _heightPolicy are set.
2393                         Size2D = new Size2D(widthPolicy, heightPolicy);
2394                     }
2395                 }
2396                 layout?.RequestLayout();
2397             }
2398         }
2399
2400         ///<summary>
2401         /// Gets the List of transitions for this View.
2402         ///</summary>
2403         /// <since_tizen> 6 </since_tizen>
2404         public Dictionary<TransitionCondition, TransitionList> LayoutTransitions
2405         {
2406             get
2407             {
2408                 if (layoutTransitions == null)
2409                 {
2410                     layoutTransitions = new Dictionary<TransitionCondition, TransitionList>();
2411                 }
2412                 return layoutTransitions;
2413             }
2414         }
2415
2416         ///<summary>
2417         /// Sets a layout transitions for this View.
2418         ///</summary>
2419         /// <exception cref="ArgumentNullException"> Thrown when value is null. </exception>
2420         /// <remarks>
2421         /// Use LayoutTransitions to receive a collection of LayoutTransitions set on the View.
2422         /// </remarks>
2423         /// <since_tizen> 6 </since_tizen>
2424         public LayoutTransition LayoutTransition
2425         {
2426             get
2427             {
2428                 return GetValue(LayoutTransitionProperty) as LayoutTransition;
2429             }
2430             set
2431             {
2432                 SetValue(LayoutTransitionProperty, value);
2433                 NotifyPropertyChanged();
2434             }
2435         }
2436
2437         private LayoutTransition InternalLayoutTransition
2438         {
2439             get
2440             {
2441                 return layoutTransition;
2442             }
2443             set
2444             {
2445                 if (value == null)
2446                 {
2447                     throw new global::System.ArgumentNullException(nameof(value));
2448                 }
2449                 if (layoutTransitions == null)
2450                 {
2451                     layoutTransitions = new Dictionary<TransitionCondition, TransitionList>();
2452                 }
2453
2454                 LayoutTransitionsHelper.AddTransitionForCondition(layoutTransitions, value.Condition, value, true);
2455
2456                 AttachTransitionsToChildren(value);
2457
2458                 layoutTransition = value;
2459             }
2460         }
2461
2462         /// <summary>
2463         /// Deprecated in API5; Will be removed in API8. Please use Padding instead.
2464         /// </summary>
2465         /// <remarks>
2466         /// The property cascade chaining set is possible. For example, this (view.DecorationBoundingBox.X = 0.1f;) is possible.
2467         /// </remarks>
2468         /// <since_tizen> 4 </since_tizen>
2469         [Obsolete("Deprecated in API5; Will be removed in API8. Please use Padding instead.")]
2470         [EditorBrowsable(EditorBrowsableState.Never)]
2471         public Extents PaddingEX
2472         {
2473             get
2474             {
2475                 return GetValue(PaddingEXProperty) as Extents;
2476             }
2477             set
2478             {
2479                 SetValue(PaddingEXProperty, value);
2480             }
2481         }
2482
2483         private Extents InternalPaddingEX
2484         {
2485             get
2486             {
2487                 Extents temp = new Extents(0, 0, 0, 0);
2488                 var pValue = GetProperty(View.Property.PADDING);
2489                 pValue.Get(temp);
2490                 pValue.Dispose();
2491                 Extents ret = new Extents(OnPaddingEXChanged, temp.Start, temp.End, temp.Top, temp.Bottom);
2492                 temp.Dispose();
2493                 return ret;
2494             }
2495             set
2496             {
2497                 var temp = new Tizen.NUI.PropertyValue(value);
2498                 SetProperty(View.Property.PADDING, temp);
2499                 temp.Dispose();
2500                 NotifyPropertyChanged();
2501                 layout?.RequestLayout();
2502             }
2503         }
2504
2505         [EditorBrowsable(EditorBrowsableState.Never)]
2506         public XamlStyle XamlStyle
2507         {
2508             get
2509             {
2510                 return (XamlStyle)GetValue(XamlStyleProperty);
2511             }
2512             set
2513             {
2514                 SetValue(XamlStyleProperty, value);
2515             }
2516         }
2517
2518         /// <summary>
2519         /// The Color of View. This is an RGBA value.
2520         /// </summary>
2521         /// <remarks>
2522         /// <para>
2523         /// Animatable - This property can be animated using <c>Animation</c> class.
2524         /// </para>
2525         /// The property cascade chaining set is possible. For example, this (view.Color.X = 0.1f;) is possible.
2526         /// </remarks>
2527         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
2528         [EditorBrowsable(EditorBrowsableState.Never)]
2529         public Color Color
2530         {
2531             get
2532             {
2533                 Color temp = (Color)GetValue(ColorProperty);
2534                 return new Color(OnColorChanged, temp.R, temp.G, temp.B, temp.A);
2535             }
2536             set
2537             {
2538                 SetValue(ColorProperty, value);
2539                 NotifyPropertyChanged();
2540             }
2541         }
2542
2543         /// <summary>
2544         /// Set the layout on this View. Replaces any existing Layout.
2545         /// </summary>
2546         /// <remarks>
2547         /// If this Layout is set as null explicitly, it means this View itself and it's child Views will not use Layout anymore.
2548         /// </remarks>
2549         /// <since_tizen> 6 </since_tizen>
2550         public LayoutItem Layout
2551         {
2552             get
2553             {
2554                 return GetValue(LayoutProperty) as LayoutItem;
2555             }
2556             set
2557             {
2558                 // ResizePolicy is restored when Layout is unset and it is considered when View size is calculated.
2559                 // SetValue(LayoutProperty, value) sets InternalLayout only if layout is not null.
2560                 if (value == null)
2561                 {
2562                     RestoreResizePolicy();
2563                 }
2564
2565                 SetValue(LayoutProperty, value);
2566             }
2567         }
2568
2569         private LayoutItem InternalLayout
2570         {
2571             get
2572             {
2573                 return layout;
2574             }
2575             set
2576             {
2577                 // Do nothing if layout provided is already set on this View.
2578                 if (value == layout)
2579                 {
2580                     return;
2581                 }
2582
2583                 LayoutingDisabled = false;
2584                 layoutSet = true;
2585
2586                 // If new layout being set already has a owner then that owner receives a replacement default layout.
2587                 // First check if the layout to be set already has a owner.
2588                 if (value?.Owner != null)
2589                 {
2590                     // Previous owner of the layout gets a default layout as a replacement.
2591                     value.Owner.Layout = new AbsoluteLayout()
2592                     {
2593                         // Copy Margin and Padding to replacement LayoutGroup.
2594                         Margin = value.Margin,
2595                         Padding = value.Padding,
2596                     };
2597                 }
2598
2599                 // Copy Margin and Padding to new layout being set or restore padding and margin back to
2600                 // View if no replacement. Previously margin and padding values would have been moved from
2601                 // the View to the layout.
2602                 if (layout != null) // Existing layout
2603                 {
2604                     if (value != null)
2605                     {
2606                         // Existing layout being replaced so copy over margin and padding values.
2607                         value.Margin = layout.Margin;
2608                         value.Padding = layout.Padding;
2609                         value.SetPositionByLayout = !excludeLayouting;
2610                     }
2611                     else
2612                     {
2613                         // Layout not being replaced so restore margin and padding to View.
2614                         SetValue(MarginProperty, layout.Margin);
2615                         SetValue(PaddingProperty, layout.Padding);
2616                         NotifyPropertyChanged();
2617                     }
2618                 }
2619                 else
2620                 {
2621                     // First Layout to be added to the View hence copy
2622
2623                     // Do not try to set Margins or Padding on a null Layout (when a layout is being removed from a View)
2624                     if (value != null)
2625                     {
2626                         Extents margin = Margin;
2627                         Extents padding = Padding;
2628                         if (margin.Top != 0 || margin.Bottom != 0 || margin.Start != 0 || margin.End != 0)
2629                         {
2630                             // If View already has a margin set then store it in Layout instead.
2631                             value.Margin = margin;
2632                             SetValue(MarginProperty, new Extents(0, 0, 0, 0));
2633                             NotifyPropertyChanged();
2634                         }
2635
2636                         if (padding.Top != 0 || padding.Bottom != 0 || padding.Start != 0 || padding.End != 0)
2637                         {
2638                             // If View already has a padding set then store it in Layout instead.
2639                             value.Padding = padding;
2640
2641                             // If Layout is a LayoutItem then it could be a View that handles it's own padding.
2642                             // Let the View keeps it's padding.  Still store Padding in Layout to reduce code paths.
2643                             if (typeof(LayoutGroup).IsAssignableFrom(value.GetType()))
2644                             {
2645                                 SetValue(PaddingProperty, new Extents(0, 0, 0, 0));
2646                                 NotifyPropertyChanged();
2647                             }
2648                         }
2649
2650                         value.SetPositionByLayout = !excludeLayouting;
2651                     }
2652                 }
2653
2654                 // Remove existing layout from it's parent layout group.
2655                 layout?.Unparent();
2656
2657                 // Set layout to this view
2658                 SetLayout(value);
2659             }
2660         }
2661
2662         /// <summary>
2663         /// The weight of the View, used to share available space in a layout with siblings.
2664         /// </summary>
2665         /// <since_tizen> 6 </since_tizen>
2666         public float Weight
2667         {
2668             get
2669             {
2670                 return weight;
2671             }
2672             set
2673             {
2674                 weight = value;
2675                 layout?.RequestLayout();
2676             }
2677         }
2678
2679         /// <summary>
2680         ///  Whether to load the BackgroundImage synchronously.
2681         ///  If not specified, the default is false, i.e. the BackgroundImage is loaded asynchronously.
2682         ///  Note: For Normal Quad images only.
2683         /// </summary>
2684         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
2685         [EditorBrowsable(EditorBrowsableState.Never)]
2686         public bool BackgroundImageSynchronosLoading
2687         {
2688             get
2689             {
2690                 return (bool)GetValue(BackgroundImageSynchronosLoadingProperty);
2691             }
2692             set
2693             {
2694                 SetValue(BackgroundImageSynchronosLoadingProperty, value);
2695                 NotifyPropertyChanged();
2696             }
2697         }
2698
2699         private bool InternalBackgroundImageSynchronosLoading
2700         {
2701             get
2702             {
2703                 return BackgroundImageSynchronousLoading;
2704             }
2705             set
2706             {
2707                 BackgroundImageSynchronousLoading = value;
2708             }
2709         }
2710
2711         /// <summary>
2712         ///  Whether to load the BackgroundImage synchronously.
2713         ///  If not specified, the default is false, i.e. the BackgroundImage is loaded asynchronously.
2714         ///  Note: For Normal Quad images only.
2715         /// </summary>
2716         /// This will be public opened in tizen_7.0 after ACR done. Before ACR, need to be hidden as inhouse API.
2717         [EditorBrowsable(EditorBrowsableState.Never)]
2718         public bool BackgroundImageSynchronousLoading
2719         {
2720             get
2721             {
2722                 return (bool)GetValue(BackgroundImageSynchronousLoadingProperty);
2723             }
2724             set
2725             {
2726                 SetValue(BackgroundImageSynchronousLoadingProperty, value);
2727                 NotifyPropertyChanged();
2728             }
2729         }
2730
2731         private bool InternalBackgroundImageSynchronousLoading
2732         {
2733             get
2734             {
2735                 return backgroundImageSynchronousLoading;
2736             }
2737             set
2738             {
2739                 backgroundImageSynchronousLoading = value;
2740
2741                 string bgUrl = null;
2742                 var pValue = Background.Find(ImageVisualProperty.URL);
2743                 pValue?.Get(out bgUrl);
2744                 pValue?.Dispose();
2745
2746                 if (!string.IsNullOrEmpty(bgUrl))
2747                 {
2748                     PropertyMap bgMap = this.Background;
2749                     var temp = new PropertyValue(backgroundImageSynchronousLoading);
2750                     bgMap.Add("synchronousLoading", temp);
2751                     temp.Dispose();
2752                     Background = bgMap;
2753                 }
2754             }
2755         }
2756
2757         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
2758         [EditorBrowsable(EditorBrowsableState.Never)]
2759         public Vector2 UpdateSizeHint
2760         {
2761             get
2762             {
2763                 return (Vector2)GetValue(UpdateSizeHintProperty);
2764             }
2765             set
2766             {
2767                 SetValue(UpdateSizeHintProperty, value);
2768                 NotifyPropertyChanged();
2769             }
2770         }
2771
2772         /// <summary>
2773         /// Enable/Disable ControlState propagation for children.
2774         /// It is false by default.
2775         /// If the View needs to share ControlState with descendants, please set it true.
2776         /// Please note that, changing the value will also changes children's EnableControlStatePropagation value recursively.
2777         /// </summary>
2778         [EditorBrowsable(EditorBrowsableState.Never)]
2779         public bool EnableControlStatePropagation
2780         {
2781             get
2782             {
2783                 return (bool)GetValue(EnableControlStatePropagationProperty);
2784             }
2785             set
2786             {
2787                 SetValue(EnableControlStatePropagationProperty, value);
2788                 NotifyPropertyChanged();
2789             }
2790         }
2791
2792         private bool InternalEnableControlStatePropagation
2793         {
2794             get => themeData?.ControlStatePropagation ?? false;
2795             set
2796             {
2797                 if (InternalEnableControlStatePropagation == value) return;
2798
2799                 if (themeData == null) themeData = new ThemeData();
2800
2801                 themeData.ControlStatePropagation = value;
2802
2803                 foreach (View child in Children)
2804                 {
2805                     child.EnableControlStatePropagation = value;
2806                 }
2807             }
2808         }
2809
2810         /// <summary>
2811         /// By default, it is false in View, true in Control.
2812         /// Note that if the value is true, the View will be a touch receptor.
2813         /// </summary>
2814         [EditorBrowsable(EditorBrowsableState.Never)]
2815         public bool EnableControlState
2816         {
2817             get
2818             {
2819                 return (bool)GetValue(EnableControlStateProperty);
2820             }
2821             set
2822             {
2823                 SetValue(EnableControlStateProperty, value);
2824             }
2825         }
2826
2827         /// <summary>
2828         /// Whether the actor grab all touches even if touch leaves its boundary.
2829         /// </summary>
2830         /// <returns>true, if it grab all touch after start</returns>
2831         [EditorBrowsable(EditorBrowsableState.Never)]
2832         public bool GrabTouchAfterLeave
2833         {
2834             get
2835             {
2836                 return (bool)GetValue(GrabTouchAfterLeaveProperty);
2837             }
2838             set
2839             {
2840                 SetValue(GrabTouchAfterLeaveProperty, value);
2841             }
2842         }
2843
2844         private bool InternalGrabTouchAfterLeave
2845         {
2846             get
2847             {
2848                 bool temp = false;
2849                 var pValue = GetProperty(View.Property.CaptureAllTouchAfterStart);
2850                 pValue.Get(out temp);
2851                 pValue.Dispose();
2852                 return temp;
2853             }
2854             set
2855             {
2856                 var temp = new Tizen.NUI.PropertyValue(value);
2857                 SetProperty(View.Property.CaptureAllTouchAfterStart, temp);
2858                 temp.Dispose();
2859                 NotifyPropertyChanged();
2860             }
2861         }
2862
2863         /// <summary>
2864         /// Determines which blend equation will be used to render renderers of this actor.
2865         /// </summary>
2866         /// <returns>blend equation enum currently assigned</returns>
2867         /// This will be public opened in next tizen after ACR done. Before ACR, need to be hidden as inhouse API.
2868         [EditorBrowsable(EditorBrowsableState.Never)]
2869         public BlendEquationType BlendEquation
2870         {
2871             get
2872             {
2873                 return (BlendEquationType)GetValue(BlendEquationProperty);
2874             }
2875             set
2876             {
2877                 SetValue(BlendEquationProperty, value);
2878             }
2879         }
2880
2881         private BlendEquationType InternalBlendEquation
2882         {
2883             get
2884             {
2885                 int temp = 0;
2886                 var pValue = GetProperty(View.Property.BlendEquation);
2887                 pValue.Get(out temp);
2888                 pValue.Dispose();
2889                 return (BlendEquationType)temp;
2890             }
2891             set
2892             {
2893                 var temp = new Tizen.NUI.PropertyValue((int)value);
2894                 SetProperty(View.Property.BlendEquation, temp);
2895                 temp.Dispose();
2896                 NotifyPropertyChanged();
2897             }
2898         }
2899
2900         /// <summary>
2901         /// If the value is true, the View will change its style as the theme changes.
2902         /// The default value is false in normal case but it can be true when the NUIApplication is created with <see cref="NUIApplication.ThemeOptions.ThemeChangeSensitive"/>.
2903         /// </summary>
2904         /// <since_tizen> 9 </since_tizen>
2905         public bool ThemeChangeSensitive
2906         {
2907             get => (bool)GetValue(ThemeChangeSensitiveProperty);
2908             set => SetValue(ThemeChangeSensitiveProperty, value);
2909         }
2910
2911         /// <summary>
2912         /// Create Style, it is abstract function and must be override.
2913         /// </summary>
2914         [EditorBrowsable(EditorBrowsableState.Never)]
2915         protected virtual ViewStyle CreateViewStyle()
2916         {
2917             return new ViewStyle();
2918         }
2919
2920         /// <summary>
2921         /// Called after the View's ControlStates changed.
2922         /// </summary>
2923         /// <param name="controlStateChangedInfo">The information including state changed variables.</param>
2924         [EditorBrowsable(EditorBrowsableState.Never)]
2925         protected virtual void OnControlStateChanged(ControlStateChangedEventArgs controlStateChangedInfo)
2926         {
2927         }
2928
2929         /// <summary>
2930         /// </summary>
2931         [EditorBrowsable(EditorBrowsableState.Never)]
2932         protected virtual void OnThemeChanged(object sender, ThemeChangedEventArgs e)
2933         {
2934             if (string.IsNullOrEmpty(styleName)) ApplyStyle(ThemeManager.GetUpdateStyleWithoutClone(GetType()));
2935             else ApplyStyle(ThemeManager.GetUpdateStyleWithoutClone(styleName));
2936         }
2937
2938         /// <summary>
2939         /// Apply style instance to the view.
2940         /// Basically it sets the bindable property to the value of the bindable property with same name in the style.
2941         /// </summary>
2942         /// <since_tizen> 9 </since_tizen>
2943         public virtual void ApplyStyle(ViewStyle viewStyle)
2944         {
2945             if (viewStyle == null || themeData?.viewStyle == viewStyle) return;
2946
2947             if (themeData == null) themeData = new ThemeData();
2948
2949             themeData.viewStyle = viewStyle;
2950
2951             if (viewStyle.DirtyProperties == null || viewStyle.DirtyProperties.Count == 0)
2952             {
2953                 // Nothing to apply
2954                 return;
2955             }
2956
2957             BindableProperty.GetBindablePropertysOfType(GetType(), out var bindablePropertyOfView);
2958
2959             if (bindablePropertyOfView == null)
2960             {
2961                 return;
2962             }
2963
2964             var dirtyStyleProperties = new BindableProperty[viewStyle.DirtyProperties.Count];
2965             viewStyle.DirtyProperties.CopyTo(dirtyStyleProperties);
2966
2967             foreach (var sourceProperty in dirtyStyleProperties)
2968             {
2969                 var sourceValue = viewStyle.GetValue(sourceProperty);
2970
2971                 if (sourceValue == null)
2972                 {
2973                     continue;
2974                 }
2975
2976                 bindablePropertyOfView.TryGetValue(sourceProperty.PropertyName, out var destinationProperty);
2977
2978                 if (destinationProperty != null)
2979                 {
2980                     SetValue(destinationProperty, sourceValue);
2981                 }
2982             }
2983         }
2984
2985         /// <summary>
2986         /// Get whether the View is culled or not.
2987         /// True means that the View is out of the view frustum.
2988         /// </summary>
2989         /// <remarks>
2990         /// Hidden-API (Inhouse-API).
2991         /// </remarks>
2992         [EditorBrowsable(EditorBrowsableState.Never)]
2993         public bool Culled
2994         {
2995             get
2996             {
2997                 bool temp = false;
2998                 var pValue = GetProperty(View.Property.Culled);
2999                 pValue.Get(out temp);
3000                 pValue.Dispose();
3001                 return temp;
3002             }
3003         }
3004
3005         /// <summary>
3006         /// Set or Get TransitionOptions for the page transition.
3007         /// This property is used to define how this view will be transitioned during Page switching.
3008         /// </summary>
3009         /// <since_tizen> 9 </since_tizen>
3010         public TransitionOptions TransitionOptions
3011         {
3012             get
3013             {
3014                 return GetValue(TransitionOptionsProperty) as TransitionOptions;
3015             }
3016             set
3017             {
3018                 SetValue(TransitionOptionsProperty, value);
3019                 NotifyPropertyChanged();
3020             }
3021         }
3022
3023         private TransitionOptions InternalTransitionOptions
3024         {
3025             set
3026             {
3027                 transitionOptions = value;
3028             }
3029             get
3030             {
3031                 return transitionOptions;
3032             }
3033         }
3034
3035         /// <summary>
3036         /// Gets or sets the status of whether the view should emit key event signals.
3037         /// If a View's DispatchKeyEvents is set to false, then it's children will not emit a key event signal either.
3038         /// </summary>
3039         [EditorBrowsable(EditorBrowsableState.Never)]
3040         public bool DispatchKeyEvents
3041         {
3042             get
3043             {
3044                 return (bool)GetValue(DispatchKeyEventsProperty);
3045             }
3046             set
3047             {
3048                 SetValue(DispatchKeyEventsProperty, value);
3049                 NotifyPropertyChanged();
3050             }
3051         }
3052
3053
3054
3055
3056     }
3057 }