gdi32: Use gdi handle as realized font id

Nikolay Sivov nsivov at codeweavers.com
Wed Sep 9 03:13:01 CDT 2015


To be used later by GetFontFile* functions
-------------- next part --------------
From 4dcd4fbcabe0c5ccd7312379b2014029d942f7b0 Mon Sep 17 00:00:00 2001
From: Nikolay Sivov <nsivov at codeweavers.com>
Date: Wed, 9 Sep 2015 01:26:36 +0300
Subject: [PATCH] gdi32: Use gdi handle as realized font id

---
 dlls/gdi32/freetype.c    | 3 +++
 dlls/gdi32/gdi_private.h | 2 ++
 include/wingdi.h         | 1 +
 3 files changed, 6 insertions(+)

diff --git a/dlls/gdi32/freetype.c b/dlls/gdi32/freetype.c
index 60ffc45..a27406b 100644
--- a/dlls/gdi32/freetype.c
+++ b/dlls/gdi32/freetype.c
@@ -337,6 +337,7 @@ struct tagGdiFont {
     VOID *GSUB_Table;
     const VOID *vert_feature;
     DWORD cache_num;
+    DWORD instance_id;
 };
 
 typedef struct {
@@ -4396,6 +4397,7 @@ static GdiFont *alloc_font(void)
     ret->font_desc.matrix.eM11 = ret->font_desc.matrix.eM22 = 1.0;
     ret->total_kern_pairs = (DWORD)-1;
     ret->kern_pairs = NULL;
+    ret->instance_id = HandleToULong(alloc_gdi_handle(ret, OBJ_FONT_REALIZED, NULL));
     list_init(&ret->child_fonts);
     return ret;
 }
@@ -4416,6 +4418,7 @@ static void free_font(GdiFont *font)
 
     if (font->ft_face) pFT_Done_Face(font->ft_face);
     if (font->mapping) unmap_font_file( font->mapping );
+    free_gdi_handle( ULongToHandle(font->instance_id) );
     HeapFree(GetProcessHeap(), 0, font->kern_pairs);
     HeapFree(GetProcessHeap(), 0, font->potm);
     HeapFree(GetProcessHeap(), 0, font->name);
diff --git a/dlls/gdi32/gdi_private.h b/dlls/gdi32/gdi_private.h
index 2e52e08..9a37090 100644
--- a/dlls/gdi32/gdi_private.h
+++ b/dlls/gdi32/gdi_private.h
@@ -294,6 +294,8 @@ extern BOOL WineEngInit(void) DECLSPEC_HIDDEN;
 extern BOOL WineEngRemoveFontResourceEx(LPCWSTR, DWORD, PVOID) DECLSPEC_HIDDEN;
 
 /* gdiobj.c */
+#define OBJ_FONT_REALIZED (GDI_OBJ_LAST+1)
+
 extern HGDIOBJ alloc_gdi_handle( void *obj, WORD type, const struct gdi_obj_funcs *funcs ) DECLSPEC_HIDDEN;
 extern void *free_gdi_handle( HGDIOBJ handle ) DECLSPEC_HIDDEN;
 extern HGDIOBJ get_full_gdi_handle( HGDIOBJ handle ) DECLSPEC_HIDDEN;
diff --git a/include/wingdi.h b/include/wingdi.h
index e860f2c..6a0047e 100644
--- a/include/wingdi.h
+++ b/include/wingdi.h
@@ -697,6 +697,7 @@ typedef struct
 #define OBJ_ENHMETADC       12
 #define OBJ_ENHMETAFILE     13
 #define OBJ_COLORSPACE      14
+#define GDI_OBJ_LAST        OBJ_COLORSPACE
 
 typedef struct tagXFORM
 {
-- 
2.1.4



More information about the wine-patches mailing list