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
90753ada
Commit
90753ada
authored
Nov 05, 2014
by
Nikolay Sivov
Committed by
Alexandre Julliard
Nov 06, 2014
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
dwrite: Use public APIs to get file streams from fontface.
parent
19869997
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
46 additions
and
53 deletions
+46
-53
font.c
dlls/dwrite/font.c
+46
-53
No files found.
dlls/dwrite/font.c
View file @
90753ada
...
@@ -105,6 +105,7 @@ struct dwrite_fontface {
...
@@ -105,6 +105,7 @@ struct dwrite_fontface {
IDWriteFontFace2
IDWriteFontFace2_iface
;
IDWriteFontFace2
IDWriteFontFace2_iface
;
LONG
ref
;
LONG
ref
;
IDWriteFontFileStream
**
streams
;
IDWriteFontFile
**
files
;
IDWriteFontFile
**
files
;
UINT32
file_count
;
UINT32
file_count
;
UINT32
index
;
UINT32
index
;
...
@@ -170,25 +171,6 @@ static inline void* get_fontface_cmap(struct dwrite_fontface *fontface)
...
@@ -170,25 +171,6 @@ static inline void* get_fontface_cmap(struct dwrite_fontface *fontface)
return
fontface
->
cmap
.
data
;
return
fontface
->
cmap
.
data
;
}
}
static
HRESULT
_dwritefontfile_GetFontFileStream
(
IDWriteFontFile
*
iface
,
IDWriteFontFileStream
**
stream
)
{
HRESULT
hr
;
struct
dwrite_fontfile
*
This
=
impl_from_IDWriteFontFile
(
iface
);
if
(
!
This
->
stream
)
{
hr
=
IDWriteFontFileLoader_CreateStreamFromKey
(
This
->
loader
,
This
->
reference_key
,
This
->
key_size
,
&
This
->
stream
);
if
(
FAILED
(
hr
))
return
hr
;
}
if
(
This
->
stream
)
{
IDWriteFontFileStream_AddRef
(
This
->
stream
);
*
stream
=
This
->
stream
;
return
S_OK
;
}
return
E_FAIL
;
}
static
void
release_font_data
(
struct
dwrite_font_data
*
data
)
static
void
release_font_data
(
struct
dwrite_font_data
*
data
)
{
{
int
i
;
int
i
;
...
@@ -264,8 +246,12 @@ static ULONG WINAPI dwritefontface_Release(IDWriteFontFace2 *iface)
...
@@ -264,8 +246,12 @@ static ULONG WINAPI dwritefontface_Release(IDWriteFontFace2 *iface)
if
(
This
->
cmap
.
context
)
if
(
This
->
cmap
.
context
)
IDWriteFontFace2_ReleaseFontTable
(
iface
,
This
->
cmap
.
context
);
IDWriteFontFace2_ReleaseFontTable
(
iface
,
This
->
cmap
.
context
);
for
(
i
=
0
;
i
<
This
->
file_count
;
i
++
)
for
(
i
=
0
;
i
<
This
->
file_count
;
i
++
)
{
IDWriteFontFile_Release
(
This
->
files
[
i
]);
if
(
This
->
streams
[
i
])
IDWriteFontFileStream_Release
(
This
->
streams
[
i
]);
if
(
This
->
files
[
i
])
IDWriteFontFile_Release
(
This
->
files
[
i
]);
}
heap_free
(
This
);
heap_free
(
This
);
}
}
...
@@ -381,15 +367,8 @@ static HRESULT WINAPI dwritefontface_TryGetFontTable(IDWriteFontFace2 *iface, UI
...
@@ -381,15 +367,8 @@ static HRESULT WINAPI dwritefontface_TryGetFontTable(IDWriteFontFace2 *iface, UI
*
exists
=
FALSE
;
*
exists
=
FALSE
;
for
(
i
=
0
;
i
<
This
->
file_count
&&
!
(
*
exists
);
i
++
)
{
for
(
i
=
0
;
i
<
This
->
file_count
&&
!
(
*
exists
);
i
++
)
{
IDWriteFontFileStream
*
stream
;
hr
=
opentype_get_font_table
(
This
->
streams
[
i
],
This
->
type
,
This
->
index
,
table_tag
,
table_data
,
&
tablecontext
->
context
,
table_size
,
exists
);
hr
=
_dwritefontfile_GetFontFileStream
(
This
->
files
[
i
],
&
stream
);
if
(
FAILED
(
hr
))
continue
;
tablecontext
->
file_index
=
i
;
tablecontext
->
file_index
=
i
;
hr
=
opentype_get_font_table
(
stream
,
This
->
type
,
This
->
index
,
table_tag
,
table_data
,
&
tablecontext
->
context
,
table_size
,
exists
);
IDWriteFontFileStream_Release
(
stream
);
}
}
if
(
FAILED
(
hr
)
&&
!*
exists
)
if
(
FAILED
(
hr
)
&&
!*
exists
)
heap_free
(
tablecontext
);
heap_free
(
tablecontext
);
...
@@ -403,8 +382,7 @@ static void WINAPI dwritefontface_ReleaseFontTable(IDWriteFontFace2 *iface, void
...
@@ -403,8 +382,7 @@ static void WINAPI dwritefontface_ReleaseFontTable(IDWriteFontFace2 *iface, void
{
{
struct
dwrite_fontface
*
This
=
impl_from_IDWriteFontFace2
(
iface
);
struct
dwrite_fontface
*
This
=
impl_from_IDWriteFontFace2
(
iface
);
struct
dwrite_fonttablecontext
*
tablecontext
=
(
struct
dwrite_fonttablecontext
*
)
table_context
;
struct
dwrite_fonttablecontext
*
tablecontext
=
(
struct
dwrite_fonttablecontext
*
)
table_context
;
IDWriteFontFileStream
*
stream
;
HRESULT
hr
;
TRACE
(
"(%p)->(%p)
\n
"
,
This
,
table_context
);
TRACE
(
"(%p)->(%p)
\n
"
,
This
,
table_context
);
if
(
tablecontext
->
magic
!=
DWRITE_FONTTABLE_MAGIC
)
if
(
tablecontext
->
magic
!=
DWRITE_FONTTABLE_MAGIC
)
...
@@ -413,11 +391,7 @@ static void WINAPI dwritefontface_ReleaseFontTable(IDWriteFontFace2 *iface, void
...
@@ -413,11 +391,7 @@ static void WINAPI dwritefontface_ReleaseFontTable(IDWriteFontFace2 *iface, void
return
;
return
;
}
}
hr
=
_dwritefontfile_GetFontFileStream
(
This
->
files
[
tablecontext
->
file_index
],
&
stream
);
IDWriteFontFileStream_ReleaseFileFragment
(
This
->
streams
[
tablecontext
->
file_index
],
tablecontext
->
context
);
if
(
FAILED
(
hr
))
return
;
IDWriteFontFileStream_ReleaseFileFragment
(
stream
,
tablecontext
->
context
);
IDWriteFontFileStream_Release
(
stream
);
heap_free
(
tablecontext
);
heap_free
(
tablecontext
);
}
}
...
@@ -1904,6 +1878,30 @@ HRESULT create_font_file(IDWriteFontFileLoader *loader, const void *reference_ke
...
@@ -1904,6 +1878,30 @@ HRESULT create_font_file(IDWriteFontFileLoader *loader, const void *reference_ke
return
S_OK
;
return
S_OK
;
}
}
static
HRESULT
get_stream_from_file
(
IDWriteFontFile
*
file
,
IDWriteFontFileStream
**
stream
)
{
IDWriteFontFileLoader
*
loader
;
UINT32
key_size
;
const
void
*
key
;
HRESULT
hr
;
*
stream
=
NULL
;
hr
=
IDWriteFontFile_GetLoader
(
file
,
&
loader
);
if
(
FAILED
(
hr
))
return
hr
;
hr
=
IDWriteFontFile_GetReferenceKey
(
file
,
&
key
,
&
key_size
);
if
(
FAILED
(
hr
))
{
IDWriteFontFileLoader_Release
(
loader
);
return
hr
;
}
hr
=
IDWriteFontFileLoader_CreateStreamFromKey
(
loader
,
key
,
key_size
,
stream
);
IDWriteFontFileLoader_Release
(
loader
);
return
hr
;
}
HRESULT
create_fontface
(
DWRITE_FONT_FACE_TYPE
facetype
,
UINT32
files_number
,
IDWriteFontFile
*
const
*
font_files
,
UINT32
index
,
HRESULT
create_fontface
(
DWRITE_FONT_FACE_TYPE
facetype
,
UINT32
files_number
,
IDWriteFontFile
*
const
*
font_files
,
UINT32
index
,
DWRITE_FONT_SIMULATIONS
simulations
,
IDWriteFontFace2
**
ret
)
DWRITE_FONT_SIMULATIONS
simulations
,
IDWriteFontFace2
**
ret
)
{
{
...
@@ -1915,8 +1913,12 @@ HRESULT create_fontface(DWRITE_FONT_FACE_TYPE facetype, UINT32 files_number, IDW
...
@@ -1915,8 +1913,12 @@ HRESULT create_fontface(DWRITE_FONT_FACE_TYPE facetype, UINT32 files_number, IDW
if
(
!
fontface
)
if
(
!
fontface
)
return
E_OUTOFMEMORY
;
return
E_OUTOFMEMORY
;
fontface
->
files
=
heap_alloc
(
sizeof
(
*
fontface
->
files
)
*
files_number
);
fontface
->
files
=
heap_alloc_zero
(
sizeof
(
*
fontface
->
files
)
*
files_number
);
if
(
!
fontface
->
files
)
{
fontface
->
streams
=
heap_alloc_zero
(
sizeof
(
*
fontface
->
streams
)
*
files_number
);
if
(
!
fontface
->
files
||
!
fontface
->
streams
)
{
heap_free
(
fontface
->
files
);
heap_free
(
fontface
->
streams
);
heap_free
(
fontface
);
heap_free
(
fontface
);
return
E_OUTOFMEMORY
;
return
E_OUTOFMEMORY
;
}
}
...
@@ -1929,22 +1931,13 @@ HRESULT create_fontface(DWRITE_FONT_FACE_TYPE facetype, UINT32 files_number, IDW
...
@@ -1929,22 +1931,13 @@ HRESULT create_fontface(DWRITE_FONT_FACE_TYPE facetype, UINT32 files_number, IDW
fontface
->
cmap
.
context
=
NULL
;
fontface
->
cmap
.
context
=
NULL
;
fontface
->
cmap
.
size
=
0
;
fontface
->
cmap
.
size
=
0
;
/* Verify font file streams */
for
(
i
=
0
;
i
<
fontface
->
file_count
&&
SUCCEEDED
(
hr
);
i
++
)
{
IDWriteFontFileStream
*
stream
;
hr
=
_dwritefontfile_GetFontFileStream
(
font_files
[
i
],
&
stream
);
if
(
SUCCEEDED
(
hr
))
IDWriteFontFileStream_Release
(
stream
);
}
if
(
FAILED
(
hr
))
{
heap_free
(
fontface
->
files
);
heap_free
(
fontface
);
return
hr
;
}
for
(
i
=
0
;
i
<
fontface
->
file_count
;
i
++
)
{
for
(
i
=
0
;
i
<
fontface
->
file_count
;
i
++
)
{
hr
=
get_stream_from_file
(
font_files
[
i
],
&
fontface
->
streams
[
i
]);
if
(
FAILED
(
hr
))
{
IDWriteFontFace2_Release
(
&
fontface
->
IDWriteFontFace2_iface
);
return
hr
;
}
fontface
->
files
[
i
]
=
font_files
[
i
];
fontface
->
files
[
i
]
=
font_files
[
i
];
IDWriteFontFile_AddRef
(
font_files
[
i
]);
IDWriteFontFile_AddRef
(
font_files
[
i
]);
}
}
...
...
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