[vlc-commits] freetype: improve GetBestFont
Francois Cartegnie
git at videolan.org
Mon Aug 24 17:39:36 CEST 2020
vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Wed Aug 12 17:46:11 2020 +0200| [1b31f07b9b0c0e5ac6ed6ba8de07efee2abcdea0] | committer: Francois Cartegnie
freetype: improve GetBestFont
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=1b31f07b9b0c0e5ac6ed6ba8de07efee2abcdea0
---
modules/text_renderer/freetype/platform_fonts.c | 37 ++++++++++++-------------
1 file changed, 17 insertions(+), 20 deletions(-)
diff --git a/modules/text_renderer/freetype/platform_fonts.c b/modules/text_renderer/freetype/platform_fonts.c
index 81fd3a1fc8..cab256f9d8 100644
--- a/modules/text_renderer/freetype/platform_fonts.c
+++ b/modules/text_renderer/freetype/platform_fonts.c
@@ -123,30 +123,27 @@ bool CheckFace( vlc_font_select_t *fs, vlc_font_t *p_font, uni_char_t codepoint
static vlc_font_t *GetBestFont( vlc_font_select_t *fs, const vlc_family_t *p_family,
int i_flags, uni_char_t codepoint )
{
- int i_best_score = 0;
- vlc_font_t *p_best_font = p_family->p_fonts;
-
- for( vlc_font_t *p_font = p_family->p_fonts; p_font; p_font = p_font->p_next )
- {
- int i_score = 0;
-
- if( codepoint && CheckFace( fs, p_font, codepoint ) )
- i_score += 1000;
-
- int i_sameflags = !(p_font->i_flags ^ i_flags);
- if( i_sameflags & VLC_FONT_FLAG_BOLD )
- i_score += 100;
- if( i_sameflags & VLC_FONT_FLAG_ITALIC )
- i_score += 10;
-
- if( i_score > i_best_score )
+ const int sameflagscheck[4] = {
+ VLC_FONT_FLAG_BOLD | VLC_FONT_FLAG_ITALIC,
+ VLC_FONT_FLAG_BOLD,
+ VLC_FONT_FLAG_ITALIC,
+ 0
+ };
+ /* we do priority matching with different passes
+ so we don't have to load & check every face or do store/sorting */
+ for( int i=0; i<4; i++ )
+ {
+ for( vlc_font_t *p_font = p_family->p_fonts; p_font; p_font = p_font->p_next )
{
- p_best_font = p_font;
- i_best_score = i_score;
+ int i_sameflags = !(p_font->i_flags ^ i_flags);
+ if( i_sameflags != sameflagscheck[i] )
+ continue;
+ if( !codepoint || CheckFace( fs, p_font, codepoint ) )
+ return p_font;
}
}
- return p_best_font;
+ return p_family->p_fonts;
}
vlc_family_t *SearchFallbacks( vlc_font_select_t *fs, vlc_family_t *p_fallbacks,
More information about the vlc-commits
mailing list