Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
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
wine
wine-winehq
Commits
570e68b8
Commit
570e68b8
authored
Oct 10, 2011
by
Huw Davies
Committed by
Alexandre Julliard
Oct 10, 2011
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
gdi32: Require that we have freetype's FT_Load_Sfnt_Table function and remove the hacky fallback.
parent
56827432
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
11 additions
and
69 deletions
+11
-69
freetype.c
dlls/gdi32/freetype.c
+11
-69
No files found.
dlls/gdi32/freetype.c
View file @
570e68b8
...
...
@@ -155,7 +155,6 @@ static DWORD FT_SimpleVersion;
static
void
*
ft_handle
=
NULL
;
#define MAKE_FUNCPTR(f) static typeof(f) * p##f = NULL
MAKE_FUNCPTR
(
FT_Vector_Unit
);
MAKE_FUNCPTR
(
FT_Done_Face
);
MAKE_FUNCPTR
(
FT_Get_Char_Index
);
MAKE_FUNCPTR
(
FT_Get_Module
);
...
...
@@ -164,6 +163,7 @@ MAKE_FUNCPTR(FT_Get_Sfnt_Name_Count);
MAKE_FUNCPTR
(
FT_Get_Sfnt_Table
);
MAKE_FUNCPTR
(
FT_Init_FreeType
);
MAKE_FUNCPTR
(
FT_Load_Glyph
);
MAKE_FUNCPTR
(
FT_Load_Sfnt_Table
);
MAKE_FUNCPTR
(
FT_Matrix_Multiply
);
#ifdef FT_MULFIX_INLINED
#define pFT_MulFix FT_MULFIX_INLINED
...
...
@@ -175,13 +175,13 @@ MAKE_FUNCPTR(FT_New_Memory_Face);
MAKE_FUNCPTR
(
FT_Outline_Get_Bitmap
);
MAKE_FUNCPTR
(
FT_Outline_Transform
);
MAKE_FUNCPTR
(
FT_Outline_Translate
);
MAKE_FUNCPTR
(
FT_Render_Glyph
);
MAKE_FUNCPTR
(
FT_Select_Charmap
);
MAKE_FUNCPTR
(
FT_Set_Charmap
);
MAKE_FUNCPTR
(
FT_Set_Pixel_Sizes
);
MAKE_FUNCPTR
(
FT_Vector_Transform
);
MAKE_FUNCPTR
(
FT_
Render_Glyph
);
MAKE_FUNCPTR
(
FT_
Vector_Unit
);
static
void
(
*
pFT_Library_Version
)(
FT_Library
,
FT_Int
*
,
FT_Int
*
,
FT_Int
*
);
static
FT_Error
(
*
pFT_Load_Sfnt_Table
)(
FT_Face
,
FT_ULong
,
FT_Long
,
FT_Byte
*
,
FT_ULong
*
);
static
FT_ULong
(
*
pFT_Get_First_Char
)(
FT_Face
,
FT_UInt
*
);
static
FT_ULong
(
*
pFT_Get_Next_Char
)(
FT_Face
,
FT_ULong
,
FT_UInt
*
);
static
FT_TrueTypeEngineType
(
*
pFT_Get_TrueType_Engine_Type
)(
FT_Library
);
...
...
@@ -1397,57 +1397,6 @@ static void add_face_to_cache(Face *face)
RegCloseKey
(
hkey_font_cache
);
}
/*****************************************************************
* load_sfnt_table
*
* Wrapper around FT_Load_Sfnt_Table to cope with older versions
* of FreeType that don't export this function.
*
*/
static
FT_Error
load_sfnt_table
(
FT_Face
ft_face
,
FT_ULong
table
,
FT_Long
offset
,
FT_Byte
*
buf
,
FT_ULong
*
len
)
{
FT_Error
err
;
/* If the FT_Load_Sfnt_Table function is there we'll use it */
if
(
pFT_Load_Sfnt_Table
)
{
err
=
pFT_Load_Sfnt_Table
(
ft_face
,
table
,
offset
,
buf
,
len
);
}
#ifdef HAVE_FREETYPE_INTERNAL_SFNT_H
else
/* Do it the hard way */
{
TT_Face
tt_face
=
(
TT_Face
)
ft_face
;
SFNT_Interface
*
sfnt
;
if
(
FT_Version
.
major
==
2
&&
FT_Version
.
minor
==
0
)
{
/* 2.0.x */
sfnt
=
*
(
SFNT_Interface
**
)((
char
*
)
tt_face
+
528
);
}
else
{
/* A field was added in the middle of the structure in 2.1.x */
sfnt
=
*
(
SFNT_Interface
**
)((
char
*
)
tt_face
+
532
);
}
err
=
sfnt
->
load_any
(
tt_face
,
table
,
offset
,
buf
,
len
);
}
#else
else
{
static
int
msg
;
if
(
!
msg
)
{
MESSAGE
(
"This version of Wine was compiled with freetype headers later than 2.2.0
\n
"
"but is being run with a freetype library without the FT_Load_Sfnt_Table function.
\n
"
"Please upgrade your freetype library.
\n
"
);
msg
++
;
}
err
=
FT_Err_Unimplemented_Feature
;
}
#endif
return
err
;
}
static
inline
int
TestStyles
(
DWORD
flags
,
DWORD
styles
)
{
return
(
flags
&
styles
)
==
styles
;
...
...
@@ -1582,7 +1531,7 @@ static INT AddFontToList(const char *file, void *font_data_ptr, DWORD font_data_
{
FT_ULong
len
=
0
;
if
(
!
load_sfnt_t
able
(
ft_face
,
FT_MAKE_TAG
(
'E'
,
'B'
,
'S'
,
'C'
),
0
,
NULL
,
&
len
))
if
(
!
pFT_Load_Sfnt_T
able
(
ft_face
,
FT_MAKE_TAG
(
'E'
,
'B'
,
'S'
,
'C'
),
0
,
NULL
,
&
len
))
{
TRACE
(
"Skipping Wine bitmap-only TrueType font %s
\n
"
,
debugstr_a
(
file
));
pFT_Done_Face
(
ft_face
);
...
...
@@ -1782,7 +1731,7 @@ static INT AddFontToList(const char *file, void *font_data_ptr, DWORD font_data_
/* check for the presence of the 'CFF ' table to check if the font is Type1 */
tmp_size
=
0
;
if
(
pFT_Load_Sfnt_Table
&&
!
pFT_Load_Sfnt_Table
(
ft_face
,
FT_MAKE_TAG
(
'C'
,
'F'
,
'F'
,
' '
),
0
,
NULL
,
&
tmp_size
))
if
(
!
pFT_Load_Sfnt_Table
(
ft_face
,
FT_MAKE_TAG
(
'C'
,
'F'
,
'F'
,
' '
),
0
,
NULL
,
&
tmp_size
))
{
TRACE
(
"Font %s/%p is OTF Type1
\n
"
,
wine_dbgstr_a
(
file
),
font_data_ptr
);
face
->
ntmFlags
|=
NTM_PS_OPENTYPE
;
...
...
@@ -2950,7 +2899,6 @@ static BOOL init_freetype(void)
#define LOAD_FUNCPTR(f) if((p##f = wine_dlsym(ft_handle, #f, NULL, 0)) == NULL){WARN("Can't find symbol %s\n", #f); goto sym_not_found;}
LOAD_FUNCPTR
(
FT_Vector_Unit
)
LOAD_FUNCPTR
(
FT_Done_Face
)
LOAD_FUNCPTR
(
FT_Get_Char_Index
)
LOAD_FUNCPTR
(
FT_Get_Module
)
...
...
@@ -2959,6 +2907,7 @@ static BOOL init_freetype(void)
LOAD_FUNCPTR
(
FT_Get_Sfnt_Table
)
LOAD_FUNCPTR
(
FT_Init_FreeType
)
LOAD_FUNCPTR
(
FT_Load_Glyph
)
LOAD_FUNCPTR
(
FT_Load_Sfnt_Table
)
LOAD_FUNCPTR
(
FT_Matrix_Multiply
)
#ifndef FT_MULFIX_INLINED
LOAD_FUNCPTR
(
FT_MulFix
)
...
...
@@ -2968,16 +2917,15 @@ static BOOL init_freetype(void)
LOAD_FUNCPTR
(
FT_Outline_Get_Bitmap
)
LOAD_FUNCPTR
(
FT_Outline_Transform
)
LOAD_FUNCPTR
(
FT_Outline_Translate
)
LOAD_FUNCPTR
(
FT_Render_Glyph
)
LOAD_FUNCPTR
(
FT_Select_Charmap
)
LOAD_FUNCPTR
(
FT_Set_Charmap
)
LOAD_FUNCPTR
(
FT_Set_Pixel_Sizes
)
LOAD_FUNCPTR
(
FT_Vector_Transform
)
LOAD_FUNCPTR
(
FT_Render_Glyph
)
LOAD_FUNCPTR
(
FT_Vector_Unit
)
#undef LOAD_FUNCPTR
/* Don't warn if these ones are missing */
pFT_Library_Version
=
wine_dlsym
(
ft_handle
,
"FT_Library_Version"
,
NULL
,
0
);
pFT_Load_Sfnt_Table
=
wine_dlsym
(
ft_handle
,
"FT_Load_Sfnt_Table"
,
NULL
,
0
);
pFT_Get_First_Char
=
wine_dlsym
(
ft_handle
,
"FT_Get_First_Char"
,
NULL
,
0
);
pFT_Get_Next_Char
=
wine_dlsym
(
ft_handle
,
"FT_Get_Next_Char"
,
NULL
,
0
);
pFT_Get_TrueType_Engine_Type
=
wine_dlsym
(
ft_handle
,
"FT_Get_TrueType_Engine_Type"
,
NULL
,
0
);
...
...
@@ -2987,12 +2935,6 @@ static BOOL init_freetype(void)
#ifdef HAVE_FREETYPE_FTWINFNT_H
pFT_Get_WinFNT_Header
=
wine_dlsym
(
ft_handle
,
"FT_Get_WinFNT_Header"
,
NULL
,
0
);
#endif
if
(
!
wine_dlsym
(
ft_handle
,
"FT_Get_Postscript_Name"
,
NULL
,
0
)
&&
!
wine_dlsym
(
ft_handle
,
"FT_Sqrt64"
,
NULL
,
0
))
{
/* try to avoid 2.0.4: >= 2.0.5 has FT_Get_Postscript_Name and
<= 2.0.3 has FT_Sqrt64 */
goto
sym_not_found
;
}
if
(
pFT_Init_FreeType
(
&
library
)
!=
0
)
{
ERR
(
"Can't init FreeType library
\n
"
);
...
...
@@ -3021,7 +2963,7 @@ sym_not_found:
WINE_MESSAGE
(
"Wine cannot find certain functions that it needs inside the FreeType
\n
"
"font library. To enable Wine to use TrueType fonts please upgrade
\n
"
"FreeType to at least version 2.
0.5
.
\n
"
"FreeType to at least version 2.
1.4
.
\n
"
"http://www.freetype.org
\n
"
);
wine_dlclose
(
ft_handle
,
NULL
,
0
);
ft_handle
=
NULL
;
...
...
@@ -6558,10 +6500,10 @@ DWORD WineEngGetFontData(GdiFont *font, DWORD table, DWORD offset, LPVOID buf,
if
(
buf
&&
len
)
{
FT_ULong
needed
=
0
;
err
=
load_sfnt_t
able
(
ft_face
,
table
,
offset
,
NULL
,
&
needed
);
err
=
pFT_Load_Sfnt_T
able
(
ft_face
,
table
,
offset
,
NULL
,
&
needed
);
if
(
!
err
&&
needed
<
len
)
len
=
needed
;
}
err
=
load_sfnt_t
able
(
ft_face
,
table
,
offset
,
buf
,
&
len
);
err
=
pFT_Load_Sfnt_T
able
(
ft_face
,
table
,
offset
,
buf
,
&
len
);
if
(
err
)
{
TRACE
(
"Can't find table %c%c%c%c
\n
"
,
...
...
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