From 70566befc59cfa8b9c43ac682749c40ea783b1dd Mon Sep 17 00:00:00 2001 From: Ryan Lortie Date: Fri, 15 Apr 2011 18:32:36 -0400 Subject: [PATCH] [API} hb_buffer_get_glyph_{infos,positions}: Add length out parameter Return the length, whenever we return an array. Makes it easier on the language bindings. --- src/hb-buffer.cc | 12 ++++++++++-- src/hb-buffer.h | 6 ++++-- src/hb-ot-layout-gpos-private.hh | 4 ++-- src/hb-view.c | 4 ++-- test/test-buffer.c | 7 ++----- 5 files changed, 20 insertions(+), 13 deletions(-) diff --git a/src/hb-buffer.cc b/src/hb-buffer.cc index b71aa57..596d38c 100644 --- a/src/hb-buffer.cc +++ b/src/hb-buffer.cc @@ -475,18 +475,26 @@ hb_buffer_get_length (hb_buffer_t *buffer) /* Return value valid as long as buffer not modified */ hb_glyph_info_t * -hb_buffer_get_glyph_infos (hb_buffer_t *buffer) +hb_buffer_get_glyph_infos (hb_buffer_t *buffer, + unsigned int *length) { + if (length) + *length = buffer->len; + return (hb_glyph_info_t *) buffer->info; } /* Return value valid as long as buffer not modified */ hb_glyph_position_t * -hb_buffer_get_glyph_positions (hb_buffer_t *buffer) +hb_buffer_get_glyph_positions (hb_buffer_t *buffer, + unsigned int *length) { if (!buffer->have_positions) _hb_buffer_clear_positions (buffer); + if (length) + *length = buffer->len; + return (hb_glyph_position_t *) buffer->pos; } diff --git a/src/hb-buffer.h b/src/hb-buffer.h index 293ec82..3c0a442 100644 --- a/src/hb-buffer.h +++ b/src/hb-buffer.h @@ -160,11 +160,13 @@ hb_buffer_get_length (hb_buffer_t *buffer); /* Return value valid as long as buffer not modified */ hb_glyph_info_t * -hb_buffer_get_glyph_infos (hb_buffer_t *buffer); +hb_buffer_get_glyph_infos (hb_buffer_t *buffer, + unsigned int *length); /* Return value valid as long as buffer not modified */ hb_glyph_position_t * -hb_buffer_get_glyph_positions (hb_buffer_t *buffer); +hb_buffer_get_glyph_positions (hb_buffer_t *buffer, + unsigned int *length); HB_END_DECLS diff --git a/src/hb-ot-layout-gpos-private.hh b/src/hb-ot-layout-gpos-private.hh index 11bb286..36acf89 100644 --- a/src/hb-ot-layout-gpos-private.hh +++ b/src/hb-ot-layout-gpos-private.hh @@ -1493,8 +1493,8 @@ void GPOS::position_finish (hb_buffer_t *buffer) { unsigned int i, j; - unsigned int len = hb_buffer_get_length (buffer); - hb_glyph_position_t *pos = hb_buffer_get_glyph_positions (buffer); + unsigned int len; + hb_glyph_position_t *pos = hb_buffer_get_glyph_positions (buffer, &len); hb_direction_t direction = buffer->props.direction; /* Handle cursive connections: diff --git a/src/hb-view.c b/src/hb-view.c index d7e41fd..4e61ee7 100644 --- a/src/hb-view.c +++ b/src/hb-view.c @@ -361,8 +361,8 @@ _hb_cr_text_glyphs (cairo_t *cr, hb_shape (hb_font, hb_face, hb_buffer, features, num_features); num_glyphs = hb_buffer_get_length (hb_buffer); - hb_glyph = hb_buffer_get_glyph_infos (hb_buffer); - hb_position = hb_buffer_get_glyph_positions (hb_buffer); + hb_glyph = hb_buffer_get_glyph_infos (hb_buffer, NULL); + hb_position = hb_buffer_get_glyph_positions (hb_buffer, NULL); cairo_glyphs = cairo_glyph_allocate (num_glyphs + 1); x = 0; for (i = 0; i < num_glyphs; i++) diff --git a/test/test-buffer.c b/test/test-buffer.c index dad2eac..c2b199b 100644 --- a/test/test-buffer.c +++ b/test/test-buffer.c @@ -126,11 +126,9 @@ test_buffer_contents (Fixture *fixture, gconstpointer user_data) return; } - len = hb_buffer_get_length (fixture->b); + glyphs = hb_buffer_get_glyph_infos (fixture->b, &len); g_assert_cmpint (len, ==, 5); - glyphs = hb_buffer_get_glyph_infos (fixture->b); - for (i = 0; i < len; i++) { unsigned int cluster; cluster = 1+i; @@ -155,8 +153,7 @@ test_buffer_positions (Fixture *fixture, gconstpointer user_data) hb_glyph_position_t *positions; /* Without shaping, positions should all be zero */ - positions = hb_buffer_get_glyph_positions (fixture->b); - len = hb_buffer_get_length (fixture->b); + positions = hb_buffer_get_glyph_positions (fixture->b, &len); for (i = 0; i < len; i++) { g_assert_cmpint (0, ==, positions[i].x_advance); g_assert_cmpint (0, ==, positions[i].y_advance); -- 2.7.4