feat(mtext): character-level text selection on the preview
The rendered MText preview is now interactive: drag across glyphs to select a character range and apply toolbar formatting (bold, italic, underline, overline, strike, case, alignment) to exactly those characters. The text layout gains an opt-in pass that emits one world-space box per visible character carrying its reading-order index; the editor maps those boxes into the preview frame, hit-tests pointer drags against them, and highlights the selection. Formatting splices the matching inline codes into the raw value at the selected byte range (mapped via a code-aware visible- character scanner). With no preview selection the Edit-box path is unchanged. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
a07af32714
commit
32136dd9dd
9 changed files with 443 additions and 31 deletions
|
|
@ -3546,6 +3546,20 @@ impl OpenCADStudio {
|
|||
self.rebuild_mtext_preview();
|
||||
Task::none()
|
||||
}
|
||||
Message::MTextSelStart(off) => {
|
||||
if let Some(ed) = self.mtext_editor.as_mut() {
|
||||
ed.sel_anchor = off;
|
||||
ed.sel = Some((off, off));
|
||||
}
|
||||
Task::none()
|
||||
}
|
||||
Message::MTextSelTo(off) => {
|
||||
if let Some(ed) = self.mtext_editor.as_mut() {
|
||||
let a = ed.sel_anchor;
|
||||
ed.sel = Some((a.min(off), a.max(off)));
|
||||
}
|
||||
Task::none()
|
||||
}
|
||||
Message::MTextOk => {
|
||||
self.mtext_commit();
|
||||
Task::none()
|
||||
|
|
|
|||
Loading…
Reference in a new issue