Support BlendColor to Image as a TizenSpecific API
authorKangho Hur <kangho.hur@samsung.com>
Fri, 6 Jan 2017 06:43:46 +0000 (15:43 +0900)
committerKangho Hur <kangho.hur@samsung.com>
Mon, 10 Jul 2017 02:11:15 +0000 (11:11 +0900)
Change-Id: Ic3068b3c0834605be5d45cc5f1a96d6933a0856f

Xamarin.Forms.Core/PlatformConfiguration/TizenSpecific/Image.cs [new file with mode: 0644]
Xamarin.Forms.Core/Xamarin.Forms.Core.csproj
Xamarin.Forms.Platform.Tizen/Renderers/ImageRenderer.cs

diff --git a/Xamarin.Forms.Core/PlatformConfiguration/TizenSpecific/Image.cs b/Xamarin.Forms.Core/PlatformConfiguration/TizenSpecific/Image.cs
new file mode 100644 (file)
index 0000000..2c86fd0
--- /dev/null
@@ -0,0 +1,30 @@
+namespace Xamarin.Forms.PlatformConfiguration.TizenSpecific
+{
+       using FormsElement = Forms.Image;
+
+       public static class Image
+       {
+               public static readonly BindableProperty BlendColorProperty = BindableProperty.Create("BlendColor", typeof(Color), typeof(FormsElement), Color.Default);
+
+               public static Color GetBlendColor(BindableObject element)
+               {
+                       return (Color)element.GetValue(BlendColorProperty);
+               }
+
+               public static void SetBlendColor(BindableObject element, Color color)
+               {
+                       element.SetValue(BlendColorProperty, color);
+               }
+
+               public static Color GetBlendColor(this IPlatformElementConfiguration<Tizen, FormsElement> config)
+               {
+                       return GetBlendColor(config.Element);
+               }
+
+               public static IPlatformElementConfiguration<Tizen, FormsElement> SetBlendColor(this IPlatformElementConfiguration<Tizen, FormsElement> config, Color color)
+               {
+                       SetBlendColor(config.Element, color);
+                       return config;
+               }
+       }
+}
index 7945fce..33b276b 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Compile Include="PlatformConfiguration\iOSSpecific\UIStatusBarAnimation.cs" />
     <Compile Include="PlatformConfiguration\iOSSpecific\UpdateMode.cs" />
     <Compile Include="PlatformConfiguration\iOSSpecific\VisualElement.cs" />
+    <Compile Include="PlatformConfiguration\TizenSpecific\Image.cs" />
     <Compile Include="PlatformConfiguration\TizenSpecific\ProgressBar.cs" />
     <Compile Include="PlatformConfiguration\WindowsSpecific\MasterDetailPage.cs" />
     <Compile Include="PlatformConfiguration\WindowsSpecific\CollapseStyle.cs" />
index ca06a66..09353b2 100644 (file)
@@ -1,15 +1,15 @@
+using System.ComponentModel;
 using System.Threading;
 using System.Threading.Tasks;
 
+using Specific = Xamarin.Forms.PlatformConfiguration.TizenSpecific.Image;
+
 namespace Xamarin.Forms.Platform.Tizen
 {
        public class ImageRenderer : ViewRenderer<Image, Native.Image>
        {
                public ImageRenderer()
                {
-                       RegisterPropertyHandler(Image.SourceProperty, UpdateSource);
-                       RegisterPropertyHandler(Image.AspectProperty, UpdateAspect);
-                       RegisterPropertyHandler(Image.IsOpaqueProperty, UpdateIsOpaque);
                }
 
                protected override void OnElementChanged(ElementChangedEventArgs<Image> e)
@@ -20,9 +20,35 @@ namespace Xamarin.Forms.Platform.Tizen
                                SetNativeControl(image);
                        }
 
+                       if (e.NewElement != null)
+                       {
+                               UpdateAll();
+                       }
+
                        base.OnElementChanged(e);
                }
 
+               protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
+               {
+                       base.OnElementPropertyChanged(sender, e);
+                       if (e.PropertyName == Image.SourceProperty.PropertyName)
+                       {
+                               UpdateSource();
+                       }
+                       else if (e.PropertyName == Image.AspectProperty.PropertyName)
+                       {
+                               UpdateAspect();
+                       }
+                       else if (e.PropertyName == Image.IsOpaqueProperty.PropertyName)
+                       {
+                               UpdateIsOpaque();
+                       }
+                       else if (e.PropertyName == Specific.BlendColorProperty.PropertyName)
+                       {
+                               UpdateBlendColor();
+                       }
+               }
+
                async void UpdateSource()
                {
                        ImageSource source = Element.Source;
@@ -49,6 +75,19 @@ namespace Xamarin.Forms.Platform.Tizen
                {
                        Control.IsOpaque = Element.IsOpaque;
                }
+
+               void UpdateBlendColor()
+               {
+                       Control.Color = Specific.GetBlendColor(Element).ToNative();
+               }
+
+               void UpdateAll()
+               {
+                       UpdateSource();
+                       UpdateAspect();
+                       UpdateIsOpaque();
+                       UpdateBlendColor();
+               }
        }
 
        public interface IImageSourceHandler : IRegisterable