diff options
-rw-r--r-- | pango/pango-layout.c | 16 | ||||
-rw-r--r-- | pango/pango-layout.h | 2 | ||||
-rw-r--r-- | utils/viewer-pangocairo.c | 5 |
3 files changed, 20 insertions, 3 deletions
diff --git a/pango/pango-layout.c b/pango/pango-layout.c index 5aa9ee12..86c67020 100644 --- a/pango/pango-layout.c +++ b/pango/pango-layout.c @@ -7305,6 +7305,22 @@ pango_layout_iter_get_baseline (PangoLayoutIter *iter) return iter->line_extents[iter->line_index].baseline; } +int +pango_layout_iter_get_run_baseline (PangoLayoutIter *iter) +{ + ItemProperties properties; + + if (ITER_IS_INVALID (iter)) + return 0; + + if (!iter->run) + return iter->line_extents[iter->line_index].baseline; + + pango_layout_get_item_properties (iter->run->item, &properties); + + return iter->line_extents[iter->line_index].baseline - properties.rise; +} + /** * pango_layout_iter_get_layout_extents: * @iter: a `PangoLayoutIter` diff --git a/pango/pango-layout.h b/pango/pango-layout.h index 3b30a251..e28f9295 100644 --- a/pango/pango-layout.h +++ b/pango/pango-layout.h @@ -466,6 +466,8 @@ void pango_layout_iter_get_layout_extents (PangoLayoutIter *iter, PangoRectangle *logical_rect); PANGO_AVAILABLE_IN_ALL int pango_layout_iter_get_baseline (PangoLayoutIter *iter); +PANGO_AVAILABLE_IN_1_50 +int pango_layout_iter_get_run_baseline (PangoLayoutIter *iter); G_END_DECLS diff --git a/utils/viewer-pangocairo.c b/utils/viewer-pangocairo.c index 6918d2e9..b35f6f3b 100644 --- a/utils/viewer-pangocairo.c +++ b/utils/viewer-pangocairo.c @@ -434,8 +434,7 @@ render_callback (PangoLayout *layout, pango_layout_iter_get_run_extents (iter, NULL, &rect); x_pos = rect.x; - /* FIXME: need a run baseline */ - y_pos = pango_layout_iter_get_baseline (iter); + y_pos = pango_layout_iter_get_run_baseline (iter); for (int i = 0; i < run->glyphs->num_glyphs; i++) { @@ -504,7 +503,7 @@ render_callback (PangoLayout *layout, offset = g_utf8_strlen (text, start - text); - y = pango_layout_iter_get_baseline (iter); + y = pango_layout_iter_get_run_baseline (iter); trailing = FALSE; p = start; |