diff --git a/xvaga/oswin32.cpp b/xvaga/oswin32.cpp index a4fbc662d..a39e453db 100755 --- a/xvaga/oswin32.cpp +++ b/xvaga/oswin32.cpp @@ -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); diff --git a/xvaga/xvtextra.cpp b/xvaga/xvtextra.cpp index d727b35df..511bb6be9 100755 --- a/xvaga/xvtextra.cpp +++ b/xvaga/xvtextra.cpp @@ -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