summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2021-08-29 22:43:23 +0000
committerMatthias Clasen <mclasen@redhat.com>2021-08-29 22:43:23 +0000
commitf7a99fd86067f0ed9baa466d0f612365462cca20 (patch)
treecc879b32eb67677a88d475fbf01efaa91a464a01
parentd37bfbfeaa900c0c95a42244a04785127f404a19 (diff)
parent6e2596ae578a22eda9794a7b23c9ac4c8cdef35b (diff)
downloadpango-f7a99fd86067f0ed9baa466d0f612365462cca20.tar.gz
Merge branch 'matthiasc/for-main' into 'main'
layout: Apply rise to cluster extents See merge request GNOME/pango!457
-rw-r--r--pango/pango-layout.c6
-rw-r--r--utils/viewer-pangocairo.c17
2 files changed, 20 insertions, 3 deletions
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);
}
}
diff --git a/utils/viewer-pangocairo.c b/utils/viewer-pangocairo.c
index a6a416ee..6918d2e9 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,
@@ -429,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++)
{
@@ -470,6 +476,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);
@@ -519,7 +526,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);
@@ -527,9 +534,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));