diff --git a/src/hb-buffer.cc b/src/hb-buffer.cc index b71aa57f66dccde13cfe4182805059efaa79acaf..596d38c3baf2d0908e02e601025d99f16082eeab 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 293ec828519f450a1170b3c57c5d080190a6a526..3c0a442fd3e8eb7747efa7efc8c9311eb6c67f4c 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 11bb28699231511637b8e7d776226a5a11ede3d2..36acf89b1af9035621410552ba66f4c9667ed32f 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 d7e41fdcec5205b82ba41060360d39fede6024c5..4e61ee72a215ba194d9de91addddd31725e3a034 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 dad2eacc1f7fe4f2f445d4b402e5b2644657e4f9..c2b199b1f3900eeed54d819a24009143c87376cc 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);