[vlc-commits] text_renderer: freetype: parametrize TextLayout max width
Francois Cartegnie
git at videolan.org
Mon Jun 5 20:52:52 CEST 2017
vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Fri Jun 2 20:02:26 2017 +0200| [ea861ea7e444c5c86a2afd8b126d20f1af0486d6] | committer: Francois Cartegnie
text_renderer: freetype: parametrize TextLayout max width
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=ea861ea7e444c5c86a2afd8b126d20f1af0486d6
---
modules/text_renderer/freetype/freetype.c | 5 +++--
modules/text_renderer/freetype/text_layout.c | 19 ++++++++-----------
modules/text_renderer/freetype/text_layout.h | 13 +++++++------
3 files changed, 18 insertions(+), 19 deletions(-)
diff --git a/modules/text_renderer/freetype/freetype.c b/modules/text_renderer/freetype/freetype.c
index 823dbd0dbb..ae3a652d3e 100644
--- a/modules/text_renderer/freetype/freetype.c
+++ b/modules/text_renderer/freetype/freetype.c
@@ -1134,8 +1134,9 @@ static int Render( filter_t *p_filter, subpicture_region_t *p_region_out,
uint32_t *pi_k_durations = NULL;
rv = LayoutText( p_filter,
- &p_lines, &bbox, &i_max_face_height,
- psz_text, pp_styles, pi_k_durations, i_text_length, p_region_in->b_gridmode );
+ psz_text, pp_styles, pi_k_durations, i_text_length, p_region_in->b_gridmode,
+ p_filter->fmt_out.video.i_visible_width,
+ &p_lines, &bbox, &i_max_face_height );
p_region_out->i_x = p_region_in->i_x;
p_region_out->i_y = p_region_in->i_y;
diff --git a/modules/text_renderer/freetype/text_layout.c b/modules/text_renderer/freetype/text_layout.c
index d0d0f60aea..15b8e93007 100644
--- a/modules/text_renderer/freetype/text_layout.c
+++ b/modules/text_renderer/freetype/text_layout.c
@@ -920,7 +920,7 @@ static int ZeroNsmAdvance( paragraph_t *p_paragraph )
*/
static int LoadGlyphs( filter_t *p_filter, paragraph_t *p_paragraph,
bool b_use_glyph_indices, bool b_overwrite_advance,
- int *pi_max_advance_x )
+ unsigned *pi_max_advance_x )
{
if( p_paragraph->i_size <= 0 || p_paragraph->i_runs_count <= 0 )
{
@@ -1443,18 +1443,17 @@ error:
return VLC_EGENERIC;
}
-int LayoutText( filter_t *p_filter, line_desc_t **pp_lines,
- FT_BBox *p_bbox, int *pi_max_face_height,
-
+int LayoutText( filter_t *p_filter,
const uni_char_t *psz_text, text_style_t **pp_styles,
- uint32_t *pi_k_dates, int i_len, bool b_grid )
+ uint32_t *pi_k_dates, int i_len, bool b_grid, unsigned i_max_width,
+ line_desc_t **pp_lines, FT_BBox *p_bbox, int *pi_max_face_height )
{
line_desc_t *p_first_line = 0;
line_desc_t **pp_line = &p_first_line;
paragraph_t *p_paragraph = 0;
int i_paragraph_start = 0;
int i_max_height = 0;
- int i_max_advance_x = 0;
+ unsigned i_max_advance_x = 0;
for( int i = 0; i <= i_len; ++i )
{
@@ -1508,19 +1507,17 @@ int LayoutText( filter_t *p_filter, line_desc_t **pp_lines,
#endif
/*
- * Set max line width to allow for outline and shadow glyphs,
+ * Check max line width to allow for outline and shadow glyphs,
* and any extra width caused by visual reordering
*/
- int i_max_width = ( int ) p_filter->fmt_out.video.i_visible_width - i_max_advance_x;
-
- if( i_max_width <= 0 )
+ if( i_max_width <= i_max_advance_x )
{
msg_Err( p_filter, "LayoutText(): Invalid max width" );
goto error;
}
if( LayoutParagraph( p_filter, p_paragraph,
- i_max_width, pp_line, b_grid ) )
+ i_max_width - i_max_advance_x, pp_line, b_grid ) )
goto error;
FreeParagraph( p_paragraph );
diff --git a/modules/text_renderer/freetype/text_layout.h b/modules/text_renderer/freetype/text_layout.h
index 34e1e83884..8834488de6 100644
--- a/modules/text_renderer/freetype/text_layout.h
+++ b/modules/text_renderer/freetype/text_layout.h
@@ -66,16 +66,17 @@ line_desc_t *NewLine( int i_count );
* Layout the text with shaping, bidirectional support, and font fallback if available.
*
* \param p_filter the FreeType module object [IN]
- * \param pp_lines the list of line_desc_t's with rendered glyphs [OUT]
- * \param p_bbox the bounding box of all the lines [OUT]
- * \param pi_max_face_height maximum line height [OUT]
* \param psz_text array of size \p i_len containing character codepoints [IN]
* \param pp_styles array of size \p i_len containing character styles [IN]
* \param pi_k_dates array of size \p i_len containing karaoke timestamps for characters [IN]
* \param i_len length of the arrays \p psz_text, \p pp_styles, and \p pi_k_dates [IN]
* \param b_grid true for grid-mode text [IN]
+ * \param i_max_width maximum available width to layout text [IN]
+ * \param pp_lines the list of line_desc_t's with rendered glyphs [OUT]
+ * \param p_bbox the bounding box of all the lines [OUT]
+ * \param pi_max_face_height maximum line height [OUT]
*/
-int LayoutText(filter_t *p_filter, line_desc_t **pp_lines,
- FT_BBox *p_bbox, int *pi_max_face_height,
+int LayoutText( filter_t *p_filter,
const uni_char_t *psz_text, text_style_t **pp_styles,
- uint32_t *pi_k_dates, int i_len, bool b_grid );
+ uint32_t *pi_k_dates, int i_len, bool b_grid, unsigned i_max_width,
+ line_desc_t **pp_lines, FT_BBox *p_bbox, int *pi_max_face_height );
More information about the vlc-commits
mailing list