diff options
Diffstat (limited to 'pango')
-rw-r--r-- | pango/pango-layout.c | 79 | ||||
-rw-r--r-- | pango/pango-layout.h | 7 |
2 files changed, 86 insertions, 0 deletions
diff --git a/pango/pango-layout.c b/pango/pango-layout.c index 9a190a88..d5b0a9fc 100644 --- a/pango/pango-layout.c +++ b/pango/pango-layout.c @@ -20,6 +20,7 @@ struct _PangoLayout PangoAttrList *attrs; PangoFontDescription *font_desc; float line_height; + int spacing; int width; int height; PangoTabArray *tabs; @@ -47,6 +48,7 @@ enum PROP_ATTRIBUTES, PROP_FONT_DESCRIPTION, PROP_LINE_HEIGHT, + PROP_SPACING, PROP_WIDTH, PROP_HEIGHT, PROP_TABS, @@ -75,6 +77,7 @@ pango_layout_init (PangoLayout *layout) layout->alignment = PANGO_ALIGN_NATURAL; layout->ellipsize = PANGO_ELLIPSIZE_NONE; layout->line_height = 0.0; + layout->spacing = 0; layout->auto_dir = TRUE; layout->text = g_strdup (""); layout->length = 0; @@ -126,6 +129,10 @@ pango_layout_set_property (GObject *object, pango_layout_set_line_height (layout, g_value_get_float (value)); break; + case PROP_SPACING: + pango_layout_set_spacing (layout, g_value_get_int (value)); + break; + case PROP_WIDTH: pango_layout_set_width (layout, g_value_get_int (value)); break; @@ -198,6 +205,10 @@ pango_layout_get_property (GObject *object, g_value_set_float (value, layout->line_height); break; + case PROP_SPACING: + g_value_set_int (value, layout->spacing); + break; + case PROP_WIDTH: g_value_set_int (value, layout->width); break; @@ -306,6 +317,19 @@ pango_layout_class_init (PangoLayoutClass *class) G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY); /** + * PangoLayout:spacing: (attributes org.gtk.Property.get=pango_layout_get_spacing org.gtk.Property.set=pango_layout_set_spacing) + * + * Spacing to add between the lines of the `PangoLayout`. + * + * The spacing is specified in Pango units. + * + * The default value is 0. + */ + props[PROP_SPACING] = g_param_spec_int ("spacing", "spacing", "spacing", + 0, G_MAXINT, 0, + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY); + + /** * PangoLayout:width: (attributes org.gtk.Property.get=pango_layout_get_width org.gtk.Property.set=pango_layout_set_width) * * The width to which the text of `PangoLayout` will be broken. @@ -513,6 +537,13 @@ get_effective_attributes (PangoLayout *layout) pango_attr_line_height_new (layout->line_height)); } + if (layout->spacing != 0) + { + attrs = ensure_attrs (layout, attrs); + pango_attr_list_insert_before (attrs, + pango_attr_line_spacing_new (layout->spacing)); + } + if (layout->single_paragraph) { attrs = ensure_attrs (layout, attrs); @@ -1019,6 +1050,54 @@ pango_layout_get_line_height (PangoLayout *layout) } /** + * pango_layout_set_spacing: + * @layout: a `PangoLayout` + * @spacing: the amount of spacing + * + * Sets the amount of spacing in Pango units between + * the lines of the layout. + * + * When placing lines with spacing, Pango arranges things so that + * + * line2.top = line1.bottom + spacing + * + * The default value is 0. + * + * Spacing only takes effect if the line height is not + * overridden via [method@Pango.Layout.set_line_height]. + */ +void +pango_layout_set_spacing (PangoLayout *layout, + int spacing) +{ + g_return_if_fail (PANGO_IS_LAYOUT (layout)); + + if (layout->spacing == spacing) + return; + + layout->spacing = spacing; + + g_object_notify_by_pspec (G_OBJECT (layout), props[PROP_SPACING]); + layout_changed (layout); +} + +/** + * pango_layout_get_spacing: + * @layout: a `PangoLayout` + * + * Gets the amount of spacing between the lines of the layout. + * + * Return value: the spacing in Pango units + */ +int +pango_layout_get_spacing (PangoLayout *layout) +{ + g_return_val_if_fail (PANGO_IS_LAYOUT (layout), 0); + + return layout->spacing; +} + +/** * pango_layout_set_width: * @layout: a `PangoLayout`. * @width: the desired width in Pango units, or -1 to indicate that no diff --git a/pango/pango-layout.h b/pango/pango-layout.h index 6e939984..c183716d 100644 --- a/pango/pango-layout.h +++ b/pango/pango-layout.h @@ -71,6 +71,13 @@ float pango_layout_get_line_height (PangoLayout *layout); PANGO_AVAILABLE_IN_ALL +void pango_layout_set_spacing (PangoLayout *layout, + int spacing); + +PANGO_AVAILABLE_IN_ALL +int pango_layout_get_spacing (PangoLayout *layout); + +PANGO_AVAILABLE_IN_ALL void pango_layout_set_width (PangoLayout *layout, int width); |