[NUI] Add BorderlineColorSelector to ViewStyle
authorJaehyun Cho <jae_hyun.cho@samsung.com>
Tue, 30 Aug 2022 12:16:30 +0000 (21:16 +0900)
committerJaehyun Cho <jaehyun0cho@gmail.com>
Tue, 6 Sep 2022 09:10:32 +0000 (18:10 +0900)
To support Selector<Color> for BorderlineColor, BorderlineColorSelector
has been added.
BorderlineColorSelector is applied to Outlined Button style.

src/Tizen.NUI.Components/Theme/DefaultThemeCommon.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/ViewBindableProperty.cs
src/Tizen.NUI/src/public/BaseComponents/ViewSelectorData.cs

index 5890b04..9e5ac8f 100755 (executable)
@@ -66,7 +66,14 @@ namespace Tizen.NUI.Components
                 ItemSpacing = new Size2D(8, 8),
                 CornerRadius = 12.0f,
                 BorderlineWidth = 2.0f,
-                BorderlineColor = new Color("#FF6200"), // FIXME: BorderlineColor should support Selector<Color>.
+                BorderlineColorSelector = new Selector<Color>()
+                {
+                    Normal = new Color("#FF6200"),
+                    Pressed = new Color("#FFA166"),
+                    Focused = new Color("#FF7119"),
+                    Selected = new Color("#FF8133"),
+                    Disabled = new Color("#CACACA"),
+                },
                 ItemHorizontalAlignment = HorizontalAlignment.Center,
                 ItemVerticalAlignment = VerticalAlignment.Center,
                 BackgroundColor = Color.Transparent,
index 3c3092c..ee4b502 100755 (executable)
@@ -63,6 +63,7 @@ namespace Tizen.NUI.BaseComponents
         private Selector<Rectangle> backgroundImageBorderSelector;
         private Selector<Color> colorSelector;
         private VisualTransformPolicyType? cornerRadiusPolicy;
+        private Selector<Color> borderlineColorSelector;
 
         static ViewStyle() { }
 
@@ -476,6 +477,20 @@ namespace Tizen.NUI.BaseComponents
         }
 
         /// <summary>
+        /// The color selector for the borderline of the View.
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public Selector<Color> BorderlineColorSelector
+        {
+            get
+            {
+                Selector<Color> color = (Selector<Color>)GetValue(BorderlineColorSelectorProperty);
+                return (null != color) ? color : borderlineColorSelector = new Selector<Color>();
+            }
+            set => SetValue(BorderlineColorSelectorProperty, value);
+        }
+
+        /// <summary>
         /// The Relative offset for the borderline of the View.
         /// Recommended range : [-1.0f to 1.0f].
         /// If -1.0f, draw borderline inside of the View.
index 4799297..df6649b 100755 (executable)
@@ -414,6 +414,26 @@ namespace Tizen.NUI.BaseComponents
             ((ViewStyle)bindable).borderlineColor = (Color)newValue;
         }, defaultValueCreator: (bindable) => ((ViewStyle)bindable).borderlineColor ?? Tizen.NUI.Color.Black);
 
+        /// <summary> Bindable property of BorderlineColorSelector. Do not open it. </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public static readonly BindableProperty BorderlineColorSelectorProperty = BindableProperty.Create(nameof(BorderlineColor), typeof(Selector<Color>), typeof(ViewStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
+        {
+            var viewStyle = (ViewStyle)bindable;
+
+            if (newValue == null)
+            {
+                viewStyle.borderlineColorSelector = null;
+            }
+            else
+            {
+                viewStyle.borderlineColorSelector = (Selector<Color>)newValue;
+            }
+        },
+        defaultValueCreator: (bindable) =>
+        {
+            return ((ViewStyle)bindable).borderlineColorSelector;
+        });
+
         /// <summary> Bindable property of BorderlineOffset. Do not open it. </summary>
         [EditorBrowsable(EditorBrowsableState.Never)]
         public static readonly BindableProperty BorderlineOffsetProperty = BindableProperty.Create(nameof(BorderlineOffset), typeof(float?), typeof(ViewStyle), null, propertyChanged: (bindable, oldValue, newValue) =>
index fa0daab..dded0ea 100755 (executable)
@@ -2000,17 +2000,29 @@ namespace Tizen.NUI.BaseComponents
         /// BorderlineColor Property
         /// </summary>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public static readonly BindableProperty BorderlineColorProperty = BindableProperty.Create(nameof(BorderlineColor), typeof(Color), typeof(View), null, propertyChanged: (bindable, oldValue, newValue) =>
-        {
-            var view = (View)bindable;
-            (view.backgroundExtraData ?? (view.backgroundExtraData = new BackgroundExtraData())).BorderlineColor = (Color)newValue;
-            view.ApplyBorderline();
-        },
-        defaultValueCreator: (bindable) =>
-        {
-            var view = (View)bindable;
-            return view.backgroundExtraData == null ? Color.Black : view.backgroundExtraData.BorderlineColor;
-        });
+        public static readonly BindableProperty BorderlineColorProperty = BindableProperty.Create(nameof(BorderlineColor), typeof(Color), typeof(View), null,
+            propertyChanged: (bindable, oldValue, newValue) =>
+            {
+                var view = (View)bindable;
+
+                view.themeData?.selectorData?.BorderlineColor?.Reset(view);
+
+                if (newValue is Selector<Color> selector)
+                {
+                    if (selector.HasAll()) view.SetBorderlineColor(selector.All);
+                    else view.EnsureSelectorData().BorderlineColor = new TriggerableSelector<Color>(view, selector, view.SetBorderlineColor, true);
+                }
+                else
+                {
+                    view.SetBorderlineColor((Color)newValue);
+                }
+            },
+            defaultValueCreator: (bindable) =>
+            {
+                var view = (View)bindable;
+                return view.backgroundExtraData == null ? Color.Black : view.backgroundExtraData.BorderlineColor;
+            }
+        );
 
         /// <summary>
         /// BorderlineOffset Property
@@ -2675,6 +2687,18 @@ namespace Tizen.NUI.BaseComponents
             Tizen.NUI.Object.SetProperty((System.Runtime.InteropServices.HandleRef)SwigCPtr, View.Property.BACKGROUND, new PropertyValue(map));
         }
 
+        private void SetBorderlineColor(Color value)
+        {
+            if (value == null)
+            {
+                return;
+            }
+
+            (backgroundExtraData ?? (backgroundExtraData = new BackgroundExtraData())).BorderlineColor = value;
+
+            ApplyBorderline();
+        }
+
         private void SetBackgroundColor(Color value)
         {
             if (value == null)
index cb791c6..7ba80f9 100644 (file)
@@ -34,6 +34,7 @@ namespace Tizen.NUI.BaseComponents
         public TriggerableSelector<float?> Opacity{ get; set; }
         public TriggerableSelector<ImageShadow> ImageShadow{ get; set; }
         public TriggerableSelector<Shadow> BoxShadow{ get; set; }
+        public TriggerableSelector<Color> BorderlineColor{ get; set; }
 
         public void ClearBackground(View view)
         {
@@ -61,6 +62,7 @@ namespace Tizen.NUI.BaseComponents
             Opacity?.Reset(view);
             ImageShadow?.Reset(view);
             BoxShadow?.Reset(view);
+            BorderlineColor?.Reset(view);
         }
     }
 }