diff options
author | Matthias Clasen <mclasen@redhat.com> | 2022-01-25 14:48:13 -0500 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2022-01-25 15:34:35 -0500 |
commit | d815d061c85ec5f403f007453c502d18f5616ea4 (patch) | |
tree | 7421c588f57824c96bb4da002f91bfe5d34bc1d6 /pango/pango-line-iter.c | |
parent | ec2958682949220f15a32066eff412d857c735c5 (diff) | |
download | pango-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.
Diffstat (limited to 'pango/pango-line-iter.c')
-rw-r--r-- | pango/pango-line-iter.c | 77 |
1 files changed, 34 insertions, 43 deletions
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; } /** |