Module: wine Branch: master Commit: 1e65a32e2659b667c47d6662089fd52c798a17d9 URL: http://source.winehq.org/git/wine.git/?a=commit;h=1e65a32e2659b667c47d666208...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Wed Oct 8 14:14:51 2014 +0400
dwrite: Pass stream pointer to OpenType parsing code.
---
dlls/dwrite/dwrite_private.h | 2 +- dlls/dwrite/font.c | 15 +++++---------- dlls/dwrite/opentype.c | 14 ++++++++++++-- 3 files changed, 18 insertions(+), 13 deletions(-)
diff --git a/dlls/dwrite/dwrite_private.h b/dlls/dwrite/dwrite_private.h index 736292e..af3ae79 100644 --- a/dlls/dwrite/dwrite_private.h +++ b/dlls/dwrite/dwrite_private.h @@ -106,7 +106,7 @@ extern HRESULT create_localfontfileloader(IDWriteLocalFontFileLoader** iface) DE extern HRESULT font_create_fontface(IDWriteFactory *iface, DWRITE_FONT_FACE_TYPE facetype, UINT32 files_number, IDWriteFontFile* const* font_files, UINT32 index, DWRITE_FONT_SIMULATIONS sim_flags, IDWriteFontFace **font_face) DECLSPEC_HIDDEN;
/* Opentype font table functions */ -extern HRESULT analyze_opentype_font(const void* font_data, UINT32* font_count, DWRITE_FONT_FILE_TYPE *file_type, DWRITE_FONT_FACE_TYPE *face_type, BOOL *supported) DECLSPEC_HIDDEN; +extern HRESULT opentype_analyze_font(IDWriteFontFileStream*,UINT32*,DWRITE_FONT_FILE_TYPE*,DWRITE_FONT_FACE_TYPE*,BOOL*) DECLSPEC_HIDDEN; extern HRESULT find_font_table(IDWriteFontFileStream *stream, UINT32 font_index, UINT32 tag, const void** table_data, void** table_context, UINT32 *table_size, BOOL* found) DECLSPEC_HIDDEN; extern VOID OpenType_CMAP_GetGlyphIndex(LPVOID data, DWORD utf32c, LPWORD pgi, DWORD flags) DECLSPEC_HIDDEN; extern VOID get_font_properties(LPCVOID os2, LPCVOID head, LPCVOID post, DWRITE_FONT_METRICS *metrics, DWRITE_FONT_STRETCH *stretch, DWRITE_FONT_WEIGHT *weight, DWRITE_FONT_STYLE *style) DECLSPEC_HIDDEN; diff --git a/dlls/dwrite/font.c b/dlls/dwrite/font.c index def64ce..a00b784 100644 --- a/dlls/dwrite/font.c +++ b/dlls/dwrite/font.c @@ -1276,12 +1276,10 @@ static HRESULT WINAPI dwritefontfile_GetLoader(IDWriteFontFile *iface, IDWriteFo
static HRESULT WINAPI dwritefontfile_Analyze(IDWriteFontFile *iface, BOOL *isSupportedFontType, DWRITE_FONT_FILE_TYPE *fontFileType, DWRITE_FONT_FACE_TYPE *fontFaceType, UINT32 *numberOfFaces) { - HRESULT hr; - const void *font_data; - void *context; + struct dwrite_fontfile *This = impl_from_IDWriteFontFile(iface); IDWriteFontFileStream *stream; + HRESULT hr;
- struct dwrite_fontfile *This = impl_from_IDWriteFontFile(iface); FIXME("(%p)->(%p, %p, %p, %p): Stub\n", This, isSupportedFontType, fontFileType, fontFaceType, numberOfFaces);
*isSupportedFontType = FALSE; @@ -1293,12 +1291,9 @@ static HRESULT WINAPI dwritefontfile_Analyze(IDWriteFontFile *iface, BOOL *isSup hr = IDWriteFontFileLoader_CreateStreamFromKey(This->loader, This->reference_key, This->key_size, &stream); if (FAILED(hr)) return S_OK; - hr = IDWriteFontFileStream_ReadFileFragment(stream, &font_data, 0, 28, &context); - if (SUCCEEDED(hr)) - { - hr = analyze_opentype_font(font_data, numberOfFaces, fontFileType, fontFaceType, isSupportedFontType); - IDWriteFontFileStream_ReleaseFileFragment(stream, context); - } + + hr = opentype_analyze_font(stream, numberOfFaces, fontFileType, fontFaceType, isSupportedFontType); + /* TODO: Further Analysis */ IDWriteFontFileStream_Release(stream); return S_OK; diff --git a/dlls/dwrite/opentype.c b/dlls/dwrite/opentype.c index 318adcf..26ad333 100644 --- a/dlls/dwrite/opentype.c +++ b/dlls/dwrite/opentype.c @@ -180,11 +180,19 @@ typedef struct } TT_OS2_V2; #include "poppack.h"
-HRESULT analyze_opentype_font(const void* font_data, UINT32* font_count, DWRITE_FONT_FILE_TYPE *file_type, DWRITE_FONT_FACE_TYPE *face_type, BOOL *supported) +HRESULT opentype_analyze_font(IDWriteFontFileStream *stream, UINT32* font_count, DWRITE_FONT_FILE_TYPE *file_type, DWRITE_FONT_FACE_TYPE *face_type, BOOL *supported) { /* TODO: Do font validation */ - const char* tag = font_data; + const void *font_data; + const char* tag; + void *context; + HRESULT hr;
+ hr = IDWriteFontFileStream_ReadFileFragment(stream, &font_data, 0, sizeof(TTC_Header_V1), &context); + if (FAILED(hr)) + return hr; + + tag = font_data; *supported = FALSE; *file_type = DWRITE_FONT_FILE_TYPE_UNKNOWN; if (face_type) @@ -212,6 +220,8 @@ HRESULT analyze_opentype_font(const void* font_data, UINT32* font_count, DWRITE_ { *file_type = DWRITE_FONT_FILE_TYPE_CFF; } + + IDWriteFontFileStream_ReleaseFileFragment(stream, context); return S_OK; }