summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSeunghyun Choi <sh4682.choi@samsung.com>2016-12-21 18:11:54 +0900
committerSeunghyun Choi <sh4682.choi@samsung.com>2017-01-11 16:13:56 +0900
commitb21711c5ea0d70de3ccc01c1ee0a9d1b6ac2f407 (patch)
treec46a92636807dfe44fd183265051f84fd73656f9
parentb729a649523c1acba03a4fccd30fac93d5f7b77e (diff)
downloadxamarin-forms-b21711c5ea0d70de3ccc01c1ee0a9d1b6ac2f407.tar.gz
xamarin-forms-b21711c5ea0d70de3ccc01c1ee0a9d1b6ac2f407.tar.bz2
xamarin-forms-b21711c5ea0d70de3ccc01c1ee0a9d1b6ac2f407.zip
Add Button Style
- Add Button Style(Circle, Bottom) - Approval of the RFC is required. (http://suprem.sec.samsung.net/confluence/display/SPTDTLC/%5BFormsTizen%5D+RFC+2+-+Button+Style) Change-Id: I545e0cc2417298f90468b651030937665f547105 Signed-off-by: Seunghyun Choi <sh4682.choi@samsung.com>
-rw-r--r--Xamarin.Forms.Core/PlatformConfiguration/TizenSpecific/Button.cs30
-rw-r--r--Xamarin.Forms.Core/PlatformConfiguration/TizenSpecific/ButtonStyle.cs9
-rw-r--r--Xamarin.Forms.Core/Xamarin.Forms.Core.csproj3
-rw-r--r--Xamarin.Forms.Platform.Tizen/Native/Button.cs39
-rw-r--r--Xamarin.Forms.Platform.Tizen/Renderers/ButtonRenderer.cs34
5 files changed, 113 insertions, 2 deletions
diff --git a/Xamarin.Forms.Core/PlatformConfiguration/TizenSpecific/Button.cs b/Xamarin.Forms.Core/PlatformConfiguration/TizenSpecific/Button.cs
new file mode 100644
index 00000000..e74650fc
--- /dev/null
+++ b/Xamarin.Forms.Core/PlatformConfiguration/TizenSpecific/Button.cs
@@ -0,0 +1,30 @@
+namespace Xamarin.Forms.PlatformConfiguration.TizenSpecific
+{
+ using FormsElement = Forms.Button;
+
+ public static class Button
+ {
+ public static readonly BindableProperty ButtonStyleProperty = BindableProperty.Create("ButtonStyle", typeof(ButtonStyle), typeof(FormsElement), ButtonStyle.Default);
+
+ public static ButtonStyle GetButtonStyle(BindableObject element)
+ {
+ return (ButtonStyle)element.GetValue(ButtonStyleProperty);
+ }
+
+ public static void SetButtonStyle(BindableObject element, ButtonStyle value)
+ {
+ element.SetValue(ButtonStyleProperty, value);
+ }
+
+ public static ButtonStyle GetButtonStyle(this IPlatformElementConfiguration<Tizen, FormsElement> config)
+ {
+ return GetButtonStyle(config.Element);
+ }
+
+ public static IPlatformElementConfiguration<Tizen, FormsElement> SetButtonStyle(this IPlatformElementConfiguration<Tizen, FormsElement> config, ButtonStyle value)
+ {
+ SetButtonStyle(config.Element, value);
+ return config;
+ }
+ }
+}
diff --git a/Xamarin.Forms.Core/PlatformConfiguration/TizenSpecific/ButtonStyle.cs b/Xamarin.Forms.Core/PlatformConfiguration/TizenSpecific/ButtonStyle.cs
new file mode 100644
index 00000000..abe7bd81
--- /dev/null
+++ b/Xamarin.Forms.Core/PlatformConfiguration/TizenSpecific/ButtonStyle.cs
@@ -0,0 +1,9 @@
+namespace Xamarin.Forms.PlatformConfiguration.TizenSpecific
+{
+ public enum ButtonStyle
+ {
+ Default,
+ Circle,
+ Bottom
+ }
+}
diff --git a/Xamarin.Forms.Core/Xamarin.Forms.Core.csproj b/Xamarin.Forms.Core/Xamarin.Forms.Core.csproj
index 8f217e58..eef2d8f7 100644
--- a/Xamarin.Forms.Core/Xamarin.Forms.Core.csproj
+++ b/Xamarin.Forms.Core/Xamarin.Forms.Core.csproj
@@ -100,6 +100,8 @@
<Compile Include="PlatformConfiguration\iOSSpecific\UIStatusBarAnimation.cs" />
<Compile Include="PlatformConfiguration\iOSSpecific\VisualElement.cs" />
<Compile Include="PlatformConfiguration\TizenSpecific\ProgressBar.cs" />
+ <Compile Include="PlatformConfiguration\TizenSpecific\Button.cs" />
+ <Compile Include="PlatformConfiguration\TizenSpecific\ButtonStyle.cs" />
<Compile Include="PlatformConfiguration\WindowsSpecific\MasterDetailPage.cs" />
<Compile Include="PlatformConfiguration\WindowsSpecific\CollapseStyle.cs" />
<Compile Include="Configuration.cs" />
@@ -454,7 +456,6 @@
<Name>Xamarin.Forms.Platform</Name>
</ProjectReference>
</ItemGroup>
- <ItemGroup />
<PropertyGroup>
<PostBuildEvent>
</PostBuildEvent>
diff --git a/Xamarin.Forms.Platform.Tizen/Native/Button.cs b/Xamarin.Forms.Platform.Tizen/Native/Button.cs
index 8f85da63..71ec0c10 100644
--- a/Xamarin.Forms.Platform.Tizen/Native/Button.cs
+++ b/Xamarin.Forms.Platform.Tizen/Native/Button.cs
@@ -20,7 +20,7 @@ namespace Xamarin.Forms.Platform.Tizen.Native
/// <summary>
/// The internal padding of the button, helps to determine the size.
/// </summary>
- readonly ESize _internalPadding;
+ ESize _internalPadding;
/// <summary>
/// Optional image, if set will be drawn on the button.
@@ -201,6 +201,18 @@ namespace Xamarin.Forms.Platform.Tizen.Native
var padding = _internalPadding;
+ if (Style == "circle")
+ {
+ var circleTextPadding = (EdjeObject["icon_text_padding"]?.Geometry.Height).GetValueOrDefault(0);
+ var circleHeight = padding.Height + ((rawSize.Width == 0) ? 0 : circleTextPadding + formattedSize.Height);
+
+ return new ESize
+ {
+ Width = padding.Width,
+ Height = circleHeight
+ };
+ }
+
if (rawSize.Width > availableWidth)
{
// if the raw text width is larger than the available width, use
@@ -299,5 +311,30 @@ namespace Xamarin.Forms.Platform.Tizen.Native
SetPartContent("icon", _image);
}
}
+
+ public void UpdateStyle(string style)
+ {
+ if (Style != style)
+ {
+ Style = style;
+
+ if (Style == "circle")
+ {
+ var circleSize = (EdjeObject["bg"]?.Geometry.Width).GetValueOrDefault(0);
+ _internalPadding = new ESize(circleSize, circleSize);
+ _span.HorizontalTextAlignment = TextAlignment.Center;
+ }
+ else if (Style == "bottom")
+ {
+ _internalPadding = GetInternalPadding();
+ _span.HorizontalTextAlignment = TextAlignment.Auto;
+ }
+ else
+ {
+ _span.HorizontalTextAlignment = TextAlignment.Auto;
+ }
+ ApplyTextAndStyle();
+ }
+ }
}
}
diff --git a/Xamarin.Forms.Platform.Tizen/Renderers/ButtonRenderer.cs b/Xamarin.Forms.Platform.Tizen/Renderers/ButtonRenderer.cs
index a34df549..8af7bb69 100644
--- a/Xamarin.Forms.Platform.Tizen/Renderers/ButtonRenderer.cs
+++ b/Xamarin.Forms.Platform.Tizen/Renderers/ButtonRenderer.cs
@@ -1,5 +1,8 @@
using System;
+using System.ComponentModel;
using EColor = ElmSharp.Color;
+using Xamarin.Forms.PlatformConfiguration.TizenSpecific;
+using Specific = Xamarin.Forms.PlatformConfiguration.TizenSpecific.Button;
namespace Xamarin.Forms.Platform.Tizen
{
@@ -38,12 +41,23 @@ namespace Xamarin.Forms.Platform.Tizen
if (e.NewElement != null)
{
+ UpdateStyle();
Control.Clicked += ButtonClickedHandler;
}
base.OnElementChanged(e);
}
+ protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
+ {
+ base.OnElementPropertyChanged(sender, e);
+
+ if (e.PropertyName == Specific.ButtonStyleProperty.PropertyName)
+ {
+ UpdateStyle();
+ }
+ }
+
protected override Size MinimumSize()
{
return new Size(Control.MinimumWidth, Control.MinimumHeight);
@@ -84,6 +98,26 @@ namespace Xamarin.Forms.Platform.Tizen
}
}
+ void UpdateStyle()
+ {
+ string style;
+ switch (Specific.GetButtonStyle(Element))
+ {
+ case ButtonStyle.Circle:
+ style = "circle";
+ break;
+ case ButtonStyle.Bottom:
+ style = "bottom";
+ break;
+ default:
+ style = "default";
+ break;
+ }
+
+ Control.UpdateStyle(style);
+ ((IVisualElementController)Element).NativeSizeChanged();
+ }
+
void UpdateBorder()
{
/* The simpler way is to create some specialized theme for button in