[vlc-devel] [PATCH] freetype: handle carriage returns
Salah-Eddin Shaban
salah at videolan.org
Wed Dec 23 19:58:16 CET 2015
Close #16186
---
modules/text_renderer/freetype/text_layout.c | 49 +++++++++++++++-------------
1 file changed, 27 insertions(+), 22 deletions(-)
diff --git a/modules/text_renderer/freetype/text_layout.c b/modules/text_renderer/freetype/text_layout.c
index f11f63c..c795d2f 100644
--- a/modules/text_renderer/freetype/text_layout.c
+++ b/modules/text_renderer/freetype/text_layout.c
@@ -978,13 +978,25 @@ static int LoadGlyphs( filter_t *p_filter, paragraph_t *p_paragraph,
i_glyph_index =
FT_Get_Char_Index( p_face, p_paragraph->p_code_points[ j ] );
- /*
- * If the font has no support for special space characters, use regular
- * space glyphs instead of the .notdef glyph.
- */
+ glyph_bitmaps_t *p_bitmaps = p_paragraph->p_glyph_bitmaps + j;
+
+#define SKIP_GLYPH( p_bitmaps ) \
+ { \
+ p_bitmaps->p_glyph = 0; \
+ p_bitmaps->p_outline = 0; \
+ p_bitmaps->p_shadow = 0; \
+ p_bitmaps->i_x_advance = 0; \
+ p_bitmaps->i_y_advance = 0; \
+ continue; \
+ }
+
if( !i_glyph_index )
{
uni_char_t codepoint = p_paragraph->p_code_points[ j ];
+ /*
+ * If the font has no support for special space characters, use regular
+ * space glyphs instead of the .notdef glyph.
+ */
if( codepoint == 0x0009 || codepoint == 0x00A0
|| codepoint == 0x1680 || codepoint == 0x3000
|| codepoint == 0x202F || codepoint == 0x205F
@@ -998,21 +1010,19 @@ static int LoadGlyphs( filter_t *p_filter, paragraph_t *p_paragraph,
{
i_glyph_index = 3;
}
+ /* Skip carriage returns */
+ else if( codepoint == 0x0D
+#ifdef HAVE_FRIBIDI
+ || p_paragraph->p_types[ j ] == FRIBIDI_TYPE_BS
+#endif
+ )
+ SKIP_GLYPH( p_bitmaps )
}
- glyph_bitmaps_t *p_bitmaps = p_paragraph->p_glyph_bitmaps + j;
-
if( FT_Load_Glyph( p_face, i_glyph_index,
FT_LOAD_NO_BITMAP | FT_LOAD_DEFAULT )
&& FT_Load_Glyph( p_face, i_glyph_index, FT_LOAD_DEFAULT ) )
- {
- p_bitmaps->p_glyph = 0;
- p_bitmaps->p_outline = 0;
- p_bitmaps->p_shadow = 0;
- p_bitmaps->i_x_advance = 0;
- p_bitmaps->i_y_advance = 0;
- continue;
- }
+ SKIP_GLYPH( p_bitmaps )
if( ( p_style->i_style_flags & STYLE_BOLD )
&& !( p_face->style_flags & FT_STYLE_FLAG_BOLD ) )
@@ -1022,14 +1032,9 @@ static int LoadGlyphs( filter_t *p_filter, paragraph_t *p_paragraph,
FT_GlyphSlot_Oblique( p_face->glyph );
if( FT_Get_Glyph( p_face->glyph, &p_bitmaps->p_glyph ) )
- {
- p_bitmaps->p_glyph = 0;
- p_bitmaps->p_outline = 0;
- p_bitmaps->p_shadow = 0;
- p_bitmaps->i_x_advance = 0;
- p_bitmaps->i_y_advance = 0;
- continue;
- }
+ SKIP_GLYPH( p_bitmaps )
+
+#undef SKIP_GLYPH
if( p_filter->p_sys->p_stroker && (p_style->i_style_flags & STYLE_OUTLINE) )
{
--
1.9.1
More information about the vlc-devel
mailing list