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.
This commit is contained in:
parent
f3d962226f
commit
8bf8021f94
|
@ -364,6 +364,30 @@ static XChar2b* X11DRV_unicode_to_char2b_cp950( fontObject* pfo,
|
||||||
return str2b;
|
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,
|
static void X11DRV_DrawString_normal( fontObject* pfo, Display* pdisp,
|
||||||
Drawable d, GC gc, int x, int y,
|
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_TextExtents_dbcs_2fonts,
|
||||||
X11DRV_GetTextMetricsA_cp932,
|
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 },
|
{ "cp1255", HEBREW_CHARSET, 1255, X11DRV_CPTABLE_SBCS },
|
||||||
{ "cp1256", ARABIC_CHARSET, 1256, X11DRV_CPTABLE_SBCS },
|
{ "cp1256", ARABIC_CHARSET, 1256, X11DRV_CPTABLE_SBCS },
|
||||||
{ "cp1257", BALTIC_CHARSET, 1257, X11DRV_CPTABLE_SBCS },
|
{ "cp1257", BALTIC_CHARSET, 1257, X11DRV_CPTABLE_SBCS },
|
||||||
{ "fontspecific", SYMBOL_CHARSET, CP_SYMBOL, X11DRV_CPTABLE_SBCS },
|
{ "fontspecific", SYMBOL_CHARSET, CP_SYMBOL, X11DRV_CPTABLE_SYMBOL },
|
||||||
{ "symbol", SYMBOL_CHARSET, CP_SYMBOL, X11DRV_CPTABLE_SBCS },
|
{ "symbol", SYMBOL_CHARSET, CP_SYMBOL, X11DRV_CPTABLE_SYMBOL },
|
||||||
{ NULL, ANSI_CHARSET, 1252, X11DRV_CPTABLE_SBCS }};
|
{ NULL, ANSI_CHARSET, 1252, X11DRV_CPTABLE_SBCS }};
|
||||||
|
|
||||||
static const SuffixCharset sufch_tcvn[] = {
|
static const SuffixCharset sufch_tcvn[] = {
|
||||||
|
|
|
@ -80,6 +80,7 @@ enum X11DRV_CPTABLE
|
||||||
X11DRV_CPTABLE_CP936,
|
X11DRV_CPTABLE_CP936,
|
||||||
X11DRV_CPTABLE_CP949,
|
X11DRV_CPTABLE_CP949,
|
||||||
X11DRV_CPTABLE_CP950,
|
X11DRV_CPTABLE_CP950,
|
||||||
|
X11DRV_CPTABLE_SYMBOL,
|
||||||
X11DRV_CPTABLE_COUNT
|
X11DRV_CPTABLE_COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -43,8 +43,8 @@ LPWSTR FONT_mbtowc(HDC hdc, LPCSTR str, INT count, INT *plenW, UINT *pCP)
|
||||||
cp = csi.ciACP;
|
cp = csi.ciACP;
|
||||||
else {
|
else {
|
||||||
switch(charset) {
|
switch(charset) {
|
||||||
case SYMBOL_CHARSET:
|
case SYMBOL_CHARSET: /* We don't want any translation here */
|
||||||
cp = CP_SYMBOL;
|
cp = GetACP();
|
||||||
break;
|
break;
|
||||||
case OEM_CHARSET:
|
case OEM_CHARSET:
|
||||||
cp = GetOEMCP();
|
cp = GetOEMCP();
|
||||||
|
|
Loading…
Reference in New Issue