Patch level : 2.0 614

Files correlati     : xvaga.dll
Ricompilazione Demo : [ ]
Commento            :

Correzioni necessarie per correggere scelta font


git-svn-id: svn://10.65.10.50/trunk@11529 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2003-10-23 15:17:33 +00:00
parent b9fd8878cc
commit f239bbd3bf
2 changed files with 15 additions and 5 deletions

View File

@ -50,8 +50,8 @@ struct XvtData
char** families;
long* sizes;
short* scalable;
long max_count;
long cur_count;
int max_count;
int cur_count;
XvtData() { memset(this, 0, sizeof(XvtData)); }
};
@ -64,8 +64,11 @@ int CALLBACK FamilyEnumerator(
)
{
XvtData* d = (XvtData*)lParam;
d->families[d->cur_count++] = strdup(plf->lfFaceName);
return d->cur_count < d->max_count;
int& n = d->cur_count;
for (int i = n-1; i >= 0 && stricmp(d->families[i], plf->lfFaceName); i--);
if (i < 0) // Controlla che il nome del font non ci sia gia'
d->families[n++] = strdup(plf->lfFaceName);
return n < d->max_count;
}
int CALLBACK SizeEnumerator(
@ -76,7 +79,7 @@ int CALLBACK SizeEnumerator(
)
{
XvtData* d = (XvtData*)lParam;
long& i = d->cur_count;
int& i = d->cur_count;
int size = (plf->lfHeight+5) / 10;
if (size <= 0)
{
@ -112,6 +115,7 @@ int OsWin32_EnumerateFamilies(unsigned int hDC, char** families, int max_count)
data.families = families;
data.max_count = max_count;
LOGFONT lf; memset(&lf, 0, sizeof(lf));
lf.lfCharSet = DEFAULT_CHARSET;
::EnumFontFamiliesEx((HDC)hDC, &lf, FamilyEnumerator, (LPARAM)&data, 0);
qsort(families, data.cur_count, sizeof(char*), FamilySorter);
return data.cur_count;
@ -124,6 +128,7 @@ int OsWin32_EnumerateSizes(unsigned int hDC, const char* name, long* sizes, shor
data.scalable = scalable;
data.max_count = max_count;
LOGFONT lf; memset(&lf, 0, sizeof(lf));
lf.lfCharSet = DEFAULT_CHARSET;
strcpy(lf.lfFaceName, name);
::EnumFontFamiliesEx((HDC)hDC, &lf, SizeEnumerator, (LPARAM)&data, 0);

View File

@ -305,6 +305,11 @@ long xvt_fmap_get_families(PRINT_RCD *precp, char **family_array, long max_famil
#ifdef WIN32
TwxPrintOut* po = m_PrintoutCache.Get((TPRINT_RCD*)precp);
size = OsWin32_EnumerateFamilies(po->GetDC()->GetHDC(), family_array, max_families);
if (size == 0)
{
HDC hdc = ::GetDC(NULL); // Screen DC
size = OsWin32_EnumerateFamilies((unsigned int)hdc, family_array, max_families);
}
#else
size = OsLinux_EnumerateFamilies(family_array, max_families);
#endif