Nikolay Sivov : dwrite: Pass stream pointer to OpenType parsing code.

Alexandre Julliard julliard at wine.codeweavers.com
Wed Oct 8 14:09:27 CDT 2014


Module: wine
Branch: master
Commit: 1e65a32e2659b667c47d6662089fd52c798a17d9
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=1e65a32e2659b667c47d6662089fd52c798a17d9

Author: Nikolay Sivov <nsivov at 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;
 }
 




More information about the wine-cvs mailing list