Skip to content

Commit 0f9e889

Browse files
authored
[NTGDI][FREETYPE][SETUP][INF] Support FontLink (reactos#7009)
If East Asian people were unable to see the Latin characters, it becomes a barrier to mutual understanding. FontLink will break that barrier. JIRA issue: CORE-9616 JIRA issue: CORE-15480 - Modify font substitutes. - Unify the lock variables. - Add FONTLINK and FONTLINK_CHAIN structures. - Add FontLink_Create and FontLink_Destroy functions. - Add FontLink_Chain_Init, FontLink_Chain_Free, FontLink_Chain_LoadReg, FontLink_Chain_Populate, and FontLink_Chain_FindGlyph functions. - Implement FontLink. - Add font file DroidSansFallback.ttf for LiveCD.
1 parent f28e983 commit 0f9e889

File tree

9 files changed

+840
-103
lines changed

9 files changed

+840
-103
lines changed

base/setup/lib/muifonts.h

+8-18
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,6 @@ MUI_SUBFONT ChineseSimplifiedFonts[] =
148148
{ L"Courier New Greek,161", L"Courier New,161" },
149149
{ L"Courier New TUR,162", L"Courier New,162" },
150150
{ L"Fixedsys", L"Fixedsys Excelsior 3.01-L2" },
151-
{ L"Franklin Gothic Medium", L"Droid Sans Fallback" },
152151
{ L"Helv", L"MS Sans Serif" },
153152
{ L"Helvetica", L"Arial" },
154153
{ L"MS Sans Serif", L"Droid Sans Fallback" },
@@ -161,9 +160,6 @@ MUI_SUBFONT ChineseSimplifiedFonts[] =
161160
{ L"Segoe UI Symbol", L"Arial" },
162161
{ L"SimHei", L"Droid Sans Fallback" },
163162
{ L"SimSun", L"Droid Sans Fallback" },
164-
{ L"Source Sans Pro", L"Droid Sans Fallback" },
165-
{ L"System", L"Droid Sans Fallback" },
166-
{ L"Tahoma", L"Droid Sans Fallback" },
167163
{ L"Terminal", L"Lucida Console" },
168164
{ L"Times", L"Times New Roman" },
169165
{ L"Times New Roman Baltic,186", L"Times New Roman,186" },
@@ -202,7 +198,6 @@ MUI_SUBFONT ChineseTraditionalFonts[] =
202198
{ L"DLCMingBold", L"Droid Sans Fallback" },
203199
{ L"DLCMingMedium", L"Droid Sans Fallback" },
204200
{ L"Fixedsys", L"Fixedsys Excelsior 3.01-L2" },
205-
{ L"Franklin Gothic Medium", L"Droid Sans Fallback" },
206201
{ L"Helv", L"MS Sans Serif" },
207202
{ L"Helvetica", L"Arial" },
208203
{ L"MS Sans Serif", L"Droid Sans Fallback" },
@@ -214,9 +209,6 @@ MUI_SUBFONT ChineseTraditionalFonts[] =
214209
{ L"MingLiU", L"Droid Sans Fallback" },
215210
{ L"PMingLiU", L"Droid Sans Fallback" },
216211
{ L"Segoe UI Symbol", L"Arial" },
217-
{ L"Source Sans Pro", L"Droid Sans Fallback" },
218-
{ L"System", L"Droid Sans Fallback" },
219-
{ L"Tahoma", L"Droid Sans Fallback" },
220212
{ L"Terminal", L"Lucida Console" },
221213
{ L"Times", L"Times New Roman" },
222214
{ L"Times New Roman Baltic,186", L"Times New Roman,186" },
@@ -252,7 +244,6 @@ MUI_SUBFONT JapaneseFonts[] =
252244
{ L"Courier New Greek,161", L"Courier New,161" },
253245
{ L"Courier New TUR,162", L"Courier New,162" },
254246
{ L"Fixedsys", L"Fixedsys Excelsior 3.01-L2" },
255-
{ L"Franklin Gothic Medium", L"Droid Sans Fallback" },
256247
{ L"Helv", L"MS Sans Serif" },
257248
{ L"Helvetica", L"Arial" },
258249
{ L"MS Gothic", L"Droid Sans Fallback" },
@@ -265,9 +256,6 @@ MUI_SUBFONT JapaneseFonts[] =
265256
{ L"MS UI Gothic", L"Droid Sans Fallback" },
266257
{ L"MS UI Gothic 2", L"Droid Sans Fallback" },
267258
{ L"Segoe UI Symbol", L"Arial" },
268-
{ L"Source Sans Pro", L"Droid Sans Fallback" },
269-
{ L"System", L"Droid Sans Fallback" },
270-
{ L"Tahoma", L"Droid Sans Fallback" },
271259
{ L"Terminal", L"Lucida Console" },
272260
{ L"Times", L"Times New Roman" },
273261
{ L"Times New Roman Baltic,186", L"Times New Roman,186" },
@@ -287,10 +275,12 @@ MUI_SUBFONT JapaneseFonts[] =
287275

288276
WCHAR KF_LocalName0[] = {0xBC14, 0xD0D5, 0}; /* Batang */
289277
WCHAR KF_LocalName1[] = {0xBC14, 0xD0D5, 0xCCB4, 0}; /* BatangChe */
290-
WCHAR KF_LocalName2[] = {0xAD81, 0xC11C, 0}; /* Gungsuh */
291-
WCHAR KF_LocalName3[] = {0xAD81, 0xC11C, 0xCCB4, 0}; /* GungsuhChe */
278+
WCHAR KF_LocalName2[] = {0xB3CB, 0xC6C0, 0}; /* Dotum */
279+
WCHAR KF_LocalName3[] = {0xB3CB, 0xC6C0, 0xCCB4, 0}; /* DotumChe */
292280
WCHAR KF_LocalName4[] = {0xAD74, 0xB9BC, 0}; /* Gulim */
293281
WCHAR KF_LocalName5[] = {0xAD74, 0xB9BC, 0xCCB4, 0}; /* GulimChe */
282+
WCHAR KF_LocalName6[] = {0xAD81, 0xC11C, 0}; /* Gungsuh */
283+
WCHAR KF_LocalName7[] = {0xAD81, 0xC11C, 0xCCB4, 0}; /* GungsuhChe */
294284
MUI_SUBFONT KoreanFonts[] =
295285
{
296286
{ L"Arial Baltic,186", L"Arial,186" },
@@ -306,8 +296,9 @@ MUI_SUBFONT KoreanFonts[] =
306296
{ L"Courier New CYR,204", L"Courier New,204" },
307297
{ L"Courier New Greek,161", L"Courier New,161" },
308298
{ L"Courier New TUR,162", L"Courier New,162" },
299+
{ L"Dotum", L"Droid Sans Fallback" },
300+
{ L"DotumChe", L"Droid Sans Fallback" },
309301
{ L"Fixedsys", L"Fixedsys Excelsior 3.01-L2" },
310-
{ L"Franklin Gothic Medium", L"Droid Sans Fallback" },
311302
{ L"Gulim", L"Droid Sans Fallback" },
312303
{ L"GulimChe", L"Droid Sans Fallback" },
313304
{ L"Gungsuh", L"Droid Sans Fallback" },
@@ -320,9 +311,6 @@ MUI_SUBFONT KoreanFonts[] =
320311
{ L"MS UI Gothic", L"Droid Sans Fallback" },
321312
{ L"MS UI Gothic 2", L"Droid Sans Fallback" },
322313
{ L"Segoe UI Symbol", L"Arial" },
323-
{ L"Source Sans Pro", L"Droid Sans Fallback" },
324-
{ L"System", L"Droid Sans Fallback" },
325-
{ L"Tahoma", L"Droid Sans Fallback" },
326314
{ L"Terminal", L"Lucida Console" },
327315
{ L"Times", L"Times New Roman" },
328316
{ L"Times New Roman Baltic,186", L"Times New Roman,186" },
@@ -339,6 +327,8 @@ MUI_SUBFONT KoreanFonts[] =
339327
{ KF_LocalName3, L"Droid Sans Fallback" },
340328
{ KF_LocalName4, L"Droid Sans Fallback" },
341329
{ KF_LocalName5, L"Droid Sans Fallback" },
330+
{ KF_LocalName6, L"Droid Sans Fallback" },
331+
{ KF_LocalName7, L"Droid Sans Fallback" },
342332
{ NULL, NULL }
343333
};
344334

boot/bootdata/hivesft.inf

+4-2
Original file line numberDiff line numberDiff line change
@@ -627,12 +627,14 @@ HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink","Microso
627627
"msgothic.ttc,MS UI Gothic",\
628628
"mingliu.ttc,PMingLiU",\
629629
"simsun.ttc,SimSun",\
630-
"gulim.ttc,Gulim"
630+
"gulim.ttc,Gulim",\
631+
"tahoma.ttf,Tahoma"
631632
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink","Lucida Sans Unicode",0x00010000,\
632633
"msgothic.ttc,MS UI Gothic",\
633634
"mingliu.ttc,PMingLiU",\
634635
"simsun.ttc,SimSun",\
635-
"gulim.ttc,Gulim"
636+
"gulim.ttc,Gulim",\
637+
"tahoma.ttf,Tahoma"
636638

637639
; FontLink (Chinese to others)
638640
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink","MingLiU",0x00010000,\

boot/bootdata/hivesys.inf

+7
Original file line numberDiff line numberDiff line change
@@ -2227,6 +2227,13 @@ HKLM,"SYSTEM\Setup","SystemSetupInProgress",0x00010001,0x00000001
22272227
HKLM,"SYSTEM\CurrentControlSet\Control\PriorityControl",,0x00000012
22282228
HKLM,"SYSTEM\CurrentControlSet\Control\PriorityControl","Win32PrioritySeparation",0x00010001,0x2
22292229

2230+
; FontLink settings
2231+
HKLM,"SYSTEM\CurrentControlSet\Control\FontAssoc\Associated Charset","ANSI(00)",0x00000000,"NO"
2232+
HKLM,"SYSTEM\CurrentControlSet\Control\FontAssoc\Associated Charset","OEM(FF)",0x00000000,"NO"
2233+
HKLM,"SYSTEM\CurrentControlSet\Control\FontAssoc\Associated Charset","SYMBOL(02)",0x00000000,"NO"
2234+
HKLM,"SYSTEM\CurrentControlSet\Control\FontAssoc\Associated DefaultFonts","AssocSystemFont",0x00000000,"DroidSansFallback.ttf"
2235+
HKLM,"SYSTEM\CurrentControlSet\Control\FontAssoc\Associated DefaultFonts","FontPackage",0x00000000,"Droid Sans Fallback"
2236+
22302237
[AddReg.NTarm]
22312238
; RAM Disk class driver
22322239
HKLM,"SYSTEM\CurrentControlSet\Services\Disk","ErrorControl",0x00010001,0x00000000

boot/bootdata/livecd.inf

+24
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,30 @@ HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Segoe UI Sy
5858
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Terminal",0x00000000,"Lucida Console"
5959
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Times",0x00000000,"Times New Roman"
6060
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Tms Rmn",0x00000000,"Times New Roman"
61+
; Font Substitution (East Asian, English names)
62+
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Batang",0x00000000,"Droid Sans Fallback"
63+
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","BatangChe",0x00000000,"Droid Sans Fallback"
64+
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","DLCMingBold",0x00000000,"Droid Sans Fallback"
65+
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","DLCMingMedium",0x00000000,"Droid Sans Fallback"
66+
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Dotum",0x00000000,"Droid Sans Fallback"
67+
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","DotumChe",0x00000000,"Droid Sans Fallback"
68+
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Gulim",0x00000000,"Droid Sans Fallback"
69+
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","GulimChe",0x00000000,"Droid Sans Fallback"
70+
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Gungsuh",0x00000000,"Droid Sans Fallback"
71+
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","GungsuhChe",0x00000000,"Droid Sans Fallback"
72+
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","MS Gothic",0x00000000,"Droid Sans Fallback"
73+
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","MS Mincho",0x00000000,"Droid Sans Fallback"
74+
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","MS PGothic",0x00000000,"Droid Sans Fallback"
75+
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","MS PMincho",0x00000000,"Droid Sans Fallback"
76+
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","MS Song",0x00000000,"Droid Sans Fallback"
77+
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","MS UI Gothic",0x00000000,"Droid Sans Fallback"
78+
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","MS UI Gothic 2",0x00000000,"Droid Sans Fallback"
79+
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Ming Light",0x00000000,"Droid Sans Fallback"
80+
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","MingLiU",0x00000000,"Droid Sans Fallback"
81+
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","NSimSun",0x00000000,"Droid Sans Fallback"
82+
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","PMingLiU",0x00000000,"Droid Sans Fallback"
83+
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","SimHei",0x00000000,"Droid Sans Fallback"
84+
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","SimSun",0x00000000,"Droid Sans Fallback"
6185

6286
; FIXME: Registration
6387

media/inf/font.inf

-2
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,6 @@ HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","MS Shell Dl
8787
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","MS UI Gothic",0x00000000,"Droid Sans Fallback"
8888
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","MS UI Gothic 2",0x00000000,"Droid Sans Fallback"
8989
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Segoe UI Symbol",0x00000000,"Arial"
90-
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Source Sans Pro",0x00000000,"Droid Sans Fallback"
91-
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Tahoma",0x00000000,"Droid Sans Fallback"
9290
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Terminal",0x00000000,"Lucida Console"
9391
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Times",0x00000000,"Times New Roman"
9492
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Tms Rmn",0x00000000,"Times New Roman"

modules/CMakeLists.txt

+6
Original file line numberDiff line numberDiff line change
@@ -49,3 +49,9 @@ if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/)
4949
add_cd_file(FILE ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/${item} DESTINATION reactos/3rdParty NAME_ON_CD ${item} FOR bootcd)
5050
endforeach(item)
5151
endif()
52+
53+
# Add font file DroidSansFallback.ttf for LiveCD
54+
# See also boot/bootdata/packages/reactos.dff.in
55+
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/optional/DroidSansFallback.ttf)
56+
add_cd_file(FILE "${CMAKE_CURRENT_SOURCE_DIR}/optional/DroidSansFallback.ttf" DESTINATION reactos/Fonts FOR livecd)
57+
endif()

win32ss/gdi/ntgdi/font.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -914,7 +914,7 @@ NtGdiGetOutlineTextMetricsInternalW (HDC hDC,
914914
}
915915
TextIntUpdateSize(dc, TextObj, FontGDI, TRUE);
916916
TEXTOBJ_UnlockText(TextObj);
917-
Size = IntGetOutlineTextMetrics(FontGDI, 0, NULL);
917+
Size = IntGetOutlineTextMetrics(FontGDI, 0, NULL, FALSE);
918918
if (!otm) return Size;
919919
if (Size > Data)
920920
{
@@ -928,7 +928,7 @@ NtGdiGetOutlineTextMetricsInternalW (HDC hDC,
928928
return 0;
929929
}
930930
RtlZeroMemory(potm, Size);
931-
IntGetOutlineTextMetrics(FontGDI, Size, potm);
931+
IntGetOutlineTextMetrics(FontGDI, Size, potm, FALSE);
932932

933933
_SEH2_TRY
934934
{

0 commit comments

Comments
 (0)