Module: wine Branch: master Commit: c5d71400546706f9fa38275a629ec1a8c8fc9b07 URL: https://source.winehq.org/git/wine.git/?a=commit;h=c5d71400546706f9fa38275a6...
Author: Jacek Caban jacek@codeweavers.com Date: Mon Sep 20 13:13:47 2021 +0200
gdi32: Move load_script_name call to EnumFontFamiliesExW.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Huw Davies huw@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/gdi32/font.c | 32 ++++---------------------------- dlls/gdi32/gdi_private.h | 2 ++ dlls/gdi32/text.c | 25 +++++++++++++++++++++++++ 3 files changed, 31 insertions(+), 28 deletions(-)
diff --git a/dlls/gdi32/font.c b/dlls/gdi32/font.c index 839244545cb..95a6bad3b92 100644 --- a/dlls/gdi32/font.c +++ b/dlls/gdi32/font.c @@ -32,7 +32,6 @@ #include "winternl.h" #include "winreg.h" #include "ntgdi_private.h" -#include "resource.h" #include "wine/exception.h" #include "wine/heap.h" #include "wine/rbtree.h" @@ -2589,29 +2588,6 @@ struct enum_charset DWORD script; };
-static int load_script_name( UINT id, WCHAR buffer[LF_FACESIZE] ) -{ - HRSRC rsrc; - HGLOBAL hMem; - WCHAR *p; - int i; - - id += IDS_FIRST_SCRIPT; - rsrc = FindResourceW( gdi32_module, (LPCWSTR)(ULONG_PTR)((id >> 4) + 1), (LPCWSTR)6 /*RT_STRING*/ ); - if (!rsrc) return 0; - hMem = LoadResource( gdi32_module, rsrc ); - if (!hMem) return 0; - - p = LockResource( hMem ); - id &= 0x000f; - while (id--) p += *p + 1; - - i = min(LF_FACESIZE - 1, *p); - memcpy(buffer, p + 1, i * sizeof(WCHAR)); - buffer[i] = 0; - return i; -} - static BOOL is_complex_script_ansi_cp( UINT ansi_cp ) { return (ansi_cp == 874 /* Thai */ @@ -2678,7 +2654,7 @@ static DWORD create_enum_charset_list(DWORD charset, struct enum_charset *list) { list->mask = ~mask; list->charset = DEFAULT_CHARSET; - list->script = IDS_OTHER - IDS_FIRST_SCRIPT; + list->script = 33; /* other */ list++; } } @@ -2834,7 +2810,7 @@ static BOOL enum_face_charsets( const struct gdi_font_family *family, struct gdi if (face->fs.fsCsb[0] == 0) /* OEM */ { elf.elfLogFont.lfCharSet = ntm.ntmTm.tmCharSet = OEM_CHARSET; - load_script_name( IDS_OEM_DOS - IDS_FIRST_SCRIPT, elf.elfScript ); + elf.elfScript[0] = 32; i = count; /* break out of loop after enumeration */ } else @@ -2843,8 +2819,8 @@ static BOOL enum_face_charsets( const struct gdi_font_family *family, struct gdi /* use the DEFAULT_CHARSET case only if no other charset is present */ if (list[i].charset == DEFAULT_CHARSET && (face->fs.fsCsb[0] & ~list[i].mask)) continue; elf.elfLogFont.lfCharSet = ntm.ntmTm.tmCharSet = list[i].charset; - load_script_name( list[i].script, elf.elfScript ); - if (!elf.elfScript[0]) FIXME("Unknown elfscript for id %u\n", list[i].script); + /* caller may fill elfScript with the actual string, see load_script_name */ + elf.elfScript[0] = list[i].script; } TRACE( "face %s full %s style %s charset = %d type %d script %s it %d weight %d ntmflags %08x\n", debugstr_w(elf.elfLogFont.lfFaceName), debugstr_w(elf.elfFullName), debugstr_w(elf.elfStyle), diff --git a/dlls/gdi32/gdi_private.h b/dlls/gdi32/gdi_private.h index 238ae3b7de1..cf09cf85ad4 100644 --- a/dlls/gdi32/gdi_private.h +++ b/dlls/gdi32/gdi_private.h @@ -299,4 +299,6 @@ static inline int get_dib_info_size( const BITMAPINFO *info, UINT coloruse ) return FIELD_OFFSET( BITMAPINFO, bmiColors[info->bmiHeader.biClrUsed] ); }
+extern HMODULE gdi32_module DECLSPEC_HIDDEN; + #endif /* __WINE_GDI_PRIVATE_H */ diff --git a/dlls/gdi32/text.c b/dlls/gdi32/text.c index 4037eaa4b65..641c15aab70 100644 --- a/dlls/gdi32/text.c +++ b/dlls/gdi32/text.c @@ -54,6 +54,7 @@ #include "usp10.h" #include "wine/debug.h" #include "gdi_private.h" +#include "resource.h"
WINE_DEFAULT_DEBUG_CHANNEL(bidi);
@@ -2037,6 +2038,29 @@ BOOL WINAPI GdiRealizationInfo( HDC hdc, struct realization_info *info ) return TRUE; }
+static void load_script_name( UINT id, WCHAR buffer[LF_FACESIZE] ) +{ + HRSRC rsrc; + HGLOBAL hMem; + WCHAR *p; + int i; + + id += IDS_FIRST_SCRIPT; + buffer[0] = 0; + rsrc = FindResourceW( gdi32_module, (LPCWSTR)(ULONG_PTR)((id >> 4) + 1), (LPCWSTR)6 /*RT_STRING*/ ); + if (!rsrc) return; + hMem = LoadResource( gdi32_module, rsrc ); + if (!hMem) return; + + p = LockResource( hMem ); + id &= 0x000f; + while (id--) p += *p + 1; + + i = min( LF_FACESIZE - 1, *p ); + memcpy( buffer, p + 1, i * sizeof(WCHAR) ); + buffer[i] = 0; +} + /*********************************************************************** * EnumFontFamiliesExW (GDI32.@) */ @@ -2072,6 +2096,7 @@ INT WINAPI EnumFontFamiliesExW( HDC hdc, LOGFONTW *lf, FONTENUMPROCW efproc, count /= sizeof(*entries); for (i = 0; ret && i < count; i++) { + load_script_name( entries[i].lf.elfScript[0], entries[i].lf.elfScript ); ret = efproc( (const LOGFONTW *)&entries[i].lf, (const TEXTMETRICW *)&entries[i].tm, entries[i].type, lparam ); }