diff options
author | Matthias Clasen <mclasen@redhat.com> | 2011-05-14 08:31:02 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2011-05-16 09:28:57 -0400 |
commit | 4587e5d2231b717dd116253a49badc1ba3aa5db5 (patch) | |
tree | 0aba3f65c1f71cd6d2697d6d27a5fa20f916ef86 | |
parent | c43c4884bf4b405f58a0c966384ee751f82ee69c (diff) | |
download | pango-4587e5d2231b717dd116253a49badc1ba3aa5db5.tar.gz |
Add a readonly version of pango_layout_get_log_attrs()
Otherwise, we are forced to either make many unnecessary copies
or pass the log attrs around alongside the layout in APIs operating
on the attrs.
https://bugzilla.gnome.org/show_bug.cgi?id=650170
-rw-r--r-- | docs/pango-sections.txt | 1 | ||||
-rw-r--r-- | pango/pango-layout.c | 35 | ||||
-rw-r--r-- | pango/pango-layout.h | 3 | ||||
-rw-r--r-- | pango/pango.def | 1 |
4 files changed, 40 insertions, 0 deletions
diff --git a/docs/pango-sections.txt b/docs/pango-sections.txt index 61e3f698..d0236a24 100644 --- a/docs/pango-sections.txt +++ b/docs/pango-sections.txt @@ -481,6 +481,7 @@ PANGO_TYPE_ALIGNMENT pango_layout_get_unknown_glyphs_count pango_layout_get_log_attrs +pango_layout_get_log_attrs_readonly pango_layout_index_to_pos pango_layout_index_to_line_x diff --git a/pango/pango-layout.c b/pango/pango-layout.c index f0dbbcc9..0b17ea87 100644 --- a/pango/pango-layout.c +++ b/pango/pango-layout.c @@ -1277,6 +1277,41 @@ pango_layout_get_log_attrs (PangoLayout *layout, *n_attrs = layout->n_chars + 1; } +/** + * pango_layout_get_log_attrs_readonly: + * @layout: a #PangoLayout + * @n_attrs: location to store the number of the attributes in the array + * + * Retrieves an array of logical attributes for each character in + * the @layout. + * + * This is a faster alternative to pango_layout_get_log_attrs(). + * The returned array is part of @layout and must not be modified. + * Modifying the layout will invalidate the returned array. + * + * The number of attributes returned in @n_attrs will be one more + * than the total number of characters in the layout, since there + * need to be attributes corresponding to both the position before + * the first character and the position after the last character. + * + * Returns: an array of logical attributes + * + * Since: 1.30 + */ +PangoLogAttr * +pango_layout_get_log_attrs_readonly (PangoLayout *layout, + gint *n_attrs) +{ + g_return_if_fail (layout != NULL); + + pango_layout_check_lines (layout); + + if (n_attrs) + *n_attrs = layout->n_chars + 1; + + return layout->log_attrs; +} + /** * pango_layout_get_line_count: diff --git a/pango/pango-layout.h b/pango/pango-layout.h index 3b769ffa..52dc36a8 100644 --- a/pango/pango-layout.h +++ b/pango/pango-layout.h @@ -166,6 +166,9 @@ void pango_layout_get_log_attrs (PangoLayout *layout, PangoLogAttr **attrs, gint *n_attrs); +PangoLogAttr *pango_layout_get_log_attrs_readonly (PangoLayout *layout, + gint *n_attrs); + void pango_layout_index_to_pos (PangoLayout *layout, int index_, PangoRectangle *pos); diff --git a/pango/pango.def b/pango/pango.def index 3b1bc766..70e1a50e 100644 --- a/pango/pango.def +++ b/pango/pango.def @@ -177,6 +177,7 @@ EXPORTS pango_fontset_simple_size pango_get_lib_subdirectory pango_get_log_attrs + pango_get_log_attrs_readonly pango_get_mirror_char pango_get_sysconf_subdirectory pango_glyph_item_apply_attrs |