summaryrefslogtreecommitdiff
path: root/pango/pango-context.c
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2021-05-09 01:31:58 +0000
committerMatthias Clasen <mclasen@redhat.com>2021-05-09 01:31:58 +0000
commit4dcd060cc51c0ff954db365f06ac117d90c0443b (patch)
tree287afc250eabf5c188b3f8c4e8b42347acb9e159 /pango/pango-context.c
parent73b46b04c724335ad73534cc69955baa2388b861 (diff)
parent5f2a5bbc95363ba25a6a7c107cd7daf260167e8b (diff)
downloadpango-1-44.tar.gz
Merge branch 'pango-1-44' into 'pango-1-44'pango-1-44
[1.44] Cherry pick various upstream fixes See merge request GNOME/pango!321
Diffstat (limited to 'pango/pango-context.c')
-rw-r--r--pango/pango-context.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/pango/pango-context.c b/pango/pango-context.c
index a64eb79f..7139de0b 100644
--- a/pango/pango-context.c
+++ b/pango/pango-context.c
@@ -1063,6 +1063,9 @@ itemize_state_init (ItemizeState *state,
width_iter_init (&state->width_iter, text + start_index, length);
_pango_emoji_iter_init (&state->emoji_iter, text + start_index, length);
+ if (state->emoji_iter.is_emoji)
+ state->width_iter.end = MAX (state->width_iter.end, state->emoji_iter.end);
+
update_end (state);
if (pango_font_description_get_set_fields (state->font_desc) & PANGO_FONT_MASK_GRAVITY)
@@ -1110,15 +1113,18 @@ itemize_state_next (ItemizeState *state)
&state->script_end, &state->script);
state->changed |= SCRIPT_CHANGED;
}
- if (state->run_end == state->width_iter.end)
- {
- width_iter_next (&state->width_iter);
- state->changed |= WIDTH_CHANGED;
- }
if (state->run_end == state->emoji_iter.end)
{
_pango_emoji_iter_next (&state->emoji_iter);
state->changed |= EMOJI_CHANGED;
+
+ if (state->emoji_iter.is_emoji)
+ state->width_iter.end = MAX (state->width_iter.end, state->emoji_iter.end);
+ }
+ if (state->run_end == state->width_iter.end)
+ {
+ width_iter_next (&state->width_iter);
+ state->changed |= WIDTH_CHANGED;
}
update_end (state);
@@ -1565,7 +1571,7 @@ pango_itemize_with_base_dir (PangoContext *context,
g_return_val_if_fail (length >= 0, NULL);
g_return_val_if_fail (length == 0 || text != NULL, NULL);
- if (length == 0)
+ if (length == 0 || g_utf8_strlen (text + start_index, length) == 0)
return NULL;
itemize_state_init (&state, context, text, base_dir, start_index, length,