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