diff options
author | Matthias Clasen <mclasen@redhat.com> | 2022-01-25 20:52:58 -0500 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2022-01-25 20:53:47 -0500 |
commit | 40aa6e1f0dd197ec198d209d912df8ca8e693c0e (patch) | |
tree | 9addfaf5cdd35dc08620966a31f3fbd668576e03 | |
parent | 48ba0b8c7a34ec7b2ef8934a9d6697c2c7f6867d (diff) | |
download | pango-40aa6e1f0dd197ec198d209d912df8ca8e693c0e.tar.gz |
attributes: Centralize classification
Make the 'affects itemization' etc classification
available in one place, so we can use it elsewhere.
-rw-r--r-- | pango/pango-attributes-private.h | 5 | ||||
-rw-r--r-- | pango/pango-attributes.c | 59 | ||||
-rw-r--r-- | pango/pango-line-breaker.c | 60 |
3 files changed, 66 insertions, 58 deletions
diff --git a/pango/pango-attributes-private.h b/pango/pango-attributes-private.h index 4c427695..7d311082 100644 --- a/pango/pango-attributes-private.h +++ b/pango/pango-attributes-private.h @@ -50,4 +50,9 @@ gboolean pango_attr_iterator_advance (PangoAttrIterator *iterator, int index); +gboolean pango_attribute_affects_itemization (PangoAttribute *attr, + gpointer data); +gboolean pango_attribute_affects_break_or_shape (PangoAttribute *attr, + gpointer data); + #endif diff --git a/pango/pango-attributes.c b/pango/pango-attributes.c index 8d93e5ab..1a2061d3 100644 --- a/pango/pango-attributes.c +++ b/pango/pango-attributes.c @@ -524,6 +524,65 @@ pango_attr_shape_equal (const PangoAttribute *attr1, } /* }}} */ /* }}} */ +/* {{{ Private API */ + +gboolean +pango_attribute_affects_itemization (PangoAttribute *attr, + gpointer data) +{ + switch ((int)attr->klass->type) + { + /* These affect font selection */ + case PANGO_ATTR_LANGUAGE: + case PANGO_ATTR_FAMILY: + case PANGO_ATTR_STYLE: + case PANGO_ATTR_WEIGHT: + case PANGO_ATTR_VARIANT: + case PANGO_ATTR_STRETCH: + case PANGO_ATTR_SIZE: + case PANGO_ATTR_FONT_DESC: + case PANGO_ATTR_SCALE: + case PANGO_ATTR_FALLBACK: + case PANGO_ATTR_ABSOLUTE_SIZE: + case PANGO_ATTR_GRAVITY: + case PANGO_ATTR_GRAVITY_HINT: + case PANGO_ATTR_FONT_SCALE: + /* These need to be constant across runs */ + case PANGO_ATTR_LETTER_SPACING: + case PANGO_ATTR_SHAPE: + case PANGO_ATTR_RISE: + case PANGO_ATTR_BASELINE_SHIFT: + case PANGO_ATTR_LINE_HEIGHT: + case PANGO_ATTR_ABSOLUTE_LINE_HEIGHT: + case PANGO_ATTR_TEXT_TRANSFORM: + return TRUE; + default: + return FALSE; + } +} + +gboolean +pango_attribute_affects_break_or_shape (PangoAttribute *attr, + gpointer data) +{ + switch ((int)attr->klass->type) + { + /* Affects breaks */ + case PANGO_ATTR_ALLOW_BREAKS: + case PANGO_ATTR_WORD: + case PANGO_ATTR_SENTENCE: + case PANGO_ATTR_PARAGRAPH: + /* Affects shaping */ + case PANGO_ATTR_INSERT_HYPHENS: + case PANGO_ATTR_FONT_FEATURES: + case PANGO_ATTR_SHOW: + return TRUE; + default: + return FALSE; + } +} + +/* }}} */ /* {{{ Public API */ /** diff --git a/pango/pango-line-breaker.c b/pango/pango-line-breaker.c index 3461e021..05c905aa 100644 --- a/pango/pango-line-breaker.c +++ b/pango/pango-line-breaker.c @@ -160,62 +160,6 @@ item_is_paragraph_separator (PangoLineBreaker *self, return ch == '\r' || ch == '\n' || ch == 0x2029; } -static gboolean -affects_itemization (PangoAttribute *attr, - gpointer data) -{ - switch ((int)attr->klass->type) - { - /* These affect font selection */ - case PANGO_ATTR_LANGUAGE: - case PANGO_ATTR_FAMILY: - case PANGO_ATTR_STYLE: - case PANGO_ATTR_WEIGHT: - case PANGO_ATTR_VARIANT: - case PANGO_ATTR_STRETCH: - case PANGO_ATTR_SIZE: - case PANGO_ATTR_FONT_DESC: - case PANGO_ATTR_SCALE: - case PANGO_ATTR_FALLBACK: - case PANGO_ATTR_ABSOLUTE_SIZE: - case PANGO_ATTR_GRAVITY: - case PANGO_ATTR_GRAVITY_HINT: - case PANGO_ATTR_FONT_SCALE: - /* These need to be constant across runs */ - case PANGO_ATTR_LETTER_SPACING: - case PANGO_ATTR_SHAPE: - case PANGO_ATTR_RISE: - case PANGO_ATTR_BASELINE_SHIFT: - case PANGO_ATTR_LINE_HEIGHT: - case PANGO_ATTR_ABSOLUTE_LINE_HEIGHT: - case PANGO_ATTR_TEXT_TRANSFORM: - return TRUE; - default: - return FALSE; - } -} - -static gboolean -affects_break_or_shape (PangoAttribute *attr, - gpointer data) -{ - switch ((int)attr->klass->type) - { - /* Affects breaks */ - case PANGO_ATTR_ALLOW_BREAKS: - case PANGO_ATTR_WORD: - case PANGO_ATTR_SENTENCE: - case PANGO_ATTR_PARAGRAPH: - /* Affects shaping */ - case PANGO_ATTR_INSERT_HYPHENS: - case PANGO_ATTR_FONT_FEATURES: - case PANGO_ATTR_SHOW: - return TRUE; - default: - return FALSE; - } -} - static void apply_attributes_to_items (GList *items, PangoAttrList *attrs) @@ -299,8 +243,8 @@ ensure_items (PangoLineBreaker *self) self->render_attrs = pango_attr_list_copy (self->data->attrs); if (self->render_attrs) { - shape_attrs = pango_attr_list_filter (self->render_attrs, affects_break_or_shape, NULL); - itemize_attrs = pango_attr_list_filter (self->render_attrs, affects_itemization, NULL); + shape_attrs = pango_attr_list_filter (self->render_attrs, pango_attribute_affects_break_or_shape, NULL); + itemize_attrs = pango_attr_list_filter (self->render_attrs, pango_attribute_affects_itemization, NULL); } self->items = pango_itemize_with_font (self->context, |