[pango/fix-strikethrough-averaging] renderer: Fix averaging of strikethroughs
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [pango/fix-strikethrough-averaging] renderer: Fix averaging of strikethroughs
- Date: Mon, 5 Jul 2021 23:19:21 +0000 (UTC)
commit 7549d36af2e79ebd86ae9cc05a86bfdc22dfebf8
Author: Matthias Clasen <mclasen redhat com>
Date: Mon Jul 5 19:16:25 2021 -0400
renderer: Fix averaging of strikethroughs
In 85bdfead1b36945db251 I made consecutive runs average
their strikeout positions, but I did handle the accounting
properly, causing previous runs to influence the strikeout
of later runs, if we have to draw them separately (due to
color change).
It would be nicer to average even across color changes and
draw the line continuously in that case as well, but that
would require two passes over the runs.
Fixes: #574
pango/pango-renderer.c | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)
---
diff --git a/pango/pango-renderer.c b/pango/pango-renderer.c
index 49eec91d..f575707f 100644
--- a/pango/pango-renderer.c
+++ b/pango/pango-renderer.c
@@ -282,18 +282,22 @@ draw_strikethrough (PangoRenderer *renderer,
LineState *state)
{
PangoRectangle *rect = &state->strikethrough_rect;
- gboolean strikethrough = state->strikethrough;
int num_glyphs = state->strikethrough_glyphs;
- state->strikethrough = FALSE;
-
- if (strikethrough)
+ if (state->strikethrough)
pango_renderer_draw_rectangle (renderer,
PANGO_RENDER_PART_STRIKETHROUGH,
rect->x,
rect->y / num_glyphs,
rect->width,
rect->height / num_glyphs);
+
+ state->strikethrough = FALSE;
+ state->strikethrough_glyphs = 0;
+ rect->x += rect->width;
+ rect->width = 0;
+ rect->y = 0;
+ rect->height = 0;
}
static void
@@ -336,8 +340,6 @@ handle_line_state_change (PangoRenderer *renderer,
rect->width = state->logical_rect_end - rect->x;
draw_strikethrough (renderer, state);
state->strikethrough = renderer->strikethrough;
- rect->x = state->logical_rect_end;
- rect->width = 0;
}
}
@@ -484,7 +486,6 @@ add_strikethrough (PangoRenderer *renderer,
}
else
{
- draw_strikethrough (renderer, state);
*current_rect = new_rect;
state->strikethrough = TRUE;
state->strikethrough_glyphs = num_glyphs;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]