RFC: http://suprem.sec.samsung.net/confluence/display/SPTDTLC/%5BFormsTizen%5D+RFC+16+-+ColorPickerControl
- This is the initial version of ColorPickerView
Change-Id: Ic11126d6a87ab2299cd958f9d3f92aa3c5f15f16
--- /dev/null
+using System.ComponentModel;
+using Tizen.Xamarin.Forms.Extension;
+using Tizen.Xamarin.Forms.Extension.Renderer;
+using Xamarin.Forms;\r
+using Xamarin.Forms.Platform.Tizen;
+using EColorSelector = ElmSharp.ColorSelector;
+using TForms = Xamarin.Forms.Platform.Tizen.Forms;
+\r
+[assembly: ExportRenderer(typeof(ColorPickerView), typeof(ColorPickerViewRenderer))]
+namespace Tizen.Xamarin.Forms.Extension.Renderer
+{
+ public class ColorPickerViewRenderer : ViewRenderer<ColorPickerView, EColorSelector>
+ {\r
+ public ColorPickerViewRenderer()
+ {
+ }
+
+ protected override void OnElementChanged(ElementChangedEventArgs<ColorPickerView> e)
+ {
+ if (Control == null)\r
+ {\r
+ var _colorSelector = new EColorSelector(TForms.Context.MainWindow);\r
+ SetNativeControl(_colorSelector);
+ }
+
+ if (e.OldElement != null)\r
+ {\r
+ Control.ColorChanged -= ColorChangedHandler;\r
+ }
+
+ if (e.NewElement != null)\r
+ {\r
+ UpdateSelectedColor();\r
+ Control.ColorChanged += ColorChangedHandler;\r
+ }
+ base.OnElementChanged(e);
+ }\r
+\r
+ protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
+ {\r
+ if (e.PropertyName == ColorPickerView.SelectedColorProperty.PropertyName)
+ {\r
+ UpdateSelectedColor();
+ }
+ base.OnElementPropertyChanged(sender, e);
+ }\r
+\r
+ void UpdateSelectedColor()
+ {
+ Control.SelectedColor = Element.SelectedColor.ToNative();
+ }\r
+\r
+ void ColorChangedHandler(object sender, ElmSharp.ColorChangedEventArgs e)\r
+ {\r
+ var color = Control.SelectedColor;\r
+ Element.SelectedColor = Color.FromRgba(color.R, color.G, color.B, color.A);\r
+ }\r
+ }
+}
<WarningLevel>4</WarningLevel>\r
</PropertyGroup>\r
<ItemGroup>\r
+ <Compile Include="ColorPickerViewRenderer.cs" />\r
<Compile Include="BackgroundRenderer.cs" />\r
<Compile Include="Cells\DoubleLabelCellRenderer.cs" />\r
<Compile Include="Cells\GridViewCellRenderer.cs" />\r
<None Include="Tizen.Xamarin.Forms.Extension.Renderer.project.json" />\r
</ItemGroup>\r
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />\r
- <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
- Other similar extension points exist, see Microsoft.Common.targets.
- <Target Name="BeforeBuild">
- </Target>
- <Target Name="AfterBuild">
- </Target>
- -->\r
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.\r
+ Other similar extension points exist, see Microsoft.Common.targets.\r
+ <Target Name="BeforeBuild">\r
+ </Target>\r
+ <Target Name="AfterBuild">\r
+ </Target>\r
+ -->\r
<ItemGroup>\r
<ProjectReference Include="..\Tizen.Xamarin.Forms.Extension\Tizen.Xamarin.Forms.Extension.csproj">\r
<Project>{62531FB2-271B-4669-804E-7287A744CFD0}</Project>\r
</ProjectReference>\r
</ItemGroup>\r
<PropertyGroup>\r
- <!-- https://github.com/dotnet/corefxlab/tree/master/samples/NetCoreSample and
- https://docs.microsoft.com/en-us/dotnet/articles/core/tutorials/target-dotnetcore-with-msbuild
- -->\r
- <!-- We don't use any of MSBuild's resolution logic for resolving the framework, so just set these two
- properties to any folder that exists to skip the GetReferenceAssemblyPaths task (not target) and
- to prevent it from outputting a warning (MSB3644).
- -->\r
+ <!-- https://github.com/dotnet/corefxlab/tree/master/samples/NetCoreSample and\r
+ https://docs.microsoft.com/en-us/dotnet/articles/core/tutorials/target-dotnetcore-with-msbuild\r
+ -->\r
+ <!-- We don't use any of MSBuild's resolution logic for resolving the framework, so just set these two\r
+ properties to any folder that exists to skip the GetReferenceAssemblyPaths task (not target) and\r
+ to prevent it from outputting a warning (MSB3644).\r
+ -->\r
<_TargetFrameworkDirectories>$(MSBuildThisFileDirectory)</_TargetFrameworkDirectories>\r
<_FullFrameworkReferenceAssemblyPaths>$(MSBuildThisFileDirectory)</_FullFrameworkReferenceAssemblyPaths>\r
<AutoUnifyAssemblyReferences>true</AutoUnifyAssemblyReferences>\r
--- /dev/null
+using System;\r
+using Xamarin.Forms;\r
+\r
+namespace Tizen.Xamarin.Forms.Extension\r
+{\r
+ public class ColorChangedEventArgs : EventArgs\r
+ {\r
+ public ColorChangedEventArgs(Color oldColor, Color newColor)\r
+ {\r
+ OldColor = oldColor;\r
+ NewColor = newColor;\r
+ }\r
+\r
+ public Color OldColor { get; private set; }\r
+\r
+ public Color NewColor { get; private set; }\r
+\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Collections.ObjectModel;\r
+using Xamarin.Forms;
+
+namespace Tizen.Xamarin.Forms.Extension
+{\r
+ /// <summary>\r
+ /// The ColorPickerView class allows the user to select a color.\r
+ /// </summary>
+ /// <example>
+ /// <code>
+ /// ColorPickerView colorPickerView = new ColorPickerView();\r
+ /// colorPickerView.ColorChanged += (s, e) =>\r
+ /// {\r
+ /// Debug.WriteLine("Old Color: " + e.OldColor);\r
+ /// Debug.WriteLine("New Color: " + e.NewColor);\r
+ /// };\r
+ /// </code>
+ /// </example>
+ public class ColorPickerView : View
+ {
+ public static readonly BindableProperty SelectedColorProperty = BindableProperty.Create("SelectedColor", typeof(Color), typeof(ColorPickerView), Color.Default, propertyChanged: OnSelectedColorChanged );\r
+\r
+ /// <summary>\r
+ /// Get or set current selected color from ColorPickerView\r
+ /// Default value is Color.Default\r
+ /// </summary>\r
+ public Color SelectedColor
+ {
+ get { return (Color)GetValue(SelectedColorProperty); }
+ set { SetValue(SelectedColorProperty, value); }
+ }
+
+ /// <summary>\r
+ /// Occurs when the SelectedColor value changes\r
+ /// </summary>
+ public event EventHandler<ColorChangedEventArgs> ColorChanged;\r
+\r
+ static void OnSelectedColorChanged(BindableObject bindable, object oldValue, object newValue)\r
+ {\r
+ var colorSelector = bindable as ColorPickerView;\r
+ colorSelector.ColorChanged?.Invoke(colorSelector, new ColorChangedEventArgs(((Color)oldValue), (Color)newValue));\r
+ }\r
+ }
+}
</NoWarn>\r
</PropertyGroup>\r
<ItemGroup>\r
+ <Compile Include="ColorChangedEventArgs.cs" />\r
+ <Compile Include="ColorPickerView.cs" />\r
<Compile Include="Background.cs" />\r
<Compile Include="BackgroundOptions.cs" />\r
<Compile Include="Cells\GridViewCell.cs" />\r