[NUI] Make bindable properties in Style and View have same property name. (#2850)
authorJiyun Yang <ji.yang@samsung.com>
Fri, 16 Apr 2021 08:17:07 +0000 (17:17 +0900)
committerhuiyueun <35286162+huiyueun@users.noreply.github.com>
Tue, 20 Apr 2021 06:13:00 +0000 (15:13 +0900)
Signed-off-by: Jiyun Yang <ji.yang@samsung.com>
20 files changed:
src/Tizen.NUI.Components/Controls/Button.cs
src/Tizen.NUI.Components/Controls/Slider.cs
src/Tizen.NUI.Components/Controls/Switch.cs
src/Tizen.NUI/src/public/BaseComponents/ImageView.cs
src/Tizen.NUI/src/public/BaseComponents/Style/ImageViewStyle.cs
src/Tizen.NUI/src/public/BaseComponents/Style/Selector.cs
src/Tizen.NUI/src/public/BaseComponents/Style/TextFieldStyle.cs
src/Tizen.NUI/src/public/BaseComponents/Style/TextLabelStyle.cs
src/Tizen.NUI/src/public/BaseComponents/Style/ViewStyle.cs
src/Tizen.NUI/src/public/BaseComponents/Style/ViewStyleBindableProperty.cs
src/Tizen.NUI/src/public/BaseComponents/TextField.cs
src/Tizen.NUI/src/public/BaseComponents/TextFieldBindableProperty.cs
src/Tizen.NUI/src/public/BaseComponents/TextFieldSelectorData.cs [deleted file]
src/Tizen.NUI/src/public/BaseComponents/TextLabel.cs
src/Tizen.NUI/src/public/BaseComponents/TextLabelBindableProperty.cs
src/Tizen.NUI/src/public/BaseComponents/TextLabelSelectorData.cs
src/Tizen.NUI/src/public/BaseComponents/View.cs
src/Tizen.NUI/src/public/BaseComponents/ViewBindableProperty.cs
src/Tizen.NUI/src/public/BaseComponents/ViewInternal.cs
src/Tizen.NUI/src/public/BaseComponents/ViewSelectorData.cs

index df811f3..042e662 100755 (executable)
@@ -484,7 +484,7 @@ namespace Tizen.NUI.Components
         /// <since_tizen> 6 </since_tizen>
         public StringSelector TextSelector
         {
-            get => buttonText == null ? null : new StringSelector((Selector<string>)buttonText.GetValue(TextLabel.TextSelectorProperty));
+            get => buttonText == null ? null : new StringSelector(buttonText.TextSelector);
             set
             {
                 if (value == null || buttonText == null)
@@ -493,7 +493,7 @@ namespace Tizen.NUI.Components
                 }
                 else
                 {
-                    buttonText.SetValue(TextLabel.TextSelectorProperty, value);
+                    buttonText.TextSelector = value;
                 }
             }
         }
@@ -506,7 +506,7 @@ namespace Tizen.NUI.Components
         /// <since_tizen> 6 </since_tizen>
         public StringSelector TranslatableTextSelector
         {
-            get => buttonText == null ? null : new StringSelector((Selector<string>)buttonText.GetValue(TextLabel.TranslatableTextSelectorProperty));
+            get => buttonText == null ? null : new StringSelector(buttonText.TranslatableTextSelector);
             set
             {
                 if (value == null || buttonText == null)
@@ -515,7 +515,7 @@ namespace Tizen.NUI.Components
                 }
                 else
                 {
-                    buttonText.SetValue(TextLabel.TranslatableTextSelectorProperty, value);
+                    buttonText.TranslatableTextSelector = value;
                 }
             }
         }
@@ -528,7 +528,7 @@ namespace Tizen.NUI.Components
         /// <since_tizen> 6 </since_tizen>
         public ColorSelector TextColorSelector
         {
-            get => buttonText == null ? null : new ColorSelector((Selector<Color>)buttonText.GetValue(TextLabel.TextColorSelectorProperty));
+            get => buttonText == null ? null : new ColorSelector(buttonText.TextColorSelector);
             set
             {
                 if (value == null || buttonText == null)
@@ -537,7 +537,7 @@ namespace Tizen.NUI.Components
                 }
                 else
                 {
-                    buttonText.SetValue(TextLabel.TextColorSelectorProperty, value);
+                    buttonText.TextColorSelector = value;
                 }
             }
         }
@@ -550,7 +550,7 @@ namespace Tizen.NUI.Components
         /// <since_tizen> 6 </since_tizen>
         public FloatSelector PointSizeSelector
         {
-            get => buttonText == null ? null : new FloatSelector((Selector<float?>)buttonText.GetValue(TextLabel.PointSizeSelectorProperty));
+            get => buttonText == null ? null : new FloatSelector(buttonText.PointSizeSelector);
             set
             {
                 if (value == null || buttonText == null)
@@ -559,7 +559,7 @@ namespace Tizen.NUI.Components
                 }
                 else
                 {
-                    buttonText.SetValue(TextLabel.PointSizeSelectorProperty, value);
+                    buttonText.PointSizeSelector = value;
                 }
             }
         }
@@ -572,7 +572,7 @@ namespace Tizen.NUI.Components
         /// <since_tizen> 6 </since_tizen>
         public StringSelector IconURLSelector
         {
-            get => buttonIcon == null ? null : new StringSelector((Selector<string>)buttonIcon.GetValue(ImageView.ResourceUrlSelectorProperty));
+            get => buttonIcon == null ? null : new StringSelector(buttonIcon.ResourceUrlSelector);
             set
             {
                 if (value == null || buttonIcon == null)
@@ -581,7 +581,7 @@ namespace Tizen.NUI.Components
                 }
                 else
                 {
-                    buttonIcon.SetValue(ImageView.ResourceUrlSelectorProperty, value);
+                    buttonIcon.ResourceUrlSelector = value;
                 }
             }
         }
index 5460e95..b2696f5 100755 (executable)
@@ -510,7 +510,7 @@ namespace Tizen.NUI.Components
         /// <since_tizen> 6 </since_tizen>
         public StringSelector ThumbImageURLSelector
         {
-            get => thumbImage == null ? null : new StringSelector((Selector<string>)thumbImage.GetValue(ImageView.ResourceUrlSelectorProperty));
+            get => thumbImage == null ? null : new StringSelector(thumbImage.ResourceUrlSelector);
             set
             {
                 if (value == null || thumbImage == null)
@@ -519,7 +519,7 @@ namespace Tizen.NUI.Components
                 }
                 else
                 {
-                    thumbImage.SetValue(ImageView.ResourceUrlSelectorProperty, value);
+                    thumbImage.ResourceUrlSelector = value;
                     thumbImageUrlSelector = value;
                 }
             }
@@ -540,7 +540,7 @@ namespace Tizen.NUI.Components
                 }
                 else
                 {
-                    return (Selector<string>)thumbImage.GetValue(ImageView.ResourceUrlSelectorProperty);
+                    return thumbImage.ResourceUrlSelector;
                 }
             }
             set
@@ -551,7 +551,7 @@ namespace Tizen.NUI.Components
                 }
                 else
                 {
-                    thumbImage.SetValue(ImageView.ResourceUrlSelectorProperty, value);
+                    thumbImage.ResourceUrlSelector = value;
                     thumbImageUrlSelector = value;
                 }
             }
index b0efa7b..6b67536 100755 (executable)
@@ -1,5 +1,5 @@
 /*
- * Copyright(c) 2019 Samsung Electronics Co., Ltd.
+ * Copyright(c) 2021 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  */
 using System;
 using System.ComponentModel;
+using System.Diagnostics;
 using Tizen.NUI.BaseComponents;
 using Tizen.NUI.Components.Extension;
 
@@ -175,8 +176,12 @@ namespace Tizen.NUI.Components
         /// <since_tizen> 6 </since_tizen>
         public StringSelector SwitchBackgroundImageURLSelector
         {
-            get => track == null ? null : new StringSelector((Selector<string>)track.GetValue(ImageView.ResourceUrlSelectorProperty));
-            set => track?.SetValue(ImageView.ResourceUrlSelectorProperty, value);
+            get => new StringSelector(track.ResourceUrlSelector);
+            set
+            {
+                Debug.Assert(track != null);
+                track.ResourceUrlSelector = value;
+            }
         }
 
         /// <summary>
@@ -202,8 +207,12 @@ namespace Tizen.NUI.Components
         /// <since_tizen> 6 </since_tizen>
         public StringSelector SwitchHandlerImageURLSelector
         {
-            get => thumb == null ? null : new StringSelector((Selector<string>)thumb.GetValue(ImageView.ResourceUrlSelectorProperty));
-            set => thumb?.SetValue(ImageView.ResourceUrlSelectorProperty, value);
+            get => new StringSelector(thumb.ResourceUrlSelector);
+            set
+            {
+                Debug.Assert(thumb != null);
+                thumb.ResourceUrlSelector = value;
+            }
         }
 
         /// <summary>
index a251914..c4da073 100755 (executable)
@@ -36,15 +36,16 @@ namespace Tizen.NUI.BaseComponents
         public static readonly BindableProperty ResourceUrlProperty = BindableProperty.Create(nameof(ImageView.ResourceUrl), typeof(string), typeof(ImageView), string.Empty, propertyChanged: (bindable, oldValue, newValue) =>
         {
             var imageView = (ImageView)bindable;
-            string url = (string)newValue;
-            url = (url == null ? "" : url);
-            if (url.StartsWith("*Resource*"))
+
+            if (newValue is Selector<string> selector)
             {
-                string resource = Tizen.Applications.Application.Current.DirectoryInfo.Resource;
-                url = url.Replace("*Resource*", resource);
+                imageView.ResourceUrlSelector = selector;
+            }
+            else
+            {
+                imageView.resourceUrlSelector?.Reset(imageView);
+                imageView.SetResourceUrl((string)newValue);
             }
-            imageView._resourceUrl = url;
-            imageView.UpdateImage(ImageVisualProperty.URL, new PropertyValue(url));
         },
         defaultValueCreator: (BindableProperty.CreateDefaultValueDelegate)((bindable) =>
         {
@@ -162,10 +163,16 @@ namespace Tizen.NUI.BaseComponents
         public static readonly BindableProperty BorderProperty = BindableProperty.Create(nameof(Border), typeof(Rectangle), typeof(ImageView), null, propertyChanged: (bindable, oldValue, newValue) =>
         {
             var imageView = (ImageView)bindable;
-            if (newValue != null)
+            imageView.borderSelector?.Reset(imageView);
+
+            if (newValue is Selector<Rectangle> selector)
+            {
+                if (selector.HasAll()) imageView.SetBorder(selector.All);
+                else imageView.borderSelector = new TriggerableSelector<Rectangle>(imageView, selector, imageView.SetBorder, true);
+            }
+            else
             {
-                imageView._border = new Rectangle((Rectangle)newValue);
-                imageView.UpdateImage(NpatchImageVisualProperty.Border, new PropertyValue(imageView._border));
+                imageView.SetBorder((Rectangle)newValue);
             }
         },
         defaultValueCreator: (bindable) =>
@@ -233,28 +240,6 @@ namespace Tizen.NUI.BaseComponents
             return ret;
         }));
 
-        internal static readonly BindableProperty ResourceUrlSelectorProperty = BindableProperty.Create("ResourceUrlSelector", typeof(Selector<string>), typeof(ImageView), null, propertyChanged: (bindable, oldValue, newValue) =>
-        {
-            var imageView = (ImageView)bindable;
-            imageView.resourceUrlSelector.Update(imageView, (Selector<string>)newValue, true);
-        },
-        defaultValueCreator: (bindable) =>
-        {
-            var imageView = (ImageView)bindable;
-            return imageView.GetSelector<string>(imageView.resourceUrlSelector, ImageView.ResourceUrlProperty);
-        });
-
-        internal static readonly BindableProperty BorderSelectorProperty = BindableProperty.Create("BorderSelector", typeof(Selector<Rectangle>), typeof(ImageView), null, propertyChanged: (bindable, oldValue, newValue) =>
-        {
-            var imageView = (ImageView)bindable;
-            imageView.borderSelector.Update(imageView, (Selector<Rectangle>)newValue, true);
-        },
-        defaultValueCreator: (bindable) =>
-        {
-            var imageView = (ImageView)bindable;
-            return imageView.GetSelector<Rectangle>(imageView.borderSelector, ImageView.BorderProperty);
-        });
-
         private EventHandler<ResourceReadyEventArgs> _resourceReadyEventHandler;
         private ResourceReadyEventCallbackType _resourceReadyEventCallback;
         private EventHandler<ResourceLoadedEventArgs> _resourceLoadedEventHandler;
@@ -267,8 +252,8 @@ namespace Tizen.NUI.BaseComponents
         private int _desired_width = -1;
         private int _desired_height = -1;
         private VisualFittingModeType _fittingMode = VisualFittingModeType.Fill;
-        private readonly TriggerableSelector<string> resourceUrlSelector = new TriggerableSelector<string>(ResourceUrlProperty);
-        private readonly TriggerableSelector<Rectangle> borderSelector = new TriggerableSelector<Rectangle>(BorderProperty);
+        private TriggerableSelector<string> resourceUrlSelector;
+        private TriggerableSelector<Rectangle> borderSelector;
 
         /// <summary>
         /// Creates an initialized ImageView.
@@ -454,7 +439,6 @@ namespace Tizen.NUI.BaseComponents
             set
             {
                 SetValue(ResourceUrlProperty, value);
-                resourceUrlSelector.Reset(this);
                 NotifyPropertyChanged();
             }
         }
@@ -589,7 +573,6 @@ namespace Tizen.NUI.BaseComponents
             set
             {
                 SetValue(BorderProperty, value);
-                borderSelector.Reset(this);
                 NotifyPropertyChanged();
             }
         }
@@ -1083,6 +1066,19 @@ namespace Tizen.NUI.BaseComponents
             }
         }
 
