Dmitry Timoshkov : gdiplus: Implement GdipPrivateAddFontFile.
Alexandre Julliard
julliard at winehq.org
Wed Nov 6 11:34:45 CST 2013
Module: wine
Branch: master
Commit: e7f6d77919f75e7a2cabf6f901087eba009a2ccf
URL: http://source.winehq.org/git/wine.git/?a=commit;h=e7f6d77919f75e7a2cabf6f901087eba009a2ccf
Author: Dmitry Timoshkov <dmitry at baikal.ru>
Date: Wed Nov 6 12:44:21 2013 +0900
gdiplus: Implement GdipPrivateAddFontFile.
---
dlls/gdiplus/font.c | 34 +++++++++++++++++++++++++++++-----
1 files changed, 29 insertions(+), 5 deletions(-)
diff --git a/dlls/gdiplus/font.c b/dlls/gdiplus/font.c
index a6c7924..a811a60 100644
--- a/dlls/gdiplus/font.c
+++ b/dlls/gdiplus/font.c
@@ -1127,15 +1127,39 @@ GpStatus WINGDIPAPI GdipDeletePrivateFontCollection(GpFontCollection **fontColle
/*****************************************************************************
* GdipPrivateAddFontFile [GDIPLUS.@]
*/
-GpStatus WINGDIPAPI GdipPrivateAddFontFile(GpFontCollection* fontCollection,
- GDIPCONST WCHAR* filename)
+GpStatus WINGDIPAPI GdipPrivateAddFontFile(GpFontCollection *collection, GDIPCONST WCHAR *name)
{
- FIXME("stub: %p, %s\n", fontCollection, debugstr_w(filename));
+ HANDLE file, mapping;
+ LARGE_INTEGER size;
+ void *mem;
+ GpStatus status;
+
+ TRACE("%p, %s\n", collection, debugstr_w(name));
+
+ if (!collection || !name) return InvalidParameter;
- if (!(fontCollection && filename))
+ file = CreateFileW(name, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
+ if (file == INVALID_HANDLE_VALUE) return InvalidParameter;
+
+ if (!GetFileSizeEx(file, &size) || size.u.HighPart)
+ {
+ CloseHandle(file);
return InvalidParameter;
+ }
+
+ mapping = CreateFileMappingW(file, NULL, PAGE_READONLY, 0, 0, NULL);
+ CloseHandle(file);
+ if (!mapping) return InvalidParameter;
+
+ mem = MapViewOfFile(mapping, FILE_MAP_READ, 0, 0, 0);
+ CloseHandle(mapping);
+ if (!mem) return InvalidParameter;
+
+ /* GdipPrivateAddMemoryFont creates a copy of the memory block */
+ status = GdipPrivateAddMemoryFont(collection, mem, size.u.LowPart);
+ UnmapViewOfFile(mem);
- return NotImplemented;
+ return status;
}
#define TT_PLATFORM_APPLE_UNICODE 0
More information about the wine-cvs
mailing list