summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2022-01-25 14:48:13 -0500
committerMatthias Clasen <mclasen@redhat.com>2022-01-25 15:34:35 -0500
commitd815d061c85ec5f403f007453c502d18f5616ea4 (patch)
tree7421c588f57824c96bb4da002f91bfe5d34bc1d6
parentec2958682949220f15a32066eff412d857c735c5 (diff)
downloadpango-d815d061c85ec5f403f007453c502d18f5616ea4.tar.gz
lines: tweak the array api
Make this work like the line api, with pango_lines_get_lines() and pango_lines_get_line_count(). Update all users.
-rw-r--r--examples/cairotwisted.c2
-rw-r--r--examples/parshape.c4
-rw-r--r--pango/pango-layout.c10
-rw-r--r--pango/pango-line-iter.c77
-rw-r--r--pango/pango-lines-private.h9
-rw-r--r--pango/pango-lines.c182
-rw-r--r--pango/pango-lines.h6
-rw-r--r--pango/pango-renderer.c10
-rw-r--r--pango/pangocairo-font.c8
-rw-r--r--pango/pangofc-font.c9
-rw-r--r--pango/serializer.c7
-rw-r--r--tests/test-bidi.c2
-rw-r--r--tests/testiter.c7
-rw-r--r--tests/testmisc.c10
14 files changed, 175 insertions, 168 deletions
diff --git a/examples/cairotwisted.c b/examples/cairotwisted.c
index 88f781b4..ff7952d4 100644
--- a/examples/cairotwisted.c
+++ b/examples/cairotwisted.c
@@ -492,7 +492,7 @@ draw_text (cairo_t *cr,
pango_layout_set_text (layout, text, -1);
- line = pango_lines_get_line (pango_layout_get_lines (layout), 0, NULL, NULL);
+ line = pango_lines_get_lines (pango_layout_get_lines (layout))[0];
cairo_move_to (cr, x, y);
pango_cairo_line_path (cr, line);
diff --git a/examples/parshape.c b/examples/parshape.c
index c09e1ddd..da4b5516 100644
--- a/examples/parshape.c
+++ b/examples/parshape.c
@@ -99,7 +99,9 @@ main (int argc, char *argv[])
for (int i = 0; i < pango_lines_get_line_count (lines); i++)
{
- PangoLine *line = pango_lines_get_line (lines, i, &x, &y);
+ PangoLine *line = pango_lines_get_lines (lines)[i];
+
+ pango_lines_get_line_position (lines, i, &x, &y);
cairo_save (cr);
cairo_move_to (cr, x / (double)PANGO_SCALE, y / (double)PANGO_SCALE);
diff --git a/pango/pango-layout.c b/pango/pango-layout.c
index 83fa94e2..1810e128 100644
--- a/pango/pango-layout.c
+++ b/pango/pango-layout.c
@@ -708,7 +708,7 @@ retry:
{
PangoLine *first_line;
if (pango_lines_get_line_count (layout->lines) > 0)
- first_line = pango_lines_get_line (layout->lines, 0, NULL, NULL);
+ first_line = pango_lines_get_lines (layout->lines)[0];
else
first_line = line;
if (pango_line_get_resolved_direction (first_line) == PANGO_DIRECTION_LTR)
@@ -747,9 +747,7 @@ retry:
{
PangoLine *last;
- last = pango_lines_get_line (layout->lines,
- pango_lines_get_line_count (layout->lines) - 1,
- NULL, NULL);
+ last = pango_lines_get_lines (layout->lines)[pango_lines_get_line_count (layout->lines) - 1];
data = line_data_ref (last->data);
start_index = data->length;
start_offset = last->data->n_chars;
@@ -1639,7 +1637,7 @@ pango_layout_get_character_count (PangoLayout *layout)
ensure_lines (layout);
- line = pango_lines_get_line (layout->lines, 0, NULL, NULL);
+ line = pango_lines_get_lines (layout->lines)[0];
return line->data->n_chars;
}
@@ -1694,7 +1692,7 @@ pango_layout_get_log_attrs (PangoLayout *layout,
ensure_lines (layout);
- line = pango_lines_get_line (layout->lines, 0, NULL, NULL);
+ line = pango_lines_get_lines (layout->lines)[0];
if (n_attrs)
*n_attrs = line->data->n_chars + 1;
diff --git a/pango/pango-line-iter.c b/pango/pango-line-iter.c
index 62d2dff7..b2aafa54 100644
--- a/pango/pango-line-iter.c
+++ b/pango/pango-line-iter.c
@@ -27,8 +27,7 @@ struct _PangoLineIter
guint serial;
int line_no;
- int line_x;
- int line_y;
+ Position line_pos;
PangoLine *line;
GSList *run_link;
PangoRun *run;
@@ -118,8 +117,9 @@ update_cluster (PangoLineIter *iter,
PangoGlyphItem *glyph_item;
char *cluster_text;
int cluster_length;
+ PangoRun *run = iter->run_link->data;
- glyph_item = pango_run_get_glyph_item (iter->run);
+ glyph_item = pango_run_get_glyph_item (run);
iter->character_position = 0;
@@ -221,11 +221,13 @@ next_cluster_internal (PangoLineIter *iter,
gboolean include_terminators)
{
PangoGlyphItem *glyph_item;
+ PangoRun *run;
- if (iter->run == NULL)
+ if (iter->run_link == NULL)
return next_nonempty_line (iter, include_terminators);
- glyph_item = pango_run_get_glyph_item (iter->run);
+ run = iter->run_link->data;
+ glyph_item = pango_run_get_glyph_item (run);
if (iter->next_cluster_glyph == glyph_item->glyphs->num_glyphs)
{
@@ -245,46 +247,32 @@ static void
update_run (PangoLineIter *iter,
int start_index)
{
- PangoGlyphItem *glyph_item;
-
if (iter->run)
- glyph_item = pango_run_get_glyph_item (iter->run);
-
- if (iter->run_link == iter->line->runs)
- iter->run_x = 0;
- else
{
- iter->run_x += iter->end_x_offset + iter->run_width;
- if (iter->run)
- iter->run_x += glyph_item->start_x_offset;
- }
+ PangoGlyphItem *glyph_item = pango_run_get_glyph_item (iter->run);
+
+ if (iter->run_link == iter->line->runs)
+ iter->run_x = 0;
+ else
+ iter->run_x += iter->run_width + iter->end_x_offset + glyph_item->start_x_offset;
- if (iter->run)
- {
iter->run_width = pango_glyph_string_get_width (glyph_item->glyphs);
iter->end_x_offset = glyph_item->end_x_offset;
+ iter->ltr = (glyph_item->item->analysis.level % 2) == 0;
+ iter->cluster_start = 0;
+ iter->cluster_x = iter->run_x;
+ update_cluster (iter, glyph_item->glyphs->log_clusters[0]);
}
else
{
/* The empty run at the end of a line */
+ iter->run_x = 0;
+
iter->run_width = 0;
iter->end_x_offset = 0;
- }
-
- if (iter->run)
- iter->ltr = (glyph_item->item->analysis.level % 2) == 0;
- else
- iter->ltr = TRUE;
-
- iter->cluster_start = 0;
- iter->cluster_x = iter->run_x;
-
- if (iter->run)
- {
- update_cluster (iter, glyph_item->glyphs->log_clusters[0]);
- }
- else
- {
+ iter->ltr = TRUE;
+ iter->cluster_start = 0;
+ iter->cluster_x = iter->run_x;
iter->cluster_width = 0;
iter->character_position = 0;
iter->cluster_num_chars = 0;
@@ -299,13 +287,13 @@ offset_line (PangoLineIter *iter,
{
if (ink_rect)
{
- ink_rect->x += iter->line_x;
- ink_rect->y += iter->line_y;
+ ink_rect->x += iter->line_pos.x;
+ ink_rect->y += iter->line_pos.y;
}
if (logical_rect)
{
- logical_rect->x += iter->line_x;
- logical_rect->y += iter->line_y;
+ logical_rect->x += iter->line_pos.x;
+ logical_rect->y += iter->line_pos.y;
}
}
@@ -337,7 +325,8 @@ pango_line_iter_new (PangoLines *lines)
iter->serial = pango_lines_get_serial (lines);
iter->line_no = 0;
- iter->line = pango_lines_get_line (iter->lines, 0, &iter->line_x, &iter->line_y);
+ iter->line = g_ptr_array_index (lines->lines, 0);
+ iter->line_pos = g_array_index (lines->positions, Position, 0);
iter->run_link = iter->line->runs;
if (iter->run_link)
{
@@ -503,11 +492,13 @@ pango_line_iter_next_line (PangoLineIter *iter)
{
g_return_val_if_fail (ITER_IS_VALID (iter), FALSE);
- iter->line = pango_lines_get_line (iter->lines, iter->line_no + 1, &iter->line_x, &iter->line_y);
- if (!iter->line)
+ iter->line_no++;
+ if (iter->line_no == iter->lines->lines->len)
return FALSE;
- iter->line_no++;
+ iter->line = g_ptr_array_index (iter->lines->lines, iter->line_no);
+ iter->line_pos = g_array_index (iter->lines->positions, Position, iter->line_no);
+
iter->run_link = iter->line->runs;
if (iter->run_link)
iter->run = iter->run_link->data;
@@ -853,7 +844,7 @@ pango_line_iter_get_line_baseline (PangoLineIter *iter)
{
g_return_val_if_fail (ITER_IS_VALID (iter), 0);
- return iter->line_y;
+ return iter->line_pos.y;
}
/**
diff --git a/pango/pango-lines-private.h b/pango/pango-lines-private.h
index 46ef06bf..94b4f4c1 100644
--- a/pango/pango-lines-private.h
+++ b/pango/pango-lines-private.h
@@ -2,10 +2,17 @@
#include "pango-lines.h"
+typedef struct _Position Position;
+struct _Position
+{
+ int x, y;
+};
+
struct _PangoLines
{
GObject parent_instance;
- GArray *lines;
+ GPtrArray *lines;
+ GArray *positions;
guint serial;
};
diff --git a/pango/pango-lines.c b/pango/pango-lines.c
index 95a12ce9..c316addf 100644
--- a/pango/pango-lines.c
+++ b/pango/pango-lines.c
@@ -41,13 +41,6 @@
/* {{{ PangoLines implementation */
-typedef struct _Line Line;
-struct _Line
-{
- PangoLine *line;
- int x, y;
-};
-
struct _PangoLinesClass
{
GObjectClass parent_class;
@@ -59,7 +52,8 @@ static void
pango_lines_init (PangoLines *lines)
{
lines->serial = 1;
- lines->lines = g_array_new (FALSE, FALSE, sizeof (Line));
+ lines->lines = g_ptr_array_new_with_free_func ((GDestroyNotify) pango_line_free);
+ lines->positions = g_array_new (FALSE, FALSE, sizeof (Position));
}
static void
@@ -67,13 +61,8 @@ pango_lines_finalize (GObject *object)
{
PangoLines *lines = PANGO_LINES (object);
- for (int i = 0; i < lines->lines->len; i++)
- {
- Line *line = &g_array_index (lines->lines, Line, i);
- pango_line_free (line->line);
- }
-
- g_array_free (lines->lines, TRUE);
+ g_ptr_array_unref (lines->lines);
+ g_array_unref (lines->positions);
G_OBJECT_CLASS (pango_lines_parent_class)->finalize (object);
}
@@ -115,17 +104,16 @@ pango_line_get_cursors (PangoLines *lines,
int j;
const char *p;
PangoRectangle pos;
- Line *l = NULL;
+ Position offset;
g_assert (g_array_get_element_size (cursors) == sizeof (CursorPos));
g_assert (cursors->len == 0);
for (int i = 0; i < lines->lines->len; i++)
{
- Line *ll = &g_array_index (lines->lines, Line, i);
- if (ll->line == line)
+ if (line == g_ptr_array_index (lines->lines, i))
{
- l = ll;
+ offset = g_array_index (lines->positions, Position, i);
break;
}
}
@@ -149,7 +137,7 @@ pango_line_get_cursors (PangoLines *lines,
strong ? &pos : NULL,
strong ? NULL : &pos);
- cursor.x = pos.x + l->x;
+ cursor.x = pos.x + offset.x;
cursor.pos = idx;
g_array_append_val (cursors, cursor);
}
@@ -218,13 +206,10 @@ pango_lines_add_line (PangoLines *lines,
int x_line,
int y_line)
{
- Line l;
+ Position pos = { x_line, y_line };
- l.line = line;
- l.x = x_line;
- l.y = y_line;
-
- g_array_append_val (lines->lines, l);
+ g_ptr_array_add (lines->lines, line);
+ g_array_append_val (lines->positions, pos);
lines->serial++;
if (lines->serial == 0)
@@ -266,37 +251,53 @@ pango_lines_get_line_count (PangoLines *lines)
}
/**
- * pango_lines_get_line:
+ * pango_lines_get_lines:
* @lines: a `PangoLines`
- * @num: the position of the line to get
+ *
+ * Gets the lines.
+ *
+ * The length of the returned array can be obtained with
+ * [method@Pango.Lines.get_line_count].
+ *
+ * Returns: (transfer none): the array of lines
+ */
+PangoLine **
+pango_lines_get_lines (PangoLines *lines)
+{
+ g_return_val_if_fail (PANGO_IS_LINES (lines), NULL);
+
+ return (PangoLine **)lines->lines->pdata;
+}
+
+/**
+ * pango_lines_get_line_position:
+ * pango_lines_get_lines:
+ * @lines: a `PangoLines`
+ * @num: the index of the line to get the position for
* @line_x: (out) (optional): return location for the X coordinate
* @line_y: (out) (optional): return location for the Y coordinate
*
- * Gets the @num-th line of @lines.
- *
- * Returns: (transfer none) (nullable): the line that was found
+ * Gets the position of a line.
*/
-PangoLine *
-pango_lines_get_line (PangoLines *lines,
- int num,
- int *line_x,
- int *line_y)
+void
+pango_lines_get_line_position (PangoLines *lines,
+ int num,
+ int *line_x,
+ int *line_y)
{
- Line *l;
+ Position *pos;
- g_return_val_if_fail (PANGO_IS_LINES (lines), NULL);
+ g_return_if_fail (PANGO_IS_LINES (lines));
if (num >= lines->lines->len)
- return NULL;
+ return;
- l = &g_array_index (lines->lines, Line, num);
+ pos = &g_array_index (lines->positions, Position, num);
if (line_x)
- *line_x = l->x;
+ *line_x = pos->x;
if (line_y)
- *line_y = l->y;
-
- return l->line;
+ *line_y = pos->y;
}
/* {{{ Miscellaneous */
@@ -321,9 +322,9 @@ pango_lines_get_unknown_glyphs_count (PangoLines *lines)
for (int i = 0; i < lines->lines->len; i++)
{
- Line *ll = &g_array_index (lines->lines, Line, i);
+ PangoLine *line = g_ptr_array_index (lines->lines, i);
- for (GSList *l = ll->line->runs; l; l = l->next)
+ for (GSList *l = line->runs; l; l = l->next)
{
PangoGlyphItem *run = l->data;
@@ -351,8 +352,8 @@ pango_lines_is_wrapped (PangoLines *lines)
{
for (int i = 0; i < lines->lines->len; i++)
{
- Line *l = &g_array_index (lines->lines, Line, i);
- if (pango_line_is_wrapped (l->line))
+ PangoLine *line = g_ptr_array_index (lines->lines, i);
+ if (pango_line_is_wrapped (line))
return TRUE;
}
@@ -372,8 +373,8 @@ pango_lines_is_ellipsized (PangoLines *lines)
{
for (int i = 0; i < lines->lines->len; i++)
{
- Line *l = &g_array_index (lines->lines, Line, i);
- if (pango_line_is_ellipsized (l->line))
+ PangoLine *line = g_ptr_array_index (lines->lines, i);
+ if (pango_line_is_ellipsized (line))
return TRUE;
}
@@ -393,8 +394,8 @@ pango_lines_is_hyphenated (PangoLines *lines)
{
for (int i = 0; i < lines->lines->len; i++)
{
- Line *l = &g_array_index (lines->lines, Line, i);
- if (pango_line_is_hyphenated (l->line))
+ PangoLine *line = g_ptr_array_index (lines->lines, i);
+ if (pango_line_is_hyphenated (line))
return TRUE;
}
@@ -428,23 +429,24 @@ pango_lines_get_extents (PangoLines *lines,
{
for (int i = 0; i < lines->lines->len; i++)
{
- Line *l = &g_array_index (lines->lines, Line, i);
+ PangoLine *line = g_ptr_array_index (lines->lines, i);
+ Position *pos = &g_array_index (lines->positions, Position, i);
PangoRectangle line_ink;
PangoRectangle line_logical;
PangoLeadingTrim trim = PANGO_LEADING_TRIM_NONE;
- if (l->line->starts_paragraph)
+ if (line->starts_paragraph)
trim |= PANGO_LEADING_TRIM_START;
- if (l->line->ends_paragraph)
+ if (line->ends_paragraph)
trim |= PANGO_LEADING_TRIM_END;
- pango_line_get_extents (l->line, &line_ink, NULL);
- pango_line_get_trimmed_extents (l->line, trim, &line_logical);
+ pango_line_get_extents (line, &line_ink, NULL);
+ pango_line_get_trimmed_extents (line, trim, &line_logical);
- line_ink.x += l->x;
- line_ink.y += l->y;
- line_logical.x += l->x;
- line_logical.y += l->y;
+ line_ink.x += pos->x;
+ line_ink.y += pos->y;
+ line_logical.x += pos->x;
+ line_logical.y += pos->y;
if (i == 0)
{
@@ -519,16 +521,16 @@ pango_lines_get_size (PangoLines *lines,
int
pango_lines_get_baseline (PangoLines *lines)
{
- Line *l;
+ Position *pos;
g_return_val_if_fail (PANGO_IS_LINES (lines), 0);
if (lines->lines->len == 0)
return 0;
- l = &g_array_index (lines->lines, Line, 0);
+ pos = &g_array_index (lines->positions, Position, 0);
- return l->y;
+ return pos->y;
}
/**
@@ -690,7 +692,7 @@ pango_lines_get_x_ranges (PangoLines *lines,
}
/* }}} */
- /* {{{ Editing API */
+ /* {{{ Editing API */
/**
* pango_lines_index_to_line:
@@ -722,38 +724,40 @@ pango_lines_index_to_line (PangoLines *lines,
int *x_offset,
int *y_offset)
{
- Line *found = NULL;
+ PangoLine *found = NULL;
int num;
int i;
+ Position pos;
g_return_if_fail (PANGO_IS_LINES (lines));
for (i = 0; i < lines->lines->len; i++)
{
- Line *l = &g_array_index (lines->lines, Line, i);
+ PangoLine *l = g_ptr_array_index (lines->lines, i);
- if (l->line->start_index > idx && found)
+ if (l->start_index > idx && found)
break;
found = l;
+ pos = g_array_index (lines->positions, Position, i);
num = i;
- if (*line && *line == found->line)
+ if (*line && *line == found)
break;
- if (l->line->start_index + l->line->length > idx)
+ if (l->start_index + l->length > idx)
break;
}
if (found)
{
- *line = found->line;
+ *line = found;
if (line_no)
*line_no = num;
if (x_offset)
- *x_offset = found->x;
+ *x_offset = pos.x;
if (y_offset)
- *y_offset = found->y;
+ *y_offset = pos.y;
return;
}
@@ -787,23 +791,24 @@ pango_lines_pos_to_line (PangoLines *lines,
for (int i = 0; i < lines->lines->len; i++)
{
- Line *l = &g_array_index (lines->lines, Line, i);
+ PangoLine *line = g_ptr_array_index (lines->lines, i);
+ Position pos = g_array_index (lines->positions, Position, i);
PangoRectangle ext;
- pango_line_get_extents (l->line, NULL, &ext);
+ pango_line_get_extents (line, NULL, &ext);
- ext.x += l->x;
- ext.y += l->y;
+ ext.x += pos.x;
+ ext.y += pos.y;
if (ext.x <= x && x <= ext.x + ext.width &&
ext.y <= y && y <= ext.y + ext.height)
{
if (line_x)
- *line_x = l->x;
+ *line_x = pos.x;
if (line_y)
- *line_y = l->y;
+ *line_y = pos.y;
- return l->line;
+ return line;
}
}
@@ -1157,11 +1162,8 @@ pango_lines_move_cursor (PangoLines *lines,
if (off_start)
{
- PangoLine *prev_line;
-
- prev_line = pango_lines_get_line (lines, line_no - 1, NULL, NULL);
- if (!prev_line)
- {
+ if (line_no == 0)
+ {
if (new_line)
*new_line = NULL;
*new_idx = -1;
@@ -1170,16 +1172,13 @@ pango_lines_move_cursor (PangoLines *lines,
return;
}
- line = prev_line;
line_no--;
+ line = g_ptr_array_index (lines->lines, line_no);
paragraph_boundary = (line->start_index + line->length != idx);
}
else
{
- PangoLine *next_line;
-
- next_line = pango_lines_get_line (lines, line_no + 1, NULL, NULL);
- if (!next_line)
+ if (line_no == lines->lines->len - 1)
{
if (new_line)
*new_line = NULL;
@@ -1188,8 +1187,9 @@ pango_lines_move_cursor (PangoLines *lines,
g_array_unref (cursors);
return;
}
- line = next_line;
+
line_no++;
+ line = g_ptr_array_index (lines->lines, line_no);
paragraph_boundary = (line->start_index != idx);
}
diff --git a/pango/pango-lines.h b/pango/pango-lines.h
index 1326b35b..375e5d8e 100644
--- a/pango/pango-lines.h
+++ b/pango/pango-lines.h
@@ -28,7 +28,11 @@ PANGO_AVAILABLE_IN_ALL
int pango_lines_get_line_count (PangoLines *lines);
PANGO_AVAILABLE_IN_ALL
-PangoLine * pango_lines_get_line (PangoLines *lines,
+PangoLine ** pango_lines_get_lines (PangoLines *lines);
+
+PANGO_AVAILABLE_IN_ALL
+void pango_lines_get_line_position
+ (PangoLines *lines,
int num,
int *line_x,
int *line_y);
diff --git a/pango/pango-renderer.c b/pango/pango-renderer.c
index 6fbbd12f..a375f87a 100644
--- a/pango/pango-renderer.c
+++ b/pango/pango-renderer.c
@@ -578,20 +578,22 @@ pango_renderer_draw_lines (PangoRenderer *renderer,
int n;
PangoLine *line;
int line_x, line_y;
+ PangoLine **l;
g_return_if_fail (PANGO_IS_RENDERER_FAST (renderer));
renderer->priv->lines = lines;
- n = 0;
- while ((line = pango_lines_get_line (lines, n, &line_x, &line_y)) != NULL)
+ l = pango_lines_get_lines (lines);
+ for (n = 0; n < pango_lines_get_line_count (lines); n++)
{
+ line = l[n];
+ pango_lines_get_line_position (lines, n, &line_x, &line_y);
+
if (n == 0)
pango_renderer_activate_with_context (renderer, line->context);
pango_renderer_draw_line (renderer, line, x + line_x, y + line_y);
-
- n++;
}
if (n > 0)
diff --git a/pango/pangocairo-font.c b/pango/pangocairo-font.c
index 738b741f..3e978c01 100644
--- a/pango/pangocairo-font.c
+++ b/pango/pangocairo-font.c
@@ -189,14 +189,16 @@ static int
max_glyph_width (PangoLayout *layout)
{
PangoLines *lines;
+ PangoLine **l;
int max_width = 0;
lines = pango_layout_get_lines (layout);
+ l = pango_lines_get_lines (lines);
+
for (int i = 0; i < pango_lines_get_line_count (lines); i++)
{
- PangoLine *line = pango_lines_get_line (lines, i, NULL, NULL);
- PangoRun **runs = pango_line_get_runs (line);
- int n_runs = pango_line_get_run_count (line);
+ PangoRun **runs = pango_line_get_runs (l[i]);
+ int n_runs = pango_line_get_run_count (l[i]);
for (int j = 0; j < n_runs; j++)
{
diff --git a/pango/pangofc-font.c b/pango/pangofc-font.c
index a7995998..f2583135 100644
--- a/pango/pangofc-font.c
+++ b/pango/pangofc-font.c
@@ -420,15 +420,16 @@ static int
max_glyph_width (PangoLayout *layout)
{
PangoLines *lines;
+ PangoLine **l;
int max_width = 0;
- GSList *r;
lines = pango_layout_get_lines (layout);
+ l = pango_lines_get_lines (lines);
+
for (int i = 0; i < pango_lines_get_line_count (lines); i++)
{
- PangoLine *line = pango_lines_get_line (lines, i, NULL, NULL);
- PangoRun **runs = pango_line_get_runs (line);
- int n_runs = pango_line_get_run_count (line);
+ PangoRun **runs = pango_line_get_runs (l[i]);
+ int n_runs = pango_line_get_run_count (l[i]);
for (int j = 0; j < n_runs; j++)
{
diff --git a/pango/serializer.c b/pango/serializer.c
index a2870362..edd6486f 100644
--- a/pango/serializer.c
+++ b/pango/serializer.c
@@ -755,6 +755,7 @@ lines_to_json (GtkJsonPrinter *printer,
PangoLines *lines)
{
int width, height;
+ PangoLine **l;
gtk_json_printer_start_object (printer, "output");
@@ -768,12 +769,12 @@ lines_to_json (GtkJsonPrinter *printer,
gtk_json_printer_start_array (printer, "lines");
+ l = pango_lines_get_lines (lines);
for (int i = 0; i < pango_lines_get_line_count (lines); i++)
{
- PangoLine *line;
int x, y;
- line = pango_lines_get_line (lines, i, &x, &y);
- line_to_json (printer, line, x, y);
+ pango_lines_get_line_position (lines, i, &x, &y);
+ line_to_json (printer, l[i], x, y);
}
gtk_json_printer_end (printer);
diff --git a/tests/test-bidi.c b/tests/test-bidi.c
index dadad5b1..c560f73e 100644
--- a/tests/test-bidi.c
+++ b/tests/test-bidi.c
@@ -212,7 +212,7 @@ test_move_cursor_line (void)
text = pango_layout_get_text (layout);
lines = pango_layout_get_lines (layout);
- line = pango_lines_get_line (lines, 0, NULL, NULL);
+ line = pango_lines_get_lines (lines)[0];
n_chars = g_utf8_strlen (text, -1);
diff --git a/tests/testiter.c b/tests/testiter.c
index a55fc246..ab4a2e99 100644
--- a/tests/testiter.c
+++ b/tests/testiter.c
@@ -261,7 +261,6 @@ test_glyphitem_iter (void)
PangoLayout *layout;
PangoLine *line;
const char *text;
- GSList *l;
fontmap = pango_cairo_font_map_get_default ();
context = pango_font_map_create_context (fontmap);
@@ -273,10 +272,10 @@ test_glyphitem_iter (void)
pango_layout_set_text (layout, "test تست", -1);
text = pango_layout_get_text (layout);
- line = pango_lines_get_line (pango_layout_get_lines (layout), 0, NULL, NULL);
+ line = pango_lines_get_lines (pango_layout_get_lines (layout))[0];
for (int i = 0; i < pango_line_get_run_count (line); i++)
- {
- PangoGlyphItem *run = (PangoGlyphItem *)pango_line_get_runs (line)[i];
+ {
+ PangoGlyphItem *run = (PangoGlyphItem *)pango_line_get_runs (line)[i]; /* FIXME */
int direction;
for (direction = 0; direction < 2; direction++)
diff --git a/tests/testmisc.c b/tests/testmisc.c
index a4183478..b9814c01 100644
--- a/tests/testmisc.c
+++ b/tests/testmisc.c
@@ -98,7 +98,7 @@ test_line_height (void)
context = pango_font_map_create_context (pango_cairo_font_map_get_default ());
layout = pango_layout_new (context);
pango_layout_set_text (layout, "one\ttwo", -1);
- line = pango_lines_get_line (pango_layout_get_lines (layout), 0, NULL, NULL);
+ line = pango_lines_get_lines (pango_layout_get_lines (layout))[0];
pango_line_get_extents (line, NULL, &ext);
g_assert_cmpint (ext.height, >, 0);
@@ -119,7 +119,7 @@ test_line_height2 (void)
layout = pango_layout_new (context);
pango_layout_set_text (layout, "one", -1);
- line = pango_lines_get_line (pango_layout_get_lines (layout), 0, NULL, NULL);
+ line = pango_lines_get_lines (pango_layout_get_lines (layout))[0];
g_assert_nonnull (line);
pango_line_get_extents (line, NULL, &ext1);
@@ -127,7 +127,7 @@ test_line_height2 (void)
pango_layout_set_text (layout, "", -1);
- line = pango_lines_get_line (pango_layout_get_lines (layout), 0, NULL, NULL);
+ line = pango_lines_get_lines (pango_layout_get_lines (layout))[0];
g_assert_nonnull (line);
pango_line_get_extents (line, NULL, &ext2);
@@ -157,14 +157,14 @@ test_line_height3 (void)
pango_layout_set_attributes (layout, attrs);
pango_attr_list_unref (attrs);
- line = pango_lines_get_line (pango_layout_get_lines (layout), 0, NULL, NULL);
+ line = pango_lines_get_lines (pango_layout_get_lines (layout))[0];
g_assert_cmpint (pango_lines_get_line_count (pango_layout_get_lines (layout)), ==, 1);
pango_line_get_extents (line, NULL, &ext1);
pango_layout_set_text (layout, "", -1);
g_assert_cmpint (pango_lines_get_line_count (pango_layout_get_lines (layout)), ==, 1);
- line = pango_lines_get_line (pango_layout_get_lines (layout), 0, NULL, NULL);
+ line = pango_lines_get_lines (pango_layout_get_lines (layout))[0];
pango_line_get_extents (line, NULL, &ext2);
g_assert_cmpint (ext1.height, ==, ext2.height);