blob: be5de861b79f1e6e562b670836e1c61db3b92600 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
using EColor = ElmSharp.Color;
using Specific = Xamarin.Forms.PlatformConfiguration.TizenSpecific.Label;
namespace Xamarin.Forms.Platform.Tizen
{
public class LabelRenderer : ViewRenderer<Label, Native.Label>
{
static readonly EColor s_defaultBackgroundColor = EColor.Transparent;
static readonly EColor s_defaultForegroundColor = EColor.Black;
static readonly EColor s_defaultTextColor = s_defaultForegroundColor;
public LabelRenderer()
{
RegisterPropertyHandler(Label.TextProperty, () => Control.Text = Element.Text);
RegisterPropertyHandler(Label.TextColorProperty, UpdateTextColor);
// FontProperty change is called also for FontSizeProperty, FontFamilyProperty and FontAttributesProperty change
RegisterPropertyHandler(Label.FontProperty, UpdateFontProperties);
RegisterPropertyHandler(Label.LineBreakModeProperty, UpdateLineBreakMode);
RegisterPropertyHandler(Label.HorizontalTextAlignmentProperty, UpdateTextAlignment);
RegisterPropertyHandler(Label.VerticalTextAlignmentProperty, UpdateTextAlignment);
RegisterPropertyHandler(Label.FormattedTextProperty, UpdateFormattedText);
RegisterPropertyHandler(Specific.FontWeightProperty, UpdateFontWeight);
}
protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
{
if (Control == null)
{
var label = new Native.Label(Forms.Context.MainWindow);
base.SetNativeControl(label);
}
if (e.OldElement != null)
{
}
if (e.NewElement != null)
{
}
base.OnElementChanged(e);
}
protected override Size MinimumSize()
{
return Control.Measure(Control.MinimumWidth, Control.MinimumHeight).ToDP();
}
Native.FormattedString ConvertFormattedText(FormattedString formattedString)
{
if (formattedString == null)
{
return null;
}
Native.FormattedString nativeString = new Native.FormattedString();
foreach (var span in formattedString.Spans)
{
Native.Span nativeSpan = new Native.Span();
nativeSpan.Text = span.Text;
nativeSpan.FontAttributes = span.FontAttributes;
nativeSpan.FontFamily = span.FontFamily;
nativeSpan.FontSize = span.FontSize;
nativeSpan.ForegroundColor = span.ForegroundColor.ToNative();
nativeSpan.BackgroundColor = span.BackgroundColor.ToNative();
nativeString.Spans.Add(nativeSpan);
}
return nativeString;
}
void UpdateFormattedText()
{
if (Element.FormattedText != null)
Control.FormattedText = ConvertFormattedText(Element.FormattedText);
}
void UpdateTextColor()
{
Control.TextColor = Element.TextColor.IsDefault ? s_defaultTextColor : Element.TextColor.ToNative();
}
void UpdateTextAlignment()
{
Control.HorizontalTextAlignment = Element.HorizontalTextAlignment.ToNative();
Control.VerticalTextAlignment = Element.VerticalTextAlignment.ToNative();
}
void UpdateFontProperties()
{
Control.FontSize = Element.FontSize;
Control.FontAttributes = Element.FontAttributes;
Control.FontFamily = Element.FontFamily;
}
void UpdateLineBreakMode()
{
Control.LineBreakMode = ConvertToNativeLineBreakMode(Element.LineBreakMode);
}
void UpdateFontWeight()
{
Control.FontWeight = Specific.GetFontWeight(Element);
}
Native.LineBreakMode ConvertToNativeLineBreakMode(LineBreakMode mode)
{
switch (mode)
{
case LineBreakMode.CharacterWrap:
return Native.LineBreakMode.CharacterWrap;
case LineBreakMode.HeadTruncation:
return Native.LineBreakMode.HeadTruncation;
case LineBreakMode.MiddleTruncation:
return Native.LineBreakMode.MiddleTruncation;
case LineBreakMode.NoWrap:
return Native.LineBreakMode.NoWrap;
case LineBreakMode.TailTruncation:
return Native.LineBreakMode.TailTruncation;
case LineBreakMode.WordWrap:
default:
return Native.LineBreakMode.WordWrap;
}
}
}
}
|