AppKit: Maintain proper line height for overflowing attachments in CPTypesetter

When text attachments (such as tables or wide images) exceeded container width,
`CPTypesetter` correctly forced a line break following the attachment but
erroneously reverted the line's height and baseline to pre-attachment metrics.
Consequently, oversized attachments rendered on the baseline of preceding text,
causing them to overlap and obscure content above them in narrowed viewports.

* AppKit/CPTextView/CPTypesetter.j:
  - Update line layout logic to incorporate attachment dimensions into line height
    and baseline calculations when line breaks encompass overflowing attachments.

* Tests/Manual/TextEditor/WORKLIST.md:
  - Mark wide/overflowing table layout tests as completed.

Attachments and tables wider than the text container now correctly occupy their own distinct lines without overlapping preceding content.
This commit is contained in:
David Richardson committed 2026-10-24 15:55:54 -06:00
1 parent b05c912109
commit 9b5a0fbbfb
2 files changed
+11

No files matched your search

+10
View File
@@ -510,6 +510,16 @@ var _CPTypesetterDecimalSeparator = function()
if (viewSize.height > _lineHeight)
_lineHeight = viewSize.height - descent + leading;
// An attachment wider than the container stays on the line it overflows, so a break
// there keeps the line's height and baseline with the attachment's size applied.
// Otherwise the attachment would be placed on the baseline of the text before it,
// and drawn above its line.
if (CPMaxRange(wrapRange) === CPMaxRange(lineRange))
{
wrapRange._height = _lineHeight;
wrapRange._base = _lineBase;
}
ascent = viewSize.height;
break;
}