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;
}
+1
View File
@@ -91,4 +91,5 @@ How the text system works, for the entries below: `CPTextView` does not use CSS
- Copy and paste within TextEditor with Command-C and Command-V, in one document and between documents: images, tables, including text edited in their cells, and lists are kept.
- Table cells can be edited, as a first pass.
- Pasting text with several images and a table: the table appears in place at once, and tables, images and text below a change move with their lines.
- A table wider than the text stays on its own line below the text before it when the window is narrowed, and is clipped at the right edge, without a horizontal scroll bar, as in Cocoa when text wraps to the window.
- Builds with both the legacy toolchain and capp-build.