[pango/line-breaking-fixes3: 2/4] Fix line-break accounting more
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [pango/line-breaking-fixes3: 2/4] Fix line-break accounting more
- Date: Mon, 15 Nov 2021 13:40:27 +0000 (UTC)
commit 3a566950b516386b25fa028bee73d524dd9ada92
Author: Matthias Clasen <mclasen redhat com>
Date: Sun Nov 14 18:35:50 2021 -0500
Fix line-break accounting more
When looking for breakpoints, we were assuming that
there is no point to keep looking forward once we
hit a spot where the broken off part is too long.
But with hyphen insertion, that is no longer true,
necessarily. Consider 'bli '. Breaking after 'bl'
will insert 'bl-', which might be longer than
'bli', which is what will be inserted when we
break after the i.
To fix this, keep looking for breakpoints as long
as there is still a chance to find one.
pango/pango-layout.c | 16 +++++++++++-----
1 file changed, 11 insertions(+), 5 deletions(-)
---
diff --git a/pango/pango-layout.c b/pango/pango-layout.c
index 50e6ddeb..656bfb18 100644
--- a/pango/pango-layout.c
+++ b/pango/pango-layout.c
@@ -3951,16 +3951,22 @@ process_item (PangoLayout *layout,
{
extra_width = find_break_extra_width (layout, state, num_chars);
- if (width + extra_width > state->remaining_width && break_num_chars < item->num_chars)
- break;
+ if (MIN (width + extra_width, width) > state->remaining_width && break_num_chars < item->num_chars)
+ {
+ break;
+ }
/* If there are no previous runs we have to take care to grab at least one char. */
if (can_break_at (layout, state->start_offset + num_chars, retrying_with_char_breaks) &&
(num_chars > 0 || line->runs))
{
- break_num_chars = num_chars;
- break_width = width;
- break_extra_width = extra_width;
+ if (width + extra_width <= state->remaining_width ||
+ break_num_chars >= last_break_char)
+ {
+ break_num_chars = num_chars;
+ break_width = width;
+ break_extra_width = extra_width;
+ }
}
width += state->log_widths[state->log_widths_offset + num_chars];
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]