Commit Graph
1519 Commits
Author SHA1 Message Date
Dylan M. Taylor 637efc238c merge main into fix/sec-render-text-and-pdf-budgets 2026-11-11 00:35:51 +00:00
Michael Higginsandmocenigo 2f8f186188 macOS: file dialogs no longer run inside the window's event handler (#1534)
On macOS the Open and Save panels ran modally inside winit's event handler, and resizing one aborted the app (#1527). Every file dialog now goes through CadApp::pick_then / pick_then_open. On macOS, Services::start_pick shows the dialog as a sheet on the window and the answer is acted on in a later frame. The answer is bound to the drawing that asked for it. Windows and Linux are unchanged.

Fixes #1527

Co-authored-by: mocenigo <4894657+mocenigo@users.noreply.github.com>
2026-11-10 19:20:25 +01:00
.CooCoo 6f0f1fefa8 Fonts: the MTEXT strip test expects a short \U+ escape to keep its digits (#2954)
strips_formatting expected `\U+12` to strip to nothing. plain_mtext
dropped every unknown code up to the next `;` when that assertion was
written. #1036 limits this to the codes in takes_arg, and `\U` is not
one of them, so plain_mtext returns `+12`. The layout and paragraph
paths give the same text, and
unicode_escapes_are_decoded_in_every_parser already expects it.

The test has failed on main since both changes merged, and the failure
stops the gate at its test step. The test module now also checks the
short escape in both layout paths.
2026-11-10 12:01:17 +01:00
Dylan M. Taylor a3d9348f63 Merge pull request #2951 from dotCooCoo/chore/craft-update-1b34eba41
Updates: take craft-update from craft-libs main at 1b34eba41
2026-11-08 23:01:58 -05:00
dotCooCoo 3074f18960 Updates: take craft-update from craft-libs main at 1b34eba41 2026-11-08 19:45:36 -08:00
Dylan M. Taylor 10ffb7c7bd Merge pull request #2947 from dotCooCoo/chore/craft-update-updater-fixes
Updates: the updater reports installing, ready, installed and failed, and installs at exit
2026-11-08 22:12:58 -05:00
skylar taylor-barrick 4744b4cffb Merge pull request #1034 from vangel76/fix/fonts-bidi-hardening
fix(fonts): paragraph direction skips bidi isolates; harakat no longer block the Lam-Alef ligature
2026-11-09 01:41:49 +01:00
skylar taylor-barrick d9e62df1dd Merge pull request #1273 from vangel76/fix/fonts-mtext-width-factor
fix(fonts): MTEXT \W…x multiplies the width factor; document the atom cap
2026-11-09 01:41:42 +01:00
FredApps 9bd7f8f8f1 Merge pull request #819 from vangel76/docs/gaps-audit-2026-10-12
docs: re-audit gaps.md and parity docs against main
2026-11-09 00:07:54 +01:00
FredApps d847eac134 Merge pull request #1036 from vangel76/fix/fonts-mtext-hardening
fix(fonts): MTEXT keeps the text after an unterminated code; bound oblique, line spacing and relative heights
2026-11-09 00:07:20 +01:00
FredApps cd71385da9 Merge pull request #2436 from vangel76/perf/region-build-no-siphash-set
Region build: test candidate pairs once in their lowest shared cell
2026-11-09 00:06:43 +01:00
FredApps 004cbecd48 Merge pull request #2435 from vangel76/perf/spline-solve-band
perf(geom): limit the spline fit solver to the matrix band
2026-11-09 00:05:17 +01:00
FredApps 0e7e0f59f0 Merge pull request #2434 from vangel76/perf-nurbs-derivative-stack
perf(geom): make NURBS derivative allocation-free up to degree 10
2026-11-09 00:04:03 +01:00
FredApps 6cb8e9b1a0 Merge pull request #2755 from vangel76/contributors-vangel76
contributors: set names for vangel76
2026-11-09 00:02:16 +01:00
dotCooCoo 3a9aebc210 Updates: the updater reports installing, ready, installed and failed, and installs at exit
craft-update moves from craft-libs c5a1cbfb to c7c84230, a branch that is
craft-libs main at 0a9d1f48 with storytold/craft-libs#687 and #696 merged
in. Cargo.lock changes the craft-update entry and drops zopfli from zip.

The check result window now shows whenever the updater's status is not
idle, not only after Help > Check for Updates, and never over the startup
prompt. At the first start after an update it reports that the update
installed or why it failed. Restart to Update calls
Updater::restart_to_update. The install helper starts when the app exits
and drops the updater, so a canceled close keeps the update ready.
2026-11-08 12:45:18 -08:00
FredApps 909af5e389 Merge pull request #2939 from FredApps/fix/freebsd-arm64-alpha
Fix FreeBSD ARM64 all-targets test build
2026-11-08 17:24:24 +01:00
FredApps 78810069c7 Merge main and gate the remaining DWG-only unit test 2026-11-08 17:02:58 +01:00
FredApps bd4a47491a Merge pull request #2919 from mkzung/fix/dxf-hard-owned-objects
DXF/DWG: an object a kept object holds by a hard owner reference is kept
2026-11-08 16:57:04 +01:00
FredApps 54c973c919 Merge main to validate proxy preservation and hard-owner retention together 2026-11-08 16:47:57 +01:00
FredApps 53962a5cd5 Merge pull request #2654 from mkzung/fix/opaque-proxy-roundtrip
DWG: keep opaque registered entities and their source classes
2026-11-08 16:44:27 +01:00
Dylan M. Taylor 38bf0300fe fix(render): charge boundary transforms and scanline sorts to the shared hatch budget 2026-11-08 10:33:15 -05:00
FredApps 1434d1017b Use public DXF codecs in the streaming class scanner 2026-11-08 16:31:40 +01:00
FredApps baf2424164 Keep hard-owner liveness monotonic and deduplicate holders in linear time 2026-11-08 16:31:08 +01:00
FredApps ec09c87c43 Keep DXF regressions enabled without the DWG bridge 2026-11-08 16:26:26 +01:00
FredApps a0dfe07f5a Preserve decoded proxy class identities through the DWG bridge 2026-11-08 16:25:00 +01:00
FredApps 9ec5728159 Fix FreeBSD ARM64 test dependency gating 2026-11-08 16:11:26 +01:00
mkzungandClaude Opus 5.5 42490afe8e Merge main into fix/opaque-proxy-roundtrip
Main now has its own proxy class handling for DWG saves (`proxy_classes`, from bf137e2c,
31935157 and 946af874) and the application object conversion of #2917. This branch is
brought onto that:

- Cargo.lock, crates/dwg/Cargo.toml and xtask/src/layers.rs are main's. `dwg` no longer
  depends on `dxf`: the source classes are read from the bridge's ASCII DXF by a bounded
  scan in `proxy_transport::source_classes`, as main's `dxf_class_names` reads their names.
- Saving as DWG 2013 or later restores the source classes in their places (duplicate
  names and metadata kept) when every CLASS record can be written back. Otherwise (before
  2013, a binary DXF, a malformed or unused bad CLASS) main's `proxy_classes` runs: proxies
  are matched by name or left out and counted as unwritten. Nothing returns an error any
  more, so a drawing with proxies saves in its own pre-2013 version, without them, as the
  save report says. A proxy whose number names no source class is left out and counted.
- The loss report is main's `not_saved_as` (`Foreign::proxy_class`);
  `preserves_proxy_entity` and this branch's report test are gone.
- On DWG read, `prepare` runs after `application_objects`, so the proxy objects that makes
  are numbered as the DXF numbers them. It uses main's `proxy_dwg_version`. A registered
  entity with decoded properties and opaque data now stays as read, as on main, and a read
  note names it, instead of being dropped.

Tests: `cargo test -p cadcraft-dwg` 37 passed, `-p cadcraft-io` all passed (25 ignored),
`-p cadcraft-doc`, `-p cadcraft-engine --test save_reports_not_saved` and `--test it`
passed; clippy `-p cadcraft-dwg -p cadcraft-io -p cadcraft-doc -p cadcraft-engine
--all-targets -D warnings`, fmt, `cargo xtask layers` and the wasm32 check of cadcraft-io
pass. `registered_proxy` now checks that a pre-2013 DWG save leaves the proxy out and
keeps the rest; main's proxy tests in crates/io/src/tests.rs pass unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H43qQA41CJLauqXnPgBQ7r
2026-11-08 14:27:18 +00:00
mkzungandClaude Opus 5.5 adf02f9f04 DXF/DWG: a null-owner object goes with a hard owner that is kept
hard_owners took the first object naming a null-owner object in a 360 as its owner, kept or not.
When an object that is left out named it first, the reader dropped the object, though a kept one
held it too, and the save wrote the kept holder's 360 as 0.

hard_owners now lists every object naming it, in file order, and owner_of takes the first of
them that is kept, else the first. The read (retained_objects) and the write liveness pass in
finish run until what they keep settles; a file where no object has two hard owners takes one
pass, as before. The write pass no longer keeps a converted copy of every object's groups.

The test adds an object nothing keeps that names the held record before its holder does: the
held record stays with the holder and the stray object is dropped, DXF and DWG, twice. It fails
before this change ("DXF 1: no record held").

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H43qQA41CJLauqXnPgBQ7r
2026-11-08 14:15:03 +00:00
FredApps e56cc4beeb Merge pull request #2917 from mkzung/fix/dwg-application-object-proxies
DWG: another application's objects are kept as proxy objects of their class
2026-11-08 14:52:50 +01:00
Luis 7a9ec9bae3 Release: refresh contributor credits for each release (#2880) (#2881)
About > Contributors still showed an old snapshot, because nothing
regenerated contributors/contributors.json before a release. Opt in to
the shared refresh from craft-common-actions: a read-only credits job
regenerates the snapshot for the release commit, and the shared release
workflow installs it before every source build. The snapshot is not
committed back.
2026-11-08 01:44:24 +01:00
mkzungandClaude Opus 5.5 1363afb883 DXF/DWG: an object a kept object holds by a hard owner reference is kept
An object whose owner (group 330) is null but which another kept object
holds by a hard owner reference (group 360), as one application's proxy
object held by another, broke the owner chain the reader and writer follow
to decide what to keep: it was dropped, and the holder kept a reference to
nothing. Such an object's owner is now the object that hard-owns it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H43qQA41CJLauqXnPgBQ7r
2026-11-07 23:32:34 +00:00
mkzungandClaude Opus 5.5 3f9e45f726 DWG: another application's objects are kept as proxy objects of their class
An object of another application's class that acadrust has no model for is
read only as its DWG record (ObjectType::Unknown), which its DXF writer
leaves out. The DWG to DXF bridge lost every such object with no note, and
the references to it went too (an extension dictionary entry naming the
object, say).

Each one is now carried as a proxy object of its class (ACAD_PROXY_OBJECT):
the record is split into its common object data (owner, reactors, extension
dictionary) and the streams after it (data bits, R2007+ strings, object
references), as the Open Design Specification for .dwg describes them. The
references are read to the end of the handle stream (to its exact length
from R2010 on), null ones too: a null reference is an empty field, and the
references after it belong to the next fields. Objects of the drawing
database's own classes, and records that don't split, stay as they were and
are named in a note.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H43qQA41CJLauqXnPgBQ7r
2026-11-07 23:32:34 +00:00
vangel76andClaude Sonnet 5.5 5ece420543 docs: XCLIP, existing-MTEXT editing and Vietnamese are shipped; date the 245/491 and 233/491 references
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 18:18:39 +01:00
vangel76 bd37c89ca1 Merge upstream/main into docs/gaps-audit-2026-10-12 2026-11-07 18:17:35 +01:00
vangel76andClaude Sonnet 5.5 62caaa30d9 docs: alpha-gate drafting gap, POLARMODE bit, DWG failsafe boundary, ACIS wording, breadth metric label
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-07 16:33:15 +01:00
FredApps 486d558a78 Merge pull request #2887 from helenkwok/web/page-api
cadcraft-web: window.cadcraft, the page command API from craft-web-api
2026-11-07 15:36:49 +01:00
Helen Kwok 6304abd8f0 cadcraft: keep the ui.screenshot web note inside the table row 2026-11-07 15:29:59 +08:00
Helen Kwok 07b6b8c53a cadcraft: document that ui.screenshot ignores path in the web build 2026-11-07 10:28:05 +08:00
Helen Kwok 14a6cc3cdc cadcraft-ui-egui: ui.screenshot returns the PNG inline on wasm
Without a path the screenshot was written into a private temp directory, and std::env::temp_dir panics on wasm32 (no file system), which stopped the whole web app: the page's call never got a reply and nothing after it ran. On wasm the PNG now comes back inline (pngBase64, width, height, bytes), as ui.render's does. Native builds are unchanged.
2026-11-07 08:11:48 +08:00
Helen Kwok 85b35fc5b9 cadcraft-web: window.cadcraft, the page command API from craft-web-api
The web shell queues the page's calls as control requests (the channel the desktop control server uses) and answers them on the next frame. PendingReply gains try_reply, so a transport that cannot block can poll it, and cancels a request the app has not started when it is dropped, as a timed-out wait does: the page was told the call failed, so the app skips it. The API is installed in every mode; opening, saving, the file name and the unsaved flag stay with the host messages.
2026-11-07 07:59:36 +08:00
Tanish Manku 865fa9afb0 Merge pull request #2874 from storytold/stack/s3
Stage 1 stack 3: land #2403, #1105, #1002, #1908, #1907, #2134, #2371
2026-11-06 15:33:47 -07:00
Tanish Manku 1452ab6f9f Stack 3: CodeRabbit on #2874: editor limits for braces and deep nesting, OK on a rewritten but unedited text, round-off next to zero in the palette, test folder cleanup 2026-11-06 14:58:21 -07:00
Tanish Manku 0140e275f3 Stack 3: the multileader save test saves as 2007 DXF, where a multileader stays one 2026-11-06 14:33:18 -07:00
Tanish Manku 098fa7fd80 Stack 3: #1105's multileader height field takes #2403's ids as they are 2026-11-06 13:44:57 -07:00
Tanish Manku 32db96f5e3 Stage 1 stack 3: review fixes on #1105, #1002, #1908, #1907, #2134, #2371 2026-11-06 13:35:40 -07:00
Tanish Manku 4e36021812 Merge branch 'stk-2371' into stack/s3
# Conflicts:
#	crates/ui-egui/src/i18n/it.tsv
#	crates/ui-egui/src/i18n/uk.tsv
#	crates/ui-egui/src/options.rs
#	docs/gaps.md
#	docs/ui-parity.md
2026-11-06 13:33:05 -07:00
Tanish Manku fafc9e1910 Merge branch 'stk-2134' into stack/s3
# Conflicts:
#	crates/ui-egui/src/i18n/fr.tsv
#	crates/ui-egui/src/i18n/uk.tsv
#	crates/ui-egui/src/lib.rs
2026-11-06 13:32:34 -07:00
Tanish Manku a42760af80 Merge branch 'stk-1907' into stack/s3
# Conflicts:
#	docs/customization.md
2026-11-06 13:32:16 -07:00
Tanish Manku b1263ed3a4 Merge branch 'stk-1908' into stack/s3 2026-11-06 13:31:50 -07:00
Tanish Manku 141a1ac8cd Merge branch 'stk-1002' into stack/s3
# Conflicts:
#	crates/engine/src/cmd/modify2/textedit.rs
#	crates/ui-egui/src/mtext_editor.rs
2026-11-06 13:29:50 -07:00