Nikolay Sivov : dwrite: Make fonts installed in Fonts dir accessible through system collection.
Module: wine Branch: master Commit: fe81deae10a41d0d72a8abfb7e92af7108c3476e URL: http://source.winehq.org/git/wine.git/?a=commit;h=fe81deae10a41d0d72a8abfb7e... Author: Nikolay Sivov <nsivov(a)codeweavers.com> Date: Mon Dec 1 13:22:51 2014 +0300 dwrite: Make fonts installed in Fonts dir accessible through system collection. --- dlls/dwrite/font.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/dlls/dwrite/font.c b/dlls/dwrite/font.c index 5e82b81..135ea4d 100644 --- a/dlls/dwrite/font.c +++ b/dlls/dwrite/font.c @@ -1660,8 +1660,8 @@ static HRESULT WINAPI systemfontfileenumerator_GetCurrentFontFile(IDWriteFontFil { struct system_fontfile_enumerator *enumerator = impl_from_IDWriteFontFileEnumerator(iface); DWORD ret, type, count; + WCHAR *filename; HRESULT hr; - BYTE *data; *file = NULL; @@ -1671,17 +1671,30 @@ static HRESULT WINAPI systemfontfileenumerator_GetCurrentFontFile(IDWriteFontFil if (RegEnumValueW(enumerator->hkey, enumerator->index, NULL, NULL, NULL, &type, NULL, &count)) return E_FAIL; - if (!(data = heap_alloc(count))) + if (!(filename = heap_alloc(count))) return E_OUTOFMEMORY; - ret = RegEnumValueW(enumerator->hkey, enumerator->index, NULL, NULL, NULL, &type, data, &count); + ret = RegEnumValueW(enumerator->hkey, enumerator->index, NULL, NULL, NULL, &type, (BYTE*)filename, &count); if (ret) { - heap_free(data); + heap_free(filename); return E_FAIL; } - hr = IDWriteFactory_CreateFontFileReference(enumerator->factory, (WCHAR*)data, NULL, file); - heap_free(data); + /* Fonts installed in 'Fonts' system dir don't get full path in registry font files cache */ + if (!strchrW(filename, '\\')) { + static const WCHAR fontsW[] = {'\\','f','o','n','t','s','\\',0}; + WCHAR fullpathW[MAX_PATH]; + + GetWindowsDirectoryW(fullpathW, sizeof(fullpathW)/sizeof(WCHAR)); + strcatW(fullpathW, fontsW); + strcatW(fullpathW, filename); + + hr = IDWriteFactory_CreateFontFileReference(enumerator->factory, fullpathW, NULL, file); + } + else + hr = IDWriteFactory_CreateFontFileReference(enumerator->factory, filename, NULL, file); + + heap_free(filename); return hr; }
participants (1)
-
Alexandre Julliard