Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-fonts
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Aleksandr Isakov
wine-fonts
Commits
ecba0d2b
Commit
ecba0d2b
authored
Oct 21, 2020
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
gdi32: Move the font name information out of freetype.c.
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
d26462b5
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
42 additions
and
34 deletions
+42
-34
font.c
dlls/gdi32/font.c
+23
-1
freetype.c
dlls/gdi32/freetype.c
+17
-32
gdi_private.h
dlls/gdi32/gdi_private.h
+2
-1
No files found.
dlls/gdi32/font.c
View file @
ecba0d2b
...
...
@@ -107,6 +107,15 @@ static inline INT INTERNAL_YWSTODS(DC *dc, INT height)
return
pt
[
1
].
y
-
pt
[
0
].
y
;
}
static
inline
WCHAR
*
strdupW
(
const
WCHAR
*
p
)
{
WCHAR
*
ret
;
DWORD
len
=
(
strlenW
(
p
)
+
1
)
*
sizeof
(
WCHAR
);
ret
=
HeapAlloc
(
GetProcessHeap
(),
0
,
len
);
memcpy
(
ret
,
p
,
len
);
return
ret
;
}
static
HGDIOBJ
FONT_SelectObject
(
HGDIOBJ
handle
,
HDC
hdc
);
static
INT
FONT_GetObjectA
(
HGDIOBJ
handle
,
INT
count
,
LPVOID
buffer
);
static
INT
FONT_GetObjectW
(
HGDIOBJ
handle
,
INT
count
,
LPVOID
buffer
);
...
...
@@ -422,10 +431,16 @@ void free_gdi_font( struct gdi_font *font )
{
if
(
font
->
private
)
font_funcs
->
destroy_font
(
font
);
free_font_handle
(
font
->
handle
);
HeapFree
(
GetProcessHeap
(),
0
,
font
->
name
);
HeapFree
(
GetProcessHeap
(),
0
,
font
->
fileinfo
);
HeapFree
(
GetProcessHeap
(),
0
,
font
);
}
void
set_gdi_font_name
(
struct
gdi_font
*
font
,
const
WCHAR
*
name
)
{
font
->
name
=
strdupW
(
name
);
}
/* Undocumented structure filled in by GetFontFileInfo */
struct
font_fileinfo
{
...
...
@@ -1074,13 +1089,20 @@ static BOOL CDECL font_GetTextExtentExPointI( PHYSDEV dev, const WORD *indices,
static
INT
CDECL
font_GetTextFace
(
PHYSDEV
dev
,
INT
count
,
WCHAR
*
str
)
{
struct
font_physdev
*
physdev
=
get_font_dev
(
dev
);
INT
len
;
if
(
!
physdev
->
font
)
{
dev
=
GET_NEXT_PHYSDEV
(
dev
,
pGetTextFace
);
return
dev
->
funcs
->
pGetTextFace
(
dev
,
count
,
str
);
}
return
font_funcs
->
pGetTextFace
(
physdev
->
font
,
count
,
str
);
len
=
strlenW
(
physdev
->
font
->
name
)
+
1
;
if
(
str
)
{
lstrcpynW
(
str
,
physdev
->
font
->
name
,
count
);
len
=
min
(
count
,
len
);
}
return
len
;
}
...
...
dlls/gdi32/freetype.c
View file @
ecba0d2b
...
...
@@ -330,7 +330,6 @@ struct tagGdiFont {
/* the following members can be accessed without locking, they are never modified after creation */
FT_Face
ft_face
;
struct
font_mapping
*
mapping
;
LPWSTR
name
;
int
charset
;
int
codepage
;
BOOL
fake_italic
;
...
...
@@ -4115,7 +4114,6 @@ static void CDECL freetype_destroy_font( struct gdi_font *gdi_font )
if
(
font
->
mapping
)
unmap_font_file
(
font
->
mapping
);
HeapFree
(
GetProcessHeap
(),
0
,
font
->
kern_pairs
);
HeapFree
(
GetProcessHeap
(),
0
,
font
->
potm
);
HeapFree
(
GetProcessHeap
(),
0
,
font
->
name
);
for
(
i
=
0
;
i
<
font
->
gmsize
;
i
++
)
HeapFree
(
GetProcessHeap
(),
0
,
font
->
gm
[
i
]);
HeapFree
(
GetProcessHeap
(),
0
,
font
->
gm
);
...
...
@@ -4381,14 +4379,15 @@ static LONG load_VDMX(GdiFont *font, LONG height)
*/
static
BOOL
create_child_font_list
(
GdiFont
*
font
)
{
struct
gdi_font
*
gdi_font
=
font
->
gdi_font
;
BOOL
ret
=
FALSE
;
SYSTEM_LINKS
*
font_link
;
CHILD_FONT
*
font_link_entry
,
*
new_child
;
FontSubst
*
psub
;
WCHAR
*
font_name
;
psub
=
get_font_subst
(
&
font_subst_list
,
font
->
name
,
-
1
);
font_name
=
psub
?
psub
->
to
.
name
:
font
->
name
;
psub
=
get_font_subst
(
&
font_subst_list
,
gdi_
font
->
name
,
-
1
);
font_name
=
psub
?
psub
->
to
.
name
:
gdi_
font
->
name
;
font_link
=
find_font_link
(
font_name
);
if
(
font_link
!=
NULL
)
{
...
...
@@ -5163,7 +5162,7 @@ found_face:
pick_charmap
(
ret
->
ft_face
,
ret
->
charset
);
ret
->
orientation
=
FT_IS_SCALABLE
(
ret
->
ft_face
)
?
lf
.
lfOrientation
:
0
;
ret
->
name
=
psub
?
strdupW
(
psub
->
from
.
name
)
:
strdupW
(
family
->
family_name
);
set_gdi_font_name
(
gdi_font
,
psub
?
psub
->
from
.
name
:
family
->
family_name
);
ret
->
underline
=
lf
.
lfUnderline
?
0xff
:
0
;
ret
->
strikeout
=
lf
.
lfStrikeOut
?
0xff
:
0
;
create_child_font_list
(
ret
);
...
...
@@ -5338,6 +5337,7 @@ static DWORD create_enum_charset_list(DWORD charset, struct enum_charset_list *l
static
void
GetEnumStructs
(
Face
*
face
,
const
WCHAR
*
family_name
,
LPENUMLOGFONTEXW
pelf
,
NEWTEXTMETRICEXW
*
pntm
,
LPDWORD
ptype
)
{
struct
gdi_font
*
gdi_font
;
GdiFont
*
font
;
LONG
width
,
height
;
...
...
@@ -5350,7 +5350,8 @@ static void GetEnumStructs(Face *face, const WCHAR *family_name, LPENUMLOGFONTEX
return
;
}
font
=
get_font_ptr
(
alloc_gdi_font
()
);
gdi_font
=
alloc_gdi_font
();
font
=
get_font_ptr
(
gdi_font
);
if
(
face
->
scalable
)
{
height
=
100
;
...
...
@@ -5363,11 +5364,11 @@ static void GetEnumStructs(Face *face, const WCHAR *family_name, LPENUMLOGFONTEX
if
(
!
(
font
->
ft_face
=
OpenFontFace
(
font
,
face
,
width
,
height
)))
{
free_gdi_font
(
font
->
gdi_font
);
free_gdi_font
(
gdi_font
);
return
;
}
font
->
name
=
strdupW
(
family_name
);
set_gdi_font_name
(
gdi_font
,
family_name
);
font
->
ntmFlags
=
face
->
ntmFlags
;
if
(
get_outline_text_metrics
(
font
))
...
...
@@ -5436,7 +5437,7 @@ static void GetEnumStructs(Face *face, const WCHAR *family_name, LPENUMLOGFONTEX
face
->
cached_enum_data
->
type
=
*
ptype
;
}
free_gdi_font
(
font
->
gdi_font
);
free_gdi_font
(
gdi_font
);
}
static
BOOL
family_matches
(
Family
*
family
,
const
WCHAR
*
face_name
)
...
...
@@ -6783,7 +6784,7 @@ static DWORD get_glyph_outline(GdiFont *incoming_font, UINT glyph, UINT format,
FT_Int
load_flags
=
get_load_flags
(
format
);
FT_Matrix
matrices
[
3
];
BOOL
needsTransform
=
FALSE
;
BOOL
tategaki
=
(
font
->
name
[
0
]
==
'@'
);
BOOL
tategaki
=
(
gdi_
font
->
name
[
0
]
==
'@'
);
BOOL
vertical_metrics
;
TRACE
(
"%p, %04x, %08x, %p, %08x, %p, %p
\n
"
,
font
,
glyph
,
format
,
lpgm
,
...
...
@@ -7151,6 +7152,7 @@ static BOOL get_outline_text_metrics(GdiFont *font)
{
BOOL
ret
=
FALSE
;
FT_Face
ft_face
=
font
->
ft_face
;
struct
gdi_font
*
gdi_font
=
font
->
gdi_font
;
UINT
needed
,
lenfam
,
lensty
,
lenface
,
lenfull
;
TT_OS2
*
pOS2
;
TT_HoriHeader
*
pHori
;
...
...
@@ -7168,21 +7170,21 @@ static BOOL get_outline_text_metrics(GdiFont *font)
needed
=
sizeof
(
*
font
->
potm
);
lenfam
=
(
strlenW
(
font
->
name
)
+
1
)
*
sizeof
(
WCHAR
);
family_nameW
=
strdupW
(
font
->
name
);
lenfam
=
(
strlenW
(
gdi_
font
->
name
)
+
1
)
*
sizeof
(
WCHAR
);
family_nameW
=
strdupW
(
gdi_
font
->
name
);
style_nameW
=
ft_face_get_style_name
(
ft_face
,
GetSystemDefaultLangID
()
);
lensty
=
(
strlenW
(
style_nameW
)
+
1
)
*
sizeof
(
WCHAR
);
face_nameW
=
ft_face_get_full_name
(
ft_face
,
GetSystemDefaultLangID
()
);
if
(
font
->
name
[
0
]
==
'@'
)
face_nameW
=
get_vertical_name
(
face_nameW
);
if
(
gdi_
font
->
name
[
0
]
==
'@'
)
face_nameW
=
get_vertical_name
(
face_nameW
);
lenface
=
(
strlenW
(
face_nameW
)
+
1
)
*
sizeof
(
WCHAR
);
full_nameW
=
get_face_name
(
ft_face
,
TT_NAME_ID_UNIQUE_ID
,
GetSystemDefaultLangID
()
);
if
(
!
full_nameW
)
{
static
const
WCHAR
fake_nameW
[]
=
{
'f'
,
'a'
,
'k'
,
'e'
,
' '
,
'n'
,
'a'
,
'm'
,
'e'
,
0
};
FIXME
(
"failed to read full_nameW for font %s!
\n
"
,
wine_dbgstr_w
(
font
->
name
));
FIXME
(
"failed to read full_nameW for font %s!
\n
"
,
wine_dbgstr_w
(
gdi_
font
->
name
));
full_nameW
=
strdupW
(
fake_nameW
);
}
lenfull
=
(
strlenW
(
full_nameW
)
+
1
)
*
sizeof
(
WCHAR
);
...
...
@@ -7565,7 +7567,7 @@ static BOOL load_child_font(GdiFont *font, CHILD_FONT *child)
child
->
font
->
ntmFlags
=
child_face
->
ntmFlags
;
child
->
font
->
orientation
=
font
->
orientation
;
child
->
font
->
scale_y
=
font
->
scale_y
;
child
->
font
->
name
=
strdupW
(
child_face
->
family
->
family_name
);
set_gdi_font_name
(
child
->
font
->
gdi_font
,
child_face
->
family
->
family_name
);
child
->
font
->
base_font
=
font
;
TRACE
(
"created child font %p for base %p
\n
"
,
child
->
font
,
font
);
return
TRUE
;
...
...
@@ -7771,22 +7773,6 @@ static DWORD CDECL freetype_GetFontData( struct gdi_font *font, DWORD table, DWO
}
/*************************************************************
* freetype_GetTextFace
*/
static
INT
CDECL
freetype_GetTextFace
(
struct
gdi_font
*
gdi_font
,
INT
count
,
LPWSTR
str
)
{
GdiFont
*
font
=
get_font_ptr
(
gdi_font
);
INT
n
=
strlenW
(
font
->
name
)
+
1
;
if
(
str
)
{
lstrcpynW
(
str
,
font
->
name
,
count
);
n
=
min
(
count
,
n
);
}
return
n
;
}
/*************************************************************
* freetype_GetTextCharsetInfo
*/
static
UINT
CDECL
freetype_GetTextCharsetInfo
(
struct
gdi_font
*
gdi_font
,
LPFONTSIGNATURE
fs
,
DWORD
flags
)
...
...
@@ -8207,7 +8193,6 @@ static const struct font_backend_funcs font_funcs =
freetype_GetTextCharsetInfo
,
freetype_GetTextExtentExPoint
,
freetype_GetTextExtentExPointI
,
freetype_GetTextFace
,
freetype_GetTextMetrics
,
freetype_SelectFont
,
freetype_AddFontResourceEx
,
...
...
dlls/gdi32/gdi_private.h
View file @
ecba0d2b
...
...
@@ -316,6 +316,7 @@ struct gdi_font
LOGFONTW
lf
;
FMAT2
matrix
;
BOOL
can_use_bitmap
;
WCHAR
*
name
;
struct
font_fileinfo
*
fileinfo
;
};
...
...
@@ -338,7 +339,6 @@ struct font_backend_funcs
UINT
(
CDECL
*
pGetTextCharsetInfo
)(
struct
gdi_font
*
font
,
FONTSIGNATURE
*
fs
,
DWORD
flags
);
BOOL
(
CDECL
*
pGetTextExtentExPoint
)(
struct
gdi_font
*
font
,
LPCWSTR
wstr
,
INT
count
,
INT
*
dxs
);
BOOL
(
CDECL
*
pGetTextExtentExPointI
)(
struct
gdi_font
*
font
,
const
WORD
*
indices
,
INT
count
,
INT
*
dxs
);
INT
(
CDECL
*
pGetTextFace
)(
struct
gdi_font
*
font
,
INT
count
,
WCHAR
*
str
);
BOOL
(
CDECL
*
pGetTextMetrics
)(
struct
gdi_font
*
font
,
TEXTMETRICW
*
metrics
);
struct
gdi_font
*
(
CDECL
*
pSelectFont
)(
DC
*
dc
,
HFONT
hfont
,
UINT
*
aa_flags
,
UINT
default_aa_flags
);
...
...
@@ -359,6 +359,7 @@ extern void free_gdi_font( struct gdi_font *font ) DECLSPEC_HIDDEN;
extern
void
cache_gdi_font
(
struct
gdi_font
*
font
)
DECLSPEC_HIDDEN
;
extern
struct
gdi_font
*
find_cached_gdi_font
(
const
LOGFONTW
*
lf
,
const
FMAT2
*
matrix
,
BOOL
can_use_bitmap
)
DECLSPEC_HIDDEN
;
extern
void
set_gdi_font_name
(
struct
gdi_font
*
font
,
const
WCHAR
*
name
)
DECLSPEC_HIDDEN
;
extern
void
set_gdi_font_file_info
(
struct
gdi_font
*
font
,
const
WCHAR
*
file
,
SIZE_T
data_size
)
DECLSPEC_HIDDEN
;
extern
void
font_init
(
void
)
DECLSPEC_HIDDEN
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment