summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Platform.Tizen/Renderers/StepperRenderer.cs
diff options
context:
space:
mode:
authorKangho Hur <kangho.hur@samsung.com>2016-12-16 11:00:07 +0900
committerKangho Hur <kangho.hur@samsung.com>2017-07-10 11:11:14 +0900
commit79bf87f2bc00d823cf8b25ed7d0d3650cf819b4c (patch)
tree99d3412413a92c057cb8ad8429ddb0c7d4cb8c14 /Xamarin.Forms.Platform.Tizen/Renderers/StepperRenderer.cs
parentb7297c8ac01d6ce2d5f038d3df8f4bc9e74a8162 (diff)
downloadxamarin-forms-79bf87f2bc00d823cf8b25ed7d0d3650cf819b4c.tar.gz
xamarin-forms-79bf87f2bc00d823cf8b25ed7d0d3650cf819b4c.tar.bz2
xamarin-forms-79bf87f2bc00d823cf8b25ed7d0d3650cf819b4c.zip
Add Tizen backend renderer
- Xamarin.Forms.Platform.Tizen has been added - Xamarin.Forms.Maps.Tizen has been added - RPM build spec has been added Change-Id: I0021e0f040d97345affc87512ee0f6ce437f4e6d
Diffstat (limited to 'Xamarin.Forms.Platform.Tizen/Renderers/StepperRenderer.cs')
-rw-r--r--Xamarin.Forms.Platform.Tizen/Renderers/StepperRenderer.cs86
1 files changed, 86 insertions, 0 deletions
diff --git a/Xamarin.Forms.Platform.Tizen/Renderers/StepperRenderer.cs b/Xamarin.Forms.Platform.Tizen/Renderers/StepperRenderer.cs
new file mode 100644
index 00000000..09d1bf6b
--- /dev/null
+++ b/Xamarin.Forms.Platform.Tizen/Renderers/StepperRenderer.cs
@@ -0,0 +1,86 @@
+using System;
+using ElmSharp;
+
+namespace Xamarin.Forms.Platform.Tizen
+{
+ public class StepperRenderer : ViewRenderer<Stepper, Spinner>
+ {
+
+ public StepperRenderer()
+ {
+ RegisterPropertyHandler(Stepper.ValueProperty, UpdateValue);
+ RegisterPropertyHandler(Stepper.MinimumProperty, UpdateMinMax);
+ RegisterPropertyHandler(Stepper.MaximumProperty, UpdateMinMax);
+ RegisterPropertyHandler(Stepper.IncrementProperty, UpdateStep);
+ }
+
+ protected override void OnElementChanged(ElementChangedEventArgs<Stepper> e)
+ {
+ if (Control == null)
+ {
+ var stepper = new Spinner(Forms.Context.MainWindow)
+ {
+ IsEditable = false,
+ };
+
+ SetNativeControl(stepper);
+ }
+
+ if (e.OldElement != null)
+ {
+ Control.ValueChanged -= StepperValueChangedHandler;
+ }
+
+ if (e.NewElement != null)
+ {
+ Control.ValueChanged += StepperValueChangedHandler;
+ }
+
+ base.OnElementChanged(e);
+ }
+
+ void StepperValueChangedHandler(object sender, EventArgs e)
+ {
+ double newValue = Control.Value;
+ ((IElementController)Element).SetValueFromRenderer(Stepper.ValueProperty, newValue);
+
+ // Determines how many decimal places are there in current Stepper's value.
+ // The 15 pound characters below correspond to the maximum precision of Double type.
+ var decimalValue = Decimal.Parse(newValue.ToString("0.###############"));
+
+ // GetBits() method returns an array of four 32-bit integer values.
+ // The third (0-indexing) element of an array contains the following information:
+ // bits 00-15: unused, required to be 0
+ // bits 16-23: an exponent between 0 and 28 indicating the power of 10 to divide the integer number passed as a parameter.
+ // Conversely this is the number of decimal digits in the number as well.
+ // bits 24-30: unused, required to be 0
+ // bit 31: indicates the sign. 0 means positive number, 1 is for negative numbers.
+ //
+ // The precision information needs to be extracted from bits 16-23 of third element of an array
+ // returned by GetBits() call. Right-shifting by 16 bits followed by zeroing anything else results
+ // in a nice conversion of this data to integer variable.
+ var precision = (Decimal.GetBits(decimalValue)[3] >> 16) & 0x000000FF;
+
+ // Sets Stepper's inner label decimal format to use exactly as many decimal places as needed:
+ Control.LabelFormat = string.Format("%.{0}f", precision);
+ }
+
+ protected void UpdateValue()
+ {
+ Control.Value = Element.Value;
+ }
+
+ protected void UpdateMinMax()
+ {
+ Control.Minimum = Element.Minimum;
+ Control.Maximum = Element.Maximum;
+ UpdateValue();
+ }
+
+ void UpdateStep()
+ {
+ Control.Step = Element.Increment;
+ }
+ }
+}
+