summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2021-08-27 21:23:42 +0000
committerMatthias Clasen <mclasen@redhat.com>2021-08-27 21:23:42 +0000
commit3c6176158e76399e4e5520efa744b9a88d3d9b64 (patch)
tree1e6a45587225e1c38369c09ac480b6b89b01080b
parentd0ff45ecf45b4f81d5d05e545a36a885b6a33b7a (diff)
parent05f62eae063ec1cfe56cbfcc9e99b6dfa989ef90 (diff)
downloadpango-3c6176158e76399e4e5520efa744b9a88d3d9b64.tar.gz
Merge branch 'matthiasc/for-main' into 'main'
carets: Fix rect for negative slopes See merge request GNOME/pango!447
-rw-r--r--pango/pango-layout.c4
-rw-r--r--utils/viewer-pangocairo.c19
2 files changed, 23 insertions, 0 deletions
diff --git a/pango/pango-layout.c b/pango/pango-layout.c
index f88581f1..ac396ba0 100644
--- a/pango/pango-layout.c
+++ b/pango/pango-layout.c
@@ -2718,12 +2718,16 @@ pango_layout_get_caret_pos (PangoLayout *layout,
{
strong_pos->x += descender * slope_inv;
strong_pos->width = strong_pos->height * slope_inv;
+ if (slope_inv < 0)
+ strong_pos->x -= strong_pos->width;
}
if (weak_pos)
{
weak_pos->x += descender * slope_inv;
weak_pos->width = weak_pos->height * slope_inv;
+ if (slope_inv < 0)
+ weak_pos->x -= weak_pos->width;
}
}
}
diff --git a/utils/viewer-pangocairo.c b/utils/viewer-pangocairo.c
index 1bc9f025..b010c3f3 100644
--- a/utils/viewer-pangocairo.c
+++ b/utils/viewer-pangocairo.c
@@ -534,6 +534,25 @@ render_callback (PangoLayout *layout,
while (pango_layout_iter_next_run (iter));
pango_layout_iter_free (iter);
+ const char *text = pango_layout_get_text (layout);
+ int length = g_utf8_strlen (text, -1);
+ for (int i = 0; i <= length; i++)
+ {
+ PangoRectangle rect;
+ pango_layout_get_caret_pos (layout, i, &rect, NULL);
+
+ cairo_move_to (cr,
+ (double)rect.x / PANGO_SCALE - lw / 2
+ + (double)rect.width / PANGO_SCALE + lw,
+ (double)rect.y / PANGO_SCALE - lw / 2);
+ cairo_line_to (cr,
+ (double)rect.x / PANGO_SCALE - lw / 2,
+ (double)rect.y / PANGO_SCALE - lw / 2
+ + (double)rect.height / PANGO_SCALE + lw);
+ cairo_stroke (cr);
+
+ }
+
cairo_restore (cr);
}
}