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
|
using System;
using System.Collections.Generic;
using Android.Graphics;
namespace Xamarin.Forms.Platform.Android
{
public static class FontExtensions
{
static readonly Dictionary<Tuple<string, FontAttributes>, Typeface> Typefaces = new Dictionary<Tuple<string, FontAttributes>, Typeface>();
static Typeface s_defaultTypeface;
public static float ToScaledPixel(this Font self)
{
if (self.IsDefault)
return 14;
if (self.UseNamedSize)
{
switch (self.NamedSize)
{
case NamedSize.Micro:
return 10;
case NamedSize.Small:
return 12;
case NamedSize.Default:
case NamedSize.Medium:
return 14;
case NamedSize.Large:
return 18;
}
}
return (float)self.FontSize;
}
public static Typeface ToTypeface(this Font self)
{
if (self.IsDefault)
return s_defaultTypeface ?? (s_defaultTypeface = Typeface.Default);
var key = new Tuple<string, FontAttributes>(self.FontFamily, self.FontAttributes);
Typeface result;
if (Typefaces.TryGetValue(key, out result))
return result;
var style = TypefaceStyle.Normal;
if ((self.FontAttributes & (FontAttributes.Bold | FontAttributes.Italic)) == (FontAttributes.Bold | FontAttributes.Italic))
style = TypefaceStyle.BoldItalic;
else if ((self.FontAttributes & FontAttributes.Bold) != 0)
style = TypefaceStyle.Bold;
else if ((self.FontAttributes & FontAttributes.Italic) != 0)
style = TypefaceStyle.Italic;
if (self.FontFamily != null)
result = Typeface.Create(self.FontFamily, style);
else
result = Typeface.Create(Typeface.Default, style);
Typefaces[key] = result;
return result;
}
internal static bool IsDefault(this IFontElement self)
{
return self.FontFamily == null && self.FontSize == Device.GetNamedSize(NamedSize.Default, typeof(Label), true) && self.FontAttributes == FontAttributes.None;
}
internal static Typeface ToTypeface(this IFontElement self)
{
var key = new Tuple<string, FontAttributes>(self.FontFamily, self.FontAttributes);
Typeface result;
if (Typefaces.TryGetValue(key, out result))
return result;
var style = TypefaceStyle.Normal;
if ((self.FontAttributes & (FontAttributes.Bold | FontAttributes.Italic)) == (FontAttributes.Bold | FontAttributes.Italic))
style = TypefaceStyle.BoldItalic;
else if ((self.FontAttributes & FontAttributes.Bold) != 0)
style = TypefaceStyle.Bold;
else if ((self.FontAttributes & FontAttributes.Italic) != 0)
style = TypefaceStyle.Italic;
if (self.FontFamily != null)
result = Typeface.Create(self.FontFamily, style);
else
result = Typeface.Create(Typeface.Default, style);
Typefaces[key] = result;
return result;
}
}
}
|