diff options
-rw-r--r-- | pango/pango-layout-private.h | 1 | ||||
-rw-r--r-- | pango/pango-layout.c | 57 | ||||
-rw-r--r-- | pango/pango-layout.h | 7 | ||||
-rw-r--r-- | utils/viewer-render.c | 8 |
4 files changed, 68 insertions, 5 deletions
diff --git a/pango/pango-layout-private.h b/pango/pango-layout-private.h index 63e4139e..1805e730 100644 --- a/pango/pango-layout-private.h +++ b/pango/pango-layout-private.h @@ -58,6 +58,7 @@ struct _PangoLayout float line_spacing; /* factor to apply to line height */ guint justify : 1; + guint justify_last_line : 1; guint alignment : 2; guint single_paragraph : 1; guint auto_dir : 1; diff --git a/pango/pango-layout.c b/pango/pango-layout.c index a5577acc..ca5cbe74 100644 --- a/pango/pango-layout.c +++ b/pango/pango-layout.c @@ -214,6 +214,7 @@ pango_layout_init (PangoLayout *layout) layout->alignment = PANGO_ALIGN_LEFT; layout->justify = FALSE; + layout->justify_last_line = FALSE; layout->auto_dir = TRUE; layout->single_paragraph = FALSE; @@ -805,6 +806,8 @@ pango_layout_get_font_description (PangoLayout *layout) * Note that this setting is not implemented and so is ignored in * Pango older than 1.18. * + * Also see [method@Pango.Layout.set_justify_last_line]. + * * The default value is %FALSE. */ void @@ -817,7 +820,9 @@ pango_layout_set_justify (PangoLayout *layout, { layout->justify = justify; - if (layout->is_ellipsized || layout->is_wrapped) + if (layout->is_ellipsized || + layout->is_wrapped || + layout->justify_last_line) layout_changed (layout); } } @@ -839,6 +844,54 @@ pango_layout_get_justify (PangoLayout *layout) } /** + * pango_layout_set_justify_last_line: + * @layout: a `PangoLayout` + * @justify: whether the last line in the layout should be justified + * + * Sets whether the last line should be stretched to fill the + * entire width of the layout. + * + * This only has an effect if [method@Pango.Layout.set_justify] has + * been called as well. + * + * The default value is %FALSE. + * + * Since: 1.50 + */ +void +pango_layout_set_justify_last_line (PangoLayout *layout, + gboolean justify) +{ + g_return_if_fail (layout != NULL); + + if (justify != layout->justify_last_line) + { + layout->justify_last_line = justify; + + if (layout->justify) + layout_changed (layout); + } +} + +/** + * pango_layout_get_justify_last_line: + * @layout: a `PangoLayout` + * + * Gets whether the last line should be stretched + * to fill the entire width of the layout. + * + * Return value: the justify value + * + * Since: 1.50 + */ +gboolean +pango_layout_get_justify_last_line (PangoLayout *layout) +{ + g_return_val_if_fail (layout != NULL, FALSE); + return layout->justify_last_line; +} + +/** * pango_layout_set_auto_dir: * @layout: a `PangoLayout` * @auto_dir: if %TRUE, compute the bidirectional base direction @@ -6055,7 +6108,7 @@ pango_layout_line_postprocess (PangoLayoutLine *line, /* Distribute extra space between words if justifying and line was wrapped */ - if (line->layout->justify && (wrapped || ellipsized)) + if (line->layout->justify && (wrapped || ellipsized || line->layout->justify_last_line)) { /* if we ellipsized, we don't have remaining_width set */ if (state->remaining_width < 0) diff --git a/pango/pango-layout.h b/pango/pango-layout.h index ab4029db..9436dbcb 100644 --- a/pango/pango-layout.h +++ b/pango/pango-layout.h @@ -223,9 +223,14 @@ PANGO_AVAILABLE_IN_1_44 float pango_layout_get_line_spacing (PangoLayout *layout); PANGO_AVAILABLE_IN_ALL void pango_layout_set_justify (PangoLayout *layout, - gboolean justify); + gboolean justify); PANGO_AVAILABLE_IN_ALL gboolean pango_layout_get_justify (PangoLayout *layout); +PANGO_AVAILABLE_IN_1_50 +void pango_layout_set_justify_last_line (PangoLayout *layout, + gboolean justify); +PANGO_AVAILABLE_IN_1_50 +gboolean pango_layout_get_justify_last_line (PangoLayout *layout); PANGO_AVAILABLE_IN_1_4 void pango_layout_set_auto_dir (PangoLayout *layout, gboolean auto_dir); diff --git a/utils/viewer-render.c b/utils/viewer-render.c index 82b30f05..6f7e96c5 100644 --- a/utils/viewer-render.c +++ b/utils/viewer-render.c @@ -54,6 +54,7 @@ int opt_indent = 0; int opt_spacing = 0; double opt_line_spacing = -1.0; gboolean opt_justify = 0; +gboolean opt_justify_last_line = 0; int opt_runs = 1; PangoAlignment opt_align = PANGO_ALIGN_LEFT; PangoEllipsizeMode opt_ellipsize = PANGO_ELLIPSIZE_NONE; @@ -110,6 +111,7 @@ make_layout(PangoContext *context, pango_layout_set_auto_dir (layout, opt_auto_dir); pango_layout_set_ellipsize (layout, opt_ellipsize); pango_layout_set_justify (layout, opt_justify); + pango_layout_set_justify_last_line (layout, opt_justify_last_line); pango_layout_set_single_paragraph_mode (layout, opt_single_par); pango_layout_set_wrap (layout, opt_wrap); @@ -811,8 +813,10 @@ parse_options (int argc, char *argv[]) "Spacing in points between lines", "points"}, {"line-spacing", 0, 0, G_OPTION_ARG_DOUBLE, &opt_line_spacing, "Spread factor for line height", "factor"}, - {"justify", 0, 0, G_OPTION_ARG_NONE, &opt_justify, - "Align paragraph lines to be justified", NULL}, + {"justify", 0, 0, G_OPTION_ARG_NONE, &opt_justify, + "Stretch paragraph lines to be justified", NULL}, + {"justify-last-line", 0, 0, G_OPTION_ARG_NONE, &opt_justify_last_line, + "Justify the last line of the paragraph", NULL}, {"language", 0, 0, G_OPTION_ARG_STRING, &opt_language, "Language to use for font selection", "en_US/etc"}, {"margin", 0, 0, G_OPTION_ARG_CALLBACK, &parse_margin, |