From 2b6067c726947c074b1b5ae0d9d17e9671757f13 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Mon, 24 Jan 2022 23:21:54 -0500 Subject: Change trimming of extents Make pango_layout_line_get_extents return untrimmed extents, and pango_lines_get_extents trim the extents at the start/end of paragraphs. --- pango/pango-layout-line.c | 23 ++++------------------- pango/pango-lines.c | 10 +++++++++- 2 files changed, 13 insertions(+), 20 deletions(-) diff --git a/pango/pango-layout-line.c b/pango/pango-layout-line.c index 6d69067f..f7150598 100644 --- a/pango/pango-layout-line.c +++ b/pango/pango-layout-line.c @@ -916,11 +916,8 @@ pango_layout_line_justify (PangoLayoutLine *line, * * Gets the extents of the line. * - * The logical extents returned by this function always have their leading - * trimmed according to paragraph boundaries: if the line starts a paragraph, - * it has its start leading trimmed; if it ends a paragraph, it has its end - * leading trimmed. If you need other trimming, use - * [method@Pango.LayoutLine.get_trimmed_extents]. + * The logical extents returned by this function always include leading. + * If you need extents with trimmed leading, use [method@Pango.LayoutLine.get_trimmed_extents]. * * Note that the origin is at the left end of the baseline. */ @@ -931,17 +928,11 @@ pango_layout_line_get_extents (PangoLayoutLine *line, { PangoRectangle ink = { 0, }; PangoRectangle logical = { 0, }; - PangoLeadingTrim trim = PANGO_LEADING_TRIM_NONE; - - if (line->starts_paragraph) - trim |= PANGO_LEADING_TRIM_START; - if (line->ends_paragraph) - trim |= PANGO_LEADING_TRIM_END; if (line->has_extents) goto cached; - compute_extents (line, trim, &ink, &logical); + compute_extents (line, PANGO_LEADING_TRIM_NONE, &ink, &logical); line->ink_rect = ink; line->logical_rect = logical; @@ -975,14 +966,8 @@ pango_layout_line_get_trimmed_extents (PangoLayoutLine *line, PangoRectangle *logical_rect) { PangoRectangle ink = { 0, }; - PangoLeadingTrim cached_trim = PANGO_LEADING_TRIM_NONE; - - if (line->starts_paragraph) - cached_trim |= PANGO_LEADING_TRIM_START; - if (line->ends_paragraph) - cached_trim |= PANGO_LEADING_TRIM_END; - if (line->has_extents && trim == cached_trim) + if (line->has_extents && trim == PANGO_LEADING_TRIM_NONE) { *logical_rect = line->logical_rect; return; diff --git a/pango/pango-lines.c b/pango/pango-lines.c index 896a9dd8..38d2026c 100644 --- a/pango/pango-lines.c +++ b/pango/pango-lines.c @@ -430,8 +430,16 @@ pango_lines_get_extents (PangoLines *lines, Line *l = &g_array_index (lines->lines, Line, i); PangoRectangle line_ink; PangoRectangle line_logical; + PangoLeadingTrim trim = PANGO_LEADING_TRIM_NONE; + + if (l->line->starts_paragraph) + trim |= PANGO_LEADING_TRIM_START; + if (l->line->ends_paragraph) + trim |= PANGO_LEADING_TRIM_END; + + pango_layout_line_get_extents (l->line, &line_ink, NULL); + pango_layout_line_get_trimmed_extents (l->line, trim, &line_logical); - pango_layout_line_get_extents (l->line, &line_ink, &line_logical); line_ink.x += l->x; line_ink.y += l->y; line_logical.x += l->x; -- cgit v1.2.1