+        internal Selector<string> ResourceUrlSelector
+        {
+            get => GetSelector<string>(resourceUrlSelector, ImageView.ResourceUrlProperty);
+            set
+            {
+                resourceUrlSelector?.Reset(this);
+                if (value == null) return;
+
+                if (value.HasAll()) SetResourceUrl(value.All);
+                else resourceUrlSelector = new TriggerableSelector<string>(this, value, SetResourceUrl, true);
+            }
+        }
+
         /// <summary>
         /// Get attributes, it is abstract function and must be override.
         /// </summary>
@@ -1173,6 +1169,28 @@ namespace Tizen.NUI.BaseComponents
             }
         }
 
+        private void SetResourceUrl(string value)
+        {
+            value = (value == null ? "" : value);
+            if (value.StartsWith("*Resource*"))
+            {
+                string resource = Tizen.Applications.Application.Current.DirectoryInfo.Resource;
+                value = value.Replace("*Resource*", resource);
+            }
+            _resourceUrl = value;
+            UpdateImage(ImageVisualProperty.URL, new PropertyValue(value));
+        }
+
+        private void SetBorder(Rectangle value)
+        {
+            if (value == null)
+            {
+                return;
+            }
+            _border = new Rectangle(value);
+            UpdateImage(NpatchImageVisualProperty.Border, new PropertyValue(_border));
+        }
+
         private void UpdateImageMap(PropertyMap fromMap)
         {
             PropertyMap imageMap = new PropertyMap();
index bacd141..3e8a1ca 100755 (executable)
@@ -28,27 +28,27 @@ namespace Tizen.NUI.BaseComponents
     {
         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public static readonly BindableProperty ResourceUrlSelectorProperty = BindableProperty.Create("ResourceUrlSelector", typeof(Selector<string>), typeof(ImageViewStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
+        public static readonly BindableProperty ResourceUrlProperty = BindableProperty.Create(nameof(ResourceUrl), typeof(Selector<string>), typeof(ImageViewStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
         {
             var imageViewStyle = (ImageViewStyle)bindable;
-            imageViewStyle.resourceUrlSelector = ((Selector<string>)newValue)?.Clone();
+            imageViewStyle.resourceUrl = ((Selector<string>)newValue)?.Clone();
         },
         defaultValueCreator: (bindable) =>
         {
             var imageViewStyle = (ImageViewStyle)bindable;
-            return imageViewStyle.resourceUrlSelector;
+            return imageViewStyle.resourceUrl;
         });
         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public static readonly BindableProperty BorderSelectorProperty = BindableProperty.Create("BorderSelector", typeof(Selector<Rectangle>), typeof(ImageViewStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
+        public static readonly BindableProperty BorderProperty = BindableProperty.Create(nameof(Border), typeof(Selector<Rectangle>), typeof(ImageViewStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
         {
             var imageViewStyle = (ImageViewStyle)bindable;
-            imageViewStyle.borderSelector = ((Selector<Rectangle>)newValue)?.Clone();
+            imageViewStyle.border = ((Selector<Rectangle>)newValue)?.Clone();
         },
         defaultValueCreator: (bindable) =>
         {
             var imageViewStyle = (ImageViewStyle)bindable;
-            return imageViewStyle.borderSelector;
+            return imageViewStyle.border;
         });
         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
         [EditorBrowsable(EditorBrowsableState.Never)]
@@ -90,8 +90,8 @@ namespace Tizen.NUI.BaseComponents
         private bool? borderOnly;
         private bool? synchronosLoading;
         private bool? orientationCorrection;
-        private Selector<string> resourceUrlSelector;
-        private Selector<Rectangle> borderSelector;
+        private Selector<string> resourceUrl;
+        private Selector<Rectangle> border;
 
         static ImageViewStyle() { }
 
@@ -136,10 +136,10 @@ namespace Tizen.NUI.BaseComponents
         {
             get
             {
-                Selector<string> tmp = (Selector<string>)GetValue(ResourceUrlSelectorProperty);
-                return (null != tmp) ? tmp : resourceUrlSelector = new Selector<string>();
+                Selector<string> tmp = (Selector<string>)GetValue(ResourceUrlProperty);
+                return (null != tmp) ? tmp : resourceUrl = new Selector<string>();
             }
-            set => SetValue(ResourceUrlSelectorProperty, value);
+            set => SetValue(ResourceUrlProperty, value);
         }
 
         /// <summary>
@@ -151,10 +151,10 @@ namespace Tizen.NUI.BaseComponents
         {
             get
             {
-                Selector<Rectangle> tmp = (Selector<Rectangle>)GetValue(BorderSelectorProperty);
-                return (null != tmp) ? tmp : borderSelector = new Selector<Rectangle>();
+                Selector<Rectangle> tmp = (Selector<Rectangle>)GetValue(BorderProperty);
+                return (null != tmp) ? tmp : border = new Selector<Rectangle>();
             }
-            set => SetValue(BorderSelectorProperty, value);
+            set => SetValue(BorderProperty, value);
         }
     }
 }
index a6d6977..81b932e 100755 (executable)
@@ -511,9 +511,9 @@ namespace Tizen.NUI.BaseComponents
             return (hash * 23) + itemSum;
         }
 
-        internal bool HasMultiValue()
+        internal bool HasAll()
         {
-            return SelectorItems.Count > 1;
+            return all != null;
         }
 
         internal void AddWithoutDuplicationCheck(ControlState state, T value)
@@ -553,67 +553,57 @@ namespace Tizen.NUI.BaseComponents
     [EditorBrowsable(EditorBrowsableState.Never)]
     public class TriggerableSelector<T>
     {
-        private readonly BindableProperty targetBindableProperty;
+        private readonly Action<T> targetPropertySetter;
         private Selector<T> selector;
 
         /// <summary>
         /// Create an TriggerableSelector.
         /// </summary>
-        /// <param name="targetBindableProperty">The TriggerableSelector will change this bindable property value when the view's ControlState has changed.</param>
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        public TriggerableSelector(BindableProperty targetBindableProperty)
-        {
-            this.targetBindableProperty = targetBindableProperty;
-        }
-
-        /// <summary>
-        /// Return the containing selector. It can be null.
-        /// </summary>
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        public Selector<T> Get() => selector;
-
-        /// <summary>
-        /// Update containing selector from the other selector.
-        /// </summary>
         /// <param name="view">The View that is affected by this TriggerableSelector.</param>
-        /// <param name="otherSelector">The copy target.</param>
-        /// <param name="updateView">Whether it updates the target view after update the selector or not.</param>
-        /// <exception cref="ArgumentNullException"> Thrown when view is null. </exception>
+        /// <param name="selector">The selector value.</param>
+        /// <param name="targetPropertySetter">The TriggerableSelector will call this setter when the view's ControlState has changed.</param>
+        /// <param name="updateView">Whether it updates the target view after create a instance.</param>
+        /// <exception cref="ArgumentNullException"> Thrown when given argument is null. </exception>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public void Update(View view, Selector<T> otherSelector, bool updateView = false)
+        public TriggerableSelector(View view, Selector<T> selector, Action<T> targetPropertySetter, bool updateView = false)
         {
-            Reset(view);
-
-            if (null == view)
+            if (view == null)
             {
                 throw new ArgumentNullException(nameof(view));
             }
 
-            if (otherSelector == null)
-            {
-                return;
-            }
+            this.selector = selector ?? throw new ArgumentNullException(nameof(selector));
+            this.targetPropertySetter = targetPropertySetter ?? throw new ArgumentNullException(nameof(targetPropertySetter));
 
-            selector = otherSelector;
-
-            if (otherSelector.HasMultiValue())
+            if (!selector.HasAll())
             {
                 view.ControlStateChangeEventInternal += OnViewControlState;
             }
 
-            if (updateView && otherSelector.GetValue(view.ControlState, out var value))
+            if (updateView && selector.GetValue(view.ControlState, out var value))
             {
-                view.SetValue(targetBindableProperty, value);
+                targetPropertySetter.Invoke(value);
             }
         }
 
         /// <summary>
+        /// Return the containing selector. It can be null.
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public Selector<T> Get() => selector;
+
+        /// <summary>
         /// Reset selector and listeners.
         /// </summary>
         /// <param name="view">The View that is affected by this TriggerableSelector.</param>
         [EditorBrowsable(EditorBrowsableState.Never)]
         public void Reset(View view)
         {
+            if (selector == null)
+            {
+                return;
+            }
+
             if (view != null)
             {
                 view.ControlStateChangeEventInternal -= OnViewControlState;
@@ -626,7 +616,7 @@ namespace Tizen.NUI.BaseComponents
             View view = obj as View;
             if (null != view && selector.GetValue(controlStateChangedInfo.CurrentState, out var value))
             {
-                view.SetValue(targetBindableProperty, value);
+                targetPropertySetter.Invoke(value);
             }
         }
     }
index 7a00eeb..dd3ec94 100755 (executable)
@@ -28,63 +28,63 @@ namespace Tizen.NUI.BaseComponents
     public class TextFieldStyle : ViewStyle
     {
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public static readonly BindableProperty FontFamilySelectorProperty = BindableProperty.Create("FontFamilySelector", typeof(Selector<string>), typeof(TextFieldStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
+        public static readonly BindableProperty FontFamilyProperty = BindableProperty.Create(nameof(FontFamily), typeof(string), typeof(TextFieldStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
         {
             var textFieldStyle = (TextFieldStyle)bindable;
-            textFieldStyle.fontFamilySelector = ((Selector<string>)newValue)?.Clone();
+            textFieldStyle.fontFamily = (string)newValue;
         },
         defaultValueCreator: (bindable) =>
         {
             var textFieldStyle = (TextFieldStyle)bindable;
-            return textFieldStyle.fontFamilySelector;
+            return textFieldStyle.fontFamily;
         });
         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public static readonly BindableProperty PointSizeSelectorProperty = BindableProperty.Create("PointSizeSelector", typeof(Selector<float?>), typeof(TextFieldStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
+        public static readonly BindableProperty PointSizeProperty = BindableProperty.Create(nameof(PointSize), typeof(float?), typeof(TextFieldStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
         {
             var textFieldStyle = (TextFieldStyle)bindable;
-            textFieldStyle.pointSizeSelector = ((Selector<float?>)newValue)?.Clone();
+            textFieldStyle.pointSize = (float?)newValue;
         },
         defaultValueCreator: (bindable) =>
         {
             var textFieldStyle = (TextFieldStyle)bindable;
-            return textFieldStyle.pointSizeSelector;
+            return textFieldStyle.pointSize;
         });
         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public static readonly BindableProperty TextColorSelectorProperty = BindableProperty.Create("TextColorSelector", typeof(Selector<Color>), typeof(TextFieldStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
+        public static readonly BindableProperty TextColorProperty = BindableProperty.Create(nameof(TextColor), typeof(Color), typeof(TextFieldStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
         {
             var textFieldStyle = (TextFieldStyle)bindable;
-            textFieldStyle.textColorSelector = ((Selector<Color>)newValue)?.Clone();
+            textFieldStyle.textColor = (Color)newValue;
         },
         defaultValueCreator: (bindable) =>
         {
             var textFieldStyle = (TextFieldStyle)bindable;
-            return textFieldStyle.textColorSelector;
+            return textFieldStyle.textColor;
         });
         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public static readonly BindableProperty PlaceholderTextColorSelectorProperty = BindableProperty.Create("PlaceholderTextColorSelector", typeof(Selector<Vector4>), typeof(TextFieldStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
+        public static readonly BindableProperty PlaceholderTextColorProperty = BindableProperty.Create(nameof(PlaceholderTextColor), typeof(Vector4), typeof(TextFieldStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
         {
             var textFieldStyle = (TextFieldStyle)bindable;
-            textFieldStyle.placeholderTextColorSelector = ((Selector<Vector4>)newValue)?.Clone();
+            textFieldStyle.placeholderTextColor = (Vector4)newValue;
         },
         defaultValueCreator: (bindable) =>
         {
             var textFieldStyle = (TextFieldStyle)bindable;
-            return textFieldStyle.placeholderTextColorSelector;
+            return textFieldStyle.placeholderTextColor;
         });
         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public static readonly BindableProperty PrimaryCursorColorSelectorProperty = BindableProperty.Create("PrimaryCursorColorSelector", typeof(Selector<Vector4>), typeof(TextFieldStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
+        public static readonly BindableProperty PrimaryCursorColorProperty = BindableProperty.Create(nameof(PrimaryCursorColor), typeof(Vector4), typeof(TextFieldStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
         {
             var textFieldStyle = (TextFieldStyle)bindable;
-            textFieldStyle.primaryCursorColorSelector = ((Selector<Vector4>)newValue)?.Clone();
+            textFieldStyle.primaryCursorColor = (Vector4)newValue;
         },
         defaultValueCreator: (bindable) =>
         {
             var textFieldStyle = (TextFieldStyle)bindable;
-            return textFieldStyle.primaryCursorColorSelector;
+            return textFieldStyle.primaryCursorColor;
         });
 
         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
@@ -437,15 +437,15 @@ namespace Tizen.NUI.BaseComponents
         });
         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public static readonly BindableProperty PixelSizeSelectorProperty = BindableProperty.Create("PixelSizeSelector", typeof(float?), typeof(TextFieldStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
+        public static readonly BindableProperty PixelSizeProperty = BindableProperty.Create(nameof(PixelSize), typeof(float?), typeof(TextFieldStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
         {
             var textFieldStyle = (TextFieldStyle)bindable;
-            textFieldStyle.pixelSizeSelector = ((Selector<float?>)newValue)?.Clone();
+            textFieldStyle.pixelSize = (float?)newValue;
         },
         defaultValueCreator: (bindable) =>
         {
             var textFieldStyle = (TextFieldStyle)bindable;
-            return textFieldStyle.pixelSizeSelector;
+            return textFieldStyle.pixelSize;
         });
         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
         [EditorBrowsable(EditorBrowsableState.Never)]
@@ -525,15 +525,15 @@ namespace Tizen.NUI.BaseComponents
         private string emboss;
         private string inputEmboss;
         private string inputOutline;
-        private Selector<float?> pixelSizeSelector;
+        private float? pixelSize;
         private bool? enableSelection;
         private bool? ellipsis;
         private bool? matchSystemLanguageDirection;
-        private Selector<string> fontFamilySelector;
-        private Selector<Color> textColorSelector;
-        private Selector<float?> pointSizeSelector;
-        private Selector<Vector4> placeholderTextColorSelector;
-        private Selector<Vector4> primaryCursorColorSelector;
+        private string fontFamily;
+        private Color textColor;
+        private float? pointSize;
+        private Vector4 placeholderTextColor;
+        private Vector4 primaryCursorColor;
         private PropertyMap fontStyle;
 
         static TextFieldStyle() { }
@@ -564,14 +564,10 @@ namespace Tizen.NUI.BaseComponents
 
         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public Selector<string> FontFamily
+        public string FontFamily
         {
-            get
-            {
-                Selector<string> tmp = (Selector<string>)GetValue(FontFamilySelectorProperty);
-                return (null != tmp) ? tmp : fontFamilySelector = new Selector<string>();
-            }
-            set => SetValue(FontFamilySelectorProperty, value);
+            get => (string)GetValue(FontFamilyProperty);
+            set => SetValue(FontFamilyProperty, value);
         }
 
         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
@@ -789,10 +785,10 @@ namespace Tizen.NUI.BaseComponents
 
         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public Selector<float?> PixelSize
+        public float? PixelSize
         {
-            get => (Selector<float?>)GetValue(PixelSizeSelectorProperty) ?? (pixelSizeSelector = new Selector<float?>());
-            set => SetValue(PixelSizeSelectorProperty, value);
+            get => (float?)GetValue(PixelSizeProperty);
+            set => SetValue(PixelSizeProperty, value);
         }
 
         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
@@ -821,38 +817,26 @@ namespace Tizen.NUI.BaseComponents
 
         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public Selector<Color> TextColor
+        public Color TextColor
         {
-            get
-            {
-                Selector<Color> tmp = (Selector<Color>)GetValue(TextColorSelectorProperty);
-                return (null != tmp) ? tmp : textColorSelector = new Selector<Color>();
-            }
-            set => SetValue(TextColorSelectorProperty, value);
+            get => (Color)GetValue(TextColorProperty);
+            set => SetValue(TextColorProperty, value);
         }
 
         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public Selector<float?> PointSize
+        public float? PointSize
         {
-            get
-            {
-                Selector<float?> tmp = (Selector<float?>)GetValue(PointSizeSelectorProperty);
-                return (null != tmp) ? tmp : pointSizeSelector = new Selector<float?>();
-            }
-            set => SetValue(PointSizeSelectorProperty, value);
+            get => (float?)GetValue(PointSizeProperty);
+            set => SetValue(PointSizeProperty, value);
         }
 
         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public Selector<Vector4> PlaceholderTextColor
+        public Vector4 PlaceholderTextColor
         {
-            get
-            {
-                Selector<Vector4> tmp = (Selector<Vector4>)GetValue(PlaceholderTextColorSelectorProperty);
-                return (null != tmp) ? tmp : placeholderTextColorSelector = new Selector<Vector4>();
-            }
-            set => SetValue(PlaceholderTextColorSelectorProperty, value);
+            get => (Vector4)GetValue(PlaceholderTextColorProperty);
+            set => SetValue(PlaceholderTextColorProperty, value);
         }
 
         /// <summary>
@@ -861,14 +845,10 @@ namespace Tizen.NUI.BaseComponents
         /// <since_tizen> 6 </since_tizen>
         /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public Selector<Vector4> PrimaryCursorColor
+        public Vector4 PrimaryCursorColor
         {
-            get
-            {
-                Selector<Vector4> tmp = (Selector<Vector4>)GetValue(PrimaryCursorColorSelectorProperty);
-                return (null != tmp) ? tmp : primaryCursorColorSelector = new Selector<Vector4>();
-            }
-            set => SetValue(PrimaryCursorColorSelectorProperty, value);
+            get => (Vector4)GetValue(PrimaryCursorColorProperty);
+            set => SetValue(PrimaryCursorColorProperty, value);
         }
 
         /// This will be public opened in tizen_6.5 after ACR done. Before ACR, need to be hidden as inhouse API.
index e0bb5ca..3bd0ccb 100755 (executable)
@@ -28,7 +28,7 @@ namespace Tizen.NUI.BaseComponents
     {
         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public static readonly BindableProperty TranslatableTextSelectorProperty = BindableProperty.Create("TranslatableTextSelector", typeof(Selector<string>), typeof(TextLabelStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
+        public static readonly BindableProperty TranslatableTextSelectorProperty = BindableProperty.Create(nameof(TranslatableText), typeof(Selector<string>), typeof(TextLabelStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
         {
             ((TextLabelStyle)bindable).translatableTextSelector = ((Selector<string>)newValue)?.Clone();
         },
@@ -38,7 +38,7 @@ namespace Tizen.NUI.BaseComponents
         });
         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public static readonly BindableProperty TextSelectorProperty = BindableProperty.Create("TextSelector", typeof(Selector<string>), typeof(TextLabelStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
+        public static readonly BindableProperty TextSelectorProperty = BindableProperty.Create(nameof(Text), typeof(Selector<string>), typeof(TextLabelStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
         {
             ((TextLabelStyle)bindable).textSelector = ((Selector<string>)newValue)?.Clone();
         },
@@ -48,7 +48,7 @@ namespace Tizen.NUI.BaseComponents
         });
         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public static readonly BindableProperty FontFamilySelectorProperty = BindableProperty.Create("FontFamilySelector", typeof(Selector<string>), typeof(TextLabelStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
+        public static readonly BindableProperty FontFamilySelectorProperty = BindableProperty.Create(nameof(FontFamily), typeof(Selector<string>), typeof(TextLabelStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
         {
             ((TextLabelStyle)bindable).fontFamilySelector = ((Selector<string>)newValue)?.Clone();
         },
@@ -58,7 +58,7 @@ namespace Tizen.NUI.BaseComponents
         });
         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public static readonly BindableProperty PointSizeSelectorProperty = BindableProperty.Create("PointSizeSelector", typeof(Selector<float?>), typeof(TextLabelStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
+        public static readonly BindableProperty PointSizeSelectorProperty = BindableProperty.Create(nameof(PointSize), typeof(Selector<float?>), typeof(TextLabelStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
         {
             ((TextLabelStyle)bindable).pointSizeSelector = ((Selector<float?>)newValue)?.Clone();
         },
@@ -68,7 +68,7 @@ namespace Tizen.NUI.BaseComponents
         });
         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public static readonly BindableProperty TextColorSelectorProperty = BindableProperty.Create("TextColorSelector", typeof(Selector<Color>), typeof(TextLabelStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
+        public static readonly BindableProperty TextColorSelectorProperty = BindableProperty.Create(nameof(TextColor), typeof(Selector<Color>), typeof(TextLabelStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
         {
             ((TextLabelStyle)bindable).textColorSelector = ((Selector<Color>)newValue)?.Clone();
         },
@@ -199,7 +199,7 @@ namespace Tizen.NUI.BaseComponents
         });
         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public static readonly BindableProperty PixelSizeSelectorProperty = BindableProperty.Create("PixelSizeSelector", typeof(Selector<float?>), typeof(TextLabelStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
+        public static readonly BindableProperty PixelSizeSelectorProperty = BindableProperty.Create(nameof(PixelSize), typeof(Selector<float?>), typeof(TextLabelStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
         {
             ((TextLabelStyle)bindable).pixelSizeSelector = ((Selector<float?>)newValue)?.Clone();
         },
@@ -281,7 +281,7 @@ namespace Tizen.NUI.BaseComponents
         });
         /// A BindableProperty for ImageShadow
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public static readonly BindableProperty TextShadowProperty = BindableProperty.Create("TextShadowSelector", typeof(Selector<TextShadow>), typeof(TextLabelStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
+        public static readonly BindableProperty TextShadowProperty = BindableProperty.Create(nameof(TextShadow), typeof(Selector<TextShadow>), typeof(TextLabelStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
         {
             ((TextLabelStyle)bindable).textShadow = ((Selector<TextShadow>)newValue)?.Clone();
         },
index 516c446..c616500 100755 (executable)
@@ -78,10 +78,10 @@ namespace Tizen.NUI.BaseComponents
         {
             get
             {
-                Selector<string> image = (Selector<string>)GetValue(BackgroundImageSelectorProperty);
+                Selector<string> image = (Selector<string>)GetValue(BackgroundImageProperty);
                 return (null != image) ? image : backgroundImageSelector = new Selector<string>();
             }
-            set => SetValue(BackgroundImageSelectorProperty, value);
+            set => SetValue(BackgroundImageProperty, value);
         }
 
         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
@@ -107,10 +107,10 @@ namespace Tizen.NUI.BaseComponents
         {
             get
             {
-                Selector<float?> opacity = (Selector<float?>)GetValue(OpacitySelectorProperty);
+                Selector<float?> opacity = (Selector<float?>)GetValue(OpacityProperty);
                 return (null != opacity) ? opacity : opacitySelector = new Selector<float?>();
             }
-            set => SetValue(OpacitySelectorProperty, value);
+            set => SetValue(OpacityProperty, value);
         }
 
         /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
@@ -297,10 +297,10 @@ namespace Tizen.NUI.BaseComponents
         {
             get
             {
-                Selector<Color> color = (Selector<Color>)GetValue(BackgroundColorSelectorProperty);
+                Selector<Color> color = (Selector<Color>)GetValue(BackgroundColorProperty);
                 return (null != color) ? color : backgroundColorSelector = new Selector<Color>();
             }
-            set => SetValue(BackgroundColorSelectorProperty, value);
+            set => SetValue(BackgroundColorProperty, value);
         }
 
         /// <summary>
@@ -309,8 +309,8 @@ namespace Tizen.NUI.BaseComponents
         [EditorBrowsable(EditorBrowsableState.Never)]
         public Selector<Color> Color
         {
-            get => (Selector<Color>)GetValue(ColorSelectorProperty) ?? (colorSelector = new Selector<Color>());
-            set => SetValue(ColorSelectorProperty, value);
+            get => (Selector<Color>)GetValue(ColorProperty) ?? (colorSelector = new Selector<Color>());
+            set => SetValue(ColorProperty, value);
         }
 
         /// <summary>View BackgroundBorder</summary>
@@ -320,10 +320,10 @@ namespace Tizen.NUI.BaseComponents
         {
             get
             {
-                Selector<Rectangle> border = (Selector<Rectangle>)GetValue(BackgroundImageBorderSelectorProperty);
+                Selector<Rectangle> border = (Selector<Rectangle>)GetValue(BackgroundImageBorderProperty);
                 return (null != border) ? border : backgroundImageBorderSelector = new Selector<Rectangle>();
             }
-            set => SetValue(BackgroundImageBorderSelectorProperty, value);
+            set => SetValue(BackgroundImageBorderProperty, value);
         }
 
         /// <summary>
@@ -336,8 +336,8 @@ namespace Tizen.NUI.BaseComponents
         [EditorBrowsable(EditorBrowsableState.Never)]
         public Selector<ImageShadow> ImageShadow
         {
-            get => (Selector<ImageShadow>)GetValue(ImageShadowSelectorProperty);
-            set => SetValue(ImageShadowSelectorProperty, value);
+            get => (Selector<ImageShadow>)GetValue(ImageShadowProperty);
+            set => SetValue(ImageShadowProperty, value);
         }
 
         /// <summary>
@@ -347,8 +347,8 @@ namespace Tizen.NUI.BaseComponents
         [EditorBrowsable(EditorBrowsableState.Never)]
         public Selector<Shadow> BoxShadow
         {
-            get => (Selector<Shadow>)GetValue(BoxShadowSelectorProperty);
-            set => SetValue(BoxShadowSelectorProperty, value);
+            get => (Selector<Shadow>)GetValue(BoxShadowProperty);
+            set => SetValue(BoxShadowProperty, value);
         }
 
         /// <summary>
@@ -400,31 +400,6 @@ namespace Tizen.NUI.BaseComponents
         /// </summary>
         internal HashSet<BindableProperty> DirtyProperties { get; private set; }
 
-        /// <summary>
-        /// Set style's bindable properties from the view.
-        /// </summary>
-        /// <param name="view">The view that includes property data.</param>
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        public virtual void CopyPropertiesFromView(View view)
-        {
-            if (view == null) return;
-
-            BindableProperty.GetBindablePropertysOfType(GetType(), out var styleProperties);
-            BindableProperty.GetBindablePropertysOfType(view.GetType(), out var viewProperties);
-
-
-            if (styleProperties == null || viewProperties == null) return;
-
-            foreach (var stylePropertyItem in styleProperties)
-            {
-                viewProperties.TryGetValue(stylePropertyItem.Key, out var viewProperty);
-
-                if (viewProperty == null) continue;
-
-                SetValue(stylePropertyItem.Value, view.GetValue(viewProperty));
-            }
-        }
-
         /// <summary>Create a cloned ViewStyle.</summary>
         [EditorBrowsable(EditorBrowsableState.Never)]
         public ViewStyle Clone()
index ba2f38e..1dba1f3 100755 (executable)
@@ -23,7 +23,7 @@ namespace Tizen.NUI.BaseComponents
     {
         /// <summary> Bindable property of BackgroundImage. Please do not open it. </summary>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public static readonly BindableProperty BackgroundImageSelectorProperty = BindableProperty.Create("BackgroundImageSelector", typeof(Selector<string>), typeof(ViewStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
+        public static readonly BindableProperty BackgroundImageProperty = BindableProperty.Create(nameof(BackgroundImage), typeof(Selector<string>), typeof(ViewStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
         {
             var viewStyle = (ViewStyle)bindable;
 
@@ -64,7 +64,7 @@ namespace Tizen.NUI.BaseComponents
 
         /// <summary> Bindable property of Opacity. Please do not open it. </summary>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public static readonly BindableProperty OpacitySelectorProperty = BindableProperty.Create("OpacitySelector", typeof(Selector<float?>), typeof(ViewStyle), null,
+        public static readonly BindableProperty OpacityProperty = BindableProperty.Create(nameof(Opacity), typeof(Selector<float?>), typeof(ViewStyle), null,
             propertyChanged: (bindable, oldValue, newValue) => ((ViewStyle)bindable).opacitySelector = (Selector<float?>)newValue,
             defaultValueCreator: (bindable) => ((ViewStyle)bindable).opacitySelector
         );
@@ -299,7 +299,7 @@ namespace Tizen.NUI.BaseComponents
 
         /// <summary> Bindable property of BackgroundColor. Please do not open it. </summary>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public static readonly BindableProperty BackgroundColorSelectorProperty = BindableProperty.Create("BackgroundColorSelector", typeof(Selector<Color>), typeof(ViewStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
+        public static readonly BindableProperty BackgroundColorProperty = BindableProperty.Create(nameof(BackgroundColor), typeof(Selector<Color>), typeof(ViewStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
         {
             var viewStyle = (ViewStyle)bindable;
 
@@ -321,21 +321,21 @@ namespace Tizen.NUI.BaseComponents
 
         /// <summary> Bindable property of ColorSelector. Please do not open it. </summary>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public static readonly BindableProperty ColorSelectorProperty = BindableProperty.Create("ColorSelector", typeof(Selector<Color>), typeof(ViewStyle), null,
+        public static readonly BindableProperty ColorProperty = BindableProperty.Create(nameof(Color), typeof(Selector<Color>), typeof(ViewStyle), null,
             propertyChanged: (bindable, oldValue, newValue) => ((ViewStyle)bindable).colorSelector = (Selector<Color>)newValue,
             defaultValueCreator: (bindable) => ((ViewStyle)bindable).colorSelector
         );
 
         /// <summary> Bindable property of BackgroundImageBorder. Please do not open it. </summary>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public static readonly BindableProperty BackgroundImageBorderSelectorProperty = BindableProperty.Create("BackgroundImageBorderSelector", typeof(Selector<Rectangle>), typeof(ViewStyle), null,
+        public static readonly BindableProperty BackgroundImageBorderProperty = BindableProperty.Create(nameof(BackgroundImageBorder), typeof(Selector<Rectangle>), typeof(ViewStyle), null,
             propertyChanged: (bindable, oldValue, newValue) => ((ViewStyle)bindable).backgroundImageBorderSelector = (Selector<Rectangle>)newValue,
             defaultValueCreator: (bindable) => ((ViewStyle)bindable).backgroundImageBorderSelector
         );
 
         /// <summary> Bindable property of ImageShadow. Please do not open it. </summary>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public static readonly BindableProperty ImageShadowSelectorProperty = BindableProperty.Create("ImageShadowSelector", typeof(Selector<ImageShadow>), typeof(ViewStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
+        public static readonly BindableProperty ImageShadowProperty = BindableProperty.Create(nameof(ImageShadow), typeof(Selector<ImageShadow>), typeof(ViewStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
         {
             var viewStyle = (ViewStyle)bindable;
 
@@ -354,7 +354,7 @@ namespace Tizen.NUI.BaseComponents
 
         /// <summary> Bindable property of BoxShadow. Please do not open it. </summary>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public static readonly BindableProperty BoxShadowSelectorProperty = BindableProperty.Create("BoxShadowSelector", typeof(Selector<Shadow>), typeof(ViewStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
+        public static readonly BindableProperty BoxShadowProperty = BindableProperty.Create(nameof(BoxShadow), typeof(Selector<Shadow>), typeof(ViewStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
         {
             var viewStyle = (ViewStyle)bindable;
 
index 47ba1b8..ec800c7 100755 (executable)
@@ -1,5 +1,5 @@
 /*
- * Copyright(c) 2019 Samsung Electronics Co., Ltd.
+ * Copyright(c) 2021 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -35,7 +35,6 @@ namespace Tizen.NUI.BaseComponents
         private string textFieldPlaceHolderTextFocusedSid = null;
         private bool systemlangTextFlag = false;
         private InputMethodContext inputMethodCotext = null;
-        private TextFieldSelectorData selectorData;
         private float fontSizeScale = 1.0f;
         private bool hasFontSizeChangedCallback = false;
 
@@ -119,7 +118,6 @@ namespace Tizen.NUI.BaseComponents
             }
             set
             {
-                selectorData?.TranslatableText?.Reset(this);
                 SetValue(TranslatableTextProperty, value);
             }
         }
@@ -158,7 +156,6 @@ namespace Tizen.NUI.BaseComponents
             set
             {
                 SetValue(TranslatablePlaceholderTextProperty, value);
-                selectorData?.TranslatablePlaceholderText?.Reset(this);
             }
         }
         private string translatablePlaceholderText
@@ -197,7 +194,6 @@ namespace Tizen.NUI.BaseComponents
             set
             {
                 SetValue(TranslatablePlaceholderTextFocusedProperty, value);
-                selectorData?.TranslatablePlaceholderTextFocused?.Reset(this);
             }
         }
         private string translatablePlaceholderTextFocused
@@ -231,7 +227,6 @@ namespace Tizen.NUI.BaseComponents
             set
             {
                 SetValueAndForceSendChangeSignal(TextProperty, value);
-                selectorData?.Text?.Reset(this);
                 NotifyPropertyChanged();
             }
         }
@@ -283,7 +278,6 @@ namespace Tizen.NUI.BaseComponents
             set
             {
                 SetValue(FontFamilyProperty, value);
-                selectorData?.FontFamily?.Reset(this);
                 NotifyPropertyChanged();
             }
         }
@@ -318,7 +312,6 @@ namespace Tizen.NUI.BaseComponents
             set
             {
                 SetValue(PointSizeProperty, value);
-                selectorData?.PointSize?.Reset(this);
                 NotifyPropertyChanged();
             }
         }
@@ -409,7 +402,6 @@ namespace Tizen.NUI.BaseComponents
             set
             {
                 SetValue(TextColorProperty, value);
-                selectorData?.TextColor?.Reset(this);
                 NotifyPropertyChanged();
             }
         }
@@ -431,7 +423,6 @@ namespace Tizen.NUI.BaseComponents
             set
             {
                 SetValue(PlaceholderTextColorProperty, value);
-                selectorData?.PlaceholderTextColor?.Reset(this);
                 NotifyPropertyChanged();
             }
         }
@@ -509,7 +500,6 @@ namespace Tizen.NUI.BaseComponents
             set
             {
                 SetValue(PrimaryCursorColorProperty, value);
-                selectorData?.PrimaryCursorColor?.Reset(this);
                 NotifyPropertyChanged();
             }
         }
@@ -1087,7 +1077,6 @@ namespace Tizen.NUI.BaseComponents
             set
             {
                 SetValue(PixelSizeProperty, value);
-                selectorData?.PixelSize?.Reset(this);
                 NotifyPropertyChanged();
             }
         }
@@ -1433,8 +1422,6 @@ namespace Tizen.NUI.BaseComponents
             }
         }
 
-        private TextFieldSelectorData EnsureSelectorData() => selectorData ?? (selectorData = new TextFieldSelectorData());
-
         /// <summary>
         /// Get the InputMethodContext instance.
         /// </summary>
@@ -1511,7 +1498,6 @@ namespace Tizen.NUI.BaseComponents
                 //Called by User
                 //Release your own managed resources here.
                 //You should release all of your own disposable objects here.
-                selectorData?.Reset(this);
             }
 
             //Release your own unmanaged resources here.
index 209b6cc..b332ed7 100755 (executable)
@@ -1,5 +1,5 @@
 /*
- * Copyright(c) 2019 Samsung Electronics Co., Ltd.
+ * Copyright(c) 2021 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -1023,141 +1023,5 @@ namespace Tizen.NUI.BaseComponents
             Tizen.NUI.Object.GetProperty((System.Runtime.InteropServices.HandleRef)textField.SwigCPtr, TextField.Property.GrabHandleColor).Get(temp);
             return temp;
         }));
-
-        #region Selectors
-        internal static readonly BindableProperty TranslatableTextSelectorProperty = BindableProperty.Create("TranslatableTextSelector", typeof(Selector<string>), typeof(TextField), null, propertyChanged: (bindable, oldValue, newValue) =>
-        {
-            var textField = (TextField)bindable;
-            textField.EnsureSelectorData().EnsureTranslatableText().Update(textField, (Selector<string>)newValue, true);
-        },
-        defaultValueCreator: (bindable) =>
-        {
-            var textField = (TextField)bindable;
-            return textField.GetSelector<string>(textField.selectorData?.TranslatableText, TextField.TranslatableTextProperty);
-        });
-        internal static readonly BindableProperty TranslatablePlaceholderTextSelectorProperty = BindableProperty.Create("TranslatablePlaceholderTextSelector", typeof(Selector<string>), typeof(TextField), null, propertyChanged: (bindable, oldValue, newValue) =>
-        {
-            var textField = (TextField)bindable;
-            textField.EnsureSelectorData().EnsureTranslatablePlaceholderText().Update(textField, (Selector<string>)newValue, true);
-        },
-        defaultValueCreator: (bindable) =>
-        {
-            var textField = (TextField)bindable;
-            return textField.GetSelector<string>(textField.selectorData?.TranslatablePlaceholderText, TextField.TranslatablePlaceholderTextProperty);
-        });
-        internal static readonly BindableProperty TranslatablePlaceholderTextFocusedSelectorProperty = BindableProperty.Create("TranslatablePlaceholderTextFocusedSelector", typeof(Selector<string>), typeof(TextField), null, propertyChanged: (bindable, oldValue, newValue) =>
-        {
-            var textField = (TextField)bindable;
-            textField.EnsureSelectorData().EnsureTranslatablePlaceholderTextFocused().Update(textField, (Selector<string>)newValue, true);
-        },
-        defaultValueCreator: (bindable) =>
-        {
-            var textField = (TextField)bindable;
-            return textField.GetSelector<string>(textField.selectorData?.TranslatablePlaceholderTextFocused, TextField.TranslatablePlaceholderTextFocusedProperty);
-        });
-        internal static readonly BindableProperty TextSelectorProperty = BindableProperty.Create("TextSelector", typeof(Selector<string>), typeof(TextField), null, propertyChanged: (bindable, oldValue, newValue) =>
-        {
-            var textField = (TextField)bindable;
-            textField.EnsureSelectorData().EnsureText().Update(textField, (Selector<string>)newValue, true);
-        },
-        defaultValueCreator: (bindable) =>
-        {
-            var textField = (TextField)bindable;
-            return textField.GetSelector<string>(textField.selectorData?.Text, TextField.TextProperty);
-        });
-        internal static readonly BindableProperty FontFamilySelectorProperty = BindableProperty.Create("FontFamilySelector", typeof(Selector<string>), typeof(TextField), null, propertyChanged: (bindable, oldValue, newValue) =>
-        {
-            var textField = (TextField)bindable;
-            textField.EnsureSelectorData().EnsureFontFamily().Update(textField, (Selector<string>)newValue, true);
-        },
-        defaultValueCreator: (bindable) =>
-        {
-            var textField = (TextField)bindable;
-            return textField.GetSelector<string>(textField.selectorData?.FontFamily, TextField.FontFamilyProperty);
-        });
-        internal static readonly BindableProperty PointSizeSelectorProperty = BindableProperty.Create("PointSizeSelector", typeof(Selector<float?>), typeof(TextField), null, propertyChanged: (bindable, oldValue, newValue) =>
-        {
-            var textField = (TextField)bindable;
-            textField.EnsureSelectorData().EnsurePointSize().Update(textField, (Selector<float?>)newValue, true);
-        },
-        defaultValueCreator: (bindable) =>
-        {
-            var textField = (TextField)bindable;
-            return textField.GetSelector<float?>(textField.selectorData?.PointSize, TextField.PointSizeProperty);
-        });
-        internal static readonly BindableProperty PixelSizeSelectorProperty = BindableProperty.Create("PixelSizeSelector", typeof(Selector<float?>), typeof(TextField), null, propertyChanged: (bindable, oldValue, newValue) =>
-        {
-            var textField = (TextField)bindable;
-            textField.EnsureSelectorData().EnsurePixelSize().Update(textField, (Selector<float?>)newValue, true);
-        },
-        defaultValueCreator: (bindable) =>
-        {
-            var textField = (TextField)bindable;
-            return textField.GetSelector<float?>(textField.selectorData?.PixelSize, TextField.PixelSizeProperty);
-        });
-        internal static readonly BindableProperty TextColorSelectorProperty = BindableProperty.Create("TextColorSelector", typeof(Selector<Color>), typeof(TextField), null, propertyChanged: (bindable, oldValue, newValue) =>
-        {
-            var textField = (TextField)bindable;
-            textField.EnsureSelectorData().EnsureTextColor().Update(textField, (Selector<Color>)newValue, true);
-        },
-        defaultValueCreator: (bindable) =>
-        {
-            var textField = (TextField)bindable;
-            var selector =  textField.selectorData?.TextColor?.Get();
-            if (selector != null)
-            {
-                return selector;
-            }
-
-            Color color = new Color();
-            if (!textField.GetProperty(TextField.Property.TextColor).Get(color))
-            {
-                return null;
-            }
-            return new Selector<Color>(color);
-        });
-        internal static readonly BindableProperty PlaceholderTextColorSelectorProperty = BindableProperty.Create("PlaceholderTextColorSelector", typeof(Selector<Vector4>), typeof(TextField), null, propertyChanged: (bindable, oldValue, newValue) =>
-        {
-            var textField = (TextField)bindable;
-            textField.EnsureSelectorData().EnsurePlaceholderTextColor().Update(textField, (Selector<Vector4>)newValue, true);
-        },
-        defaultValueCreator: (bindable) =>
-        {
-            var textField = (TextField)bindable;
-            var selector =  textField.selectorData?.PlaceholderTextColor?.Get();
-            if (selector != null)
-            {
-                return selector;
-            }
-
-            Color color = new Color();
-            if (!textField.GetProperty(TextField.Property.PlaceholderTextColor).Get(color))
-            {
-                return null;
-            }
-            return new Selector<Color>(color);
-        });
-        internal static readonly BindableProperty PrimaryCursorColorSelectorProperty = BindableProperty.Create("PrimaryCursorColorSelector", typeof(Selector<Vector4>), typeof(TextField), null, propertyChanged: (bindable, oldValue, newValue) =>
-        {
-            var textField = (TextField)bindable;
-            textField.EnsureSelectorData().EnsurePrimaryCursorColor().Update(textField, (Selector<Vector4>)newValue, true);
-        },
-        defaultValueCreator: (bindable) =>
-        {
-            var textField = (TextField)bindable;
-            var selector =  textField.selectorData?.PrimaryCursorColor?.Get();
-            if (selector != null)
-            {
-                return selector;
-            }
-
-            Color color = new Color();
-            if (!textField.GetProperty(TextField.Property.PrimaryCursorColor).Get(color))
-            {
-                return null;
-            }
-            return new Selector<Color>(color);
-        });
-        #endregion
     }
 }
diff --git a/src/Tizen.NUI/src/public/BaseComponents/TextFieldSelectorData.cs b/src/Tizen.NUI/src/public/BaseComponents/TextFieldSelectorData.cs
deleted file mode 100755 (executable)
index 1a73502..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright(c) 2020 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-namespace Tizen.NUI.BaseComponents
-{
-    /// <summary>
-    /// The class storing extra data for a TextField to optimize size of it.
-    /// </summary>
-    internal class TextFieldSelectorData
-    {
-        public TriggerableSelector<string> TranslatableText { get; private set; }
-        public TriggerableSelector<string> Text { get; private set; }
-        public TriggerableSelector<string> FontFamily { get; private set; }
-        public TriggerableSelector<Color> TextColor { get; private set; }
-        public TriggerableSelector<float?> PointSize { get; private set; }
-        public TriggerableSelector<float?> PixelSize { get; private set; }
-        public TriggerableSelector<string> TranslatablePlaceholderText { get; private set; }
-        public TriggerableSelector<string> TranslatablePlaceholderTextFocused { get; private set; }
-        public TriggerableSelector<Vector4> PlaceholderTextColor { get; private set; }
-        public TriggerableSelector<Vector4> PrimaryCursorColor { get; private set; }
-
-        public TriggerableSelector<string> EnsureTranslatableText() => TranslatableText ?? (TranslatableText = new TriggerableSelector<string>(TextField.TranslatableTextProperty));
-        public TriggerableSelector<string> EnsureText() => Text ?? (Text = new TriggerableSelector<string>(TextField.TextProperty));
-        public TriggerableSelector<string> EnsureFontFamily() => FontFamily ?? (FontFamily = new TriggerableSelector<string>(TextField.FontFamilyProperty));
-        public TriggerableSelector<Color> EnsureTextColor() => TextColor ?? (TextColor = new TriggerableSelector<Color>(TextField.TextColorProperty));
-        public TriggerableSelector<float?> EnsurePointSize() => PointSize ?? (PointSize = new TriggerableSelector<float?>(TextField.PointSizeProperty));
-        public TriggerableSelector<float?> EnsurePixelSize() => PixelSize ?? (PixelSize = new TriggerableSelector<float?>(TextField.PixelSizeProperty));
-        public TriggerableSelector<string> EnsureTranslatablePlaceholderText() => TranslatablePlaceholderText ?? (TranslatablePlaceholderText = new TriggerableSelector<string>(TextField.TranslatablePlaceholderTextProperty));
-        public TriggerableSelector<string> EnsureTranslatablePlaceholderTextFocused() => TranslatablePlaceholderTextFocused ?? (TranslatablePlaceholderTextFocused = new TriggerableSelector<string>(TextField.TranslatablePlaceholderTextFocusedProperty));
-        public TriggerableSelector<Vector4> EnsurePlaceholderTextColor() =>  PlaceholderTextColor ?? (PlaceholderTextColor = new TriggerableSelector<Vector4>(TextField.PlaceholderTextColorProperty));
-        public TriggerableSelector<Vector4> EnsurePrimaryCursorColor() => PrimaryCursorColor ?? (PrimaryCursorColor = new TriggerableSelector<Vector4>(TextField.PrimaryCursorColorProperty));
-
-        public void Reset(View view)
-        {
-            TranslatableText?.Reset(view);
-            Text?.Reset(view);
-            FontFamily?.Reset(view);
-            TextColor?.Reset(view);
-            PointSize?.Reset(view);
-            PixelSize?.Reset(view);
-            TranslatablePlaceholderText?.Reset(view);
-            TranslatablePlaceholderTextFocused?.Reset(view);
-            PlaceholderTextColor?.Reset(view);
-            PrimaryCursorColor?.Reset(view);
-        }
-    }
-}
index dcc903c..c989f02 100755 (executable)
@@ -186,7 +186,6 @@ namespace Tizen.NUI.BaseComponents
             set
             {
                 SetValue(TranslatableTextProperty, value);
-                selectorData?.TranslatableText?.Reset(this);
             }
         }
         private string translatableText
@@ -367,7 +366,6 @@ namespace Tizen.NUI.BaseComponents
             set
             {
                 SetValue(TextColorProperty, value);
-                selectorData?.TextColor?.Reset(this);
                 NotifyPropertyChanged();
             }
         }
@@ -684,7 +682,6 @@ namespace Tizen.NUI.BaseComponents
             set
             {
                 SetValue(TextShadowProperty, value);
-                selectorData?.TextShadow?.Reset(this);
                 NotifyPropertyChanged();
             }
         }
index e795e8e..a77a2d4 100755 (executable)
@@ -1,5 +1,5 @@
 /*
- * Copyright(c) 2020 Samsung Electronics Co., Ltd.
+ * Copyright(c) 2021 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -35,9 +35,15 @@ namespace Tizen.NUI.BaseComponents
         public static readonly BindableProperty TranslatableTextProperty = BindableProperty.Create(nameof(TranslatableText), typeof(string), typeof(TextLabel), string.Empty, propertyChanged: (bindable, oldValue, newValue) =>
         {
             var textLabel = (TextLabel)bindable;
-            if (newValue != null)
+
+            if (newValue is Selector<string> selector)
+            {
+                textLabel.TranslatableTextSelector = selector;
+            }
+            else
             {
-                textLabel.translatableText = (string)newValue;
+                textLabel.selectorData?.TranslatableText?.Reset(textLabel);
+                textLabel.SetTranslatableText((string)newValue);
             }
         },
         defaultValueCreator: (bindable) =>
@@ -50,11 +56,15 @@ namespace Tizen.NUI.BaseComponents
         public static readonly BindableProperty TextProperty = BindableProperty.Create(nameof(Text), typeof(string), typeof(TextLabel), string.Empty, propertyChanged: (BindableProperty.BindingPropertyChangedDelegate)((bindable, oldValue, newValue) =>
         {
             var textLabel = (TextLabel)bindable;
-            if (newValue != null)
+
+            if (newValue is Selector<string> selector)
+            {
+                textLabel.TextSelector = selector;
+            }
+            else
             {
-                Tizen.NUI.Object.SetProperty((System.Runtime.InteropServices.HandleRef)textLabel.SwigCPtr, TextLabel.Property.TEXT, new Tizen.NUI.PropertyValue((string)newValue));
                 textLabel.selectorData?.Text?.Reset(textLabel);
-                textLabel.RequestLayout();
+                textLabel.SetText((string)newValue);
             }
         }),
         defaultValueCreator: (BindableProperty.CreateDefaultValueDelegate)((bindable) =>
@@ -69,11 +79,15 @@ namespace Tizen.NUI.BaseComponents
         public static readonly BindableProperty FontFamilyProperty = BindableProperty.Create(nameof(FontFamily), typeof(string), typeof(TextLabel), string.Empty, propertyChanged: (BindableProperty.BindingPropertyChangedDelegate)((bindable, oldValue, newValue) =>
         {
             var textLabel = (TextLabel)bindable;
-            if (newValue != null)
+
+            if (newValue is Selector<string> selector)
+            {
+                textLabel.FontFamilySelector = selector;
+            }
+            else
             {
-                Tizen.NUI.Object.SetProperty((System.Runtime.InteropServices.HandleRef)textLabel.SwigCPtr, TextLabel.Property.FontFamily, new Tizen.NUI.PropertyValue((string)newValue));
                 textLabel.selectorData?.FontFamily?.Reset(textLabel);
-                textLabel.RequestLayout();
+                textLabel.SetFontFamily((string)newValue);
             }
         }),
         defaultValueCreator: (BindableProperty.CreateDefaultValueDelegate)((bindable) =>
@@ -106,11 +120,15 @@ namespace Tizen.NUI.BaseComponents
         public static readonly BindableProperty PointSizeProperty = BindableProperty.Create(nameof(PointSize), typeof(float), typeof(TextLabel), default(float), propertyChanged: (BindableProperty.BindingPropertyChangedDelegate)((bindable, oldValue, newValue) =>
         {
             var textLabel = (TextLabel)bindable;
-            if (newValue != null)
+
+            if (newValue is Selector<float?> selector)
+            {
+                textLabel.PointSizeSelector = selector;
+            }
+            else
             {
-                Tizen.NUI.Object.SetProperty((System.Runtime.InteropServices.HandleRef)textLabel.SwigCPtr, TextLabel.Property.PointSize, new Tizen.NUI.PropertyValue((float)newValue));
                 textLabel.selectorData?.PointSize?.Reset(textLabel);
-                textLabel.RequestLayout();
+                textLabel.SetPointSize((float?)newValue);
             }
         }),
         defaultValueCreator: (BindableProperty.CreateDefaultValueDelegate)((bindable) =>
@@ -188,9 +206,15 @@ namespace Tizen.NUI.BaseComponents
         public static readonly BindableProperty TextColorProperty = BindableProperty.Create(nameof(TextColor), typeof(Color), typeof(TextLabel), null, propertyChanged: (BindableProperty.BindingPropertyChangedDelegate)((bindable, oldValue, newValue) =>
         {
             var textLabel = (TextLabel)bindable;
-            if (newValue != null)
+
+            if (newValue is Selector<Color> selector)
+            {
+                textLabel.TextColorSelector = selector;
+            }
+            else
             {
-                Tizen.NUI.Object.SetProperty((System.Runtime.InteropServices.HandleRef)textLabel.SwigCPtr, TextLabel.Property.TextColor, new Tizen.NUI.PropertyValue((Color)newValue));
+                textLabel.selectorData?.TextColor?.Reset(textLabel);
+                textLabel.SetTextColor((Color)newValue);
             }
         }),
         defaultValueCreator: (BindableProperty.CreateDefaultValueDelegate)((bindable) =>
@@ -343,9 +367,15 @@ namespace Tizen.NUI.BaseComponents
         public static readonly BindableProperty TextShadowProperty = BindableProperty.Create(nameof(TextShadow), typeof(TextShadow), typeof(TextLabel), null, propertyChanged: (BindableProperty.BindingPropertyChangedDelegate)((bindable, oldValue, newValue) =>
         {
             var textLabel = (TextLabel)bindable;
-            if (newValue != null)
+
+            if (newValue is Selector<TextShadow> selector)
+            {
+                textLabel.TextShadowSelector = selector;
+            }
+            else
             {
-                Object.SetProperty((System.Runtime.InteropServices.HandleRef)textLabel.SwigCPtr, Property.SHADOW, TextShadow.ToPropertyValue((TextShadow)newValue));
+                textLabel.selectorData?.TextShadow?.Reset(textLabel);
+                textLabel.SetTextShadow((TextShadow)newValue);
             }
         }),
         defaultValueCreator: (BindableProperty.CreateDefaultValueDelegate)((bindable) =>
@@ -394,11 +424,15 @@ namespace Tizen.NUI.BaseComponents
         public static readonly BindableProperty PixelSizeProperty = BindableProperty.Create(nameof(PixelSize), typeof(float), typeof(TextLabel), default(float), propertyChanged: (BindableProperty.BindingPropertyChangedDelegate)((bindable, oldValue, newValue) =>
         {
             var textLabel = (TextLabel)bindable;
-            if (newValue != null)
+
+            if (newValue is Selector<float?> selector)
+            {
+                textLabel.PixelSizeSelector = selector;
+            }
+            else
             {
-                Tizen.NUI.Object.SetProperty((System.Runtime.InteropServices.HandleRef)textLabel.SwigCPtr, TextLabel.Property.PixelSize, new Tizen.NUI.PropertyValue((float)newValue));
                 textLabel.selectorData?.PixelSize?.Reset(textLabel);
-                textLabel.RequestLayout();
+                textLabel.SetPixelSize((float?)newValue);
             }
         }),
         defaultValueCreator: (BindableProperty.CreateDefaultValueDelegate)((bindable) =>
@@ -575,91 +609,169 @@ namespace Tizen.NUI.BaseComponents
             return temp;
         }));
 
-        #region Selectors
-        internal static readonly BindableProperty TranslatableTextSelectorProperty = BindableProperty.Create("TranslatableTextSelector", typeof(Selector<string>), typeof(TextLabel), null, propertyChanged: (bindable, oldValue, newValue) =>
-        {
-            var textLabel = (TextLabel)bindable;
-            textLabel.EnsureSelectorData().EnsureTranslatableText().Update(textLabel, (Selector<string>)newValue, true);
-        },
-        defaultValueCreator: (bindable) =>
+        internal Selector<string> TranslatableTextSelector
         {
-            var textLabel = (TextLabel)bindable;
-            return textLabel.GetSelector<string>(textLabel.selectorData?.TranslatableText, TextLabel.TranslatableTextProperty);
-        });
-        internal static readonly BindableProperty TextSelectorProperty = BindableProperty.Create("TextSelector", typeof(Selector<string>), typeof(TextLabel), null, propertyChanged: (bindable, oldValue, newValue) =>
-        {
-            var textLabel = (TextLabel)bindable;
-            textLabel.EnsureSelectorData().EnsureText().Update(textLabel, (Selector<string>)newValue, true);
-        },
-        defaultValueCreator: (bindable) =>
+            get => GetSelector<string>(selectorData?.TranslatableText, TextLabel.TranslatableTextProperty);
+            set
+            {
+                selectorData?.TranslatableText?.Reset(this);
+                if (value == null) return;
+
+                if (value.HasAll()) SetTranslatableText(value.All);
+                else EnsureSelectorData().TranslatableText = new TriggerableSelector<string>(this, value, SetTranslatableText, true);
+            }
+        }
+
+        internal Selector<string> TextSelector
         {
-            var textLabel = (TextLabel)bindable;
-            return textLabel.GetSelector<string>(textLabel.selectorData?.Text, TextLabel.TextProperty);
-        });
-        internal static readonly BindableProperty FontFamilySelectorProperty = BindableProperty.Create("FontFamilySelector", typeof(Selector<string>), typeof(TextLabel), null, propertyChanged: (bindable, oldValue, newValue) =>
+            get => GetSelector<string>(selectorData?.Text, TextLabel.TextProperty);
+            set
+            {
+                selectorData?.Text?.Reset(this);
+                if (value == null) return;
+
+                if (value.HasAll()) SetText(value.All);
+                else EnsureSelectorData().Text = new TriggerableSelector<string>(this, value, SetText, true);
+            }
+        }
+
+        internal Selector<string> FontFamilySelector
         {
-            var textLabel = (TextLabel)bindable;
-            textLabel.EnsureSelectorData().EnsureFontFamily().Update(textLabel, (Selector<string>)newValue, true);
-        },
-        defaultValueCreator: (bindable) =>
+            get => GetSelector<string>(selectorData?.FontFamily, TextLabel.FontFamilyProperty);
+            set
+            {
+                selectorData?.FontFamily?.Reset(this);
+                if (value == null) return;
+
+                if (value.HasAll()) SetFontFamily(value.All);
+                else EnsureSelectorData().FontFamily = new TriggerableSelector<string>(this, value, SetFontFamily, true);
+            }
+        }
+
+        internal Selector<float?> PointSizeSelector
         {
-            var textLabel = (TextLabel)bindable;
-            return textLabel.GetSelector<string>(textLabel.selectorData?.FontFamily, TextLabel.FontFamilyProperty);
-        });
-        internal static readonly BindableProperty PointSizeSelectorProperty = BindableProperty.Create("PointSizeSelector", typeof(Selector<float?>), typeof(TextLabel), null, propertyChanged: (bindable, oldValue, newValue) =>
+            get => GetSelector<float?>(selectorData?.PointSize, TextLabel.PointSizeProperty);
+            set
+            {
+                selectorData?.PointSize?.Reset(this);
+                if (value == null) return;
+
+                if (value.HasAll()) SetPointSize(value.All);
+                else EnsureSelectorData().PointSize = new TriggerableSelector<float?>(this, value, SetPointSize, true);
+            }
+        }
+
+        internal Selector<Color> TextColorSelector
         {
-            var textLabel = (TextLabel)bindable;
-            textLabel.EnsureSelectorData().EnsurePointSize().Update(textLabel, (Selector<float?>)newValue, true);
-        },
-        defaultValueCreator: (bindable) =>
+            get
+            {
+                var selector =  selectorData?.TextColor?.Get();
+                if (selector != null)
+                {
+                    return selector;
+                }
+
+                Color color = new Color();
+                if (!GetProperty(TextLabel.Property.TextColor).Get(color))
+                {
+                    return null;
+                }
+                return new Selector<Color>(color);
+            }
+            set
+            {
+                selectorData?.TextColor?.Reset(this);
+                if (value == null) return;
+
+                if (value.HasAll()) SetTextColor(value.All);
+                else EnsureSelectorData().TextColor = new TriggerableSelector<Color>(this, value, SetTextColor, true);
+            }
+        }
+
+        internal Selector<float?> PixelSizeSelector
         {
-            var textLabel = (TextLabel)bindable;
-            return textLabel.GetSelector<float?>(textLabel.selectorData?.PointSize, TextLabel.PointSizeProperty);
-        });
-        internal static readonly BindableProperty TextColorSelectorProperty = BindableProperty.Create("TextColorSelector", typeof(Selector<Color>), typeof(TextLabel), null, propertyChanged: (bindable, oldValue, newValue) =>
+            get => GetSelector<float?>(selectorData?.PixelSize, TextLabel.PixelSizeProperty);
+            set
+            {
+                selectorData?.PixelSize?.Reset(this);
+                if (value == null) return;
+
+                if (value.HasAll()) SetPixelSize(value.All);
+                else EnsureSelectorData().PixelSize = new TriggerableSelector<float?>(this, value, SetPixelSize, true);
+            }
+        }
+
+        internal Selector<TextShadow> TextShadowSelector
         {
-            var textLabel = (TextLabel)bindable;
-            textLabel.EnsureSelectorData().EnsureTextColor().Update(textLabel, (Selector<Color>)newValue, true);
-        },
-        defaultValueCreator: (bindable) =>
+            get => GetSelector<TextShadow>(selectorData?.TextShadow, TextLabel.TextShadowProperty);
+            set
+            {
+                selectorData?.TextShadow?.Reset(this);
+                if (value == null) return;
+
+                if (value.HasAll()) SetTextShadow(value.All);
+                else EnsureSelectorData().TextShadow = new TriggerableSelector<TextShadow>(this, value, SetTextShadow);
+            }
+        }
+
+        private void SetTranslatableText(string value)
         {
-            var textLabel = (TextLabel)bindable;
-            var selector =  textLabel.selectorData?.TextColor?.Get();
-            if (selector != null)
+            if (value != null)
             {
-                return selector;
+                translatableText = value;
             }
+        }
 
-            Color color = new Color();
-            if (!textLabel.GetProperty(TextLabel.Property.TextColor).Get(color))
+        private void SetText(string value)
+        {
+            if (value != null)
             {
-                return null;
+                Tizen.NUI.Object.SetProperty((System.Runtime.InteropServices.HandleRef)SwigCPtr, TextLabel.Property.TEXT, new Tizen.NUI.PropertyValue(value));
+                RequestLayout();
             }
-            return new Selector<Color>(color);
-        });
+        }
 
-        internal static readonly BindableProperty TextShadowSelectorProperty = BindableProperty.Create("TextShadowSelector", typeof(Selector<TextShadow>), typeof(TextLabel), null, propertyChanged: (bindable, oldValue, newValue) =>
+        private void SetFontFamily(string value)
         {
-            var textLabel = (TextLabel)bindable;
-            textLabel.EnsureSelectorData().EnsureTextShadow().Update(textLabel, (Selector<TextShadow>)newValue, true);
-        },
-        defaultValueCreator: (bindable) =>
+            if (value != null)
+            {
+                Tizen.NUI.Object.SetProperty((System.Runtime.InteropServices.HandleRef)SwigCPtr, TextLabel.Property.FontFamily, new Tizen.NUI.PropertyValue(value));
+                RequestLayout();
+            }
+        }
+
+        private void SetTextColor(Color value)
         {
-            var textLabel = (TextLabel)bindable;
-            return textLabel.GetSelector<TextShadow>(textLabel.selectorData?.TextShadow, TextLabel.TextShadowProperty);
-        });
+            if (value != null)
+            {
+                Tizen.NUI.Object.SetProperty((System.Runtime.InteropServices.HandleRef)SwigCPtr, TextLabel.Property.TextColor, new Tizen.NUI.PropertyValue(value));
+            }
+        }
 
-        internal static readonly BindableProperty PixelSizeSelectorProperty = BindableProperty.Create("PixelSizeSelector", typeof(Selector<float?>), typeof(TextLabel), null, propertyChanged: (bindable, oldValue, newValue) =>
+        private void SetPointSize(float? value)
         {
-            var textLabel = (TextLabel)bindable;
-            ((TextLabel)bindable).EnsureSelectorData().EnsurePixelSize().Update(textLabel, (Selector<float?>)newValue, true);
-        },
-        defaultValueCreator: (bindable) =>
+            if (value != null)
+            {
+                Tizen.NUI.Object.SetProperty((System.Runtime.InteropServices.HandleRef)SwigCPtr, TextLabel.Property.PointSize, new Tizen.NUI.PropertyValue((float)value));
+                RequestLayout();
+            }
+        }
+
+        private void SetPixelSize(float? value)
         {
-            var textLabel = (TextLabel)bindable;
-            return textLabel.GetSelector<float?>(textLabel.selectorData?.PixelSize, TextLabel.PixelSizeProperty);
-        });
-        #endregion
+            if (value != null)
+            {
+                Tizen.NUI.Object.SetProperty((System.Runtime.InteropServices.HandleRef)SwigCPtr, TextLabel.Property.PixelSize, new Tizen.NUI.PropertyValue((float)value));
+                RequestLayout();
+            }
+        }
 
+        private void SetTextShadow(TextShadow value)
+        {
+            if (value != null)
+            {
+                Object.SetProperty((System.Runtime.InteropServices.HandleRef)SwigCPtr, Property.SHADOW, TextShadow.ToPropertyValue(value));
+            }
+        }
     }
 }
index 09f7699..24da1a4 100755 (executable)
@@ -1,5 +1,5 @@
 /*
- * Copyright(c) 2020 Samsung Electronics Co., Ltd.
+ * Copyright(c) 2021 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -15,6 +15,9 @@
  *
  */
 
+using System;
+using System.Diagnostics;
+
 namespace Tizen.NUI.BaseComponents
 {
     /// <summary>
@@ -22,21 +25,13 @@ namespace Tizen.NUI.BaseComponents
     /// </summary>
     internal class TextLabelSelectorData
     {
-        public TriggerableSelector<string> TranslatableText { get; private set; }
-        public TriggerableSelector<string> Text { get; private set; }
-        public TriggerableSelector<string> FontFamily { get; private set; }
-        public TriggerableSelector<Color> TextColor { get; private set; }
-        public TriggerableSelector<float?> PointSize { get; private set; }
-        public TriggerableSelector<float?> PixelSize { get; private set; }
-        public TriggerableSelector<TextShadow> TextShadow { get; private set; }
-
-        public TriggerableSelector<string> EnsureTranslatableText() => TranslatableText ?? (TranslatableText = new TriggerableSelector<string>(TextLabel.TranslatableTextProperty));
-        public TriggerableSelector<string> EnsureText() => Text ?? (Text = new TriggerableSelector<string>(TextLabel.TextProperty));
-        public TriggerableSelector<string> EnsureFontFamily() => FontFamily ?? (FontFamily = new TriggerableSelector<string>(TextLabel.FontFamilyProperty));
-        public TriggerableSelector<Color> EnsureTextColor() => TextColor ?? (TextColor = new TriggerableSelector<Color>(TextLabel.TextColorProperty));
-        public TriggerableSelector<float?> EnsurePointSize() => PointSize ?? (PointSize = new TriggerableSelector<float?>(TextLabel.PointSizeProperty));
-        public TriggerableSelector<float?> EnsurePixelSize() => PixelSize ?? (PixelSize = new TriggerableSelector<float?>(TextLabel.PixelSizeProperty));
-        public TriggerableSelector<TextShadow> EnsureTextShadow() => TextShadow ?? (TextShadow = new TriggerableSelector<TextShadow>(TextLabel.TextShadowProperty));
+        public TriggerableSelector<string> TranslatableText { get; set; }
+        public TriggerableSelector<string> Text { get; set; }
+        public TriggerableSelector<string> FontFamily { get; set; }
+        public TriggerableSelector<Color> TextColor { get; set; }
+        public TriggerableSelector<float?> PointSize { get; set; }
+        public TriggerableSelector<float?> PixelSize { get; set; }
+        public TriggerableSelector<TextShadow> TextShadow { get; set; }
 
         public virtual void Reset(View view)
         {
index d761c21..8543c7f 100755 (executable)
@@ -19,7 +19,6 @@ using System.Collections.Generic;
 using System.ComponentModel;
 using System.Runtime.InteropServices;
 using Tizen.NUI.Binding;
-using Tizen.NUI.Components;
 
 namespace Tizen.NUI.BaseComponents
 {
@@ -318,11 +317,6 @@ namespace Tizen.NUI.BaseComponents
             set
             {
                 SetValue(BackgroundColorProperty, value);
-                if (selectorData != null)
-                {
-                    selectorData.BackgroundImage?.Reset(this);
-                    selectorData.BackgroundColor?.Reset(this);
-                }
                 NotifyPropertyChanged();
             }
         }
@@ -340,11 +334,6 @@ namespace Tizen.NUI.BaseComponents
             set
             {
                 SetValue(BackgroundImageProperty, value);
-                if (selectorData != null)
-                {
-                    selectorData.BackgroundColor?.Reset(this);
-                    selectorData.BackgroundImage?.Reset(this);
-                }
                 NotifyPropertyChanged();
             }
         }
@@ -363,7 +352,6 @@ namespace Tizen.NUI.BaseComponents
             set
             {
                 SetValue(BackgroundImageBorderProperty, value);
-                selectorData?.BackgroundImageBorder?.Reset(this);
                 NotifyPropertyChanged();
             }
         }
@@ -415,11 +403,6 @@ namespace Tizen.NUI.BaseComponents
             set
             {
                 SetValue(ImageShadowProperty, value);
-                if (selectorData != null)
-                {
-                    selectorData.BoxShadow?.Reset(this);
-                    selectorData.ImageShadow?.Reset(this);
-                }
                 NotifyPropertyChanged();
             }
         }
@@ -454,11 +437,6 @@ namespace Tizen.NUI.BaseComponents
             set
             {
                 SetValue(BoxShadowProperty, value);
-                if (selectorData != null)
-                {
-                    selectorData.ImageShadow?.Reset(this);
-                    selectorData.BoxShadow?.Reset(this);
-                }
                 NotifyPropertyChanged();
             }
         }
@@ -1091,7 +1069,6 @@ namespace Tizen.NUI.BaseComponents
             set
             {
                 SetValue(OpacityProperty, value);
-                selectorData?.Opacity?.Reset(this);
                 NotifyPropertyChanged();
             }
         }
@@ -2394,7 +2371,6 @@ namespace Tizen.NUI.BaseComponents
             set
             {
                 SetValue(ColorProperty, value);
-                selectorData?.Color?.Reset(this);
                 NotifyPropertyChanged();
             }
         }
@@ -2696,11 +2672,6 @@ namespace Tizen.NUI.BaseComponents
                 return false;
             }
 
-            if (styleProperty.ReturnType.IsGenericType && styleProperty.ReturnType.GetGenericTypeDefinition() == typeof(Selector<>))
-            {
-                return dirtyPropertySet.Contains(styleProperty.PropertyName.Substring(0, styleProperty.PropertyName.Length - 8));
-            }
-
             return dirtyPropertySet.Contains(styleProperty.PropertyName);
         }
 
index 32038e7..f94516c 100755 (executable)
@@ -81,26 +81,17 @@ namespace Tizen.NUI.BaseComponents
         public static readonly BindableProperty BackgroundColorProperty = BindableProperty.Create(nameof(BackgroundColor), typeof(Color), typeof(View), null, propertyChanged: (BindableProperty.BindingPropertyChangedDelegate)((bindable, oldValue, newValue) =>
         {
             var view = (View)bindable;
-            if (newValue != null)
-            {
-                if (view.backgroundExtraData == null)
-                {
-                    Tizen.NUI.Object.SetProperty((System.Runtime.InteropServices.HandleRef)view.SwigCPtr, View.Property.BACKGROUND, new PropertyValue((Color)newValue));
-                    return;
-                }
-
-                PropertyMap map = new PropertyMap();
-
-                // TODO Fix to support Vector4 for corner radius after dali support it.
-                //      Current code only gets first argument of Vector4.
-                float cornerRadius = view.backgroundExtraData.CornerRadius?.X ?? 0.0f;
 
-                map.Add(Visual.Property.Type, new PropertyValue((int)Visual.Type.Color))
-                   .Add(ColorVisualProperty.MixColor, new PropertyValue((Color)newValue))
-                   .Add(Visual.Property.CornerRadius, new PropertyValue(cornerRadius))
-                   .Add(Visual.Property.CornerRadiusPolicy, new PropertyValue((int)(view.backgroundExtraData.CornerRadiusPolicy)));
+            view.selectorData?.ClearBackground(view);
 
-                Tizen.NUI.Object.SetProperty((System.Runtime.InteropServices.HandleRef)view.SwigCPtr, View.Property.BACKGROUND, new PropertyValue(map));
+            if (newValue is Selector<Color> selector)
+            {
+                if (selector.HasAll()) view.SetBackgroundColor(selector.All);
+                else view.EnsureSelectorData().BackgroundColor = new TriggerableSelector<Color>(view, selector, view.SetBackgroundColor, true);
+            }
+            else
+            {
+                view.SetBackgroundColor((Color)newValue);
             }
         }),
         defaultValueCreator: (bindable) =>
@@ -126,7 +117,15 @@ namespace Tizen.NUI.BaseComponents
         public static readonly BindableProperty ColorProperty = BindableProperty.Create(nameof(Color), typeof(Color), typeof(View), null, propertyChanged: (bindable, oldValue, newValue) =>
         {
             var view = (View)bindable;
-            if (newValue != null)
+
+            view.selectorData?.Color?.Reset(view);
+
+            if (newValue is Selector<Color> selector)
+            {
+                if (selector.HasAll()) view.SetColor(selector.All);
+                else view.EnsureSelectorData().Color = new TriggerableSelector<Color>(view, selector, view.SetColor, true);
+            }
+            else
             {
                 view.SetColor((Color)newValue);
             }
@@ -138,57 +137,27 @@ namespace Tizen.NUI.BaseComponents
             view.GetProperty(Interop.ActorProperty.ColorGet()).Get(color);
             return color;
         });
-
         /// <summary> BackgroundImageProperty </summary>
         [EditorBrowsable(EditorBrowsableState.Never)]
         public static readonly BindableProperty BackgroundImageProperty = BindableProperty.Create(nameof(BackgroundImage), typeof(string), typeof(View), default(string), propertyChanged: (BindableProperty.BindingPropertyChangedDelegate)((bindable, oldValue, newValue) =>
         {
             var view = (View)bindable;
-            string url = (string)newValue;
 
-            if (string.IsNullOrEmpty(url))
+            if (view.selectorData != null)
             {
-                // Clear background
-                Tizen.NUI.Object.SetProperty((System.Runtime.InteropServices.HandleRef)view.SwigCPtr, View.Property.BACKGROUND, new PropertyValue());
-                return;
+                view.selectorData.BackgroundColor?.Reset(view);
+                view.selectorData.BackgroundImage?.Reset(view);
             }
 
-            if (url.StartsWith("*Resource*"))
+            if (newValue is Selector<string> selector)
             {
-                string resource = Tizen.Applications.Application.Current.DirectoryInfo.Resource;
-                url = url.Replace("*Resource*", resource);
-            }
-
-            if (view.backgroundExtraData == null)
-            {
-                Tizen.NUI.Object.SetProperty((System.Runtime.InteropServices.HandleRef)view.SwigCPtr, View.Property.BACKGROUND, new PropertyValue(url));
-                view.BackgroundImageSynchronosLoading = view.backgroundImageSynchronosLoading;
-
-                return;
-            }
-
-            PropertyMap map = new PropertyMap();
-
-            // TODO Fix to support Vector4 for corner radius after dali support it.
-            //      Current code only gets first argument of Vector4.
-            float cornerRadius = view.backgroundExtraData.CornerRadius?.X ?? 0.0f;
-
-            map.Add(ImageVisualProperty.URL, new PropertyValue(url))
-               .Add(Visual.Property.CornerRadius, new PropertyValue(cornerRadius))
-               .Add(Visual.Property.CornerRadiusPolicy, new PropertyValue((int)(view.backgroundExtraData.CornerRadiusPolicy)))
-               .Add(ImageVisualProperty.SynchronousLoading, new PropertyValue(view.backgroundImageSynchronosLoading));
-
-            if (view.backgroundExtraData.BackgroundImageBorder != null)
-            {
-                map.Add(Visual.Property.Type, new PropertyValue((int)Visual.Type.NPatch))
-                   .Add(NpatchImageVisualProperty.Border, new PropertyValue(view.backgroundExtraData.BackgroundImageBorder));
+                if (selector.HasAll()) view.SetBackgroundImage(selector.All);
+                else view.EnsureSelectorData().BackgroundImage = new TriggerableSelector<string>(view, selector, view.SetBackgroundImage, true);
             }
             else
             {
-                map.Add(Visual.Property.Type, new PropertyValue((int)Visual.Type.Image));
+                view.SetBackgroundImage((string)newValue);
             }
-
-            Tizen.NUI.Object.SetProperty((System.Runtime.InteropServices.HandleRef)view.SwigCPtr, View.Property.BACKGROUND, new PropertyValue(map));
         }),
         defaultValueCreator: (bindable) =>
         {
@@ -206,37 +175,17 @@ namespace Tizen.NUI.BaseComponents
         {
             var view = (View)bindable;
 
-            bool isEmptyValue = Rectangle.IsNullOrZero((Rectangle)newValue);
+            view.selectorData?.BackgroundImageBorder?.Reset(view);
 
-            var backgroundImageBorder = isEmptyValue ? null : (Rectangle)newValue;
-
-            (view.backgroundExtraData ?? (view.backgroundExtraData = new BackgroundExtraData())).BackgroundImageBorder = backgroundImageBorder;
-
-            if (isEmptyValue)
+            if (newValue is Selector<Rectangle> selector)
             {
-                return;
+                if (selector.HasAll()) view.SetBackgroundImageBorder(selector.All);
+                else view.EnsureSelectorData().BackgroundImageBorder = new TriggerableSelector<Rectangle>(view, selector, view.SetBackgroundImageBorder, true);
             }
-
-            PropertyMap map = view.Background;
-
-            if (map.Empty())
-            {
-                return;
-            }
-
-            map[NpatchImageVisualProperty.Border] = new PropertyValue(backgroundImageBorder);
-
-            int visualType = 0;
-
-            map.Find(Visual.Property.Type)?.Get(out visualType);
-
-            if (visualType == (int)Visual.Type.Image)
+            else
             {
-                map[Visual.Property.Type] = new PropertyValue((int)Visual.Type.NPatch);
+                view.SetBackgroundImageBorder((Rectangle)newValue);
             }
-
-            Tizen.NUI.Object.SetProperty((System.Runtime.InteropServices.HandleRef)view.SwigCPtr, View.Property.BACKGROUND, new PropertyValue(map));
-
         }),
         defaultValueCreator: (bindable) =>
         {
@@ -650,9 +599,16 @@ namespace Tizen.NUI.BaseComponents
         {
             var view = (View)bindable;
 
-            if (newValue != null)
+            view.selectorData?.Opacity?.Reset(view);
+
+            if (newValue is Selector<float?> selector)
+            {
+                if (selector.HasAll()) view.SetOpacity(selector.All);
+                else view.EnsureSelectorData().Opacity = new TriggerableSelector<float?>(view, selector, view.SetOpacity, true);
+            }
+            else
             {
-                Tizen.NUI.Object.SetProperty((System.Runtime.InteropServices.HandleRef)view.SwigCPtr, View.Property.OPACITY, new Tizen.NUI.PropertyValue((float)newValue));
+                view.SetOpacity((float?)newValue);
             }
         }),
         defaultValueCreator: (BindableProperty.CreateDefaultValueDelegate)((bindable) =>
@@ -1541,9 +1497,19 @@ namespace Tizen.NUI.BaseComponents
         [EditorBrowsable(EditorBrowsableState.Never)]
         public static readonly BindableProperty ImageShadowProperty = BindableProperty.Create(nameof(ImageShadow), typeof(ImageShadow), typeof(View), null, propertyChanged: (BindableProperty.BindingPropertyChangedDelegate)((bindable, oldValue, newValue) =>
         {
-            var shadow = (ImageShadow)newValue;
             var view = (View)bindable;
-            Tizen.NUI.Object.SetProperty((System.Runtime.InteropServices.HandleRef)view.SwigCPtr, View.Property.SHADOW, shadow == null ? new PropertyValue() : shadow.ToPropertyValue(view));
+
+            view.selectorData?.ClearShadow(view);
+
+            if (newValue is Selector<ImageShadow> selector)
+            {
+                if (selector.HasAll()) view.SetShadow(selector.All);
+                else view.EnsureSelectorData().ImageShadow = new TriggerableSelector<ImageShadow>(view, selector, view.SetShadow, true);
+            }
+            else
+            {
+                view.SetShadow((ImageShadow)newValue);                
+            }
         }),
         defaultValueCreator: (BindableProperty.CreateDefaultValueDelegate)((bindable) =>
         {
@@ -1562,9 +1528,19 @@ namespace Tizen.NUI.BaseComponents
         [EditorBrowsable(EditorBrowsableState.Never)]
         public static readonly BindableProperty BoxShadowProperty = BindableProperty.Create(nameof(BoxShadow), typeof(Shadow), typeof(View), null, propertyChanged: (BindableProperty.BindingPropertyChangedDelegate)((bindable, oldValue, newValue) =>
         {
-            var shadow = (Shadow)newValue;
             var view = (View)bindable;
-            Tizen.NUI.Object.SetProperty((System.Runtime.InteropServices.HandleRef)view.SwigCPtr, View.Property.SHADOW, shadow == null ? new PropertyValue() : shadow.ToPropertyValue(view));
+
+            view.selectorData?.ClearShadow(view);
+
+            if (newValue is Selector<Shadow> selector)
+            {
+                if (selector.HasAll()) view.SetShadow(selector.All);
+                else view.EnsureSelectorData().BoxShadow = new TriggerableSelector<Shadow>(view, selector, view.SetShadow, true);
+            }
+            else
+            {
+                view.SetShadow((Shadow)newValue);                
+            }
         }),
         defaultValueCreator: (BindableProperty.CreateDefaultValueDelegate)((bindable) =>
         {
@@ -1793,130 +1769,139 @@ namespace Tizen.NUI.BaseComponents
             return temp;
         });
 
-        #region Selectors
-        internal static readonly BindableProperty BackgroundImageSelectorProperty = BindableProperty.Create("BackgroundImageSelector", typeof(Selector<string>), typeof(View), null, propertyChanged: (bindable, oldValue, newValue) =>
-        {
-            var view = (View)bindable;
-            view.EnsureSelectorData().EnsureBackgroundImage().Update(view, (Selector<string>)newValue, true);
-            if (newValue != null) view.EnsureSelectorData().BackgroundColor?.Reset(view);
-        },
-        defaultValueCreator: (bindable) =>
+        private void SetBackgroundImage(string value)
         {
-            var view = (View)bindable;
-            var selector = view.selectorData?.BackgroundImage?.Get();
-            if (selector != null)
+            if (string.IsNullOrEmpty(value))
             {
-                return selector;
+                // Clear background
+                Tizen.NUI.Object.SetProperty((System.Runtime.InteropServices.HandleRef)SwigCPtr, View.Property.BACKGROUND, new PropertyValue());
+                return;
             }
 
-            string backgroundImage = null;
-            view.Background.Find(ImageVisualProperty.URL)?.Get(out backgroundImage);
-            return backgroundImage == null ? null : new Selector<string>(backgroundImage);
-        });
+            if (value.StartsWith("*Resource*"))
+            {
+                string resource = Tizen.Applications.Application.Current.DirectoryInfo.Resource;
+                value = value.Replace("*Resource*", resource);
+            }
 
-        internal static readonly BindableProperty BackgroundColorSelectorProperty = BindableProperty.Create("BackgroundColorSelector", typeof(Selector<Color>), typeof(View), null, propertyChanged: (bindable, oldValue, newValue) =>
-        {
-            var view = (View)bindable;
-            view.EnsureSelectorData().EnsureBackgroundColor().Update(view, (Selector<Color>)newValue, true);
-            if (newValue != null) view.EnsureSelectorData().BackgroundImage?.Reset(view);
-        },
-        defaultValueCreator: (bindable) =>
-        {
-            var view = (View)bindable;
-            var selector = view.selectorData?.BackgroundColor?.Get();
-            if (selector != null)
+            if (backgroundExtraData == null)
             {
-                return selector;
+                Tizen.NUI.Object.SetProperty((System.Runtime.InteropServices.HandleRef)SwigCPtr, View.Property.BACKGROUND, new PropertyValue(value));
+                BackgroundImageSynchronosLoading = backgroundImageSynchronosLoading;
+
+                return;
             }
 
-            var background = view.Background;
-            int visualType = 0;
-            background.Find(Visual.Property.Type)?.Get(out visualType);
-            if (visualType != (int)Visual.Type.Color)
+            PropertyMap map = new PropertyMap();
+
+            // TODO Fix to support Vector4 for corner radius after dali support it.
+            //      Current code only gets first argument of Vector4.
+            float cornerRadius = backgroundExtraData.CornerRadius?.X ?? 0.0f;
+
+            map.Add(ImageVisualProperty.URL, new PropertyValue(value))
+               .Add(Visual.Property.CornerRadius, new PropertyValue(cornerRadius))
+               .Add(Visual.Property.CornerRadiusPolicy, new PropertyValue((int)(backgroundExtraData.CornerRadiusPolicy)))
+               .Add(ImageVisualProperty.SynchronousLoading, new PropertyValue(backgroundImageSynchronosLoading));
+
+            if (backgroundExtraData.BackgroundImageBorder != null)
             {
-                return null;
+                map.Add(Visual.Property.Type, new PropertyValue((int)Visual.Type.NPatch))
+                   .Add(NpatchImageVisualProperty.Border, new PropertyValue(backgroundExtraData.BackgroundImageBorder));
+            }
+            else
+            {
+                map.Add(Visual.Property.Type, new PropertyValue((int)Visual.Type.Image));
             }
 
-            Color backgroundColor = new Color();
-            background.Find(ColorVisualProperty.MixColor)?.Get(backgroundColor);
-            return new Selector<Color>(backgroundColor);
-        });
+            Tizen.NUI.Object.SetProperty((System.Runtime.InteropServices.HandleRef)SwigCPtr, View.Property.BACKGROUND, new PropertyValue(map));
+        }
 
-        internal static readonly BindableProperty BackgroundImageBorderSelectorProperty = BindableProperty.Create("BackgroundImageBorderSelector", typeof(Selector<Rectangle>), typeof(View), null, propertyChanged: (bindable, oldValue, newValue) =>
+        private void SetBackgroundImageBorder(Rectangle value)
         {
-            var view = (View)bindable;
-            view.EnsureSelectorData().EnsureBackgroundImageBorder().Update(view, (Selector<Rectangle>)newValue, true);
-        },
-        defaultValueCreator: (bindable) =>
-        {
-            var view = (View)bindable;
-            return view.GetSelector<Rectangle>(view.selectorData?.BackgroundImageBorder, View.BackgroundImageBorderProperty);
-        });
+            bool isEmptyValue = Rectangle.IsNullOrZero(value);
 
-        internal static readonly BindableProperty ColorSelectorProperty = BindableProperty.Create("ColorSelector", typeof(Selector<Color>), typeof(View), null, propertyChanged: (bindable, oldValue, newValue) =>
-        {
-            var view = (View)bindable;
-            view.EnsureSelectorData().EnsureColor().Update(view, (Selector<Color>)newValue, true);
-        },
-        defaultValueCreator: (bindable) =>
-        {
-            var view = (View)bindable;
-            var selector = view.selectorData?.Color?.Get();
-            if (selector != null)
+            var backgroundImageBorder = isEmptyValue ? null : value;
+
+            (backgroundExtraData ?? (backgroundExtraData = new BackgroundExtraData())).BackgroundImageBorder = backgroundImageBorder;
+
+            if (isEmptyValue)
             {
-                return selector;
+                return;
             }
 
-            Color color = new Color();
-            if (!view.GetProperty(Interop.ActorProperty.ColorGet()).Get(color))
+            PropertyMap map = Background;
+
+            if (map.Empty())
             {
-                return null;
+                return;
             }
-            return new Selector<Color>(color);
-        });
 
-        internal static readonly BindableProperty OpacitySelectorProperty = BindableProperty.Create("OpacitySelector", typeof(Selector<float?>), typeof(View), null, propertyChanged: (bindable, oldValue, newValue) =>
-        {
-            var view = (View)bindable;
-            view.EnsureSelectorData().EnsureOpacity().Update(view, (Selector<float?>)newValue, true);
-        },
-        defaultValueCreator: (bindable) =>
-        {
-            var view = (View)bindable;
-            return view.GetSelector<float?>(view.selectorData?.Opacity, View.OpacityProperty);
-        });
+            map[NpatchImageVisualProperty.Border] = new PropertyValue(backgroundImageBorder);
 
-        /// <summary>
-        /// ImageShadow Selector Property for binding to ViewStyle
-        /// </summary>
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        public static readonly BindableProperty ImageShadowSelectorProperty = BindableProperty.Create("ImageShadowSelector", typeof(Selector<ImageShadow>), typeof(View), null, propertyChanged: (bindable, oldValue, newValue) =>
+            int visualType = 0;
+
+            map.Find(Visual.Property.Type)?.Get(out visualType);
+
+            if (visualType == (int)Visual.Type.Image)
+            {
+                map[Visual.Property.Type] = new PropertyValue((int)Visual.Type.NPatch);
+            }
+
+            Tizen.NUI.Object.SetProperty((System.Runtime.InteropServices.HandleRef)SwigCPtr, View.Property.BACKGROUND, new PropertyValue(map));
+        }
+
+        private void SetBackgroundColor(Color value)
         {
-            var view = (View)bindable;
-            view.EnsureSelectorData().EnsureImageShadow().Update(view, (Selector<ImageShadow>)newValue, true);
-            if (newValue != null) view.EnsureSelectorData().BoxShadow?.Reset(view);
-        },
-        defaultValueCreator: (bindable) =>
+            if (value == null)
+            {
+                return;
+            }
+
+            if (backgroundExtraData == null)
+            {
+                Tizen.NUI.Object.SetProperty((System.Runtime.InteropServices.HandleRef)SwigCPtr, View.Property.BACKGROUND, new PropertyValue(value));
+                return;
+            }
+
+            PropertyMap map = new PropertyMap();
+
+            // TODO Fix to support Vector4 for corner radius after dali support it.
+            //      Current code only gets first argument of Vector4.
+            float cornerRadius = backgroundExtraData.CornerRadius?.X ?? 0.0f;
+
+            map.Add(Visual.Property.Type, new PropertyValue((int)Visual.Type.Color))
+                .Add(ColorVisualProperty.MixColor, new PropertyValue(value))
+                .Add(Visual.Property.CornerRadius, new PropertyValue(cornerRadius))
+                .Add(Visual.Property.CornerRadiusPolicy, new PropertyValue((int)(backgroundExtraData.CornerRadiusPolicy)));
+
+            Tizen.NUI.Object.SetProperty((System.Runtime.InteropServices.HandleRef)SwigCPtr, View.Property.BACKGROUND, new PropertyValue(map));
+        }
+
+        private void SetColor(Color value)
         {
-            var view = (View)bindable;
-            return view.GetSelector<ImageShadow>(view.selectorData?.ImageShadow, View.ImageShadowProperty);
-        });
+            if (value == null)
+            {
+                return;
+            }
 
-        /// <summary>
-        /// BoxShadow Selector Property for binding to ViewStyle
-        /// </summary>
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        public static readonly BindableProperty BoxShadowSelectorProperty = BindableProperty.Create("BoxShadowSelector", typeof(Selector<Shadow>), typeof(View), null, propertyChanged: (bindable, oldValue, newValue) =>
+            Interop.ActorInternal.SetColor(SwigCPtr, value.SwigCPtr);
+            if (NDalicPINVOKE.SWIGPendingException.Pending)
+                throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+        }
+
+        private void SetOpacity(float? value)
         {
-            var view = (View)bindable;
-            view.EnsureSelectorData().EnsureBoxShadow().Update(view, (Selector<Shadow>)newValue, true);
-            if (newValue != null) view.EnsureSelectorData().ImageShadow?.Reset(view);
-        },
-        defaultValueCreator: (bindable) =>
+            if (value == null)
+            {
+                return;
+            }
+
+            Tizen.NUI.Object.SetProperty((System.Runtime.InteropServices.HandleRef)SwigCPtr, View.Property.OPACITY, new Tizen.NUI.PropertyValue((float)value));
+        }
+
+        private void SetShadow(ShadowBase value)
         {
-            var view = (View)bindable;
-            return view.GetSelector<Shadow>(view.selectorData?.BoxShadow, View.BoxShadowProperty);
-        });
-        #endregion
+            Tizen.NUI.Object.SetProperty((System.Runtime.InteropServices.HandleRef)SwigCPtr, View.Property.SHADOW, value == null ? new PropertyValue() : value.ToPropertyValue(this));
+        }
     }
 }
index e4b0d75..431860e 100755 (executable)
@@ -826,13 +826,6 @@ namespace Tizen.NUI.BaseComponents
             return ret;
         }
 
-        internal void SetColor(Vector4 color)
-        {
-            Interop.ActorInternal.SetColor(SwigCPtr, Vector4.getCPtr(color));
-            if (NDalicPINVOKE.SWIGPendingException.Pending)
-                throw NDalicPINVOKE.SWIGPendingException.Retrieve();
-        }
-
         internal Vector4 GetCurrentColor()
         {
             Vector4 ret = new Vector4(Interop.ActorInternal.GetCurrentColor(SwigCPtr), true);
index 4801fab..cb791c6 100644 (file)
@@ -15,6 +15,9 @@
  *
  */
 
+using System;
+using System.Diagnostics;
+
 namespace Tizen.NUI.BaseComponents
 {
     /// <summary>
@@ -24,21 +27,30 @@ namespace Tizen.NUI.BaseComponents
     {
         internal ViewSelectorData() { }
 
-        public TriggerableSelector<Color> BackgroundColor { get;  private set; }
-        public TriggerableSelector<string> BackgroundImage { get;  private set; }
-        public TriggerableSelector<Rectangle> BackgroundImageBorder { get;  private set; }
-        public TriggerableSelector<Color> Color { get;  private set; }
-        public TriggerableSelector<float?> Opacity { get;  private set; }
-        public TriggerableSelector<ImageShadow> ImageShadow { get;  private set; }
-        public TriggerableSelector<Shadow> BoxShadow { get;  private set; }
+        public TriggerableSelector<Color> BackgroundColor{ get; set; }
+        public TriggerableSelector<string> BackgroundImage{ get; set; }
+        public TriggerableSelector<Rectangle> BackgroundImageBorder{ get; set; }
+        public TriggerableSelector<Color> Color{ get; set; }
+        public TriggerableSelector<float?> Opacity{ get; set; }
+        public TriggerableSelector<ImageShadow> ImageShadow{ get; set; }
+        public TriggerableSelector<Shadow> BoxShadow{ get; set; }
 
-        public TriggerableSelector<Color> EnsureBackgroundColor() => BackgroundColor ?? (BackgroundColor = new TriggerableSelector<Color>(View.BackgroundColorProperty));
-        public TriggerableSelector<string> EnsureBackgroundImage() => BackgroundImage ?? (BackgroundImage = new TriggerableSelector<string>(View.BackgroundImageProperty));
-        public TriggerableSelector<Rectangle> EnsureBackgroundImageBorder() => BackgroundImageBorder ?? (BackgroundImageBorder = new TriggerableSelector<Rectangle>(View.BackgroundImageBorderProperty));      
-        public TriggerableSelector<Color> EnsureColor() => Color ?? (Color = new TriggerableSelector<Color>(View.ColorProperty));
-        public TriggerableSelector<float?> EnsureOpacity() => Opacity ?? (Opacity = new TriggerableSelector<float?>(View.OpacityProperty));
-        public TriggerableSelector<ImageShadow> EnsureImageShadow() => ImageShadow ?? (ImageShadow = new TriggerableSelector<ImageShadow>(View.ImageShadowProperty));
-        public TriggerableSelector<Shadow> EnsureBoxShadow() => BoxShadow ?? (BoxShadow = new TriggerableSelector<Shadow>(View.BoxShadowProperty));
+        public void ClearBackground(View view)
+        {
+            BackgroundColor?.Reset(view);
+            BackgroundImage?.Reset(view);
+            BackgroundImageBorder?.Reset(view);
+            BackgroundColor = null;
+            BackgroundImage = null;
+            BackgroundImageBorder = null;
+        }
+        public void ClearShadow(View view)
+        {
+            ImageShadow?.Reset(view);
+            BoxShadow?.Reset(view);
+            ImageShadow = null;
+            BoxShadow = null;
+        }
 
         public void Reset(View view)
         {