freetype: get_face always checks codepoint master
authorFrancois Cartegnie <fcvlcdev@free.fr>
Mon, 6 Jul 2020 07:11:09 +0000 (09:11 +0200)
committerFrancois Cartegnie <fcvlcdev@free.fr>
Tue, 7 Jul 2020 19:10:31 +0000 (21:10 +0200)
modules/text_renderer/freetype/fonts/dwrite.cpp
modules/text_renderer/freetype/fonts/win32.c
modules/text_renderer/freetype/platform_fonts.c
modules/text_renderer/freetype/platform_fonts.h

index 943c60f..1e4f168 100644 (file)
@@ -793,9 +793,7 @@ extern "C" vlc_family_t *DWrite_GetFallbacks( filter_t *p_filter, const char *ps
         if( !p_fallback || !p_fallback->p_fonts )
             goto done;
 
-        FT_Face p_face = GetFace( p_filter, p_fallback->p_fonts );
-
-        if( !p_face || !FT_Get_Char_Index( p_face, codepoint ) )
+        if( !GetFace( p_filter, p_fallback->p_fonts, codepoint ) )
             goto done;
 
         p_family = NewFamily( p_filter, psz_fallback, NULL, NULL, NULL );
index 23d3c47..e9b8f47 100644 (file)
@@ -552,9 +552,7 @@ vlc_family_t *Win32_GetFallbacks( filter_t *p_filter, const char *psz_family,
         if( !p_uniscribe || !p_uniscribe->p_fonts )
             goto done;
 
-        FT_Face p_face = GetFace( p_filter, p_uniscribe->p_fonts );
-
-        if( !p_face || !FT_Get_Char_Index( p_face, codepoint ) )
+        if( !GetFace( p_filter, p_uniscribe->p_fonts, codepoint ) );
             goto done;
 
         p_family = NewFamily( p_filter, psz_uniscribe, NULL, NULL, NULL );
index f6baa8c..184c201 100644 (file)
@@ -136,17 +136,20 @@ done:
     return p_face;
 }
 
-FT_Face GetFace( filter_t *p_filter, vlc_font_t *p_font )
+FT_Face GetFace( filter_t *p_filter, vlc_font_t *p_font, uni_char_t codepoint )
 {
     filter_sys_t *p_sys = p_filter->p_sys;
 
-    if( p_font->p_face )
-        return p_font->p_face;
-
-    p_font->p_face = LoadFace( p_filter, p_font->psz_fontfile, p_font->i_index,
-                               p_sys->p_default_style );
+    if( !p_font->p_face )
+        p_font->p_face = LoadFace( p_filter, p_font->psz_fontfile,
+                                   p_font->i_index,
+                                   p_sys->p_default_style );
 
-    return p_font->p_face;
+    if( p_font->p_face &&
+        FT_Get_Char_Index( p_font->p_face, codepoint ) )
+        return p_font->p_face;
+    else
+        return NULL;
 }
 
 /**
@@ -169,12 +172,8 @@ static vlc_font_t *GetBestFont( filter_t *p_filter, const vlc_family_t *p_family
     {
         int i_score = 0;
 
-        if( codepoint )
-        {
-            FT_Face p_face = GetFace( p_filter, p_font );
-            if( p_face && FT_Get_Char_Index( p_face, codepoint ) )
-                i_score += 1000;
-        }
+        if( codepoint && GetFace( p_filter, p_font, codepoint ) )
+            i_score += 1000;
 
         if( !!p_font->b_bold == !!b_bold )
             i_score += 100;
@@ -209,9 +208,9 @@ vlc_family_t *SearchFallbacks( filter_t *p_filter, vlc_family_t *p_fallbacks,
             p_fallback->p_fonts = p_temp->p_fonts;
         }
 
-        FT_Face p_face = GetFace( p_filter, p_fallback->p_fonts );
-        if( !p_face || !FT_Get_Char_Index( p_face, codepoint ) )
+        if( !GetFace( p_filter, p_fallback->p_fonts, codepoint ) )
             continue;
+
         p_family = p_fallback;
         break;
     }
@@ -524,12 +523,9 @@ char* Generic_Select( filter_t *p_filter, const char* psz_family,
          * It usually has the best coverage.
          */
         const vlc_family_t *p_temp = p_sys->pf_get_family( p_filter, psz_family );
-        if( p_temp && p_temp->p_fonts )
-        {
-            FT_Face p_face = GetFace( p_filter, p_temp->p_fonts );
-            if( p_face && FT_Get_Char_Index( p_face, codepoint ) )
+        if( p_temp && p_temp->p_fonts &&
+            GetFace( p_filter, p_temp->p_fonts, codepoint ) )
                 p_family = p_temp;
-        }
 
         /* Try font attachments */
         if( !p_family )
index 4a38568..e9c15eb 100644 (file)
@@ -297,7 +297,7 @@ int ConvertToLiveSize( filter_t *p_filter, const text_style_t *p_style );
 /* Only for fonts implementors */
 vlc_family_t *SearchFallbacks( filter_t *p_filter, vlc_family_t *p_fallbacks,
                                       uni_char_t codepoint );
-FT_Face GetFace( filter_t *p_filter, vlc_font_t *p_font );
+FT_Face GetFace( filter_t *p_filter, vlc_font_t *p_font, uni_char_t codepoint );
 
 #ifdef __cplusplus
 }