File diff r11397:7bab6fd4faf1 → r11398:3da2674a0a9f
src/fontcache.cpp
Show inline comments
 
@@ -163,24 +163,26 @@ static FT_Error GetFontByFaceName(const 
 
	ttd_strlcat(font_path, "\\", MAX_PATH * sizeof(TCHAR));
 
	ttd_strlcat(font_path, WIDE_TO_MB(dbuffer), MAX_PATH * sizeof(TCHAR));
 

	
 
	/* Convert the path into something that FreeType understands */
 
	font_path = GetShortPath(font_path);
 

	
 
	index = 0;
 
	do {
 
		err = FT_New_Face(_library, font_path, index, face);
 
		if (err != FT_Err_Ok) break;
 

	
 
		if (strncasecmp(font_name, (*face)->family_name, strlen((*face)->family_name)) == 0) break;
 
		/* Try english name if font name failed */
 
		if (strncasecmp(font_name + strlen(font_name) + 1, (*face)->family_name, strlen((*face)->family_name)) == 0) break;
 
		err = FT_Err_Cannot_Open_Resource;
 

	
 
	} while ((FT_Long)++index != (*face)->num_faces);
 

	
 

	
 
folder_error:
 
registry_no_font_found:
 
#if defined(UNICODE)
 
	free(font_namep);
 
#endif
 
	RegCloseKey(hKey);
 
	return err;
 
@@ -287,30 +289,36 @@ static int CALLBACK EnumFontCallback(con
 
		HFONT font = CreateFontIndirect(&logfont->elfLogFont);
 
		if (font != NULL) {
 
			HDC dc = GetDC(NULL);
 
			HGDIOBJ oldfont = SelectObject(dc, font);
 
			GetTextCharsetInfo(dc, &fs, 0);
 
			SelectObject(dc, oldfont);
 
			ReleaseDC(NULL, dc);
 
			DeleteObject(font);
 
		}
 
		if ((fs.fsCsb[0] & info->locale.lsCsbSupported[0]) == 0 && (fs.fsCsb[1] & info->locale.lsCsbSupported[1]) == 0) return 1;
 
	}
 

	
 
	const char *font_name = GetEnglishFontName(logfont);
 
	DEBUG(freetype, 1, "Fallback font: %s", font_name);
 
	const char *english_name = GetEnglishFontName(logfont);
 
	const char *font_name = WIDE_TO_MB(logfont->elfFullName);
 
	DEBUG(freetype, 1, "Fallback font: %s (%s)", font_name, english_name);
 

	
 
	strecpy(info->settings->small_font,  font_name, lastof(info->settings->small_font));
 
	strecpy(info->settings->medium_font, font_name, lastof(info->settings->medium_font));
 
	strecpy(info->settings->large_font,  font_name, lastof(info->settings->large_font));
 

	
 
	/* Add english name after font name */
 
	strecpy(info->settings->small_font + strlen(info->settings->small_font) + 1, english_name, lastof(info->settings->small_font));
 
	strecpy(info->settings->medium_font + strlen(info->settings->medium_font) + 1, english_name, lastof(info->settings->medium_font));
 
	strecpy(info->settings->large_font + strlen(info->settings->large_font) + 1, english_name, lastof(info->settings->large_font));
 
	return 0; // stop enumerating
 
}
 

	
 
bool SetFallbackFont(FreeTypeSettings *settings, const char *language_isocode, int winlangid)
 
{
 
	EFCParam langInfo;
 
	if (GetLocaleInfo(MAKELCID(winlangid, SORT_DEFAULT), LOCALE_FONTSIGNATURE, (LPTSTR)&langInfo.locale, sizeof(langInfo.locale) / sizeof(TCHAR)) == 0) {
 
		/* Invalid langid or some other mysterious error, can't determine fallback font. */
 
		DEBUG(freetype, 1, "Can't get locale info for fallback font (langid=0x%x)", winlangid);
 
		return false;
 
	}
 
	langInfo.settings = settings;