1 #Region "Microsoft.VisualBasic::70712e72b8e31fce06c0f061b18fe079, Microsoft.VisualBasic.Core\Extensions\Image\GDI+\FontFace.vb"
2
3     ' Author:
4     
5     '       asuka (amethyst.asuka@gcmodeller.org)
6     '       xie (genetics@smrucc.org)
7     '       xieguigang (xie.guigang@live.com)
8     
9     ' Copyright (c) 2018 GPL3 Licensed
10     
11     
12     ' GNU GENERAL PUBLIC LICENSE (GPL3)
13     
14     
15     ' This program is free software: you can redistribute it and/or modify
16     ' it under the terms of the GNU General Public License as published by
17     ' the Free Software Foundation, either version 3 of the License, or
18     ' (at your option) any later version.
19     
20     ' This program is distributed in the hope that it will be useful,
21     ' but WITHOUT ANY WARRANTY; without even the implied warranty of
22     ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23     ' GNU General Public License for more details.
24     
25     ' You should have received a copy of the GNU General Public License
26     ' along with this program. If not, see <http://www.gnu.org/licenses/>.
27
28
29
30     ' /********************************************************************************/
31
32     ' Summaries:
33
34     '     Class FontFace
35     
36     '         Properties: InstalledFontFamilies
37     
38     '         Constructor: (+2 OverloadsSub New
39     '         FunctionGetFontName
40     
41     '     Module DefaultFontValues
42     
43     
44     '         Class MicrosoftYaHei
45     
46     '             Properties: Bold, Large, Normal
47     
48     '             Constructor: (+1 OverloadsSub New
49     
50     
51     
52     
53     ' /********************************************************************************/
54
55 #End Region
56
57 Imports System.Drawing
58 Imports System.Drawing.Text
59 Imports DefaultFont = Microsoft.VisualBasic.Language.Default.DefaultValue(Of System.Drawing.Font)
60
61 Namespace Imaging
62
63     ''' <summary>
64     ''' Font names collection
65     ''' </summary>
66     Public NotInheritable Class FontFace
67
68         ''' <summary>
69         ''' 微软雅黑字体的名称
70         ''' </summary>
71         Public Const MicrosoftYaHei As String = "Microsoft YaHei"
72         Public Const MicrosoftYaHeiUI As String = "Microsoft YaHei UI"
73         Public Const Ubuntu As String = "Ubuntu"
74         Public Const SegoeUI As String = "Segoe UI"
75         Public Const Arial As String = "Arial"
76         Public Const BookmanOldStyle As String = "Bookman Old Style"
77         Public Const Calibri As String = "Calibri"
78         Public Const Cambria As String = "Cambria"
79         Public Const CambriaMath As String = "Cambria Math"
80         Public Const Consolas As String = "Consolas"
81         Public Const CourierNew As String = "Courier New"
82         Public Const NSimSun As String = "NSimSun"
83         Public Const SimSun As String = "SimSun"
84         Public Const Verdana As String = "Verdana"
85         Public Const Tahoma As String = "Tahoma"
86         Public Const TimesNewRoman As String = "Times New Roman"
87
88         Public Shared ReadOnly Property InstalledFontFamilies As IReadOnlyCollection(Of String)
89
90         Shared ReadOnly __fontFamilies As Dictionary(Of StringString)
91         Shared Sub New()
92             Dim fontFamilies() As FontFamily
93             Dim installedFontCollection As New InstalledFontCollection()
94
95             Get the array of FontFamily objects.
96             fontFamilies = installedFontCollection.Families
97             InstalledFontFamilies = fontFamilies.Select(Function(f) f.Name).ToArray
98             __fontFamilies = New Dictionary(Of StringString)
99
100             For Each family$ In InstalledFontFamilies
101                 __fontFamilies(LCase(family)) = family
102             Next
103         End Sub
104
105         Private Sub New()
106         End Sub
107
108         ''' <summary>
109         ''' 由于字体名称的大小写敏感,所以假若是html css之类的渲染的话,由于可能会是小写的字体名称会导致无法
110         ''' 正确的加载所需要的字体,所以可以使用这个函数来消除这种由于大小写敏感而带来的bug
111         ''' </summary>
112         ''' <param name="name$"></param>
113         ''' <param name="default">默认使用Windows10的默认字体</param>
114         ''' <returns></returns>
115         Public Shared Function GetFontName(name$, Optional default$ = FontFace.SegoeUI) As String
116             If __fontFamilies.ContainsKey(name) Then
117                 Return __fontFamilies(name)
118             Else
119                 name = LCase(name)
120
121                 If __fontFamilies.ContainsKey(name) Then
122                     Return __fontFamilies(name)
123                 Else
124                     Return [default]
125                 End If
126             End If
127         End Function
128     End Class
129
130     ''' <summary>
131     ''' Default font values
132     ''' </summary>
133     Public Module DefaultFontValues
134
135         Public NotInheritable Class MicrosoftYaHei
136
137             Public Shared ReadOnly Property Normal As DefaultFont = New Font(FontFace.MicrosoftYaHei, 12, FontStyle.Regular)
138             Public Shared ReadOnly Property Large As DefaultFont = New Font(FontFace.MicrosoftYaHei, 30, FontStyle.Regular)
139             Public Shared ReadOnly Property Bold As DefaultFont = New Font(FontFace.MicrosoftYaHei, 12, FontStyle.Bold)
140
141             Private Sub New()
142             End Sub
143         End Class
144     End Module
145 End Namespace