diff options
author | Pawel Andruszkiewicz <p.andruszkie@samsung.com> | 2017-01-16 09:52:05 +0100 |
---|---|---|
committer | Kangho Hur <kangho.hur@samsung.com> | 2017-07-10 11:11:28 +0900 |
commit | 0797bfc37545d5f43741fe63027d72b410d52852 (patch) | |
tree | 694796277d4a572d481875f6e8b4a9e6eb8418f4 /Xamarin.Forms.Platform.Tizen/Native | |
parent | 0b87fd361e90937bcf665bab0ecfbe08483da5bf (diff) | |
download | xamarin-forms-0797bfc37545d5f43741fe63027d72b410d52852.tar.gz xamarin-forms-0797bfc37545d5f43741fe63027d72b410d52852.tar.bz2 xamarin-forms-0797bfc37545d5f43741fe63027d72b410d52852.zip |
Initialize Label with a single batch update
Change-Id: Id3811e8014accc2044c6422d1fab2381ac4594ed
Signed-off-by: Pawel Andruszkiewicz <p.andruszkie@samsung.com>
Diffstat (limited to 'Xamarin.Forms.Platform.Tizen/Native')
-rw-r--r-- | Xamarin.Forms.Platform.Tizen/Native/BatchableExtensions.cs | 64 | ||||
-rw-r--r-- | Xamarin.Forms.Platform.Tizen/Native/IBatchable.cs | 7 | ||||
-rwxr-xr-x | Xamarin.Forms.Platform.Tizen/Native/Label.cs | 12 |
3 files changed, 81 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) |