Commit 8bf8021f authored by Huw D M Davies's avatar Huw D M Davies Committed by Alexandre Julliard

ExtTextOutW with symbol fonts works with chars in the ranges

0x0000 -- 0x00ff and 0xf000 -- 0xf0ff and not, for example, with chars in the Unicode Greek range.
parent f3d96222
......@@ -364,6 +364,30 @@ static XChar2b* X11DRV_unicode_to_char2b_cp950( fontObject* pfo,
return str2b;
}
static XChar2b* X11DRV_unicode_to_char2b_symbol( fontObject* pfo,
LPCWSTR lpwstr, UINT count )
{
XChar2b *str2b;
UINT i;
char ch = pfo->fs->default_char;
if (!(str2b = HeapAlloc( GetProcessHeap(), 0, count * sizeof(XChar2b) )))
return NULL;
for (i = 0; i < count; i++)
{
str2b[i].byte1 = 0;
if(lpwstr[i] >= 0xf000 && lpwstr[i] < 0xf100)
str2b[i].byte2 = lpwstr[i] - 0xf000;
else if(lpwstr[i] < 0x100)
str2b[i].byte2 = lpwstr[i];
else
str2b[i].byte2 = ch;
}
return str2b;
}
static void X11DRV_DrawString_normal( fontObject* pfo, Display* pdisp,
Drawable d, GC gc, int x, int y,
......@@ -700,4 +724,13 @@ const X11DRV_CP X11DRV_cptable[X11DRV_CPTABLE_COUNT] =
X11DRV_TextExtents_dbcs_2fonts,
X11DRV_GetTextMetricsA_cp932,
},
{ /* SYMBOL */
X11DRV_enum_subfont_charset_normal,
X11DRV_unicode_to_char2b_symbol,
X11DRV_DrawString_normal,
X11DRV_TextWidth_normal,
X11DRV_DrawText_normal,
X11DRV_TextExtents_normal,
X11DRV_GetTextMetricsA_normal,
}
};
......@@ -141,8 +141,8 @@ static const SuffixCharset sufch_microsoft[] = {
{ "cp1255", HEBREW_CHARSET, 1255, X11DRV_CPTABLE_SBCS },
{ "cp1256", ARABIC_CHARSET, 1256, X11DRV_CPTABLE_SBCS },
{ "cp1257", BALTIC_CHARSET, 1257, X11DRV_CPTABLE_SBCS },
{ "fontspecific", SYMBOL_CHARSET, CP_SYMBOL, X11DRV_CPTABLE_SBCS },
{ "symbol", SYMBOL_CHARSET, CP_SYMBOL, X11DRV_CPTABLE_SBCS },
{ "fontspecific", SYMBOL_CHARSET, CP_SYMBOL, X11DRV_CPTABLE_SYMBOL },
{ "symbol", SYMBOL_CHARSET, CP_SYMBOL, X11DRV_CPTABLE_SYMBOL },
{ NULL, ANSI_CHARSET, 1252, X11DRV_CPTABLE_SBCS }};
static const SuffixCharset sufch_tcvn[] = {
......
......@@ -80,6 +80,7 @@ enum X11DRV_CPTABLE
X11DRV_CPTABLE_CP936,
X11DRV_CPTABLE_CP949,
X11DRV_CPTABLE_CP950,
X11DRV_CPTABLE_SYMBOL,
X11DRV_CPTABLE_COUNT
};
......
......@@ -43,8 +43,8 @@ LPWSTR FONT_mbtowc(HDC hdc, LPCSTR str, INT count, INT *plenW, UINT *pCP)
cp = csi.ciACP;
else {
switch(charset) {
case SYMBOL_CHARSET:
cp = CP_SYMBOL;
case SYMBOL_CHARSET: /* We don't want any translation here */
cp = GetACP();
break;
case OEM_CHARSET:
cp = GetOEMCP();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment