From 41eac9414a8ac4f4a72eb9c57fcb3df5e0945731 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sun, 29 Aug 2021 18:04:23 -0400 Subject: pango-view: Don't draw the empty run --- utils/viewer-pangocairo.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/utils/viewer-pangocairo.c b/utils/viewer-pangocairo.c index a6a416ee..ce1e1983 100644 --- a/utils/viewer-pangocairo.c +++ b/utils/viewer-pangocairo.c @@ -346,8 +346,13 @@ render_callback (PangoLayout *layout, iter = pango_layout_get_iter (layout); do { + PangoLayoutRun *run; PangoRectangle rect; + run = pango_layout_iter_get_run (iter); + if (!run) + continue; + pango_layout_iter_get_run_extents (iter, NULL, &rect); cairo_rectangle (cr, (double)rect.x / PANGO_SCALE - lw / 2, -- cgit v1.2.1 From 9a9b9a3bc5e4b63c66a06a8361e0c19de22e6868 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sun, 29 Aug 2021 18:09:25 -0400 Subject: layout: Apply rise to cluster extents This has been broken all along. :( --- pango/pango-layout.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pango/pango-layout.c b/pango/pango-layout.c index 4235b7f3..5aa9ee12 100644 --- a/pango/pango-layout.c +++ b/pango/pango-layout.c @@ -7093,6 +7093,8 @@ pango_layout_iter_get_cluster_extents (PangoLayoutIter *iter, PangoRectangle *ink_rect, PangoRectangle *logical_rect) { + ItemProperties properties; + if (ITER_IS_INVALID (iter)) return; @@ -7105,6 +7107,8 @@ pango_layout_iter_get_cluster_extents (PangoLayoutIter *iter, return; } + pango_layout_get_item_properties (iter->run->item, &properties); + pango_glyph_string_extents_range (iter->run->glyphs, iter->cluster_start, iter->next_cluster_glyph, @@ -7115,6 +7119,7 @@ pango_layout_iter_get_cluster_extents (PangoLayoutIter *iter, if (ink_rect) { ink_rect->x += iter->cluster_x; + ink_rect->y -= properties.rise; offset_y (iter, &ink_rect->y); } @@ -7122,6 +7127,7 @@ pango_layout_iter_get_cluster_extents (PangoLayoutIter *iter, { g_assert (logical_rect->width == iter->cluster_width); logical_rect->x += iter->cluster_x; + logical_rect->y -= properties.rise; offset_y (iter, &logical_rect->y); } } -- cgit v1.2.1 From 52db8f0802f6dde2be1af83006932dd2d8685c97 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sun, 29 Aug 2021 18:23:51 -0400 Subject: pango-view: More careful numbering Don't overwrite caret position numbers with different numbers. --- utils/viewer-pangocairo.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/utils/viewer-pangocairo.c b/utils/viewer-pangocairo.c index ce1e1983..1083e33c 100644 --- a/utils/viewer-pangocairo.c +++ b/utils/viewer-pangocairo.c @@ -475,6 +475,7 @@ render_callback (PangoLayout *layout, const PangoLogAttr *attrs; int n_attrs; int offset; + int num = 0; /* draw the caret positions in purple */ cairo_save (cr); @@ -524,7 +525,7 @@ render_callback (PangoLayout *layout, cairo_close_path (cr); cairo_fill (cr); - char *s = g_strdup_printf ("%d", i + trailing); + char *s = g_strdup_printf ("%d", num); cairo_set_source_rgb (cr, 0, 0, 0); cairo_move_to (cr, x / PANGO_SCALE - 5, y / PANGO_SCALE + 15); cairo_show_text (cr, s); @@ -532,9 +533,13 @@ render_callback (PangoLayout *layout, } if (i < run->item->num_chars) - p = g_utf8_next_char (p); + { + num++; + p = g_utf8_next_char (p); + } else trailing = TRUE; + } } while (pango_layout_iter_next_run (iter)); -- cgit v1.2.1 From 6e2596ae578a22eda9794a7b23c9ac4c8cdef35b Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sun, 29 Aug 2021 18:34:55 -0400 Subject: pango-view: Improve glyph extents We can't currently position them correctly for shifted runs. But at least we can get it right for the runs on the baseline. --- utils/viewer-pangocairo.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/utils/viewer-pangocairo.c b/utils/viewer-pangocairo.c index 1083e33c..6918d2e9 100644 --- a/utils/viewer-pangocairo.c +++ b/utils/viewer-pangocairo.c @@ -434,7 +434,8 @@ render_callback (PangoLayout *layout, pango_layout_iter_get_run_extents (iter, NULL, &rect); x_pos = rect.x; - y_pos = rect.y + pango_layout_iter_get_baseline (iter); + /* FIXME: need a run baseline */ + y_pos = pango_layout_iter_get_baseline (iter); for (int i = 0; i < run->glyphs->num_glyphs; i++) { -- cgit v1.2.1