diff options
Diffstat (limited to 'pango/pango-layout.c')
-rw-r--r-- | pango/pango-layout.c | 60 |
1 files changed, 59 insertions, 1 deletions
diff --git a/pango/pango-layout.c b/pango/pango-layout.c index c95e9e20..e6e4d8cf 100644 --- a/pango/pango-layout.c +++ b/pango/pango-layout.c @@ -197,6 +197,7 @@ pango_layout_init (PangoLayout *layout) layout->lines = NULL; layout->tab_width = -1; + layout->unknown_glyphs_count = -1; layout->wrap = PANGO_WRAP_WORD; layout->is_wrapped = FALSE; @@ -307,8 +308,10 @@ pango_layout_copy (PangoLayout *src) layout->tabs = pango_tab_array_copy (src->tabs); layout->wrap = src->wrap; layout->ellipsize = src->ellipsize; + + layout->unknown_glyphs_count = -1; - /* is_wrapped, is_ellipsized, log_attrs, lines + /* unknown_glyphs_count, is_wrapped, is_ellipsized, log_attrs, lines * fields are updated by check_lines */ return layout; @@ -1059,6 +1062,59 @@ pango_layout_set_markup_with_accel (PangoLayout *layout, } /** + * pango_layout_get_unknown_glyphs_count: + * @layout: a #PangoLayout + * + * Counts the number unknown glyphs in @layout. That is, zero if + * glyphs for all characters in the layout text were found, or more + * than zero otherwise. + * + * Return value: The number of unknown glyphs in @layout. + * + * Since: 1.16 + */ +int +pango_layout_get_unknown_glyphs_count (PangoLayout *layout) +{ + PangoLayoutLine *line; + PangoLayoutRun *run; + GSList *lines_list; + GSList *runs_list; + int i, count = 0; + + g_return_val_if_fail (PANGO_IS_LAYOUT (layout), 0); + + pango_layout_check_lines (layout); + + if (layout->unknown_glyphs_count >= 0) + return layout->unknown_glyphs_count; + + lines_list = layout->lines; + while (lines_list) + { + line = lines_list->data; + runs_list = line->runs; + + while (runs_list) + { + run = runs_list->data; + + for (i = 0; i < run->glyphs->num_glyphs; i++) + { + if (run->glyphs->glyphs[i].glyph & PANGO_GLYPH_UNKNOWN_FLAG) + count++; + } + + runs_list = runs_list->next; + } + lines_list = lines_list->next; + } + + layout->unknown_glyphs_count = count; + return count; +} + +/** * pango_layout_context_changed: * @layout: a #PangoLayout * @@ -2538,6 +2594,8 @@ pango_layout_clear_lines (PangoLayout *layout) g_free (layout->log_attrs); layout->log_attrs = NULL; } + + layout->unknown_glyphs_count = -1; layout->logical_rect_cached = FALSE; layout->ink_rect_cached = FALSE; layout->is_ellipsized = FALSE; |