From c2bb4548c4864ecbf62daca65b2e833615bc1579 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Fri, 27 Aug 2021 17:08:30 -0400 Subject: carets: Fix rect for negative slopes The intention was to flip the rectangle horizontally. We do return a negative width, but we forgot to flip the origin. --- pango/pango-layout.c | 4 ++++ 1 file changed, 4 insertions(+) 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; } } } -- cgit v1.2.1 From 05f62eae063ec1cfe56cbfcc9e99b6dfa989ef90 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Fri, 27 Aug 2021 17:15:09 -0400 Subject: pango-view: Show caret slopes as well When annotating caret positions, render the diagonal of the caret position rectangle as well. --- utils/viewer-pangocairo.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) 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); } } -- cgit v1.2.1