From b86ded710d391b78842c607962d9a2281596b862 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Mon, 29 Mar 2021 01:09:46 -0400 Subject: Small speedup to width iter --- pango/pango-context.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/pango/pango-context.c b/pango/pango-context.c index ccaa1bac..90952add 100644 --- a/pango/pango-context.c +++ b/pango/pango-context.c @@ -910,6 +910,9 @@ width_iter_is_upright (gunichar ch) int st = 0; int ed = max; + if (ch < upright[0][0]) + return FALSE; + while (st <= ed) { int mid = (st + ed) / 2; @@ -926,7 +929,7 @@ width_iter_is_upright (gunichar ch) } static void -width_iter_next(PangoWidthIter* iter) +width_iter_next (PangoWidthIter *iter) { gboolean met_joiner = FALSE; iter->start = iter->end; @@ -958,9 +961,9 @@ width_iter_next(PangoWidthIter* iter) } /* for variation selector, tag and emoji modifier. */ - if (G_UNLIKELY(ch == 0xFE0EU || ch == 0xFE0FU - || (ch >= 0xE0020 && ch <= 0xE007F) - || (ch >= 0x1F3FB && ch <= 0x1F3FF))) + if (G_UNLIKELY (ch == 0xFE0EU || ch == 0xFE0FU || + (ch >= 0xE0020 && ch <= 0xE007F) || + (ch >= 0x1F3FB && ch <= 0x1F3FF))) { iter->end = g_utf8_next_char (iter->end); continue; @@ -968,6 +971,7 @@ width_iter_next(PangoWidthIter* iter) if (width_iter_is_upright (ch) != iter->upright) break; + iter->end = g_utf8_next_char (iter->end); } } @@ -1000,7 +1004,6 @@ itemize_state_init (ItemizeState *state, PangoAttrIterator *cached_iter, const PangoFontDescription *desc) { - state->context = context; state->text = text; state->end = text + start_index + length; @@ -1576,7 +1579,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 || g_utf8_strlen (text + start_index, length) == 0) + if (length == 0 || g_utf8_get_char (text + start_index) == '\0') return NULL; itemize_state_init (&state, context, text, base_dir, start_index, length, -- cgit v1.2.1