feat: Implement in-place MText editor with formatting toolbar and live preview
MTEXT (and double-clicking an MText) now opens an in-place editor anchored at the insertion point instead of typing a single line on the command line. The editor has a two-row formatting toolbar: text style / font / height, bold, italic, underline, overline, strike, upper/lowercase and a colour dropdown on top; oblique angle, width factor, character spacing, paragraph alignment, justification, line spacing and OK/Cancel below. Character toggles wrap the selection in DXF inline codes; global fields apply as leading runs or entity properties. Editing is shown in the editor's own area, not on the drawing: a Code/Preview toggle switches between the raw text input and a rendered preview canvas that draws the tessellated glyph strokes at real size, scrolling when the text outgrows the view. The MText box keeps a fixed width so text wraps to the next line instead of stretching into one line. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
de08bd598c
commit
a5ad0666ce
4 changed files with 75 additions and 43 deletions
|
|
@ -111,6 +111,9 @@ pub struct MTextEditorState {
|
|||
pub rect_width: f64,
|
||||
/// `Some` when editing an existing entity; `None` for a fresh MText.
|
||||
pub editing: Option<Handle>,
|
||||
/// When true the panel shows the rendered preview; when false the raw
|
||||
/// code/text input. Toggled so the two never stack.
|
||||
pub show_preview: bool,
|
||||
/// Canvas-space anchor where the toolbar + text area are drawn (the
|
||||
/// insertion-point click position).
|
||||
pub screen_anchor: iced::Point,
|
||||
|
|
@ -132,6 +135,7 @@ impl MTextEditorState {
|
|||
width: "1".to_string(),
|
||||
char_space: "0".to_string(),
|
||||
preview_wires: Vec::new(),
|
||||
show_preview: false,
|
||||
attachment: AttachmentPoint::TopLeft,
|
||||
line_spacing: 1.0,
|
||||
// Default box ~20 characters wide; overwritten with the entity's
|
||||
|
|
|
|||
Loading…
Reference in a new issue