summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan Lortie <desrt@desrt.ca>2011-04-15 18:32:36 -0400
committerBehdad Esfahbod <behdad@behdad.org>2011-04-19 00:03:44 -0400
commit70566befc59cfa8b9c43ac682749c40ea783b1dd (patch)
treec04e381892581f362c3405d78d7b93027e1fd1ab
parent62879eebd9965179af8602ba29ac0a64a739b757 (diff)
[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.
-rw-r--r--src/hb-buffer.cc12
-rw-r--r--src/hb-buffer.h6
-rw-r--r--src/hb-ot-layout-gpos-private.hh4
-rw-r--r--src/hb-view.c4
-rw-r--r--test/test-buffer.c7
5 files changed, 20 insertions, 13 deletions
diff --git a/src/hb-buffer.cc b/src/hb-buffer.cc
index b71aa57f..596d38c3 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 293ec828..3c0a442f 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 11bb2869..36acf89b 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 d7e41fdc..4e61ee72 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 dad2eacc..c2b199b1 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);