mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-31 11:43:31 +00:00
gdi32: Use the translated string as a charset name.
This commit is contained in:
parent
b5db70f1ca
commit
35a928a0f8
3 changed files with 39 additions and 50 deletions
|
@ -89,6 +89,8 @@
|
|||
#include "wine/debug.h"
|
||||
#include "wine/list.h"
|
||||
|
||||
#include "resource.h"
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(font);
|
||||
|
||||
#ifdef HAVE_FREETYPE
|
||||
|
@ -354,7 +356,7 @@ typedef struct {
|
|||
struct enum_charset_element {
|
||||
DWORD mask;
|
||||
DWORD charset;
|
||||
LPCWSTR name;
|
||||
WCHAR name[LF_FACESIZE];
|
||||
};
|
||||
|
||||
struct enum_charset_list {
|
||||
|
@ -437,6 +439,7 @@ static const WCHAR liberation_mono[] = {'L','i','b','e','r','a','t','i','o','n',
|
|||
static const WCHAR liberation_sans[] = {'L','i','b','e','r','a','t','i','o','n',' ','S','a','n','s',0};
|
||||
static const WCHAR liberation_serif[] = {'L','i','b','e','r','a','t','i','o','n',' ','S','e','r','i','f',0};
|
||||
static const WCHAR times_new_roman[] = {'T','i','m','e','s',' ','N','e','w',' ','R','o','m','a','n',0};
|
||||
static const WCHAR SymbolW[] = {'S','y','m','b','o','l','\0'};
|
||||
|
||||
static const WCHAR *default_serif_list[] =
|
||||
{
|
||||
|
@ -462,48 +465,6 @@ static const WCHAR *default_sans_list[] =
|
|||
NULL
|
||||
};
|
||||
|
||||
|
||||
static const WCHAR ArabicW[] = {'A','r','a','b','i','c','\0'};
|
||||
static const WCHAR BalticW[] = {'B','a','l','t','i','c','\0'};
|
||||
static const WCHAR CHINESE_BIG5W[] = {'C','H','I','N','E','S','E','_','B','I','G','5','\0'};
|
||||
static const WCHAR CHINESE_GB2312W[] = {'C','H','I','N','E','S','E','_','G','B','2','3','1','2','\0'};
|
||||
static const WCHAR Central_EuropeanW[] = {'C','e','n','t','r','a','l',' ',
|
||||
'E','u','r','o','p','e','a','n','\0'};
|
||||
static const WCHAR CyrillicW[] = {'C','y','r','i','l','l','i','c','\0'};
|
||||
static const WCHAR GreekW[] = {'G','r','e','e','k','\0'};
|
||||
static const WCHAR HangulW[] = {'H','a','n','g','u','l','\0'};
|
||||
static const WCHAR Hangul_Johab_W[] = {'H','a','n','g','u','l','(','J','o','h','a','b',')','\0'};
|
||||
static const WCHAR HebrewW[] = {'H','e','b','r','e','w','\0'};
|
||||
static const WCHAR JapaneseW[] = {'J','a','p','a','n','e','s','e','\0'};
|
||||
static const WCHAR SymbolW[] = {'S','y','m','b','o','l','\0'};
|
||||
static const WCHAR ThaiW[] = {'T','h','a','i','\0'};
|
||||
static const WCHAR TurkishW[] = {'T','u','r','k','i','s','h','\0'};
|
||||
static const WCHAR VietnameseW[] = {'V','i','e','t','n','a','m','e','s','e','\0'};
|
||||
static const WCHAR WesternW[] = {'W','e','s','t','e','r','n','\0'};
|
||||
static const WCHAR OEM_DOSW[] = {'O','E','M','/','D','O','S','\0'};
|
||||
|
||||
static const WCHAR * const ElfScriptsW[32] = { /* these are in the order of the fsCsb[0] bits */
|
||||
WesternW, /*00*/
|
||||
Central_EuropeanW,
|
||||
CyrillicW,
|
||||
GreekW,
|
||||
TurkishW,
|
||||
HebrewW,
|
||||
ArabicW,
|
||||
BalticW,
|
||||
VietnameseW, /*08*/
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, /*15*/
|
||||
ThaiW,
|
||||
JapaneseW,
|
||||
CHINESE_GB2312W,
|
||||
HangulW,
|
||||
CHINESE_BIG5W,
|
||||
Hangul_Johab_W,
|
||||
NULL, NULL, /*23*/
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
SymbolW /*31*/
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
WCHAR *name;
|
||||
INT charset;
|
||||
|
@ -4384,6 +4345,30 @@ BOOL WineEngDestroyFontInstance(HFONT handle)
|
|||
return ret;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
/***************************************************
|
||||
* create_enum_charset_list
|
||||
*
|
||||
|
@ -4400,7 +4385,7 @@ static DWORD create_enum_charset_list(DWORD charset, struct enum_charset_list *l
|
|||
csi.fs.fsCsb[0] != 0) {
|
||||
list->element[n].mask = csi.fs.fsCsb[0];
|
||||
list->element[n].charset = csi.ciCharset;
|
||||
list->element[n].name = ElfScriptsW[ffs(csi.fs.fsCsb[0]) - 1];
|
||||
load_script_name( ffs(csi.fs.fsCsb[0]) - 1, list->element[n].name );
|
||||
n++;
|
||||
}
|
||||
else { /* charset is DEFAULT_CHARSET or invalid. */
|
||||
|
@ -4412,7 +4397,7 @@ static DWORD create_enum_charset_list(DWORD charset, struct enum_charset_list *l
|
|||
csi.fs.fsCsb[0] != 0) {
|
||||
list->element[n].mask = csi.fs.fsCsb[0];
|
||||
list->element[n].charset = csi.ciCharset;
|
||||
list->element[n].name = ElfScriptsW[ffs(csi.fs.fsCsb[0]) - 1];
|
||||
load_script_name( ffs(csi.fs.fsCsb[0]) - 1, list->element[n].name );
|
||||
n++;
|
||||
}
|
||||
|
||||
|
@ -4428,7 +4413,7 @@ static DWORD create_enum_charset_list(DWORD charset, struct enum_charset_list *l
|
|||
|
||||
list->element[n].mask = fs.fsCsb[0];
|
||||
list->element[n].charset = csi.ciCharset;
|
||||
list->element[n].name = ElfScriptsW[i];
|
||||
load_script_name( i, list->element[n].name );
|
||||
n++;
|
||||
}
|
||||
}
|
||||
|
@ -4602,15 +4587,14 @@ static BOOL enum_face_charsets(Face *face, struct enum_charset_list *list,
|
|||
for(i = 0; i < list->total; i++) {
|
||||
if(!face->scalable && face->fs.fsCsb[0] == 0) { /* OEM bitmap */
|
||||
elf.elfLogFont.lfCharSet = ntm.ntmTm.tmCharSet = OEM_CHARSET;
|
||||
strcpyW(elf.elfScript, OEM_DOSW);
|
||||
load_script_name( IDS_OEM_DOS, elf.elfScript );
|
||||
i = 32; /* break out of loop */
|
||||
} else if(!(face->fs.fsCsb[0] & list->element[i].mask))
|
||||
continue;
|
||||
else {
|
||||
elf.elfLogFont.lfCharSet = ntm.ntmTm.tmCharSet = list->element[i].charset;
|
||||
if(list->element[i].name)
|
||||
strcpyW(elf.elfScript, list->element[i].name);
|
||||
else
|
||||
strcpyW(elf.elfScript, list->element[i].name);
|
||||
if (!elf.elfScript[0])
|
||||
FIXME("Unknown elfscript for bit %d\n", ffs(list->element[i].mask) - 1);
|
||||
}
|
||||
TRACE("enuming face %s full %s style %s charset = %d type %d script %s it %d weight %d ntmflags %08x\n",
|
||||
|
|
|
@ -503,4 +503,6 @@ static inline const struct gdi_dc_funcs *get_bitmap_funcs( const BITMAPOBJ *bitm
|
|||
|
||||
extern void free_heap_bits( struct gdi_image_bits *bits ) DECLSPEC_HIDDEN;
|
||||
|
||||
extern HMODULE gdi32_module DECLSPEC_HIDDEN;
|
||||
|
||||
#endif /* __WINE_GDI_PRIVATE_H */
|
||||
|
|
|
@ -42,6 +42,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(gdi);
|
|||
|
||||
#define GDI_HEAP_SIZE 0xffe0
|
||||
|
||||
HMODULE gdi32_module = 0;
|
||||
|
||||
/***********************************************************************
|
||||
* GDI stock objects
|
||||
*/
|
||||
|
@ -578,6 +580,7 @@ BOOL WINAPI DllMain( HINSTANCE inst, DWORD reason, LPVOID reserved )
|
|||
|
||||
if (reason != DLL_PROCESS_ATTACH) return TRUE;
|
||||
|
||||
gdi32_module = inst;
|
||||
DisableThreadLibraryCalls( inst );
|
||||
WineEngInit();
|
||||
|
||||
|
|
Loading…
Reference in a new issue