summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Platform.Tizen
diff options
context:
space:
mode:
Diffstat (limited to 'Xamarin.Forms.Platform.Tizen')
-rw-r--r--Xamarin.Forms.Platform.Tizen/Native/BatchableExtensions.cs64
-rw-r--r--Xamarin.Forms.Platform.Tizen/Native/IBatchable.cs7
-rwxr-xr-xXamarin.Forms.Platform.Tizen/Native/Label.cs12
-rw-r--r--Xamarin.Forms.Platform.Tizen/Renderers/LabelRenderer.cs11
4 files changed, 92 insertions, 2 deletions
diff --git a/Xamarin.Forms.Platform.Tizen/Native/BatchableExtensions.cs b/Xamarin.Forms.Platform.Tizen/Native/BatchableExtensions.cs
new file mode 100644
index 00000000..5f630e1b
--- /dev/null
+++ b/Xamarin.Forms.Platform.Tizen/Native/BatchableExtensions.cs
@@ -0,0 +1,64 @@
+using System.Runtime.CompilerServices;
+
+namespace Xamarin.Forms.Platform.Tizen.Native
+{
+ internal static class BatchableExtensions
+ {
+ static readonly ConditionalWeakTable<IBatchable, BatchCount> s_counters = new ConditionalWeakTable<IBatchable, BatchCount>();
+
+ public static void BatchBegin(this IBatchable target)
+ {
+ BatchCount value = null;
+
+ if (s_counters.TryGetValue(target, out value))
+ {
+ value.Count++;
+ }
+ else
+ {
+ s_counters.Add(target, new BatchCount());
+ }
+ }
+
+ public static void BatchCommit(this IBatchable target)
+ {
+ BatchCount value = null;
+ if (s_counters.TryGetValue(target, out value))
+ {
+ value.Count--;
+ if (value.Count == 0)
+ {
+ target.OnBatchCommitted();
+ }
+ else if (value.Count < 0)
+ {
+ Log.Error("Called BatchCommit() without BatchBegin().");
+ value.Count = 0;
+ }
+ }
+ else
+ {
+ Log.Error("Called BatchCommit() without BatchBegin().");
+ }
+ }
+
+ public static bool IsBatched(this IBatchable target)
+ {
+ BatchCount value = null;
+
+ if (s_counters.TryGetValue(target, out value))
+ {
+ return value.Count != 0;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ class BatchCount
+ {
+ public int Count = 1;
+ }
+ }
+}
diff --git a/Xamarin.Forms.Platform.Tizen/Native/IBatchable.cs b/Xamarin.Forms.Platform.Tizen/Native/IBatchable.cs
new file mode 100644
index 00000000..37835961
--- /dev/null
+++ b/Xamarin.Forms.Platform.Tizen/Native/IBatchable.cs
@@ -0,0 +1,7 @@
+namespace Xamarin.Forms.Platform.Tizen.Native
+{
+ internal interface IBatchable
+ {
+ void OnBatchCommitted();
+ }
+}
diff --git a/Xamarin.Forms.Platform.Tizen/Native/Label.cs b/Xamarin.Forms.Platform.Tizen/Native/Label.cs
index b508b21e..3c500737 100755
--- a/Xamarin.Forms.Platform.Tizen/Native/Label.cs
+++ b/Xamarin.Forms.Platform.Tizen/Native/Label.cs
@@ -10,7 +10,7 @@ namespace Xamarin.Forms.Platform.Tizen.Native
/// The Label class extends <c>ElmSharp.Label</c> to be better suited for Xamarin renderers.
/// Mainly the formatted text support.
/// </summary>
- public class Label : ELabel, ITextable, IMeasurable
+ public class Label : ELabel, ITextable, IMeasurable, IBatchable
{
/// <summary>
/// The _span holds the content of the label.
@@ -379,9 +379,17 @@ namespace Xamarin.Forms.Platform.Tizen.Native
return formattedSize;
}
+ void IBatchable.OnBatchCommitted()
+ {
+ ApplyTextAndStyle();
+ }
+
void ApplyTextAndStyle()
{
- SetInternalTextAndStyle(_span.GetDecoratedText(), _span.GetStyle());
+ if (!this.IsBatched())
+ {
+ SetInternalTextAndStyle(_span.GetDecoratedText(), _span.GetStyle());
+ }
}
void SetInternalTextAndStyle(string formattedText, string textStyle)
diff --git a/Xamarin.Forms.Platform.Tizen/Renderers/LabelRenderer.cs b/Xamarin.Forms.Platform.Tizen/Renderers/LabelRenderer.cs
index b3701d39..08547c98 100644
--- a/Xamarin.Forms.Platform.Tizen/Renderers/LabelRenderer.cs
+++ b/Xamarin.Forms.Platform.Tizen/Renderers/LabelRenderer.cs
@@ -1,3 +1,4 @@
+using Xamarin.Forms.Platform.Tizen.Native;
using EColor = ElmSharp.Color;
using Specific = Xamarin.Forms.PlatformConfiguration.TizenSpecific.Label;
@@ -37,6 +38,7 @@ namespace Xamarin.Forms.Platform.Tizen
if (e.NewElement != null)
{
+ Control.BatchBegin();
}
base.OnElementChanged(e);
@@ -47,6 +49,11 @@ namespace Xamarin.Forms.Platform.Tizen
return Control.Measure(Control.MinimumWidth, Control.MinimumHeight).ToDP();
}
+ protected override void OnElementReady()
+ {
+ Control?.BatchCommit();
+ }
+
Native.FormattedString ConvertFormattedText(FormattedString formattedString)
{
if (formattedString == null)
@@ -99,9 +106,13 @@ namespace Xamarin.Forms.Platform.Tizen
void UpdateFontProperties()
{
+ Control.BatchBegin();
+
Control.FontSize = Element.FontSize;
Control.FontAttributes = Element.FontAttributes;
Control.FontFamily = Element.FontFamily;
+
+ Control.BatchCommit();
}
void UpdateLineBreakMode()