summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2019-07-07 13:39:20 -0400
committerMatthias Clasen <mclasen@redhat.com>2019-07-12 09:32:03 -0400
commit7739307e03ecbbf1e8bc9f15c3174ab191646a64 (patch)
tree9d69ca07411964a55a9338e1cfb4a56a7be082d7
parentabd8b670b32d0939f5e950aef81fbafea94d94e4 (diff)
downloadpango-7739307e03ecbbf1e8bc9f15c3174ab191646a64.tar.gz
layout: Add pango_layout_set_shape_flags
This will let apps opt into shaping options from the high-level api.
-rw-r--r--pango/pango-layout-private.h1
-rw-r--r--pango/pango-layout.c23
-rw-r--r--pango/pango-layout.h6
3 files changed, 28 insertions, 2 deletions
diff --git a/pango/pango-layout-private.h b/pango/pango-layout-private.h
index 38e2e196..440585be 100644
--- a/pango/pango-layout-private.h
+++ b/pango/pango-layout-private.h
@@ -65,6 +65,7 @@ struct _PangoLayout
guint is_wrapped : 1; /* Whether the layout has any wrapped lines */
guint ellipsize : 2; /* PangoEllipsizeMode */
guint is_ellipsized : 1; /* Whether the layout has any ellipsized lines */
+ PangoShapeFlags shape_flags; /* Flags influencing shaping */
int unknown_glyphs_count; /* number of unknown glyphs */
/* some caching */
diff --git a/pango/pango-layout.c b/pango/pango-layout.c
index 6a44916c..ab8805a4 100644
--- a/pango/pango-layout.c
+++ b/pango/pango-layout.c
@@ -650,6 +650,26 @@ pango_layout_get_line_spacing (PangoLayout *layout)
return layout->line_spacing;
}
+void
+pango_layout_set_shape_flags (PangoLayout *layout,
+ PangoShapeFlags flags)
+{
+ g_return_if_fail (layout != NULL);
+
+ if (layout->shape_flags != flags)
+ {
+ layout->shape_flags = flags;
+ layout_changed (layout);
+ }
+}
+
+PangoShapeFlags
+pango_layout_get_shape_flags (PangoLayout *layout)
+{
+ g_return_val_if_fail (layout != NULL, FALSE);
+ return layout->shape_flags;
+}
+
/**
* pango_layout_set_attributes:
* @layout: a #PangoLayout
@@ -3312,7 +3332,6 @@ shape_run (PangoLayoutLine *line,
{
PangoLayout *layout = line->layout;
PangoGlyphString *glyphs = pango_glyph_string_new ();
- PangoShapeFlags flags = PANGO_SHAPE_FLAGS_NONE;
if (layout->text[item->offset] == '\t')
shape_tab (line, glyphs);
@@ -3325,7 +3344,7 @@ shape_run (PangoLayoutLine *line,
else
pango_shape_with_options (layout->text + item->offset, item->length,
layout->text, layout->length,
- &item->analysis, flags, glyphs);
+ &item->analysis, layout->shape_flags, glyphs);
if (state->properties.letter_spacing)
{
diff --git a/pango/pango-layout.h b/pango/pango-layout.h
index 96155715..cd610b8c 100644
--- a/pango/pango-layout.h
+++ b/pango/pango-layout.h
@@ -211,6 +211,12 @@ void pango_layout_set_line_spacing (PangoLayout *la
float spread);
PANGO_AVAILABLE_IN_1_44
float pango_layout_get_line_spacing (PangoLayout *layout);
+PANGO_AVAILABLE_IN_1_44
+void pango_layout_set_shape_flags (PangoLayout *layout,
+ PangoShapeFlags flags);
+PANGO_AVAILABLE_IN_1_44
+PangoShapeFlags pango_layout_get_shape_flags (PangoLayout *layout);
+
PANGO_AVAILABLE_IN_ALL
void pango_layout_set_justify (PangoLayout *layout,
gboolean justify);