From 73ff864624f3978e2d41920ae791ff2d223a1571 Mon Sep 17 00:00:00 2001 From: Jaehyun Cho Date: Tue, 30 Aug 2022 21:16:30 +0900 Subject: [PATCH] [NUI] Add BorderlineColorSelector to ViewStyle To support Selector for BorderlineColor, BorderlineColorSelector has been added. BorderlineColorSelector is applied to Outlined Button style. --- .../Theme/DefaultThemeCommon.cs | 9 ++++- .../src/public/BaseComponents/Style/ViewStyle.cs | 15 +++++++ .../Style/ViewStyleBindableProperty.cs | 20 ++++++++++ .../public/BaseComponents/ViewBindableProperty.cs | 46 ++++++++++++++++------ .../src/public/BaseComponents/ViewSelectorData.cs | 2 + 5 files changed, 80 insertions(+), 12 deletions(-) diff --git a/src/Tizen.NUI.Components/Theme/DefaultThemeCommon.cs b/src/Tizen.NUI.Components/Theme/DefaultThemeCommon.cs index 5890b04..9e5ac8f 100755 --- a/src/Tizen.NUI.Components/Theme/DefaultThemeCommon.cs +++ b/src/Tizen.NUI.Components/Theme/DefaultThemeCommon.cs @@ -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. + BorderlineColorSelector = new Selector() + { + 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, diff --git a/src/Tizen.NUI/src/public/BaseComponents/Style/ViewStyle.cs b/src/Tizen.NUI/src/public/BaseComponents/Style/ViewStyle.cs index 3c3092c..ee4b502 100755 --- a/src/Tizen.NUI/src/public/BaseComponents/Style/ViewStyle.cs +++ b/src/Tizen.NUI/src/public/BaseComponents/Style/ViewStyle.cs @@ -63,6 +63,7 @@ namespace Tizen.NUI.BaseComponents private Selector backgroundImageBorderSelector; private Selector colorSelector; private VisualTransformPolicyType? cornerRadiusPolicy; + private Selector borderlineColorSelector; static ViewStyle() { } @@ -476,6 +477,20 @@ namespace Tizen.NUI.BaseComponents } /// + /// The color selector for the borderline of the View. + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public Selector BorderlineColorSelector + { + get + { + Selector color = (Selector)GetValue(BorderlineColorSelectorProperty); + return (null != color) ? color : borderlineColorSelector = new Selector(); + } + set => SetValue(BorderlineColorSelectorProperty, value); + } + + /// /// 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. diff --git a/src/Tizen.NUI/src/public/BaseComponents/Style/ViewStyleBindableProperty.cs b/src/Tizen.NUI/src/public/BaseComponents/Style/ViewStyleBindableProperty.cs index 4799297..df6649b 100755 --- a/src/Tizen.NUI/src/public/BaseComponents/Style/ViewStyleBindableProperty.cs +++ b/src/Tizen.NUI/src/public/BaseComponents/Style/ViewStyleBindableProperty.cs @@ -414,6 +414,26 @@ namespace Tizen.NUI.BaseComponents ((ViewStyle)bindable).borderlineColor = (Color)newValue; }, defaultValueCreator: (bindable) => ((ViewStyle)bindable).borderlineColor ?? Tizen.NUI.Color.Black); + /// Bindable property of BorderlineColorSelector. Do not open it. + [EditorBrowsable(EditorBrowsableState.Never)] + public static readonly BindableProperty BorderlineColorSelectorProperty = BindableProperty.Create(nameof(BorderlineColor), typeof(Selector), typeof(ViewStyle), null, propertyChanged: (bindable, oldValue, newValue) => + { + var viewStyle = (ViewStyle)bindable; + + if (newValue == null) + { + viewStyle.borderlineColorSelector = null; + } + else + { + viewStyle.borderlineColorSelector = (Selector)newValue; + } + }, + defaultValueCreator: (bindable) => + { + return ((ViewStyle)bindable).borderlineColorSelector; + }); + /// Bindable property of BorderlineOffset. Do not open it. [EditorBrowsable(EditorBrowsableState.Never)] public static readonly BindableProperty BorderlineOffsetProperty = BindableProperty.Create(nameof(BorderlineOffset), typeof(float?), typeof(ViewStyle), null, propertyChanged: (bindable, oldValue, newValue) => diff --git a/src/Tizen.NUI/src/public/BaseComponents/ViewBindableProperty.cs b/src/Tizen.NUI/src/public/BaseComponents/ViewBindableProperty.cs index fa0daab..dded0ea 100755 --- a/src/Tizen.NUI/src/public/BaseComponents/ViewBindableProperty.cs +++ b/src/Tizen.NUI/src/public/BaseComponents/ViewBindableProperty.cs @@ -2000,17 +2000,29 @@ namespace Tizen.NUI.BaseComponents /// BorderlineColor Property /// [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 selector) + { + if (selector.HasAll()) view.SetBorderlineColor(selector.All); + else view.EnsureSelectorData().BorderlineColor = new TriggerableSelector(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; + } + ); /// /// 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) diff --git a/src/Tizen.NUI/src/public/BaseComponents/ViewSelectorData.cs b/src/Tizen.NUI/src/public/BaseComponents/ViewSelectorData.cs index cb791c6..7ba80f9 100644 --- a/src/Tizen.NUI/src/public/BaseComponents/ViewSelectorData.cs +++ b/src/Tizen.NUI/src/public/BaseComponents/ViewSelectorData.cs @@ -34,6 +34,7 @@ namespace Tizen.NUI.BaseComponents public TriggerableSelector Opacity{ get; set; } public TriggerableSelector ImageShadow{ get; set; } public TriggerableSelector BoxShadow{ get; set; } + public TriggerableSelector 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); } } } -- 2.7.4