In Shift-JIS, Big5 and GBK a double-byte character's trail byte can be 0x5C, the
backslash (表 95 5C, ソ 83 5C, 許 B3 5C, 乗 81 5C). Written as its bytes right
before U+ or M+, the file holds a backslash byte followed by U+, an escape for a
reader that looks for escapes before it decodes the code page. CADCraft decodes
first, so it read back right, but such a character there is now written as a
\U+XXXX escape and the file reads the same either way. Elsewhere it stays as
its bytes. ANSI_949 has no such trail byte.
Suggested by austin62jake on #1693.
main split dxf_write.rs into dxf_write/ (736a834): the code_page change moves to
dxf_write/header.rs, re-exported for the writer in lib.rs. No logic change.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
crates/dxf/src/lib.rs: #2050's rule (a backslash that would start \U+ or \M+ is
written as \U+005C) goes into push_string, so it holds for UTF-8, code page and
pure ASCII output, the UTF-8 fallback included. A test checks literal escapes
next to code page text in ASCII and binary.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
* Pin craft-libs at craft-libs#312's head (4dc543c) for the dock-column move
* Side panels dock in left and right dock columns
Tool Sets sits in a left dock column and Layers above Properties in a right
one, at the widths of the old side frames. Palettes dock only into those
columns: a window edge without a dock makes one, and neither the drawing nor
the top and bottom edges take a drop. A palette opened with no recorded place
goes into its dock group (External References below Properties). Iconic
columns show CADCraft's own code-drawn icons.
* Workspace file: dock layout version; split-frame layouts reset to the default
The workspace file saves dockingVersion next to the panel layout. A layout
saved without it, or with an older one, is dropped with its hidden panels on
load; the other workspace settings are kept.
* Floating panels open in their own OS windows on the desktop
- craft-ui's native-windows feature is on for the desktop app (not the web build)
and for the UI crate's tests.
- While the Save changes prompt, Drawing Recovery or another egui modal is up,
the panels' OS windows take no input.
- Keys, text and clipboard events typed in a panel's OS window go into the main
window's next input, so shortcuts, the command line and the canvas get them.
- Files dropped on a panel's OS window open like files dropped on the main window.
* Floating windows stay below the macOS title row
A drag in that row moves the whole app window, so a floating panel drawn over it
could not be moved or used. The dock area keeps floating windows, flyouts and
drag ghosts below it.
* Opening a floating panel from a menu or command brings its window to the front
* Workspace saves are spaced at least 500 ms apart, so dragging a floating window doesn't write the file every frame
* Pin craft-libs at #312's head b6d35e28
* Pin craft-libs at #313's head cdc67131 (result-rectangle drop preview)
* The title row is craft-window's title bar
Its empty part moves the window and follows the macOS double-click setting,
and does nothing in full screen. On macOS the window's movable flag follows
the pointer, so AppKit's title-band drag leaves the window still under the
row's controls and under floating panels. Floating panels may therefore go
over the title row again.
craft-window is pinned at craft-libs#316's head, which is not stacked on the
craft-ui pin.
* Pin craft-libs at 189b4ffe (#313 and #316 merged)
* macOS menu choices and their shortcuts run at once
A menu choice is no window event, so the app ran it only at its next frame
for another reason: File ▸ Close (Cmd+W) on an edited drawing showed
"Save changes?" and dimmed the floating palettes a second or two late. The
menu's event handler now wakes the app.
* Pin craft-libs at pin-round3 d24e4bcc
* Cargo.lock and the native-window test helper after the egui 0.37 merge
* Pin craft-libs at #334 (4638095): the title bar's empty area takes no keyboard focus
* Pin craft-libs at main 271594c0
* A modifier the main window changes while panel keys are forwarded is the one put back
* macOS Edit menu keys edit a focused text field
The menu bar takes ⌘C, ⌘X, ⌘V, ⌘A, ⌘Z and ⇧⌘Z before any window sees them,
so they ran Copy, Paste or Undo on the drawing while the user was typing in a
field. While a text field has the keyboard, in the main window or a floating
panel's own window, the menu now hands the field its key instead.
craft-libs is pinned at #318's head for typing_window and send_keys.
* Edit menu items a text field takes stay enabled while one has the keyboard
Edit ▸ Paste follows the drawing clipboard, so with nothing copied in the
drawing it was greyed out even while a text field could paste.
Pure extraction, no behaviour change: same order of side effects, same
early returns and error values. Clears cognitive-complexity findings on
tangent_circles, Model::build_budgeted, DimStyle::apply_fields and
run_rectang2 (S3776), and replaces a redundant closure with a method
reference in menus.rs (S1612).
Pure extraction, no behaviour change: same order of side effects, same
early returns and error values. Clears cognitive-complexity findings on
AreaM::input, explode_kind, hatch sweep, the COMPARE overlay paint and
the Files options tab (S3776).
Pure extraction, no behaviour change: same order of side effects, same
budget charges, same early returns and error values. Clears
cognitive-complexity findings on glob_inner, the PDF test ops scanner,
snap_ends, the loops inquiry run and build_budgeted (S3776).
Pure extraction, no behaviour change: same order of side effects, same
early returns and error values. Clears cognitive-complexity findings on
pdf::marks, dxf_read::read_budgeted, parse_entities,
entity_with_table_budget and Objects::apply (S3776).
* refactor: replace wildcard imports with explicit ones (S2208, batch_02)
* Fix unused and missing imports the batch's CI gate reported
Remove two unused imports and restore the json macro and resolve_alias
in test modules that the explicit import lists had dropped.
* fix: keep the imports the explicit lists still need after the rebase
* fix(draw2): import machines, distinct_points and ok from cmd