* Update egui/eframe to 0.37 (WIP) egui, eframe and egui-wgpu 0.36 -> 0.37. SolidCraft's egui-wgpu patch is rebased onto 0.37.0; the vendored accesskit_macos is dropped (0.27.2 has the #7535 fix). Not finished: 36 solidcraft-ui-egui lib tests fail, and the full lib run crashes with SIGSEGV when tests run in parallel. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Tests: clear texture deltas that egui 0.37 refuses to drop Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Drop non-finite pointer input before egui; keep test time monotonic egui 0.37 debug-asserts on NaN wheel deltas, on time moving backwards in the pointer history, and on add_space inside a Grid. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Hold a click that follows typing in the same frame until the next frame egui 0.37 drops a field's focus on a click elsewhere when the field first reads its style, before it reads the frame's typing, so text typed in the frame of a click was lost. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Name a document tab's close button "Close tab" egui 0.37 names an unnamed widget after its tooltip, so the tab's × became a second control named Close beside a dialog's. The space mouse guard test now clicks where each button was: by name it found nothing behind the guard. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Turn on egui's default_fonts: 0.37 no longer does The built-in Hack is the UI's symbol fallback (#2955). The app got it through eframe, but solidcraft-ui-egui on its own (its tests) did not. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Text menu: act on the selection the menu click took the focus from egui 0.37 drops a field's focus on a click elsewhere before the field draws, and an unfocused field loses its selection, so Copy, Cut and Paste from the right-click menu saw no selection. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Placement field: keep its native height under egui 0.37's interact floor Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Tests: pin the theme's 2/3 point radii; measure Japanese ribbon labels with a Japanese face egui 0.37 rounds widgets 4 points by default, which the theme deliberately does not follow. The ribbon test measured Japanese with missing glyphs, whose width changed in 0.37; with BIZ UDPGothic, 駆動 wraps after its particle like 変換 does. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Tests: click the render inspector's Perspective checkbox by position egui 0.37 orders the accessibility tree differently, so the name found the stage's Perspective segment first. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Translate "Close tab" for the complete catalogs Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Point the focus workarounds at emilk/egui#8763 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Cargo.lock: update only what egui 0.37 needs Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Web: Id::new -> Id::unique for the wasm-only windows Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Command search: keep its hint centred under egui 0.37's interact floor Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * egui 0.37 renames in code main added since the branch Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * egui 0.37 renames in code main added since the last rebase Id::new to Id::unique, ui.id() to ui.scope_id(), WidgetType to Role, the wheel events' source, and the button stroke read from the widget visuals. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Review: disclosures report expanded, late screenshots drained, chat width reset on both sides A disclosure's node says whether it is open as expanded, as egui's own collapsing header does. The screenshot channel is drained every frame, so a shot whose request was cancelled is dropped. Resetting the chat panel's width forgets both sides' state, as before 0.37, and the request stays with its window when tabs switch. Tests main added since the last rebase clear their texture deltas. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
174 lines
7.1 KiB
TOML
174 lines
7.1 KiB
TOML
[workspace]
|
|
resolver = "3"
|
|
members = ["crates/*", "apps/*", "xtask"]
|
|
# Third-party code kept with local fixes (see vendor/README.md); not linted as ours.
|
|
exclude = ["vendor"]
|
|
|
|
[workspace.package]
|
|
version = "0.40.0-rc.2"
|
|
edition = "2024"
|
|
license = "MIT OR Apache-2.0"
|
|
rust-version = "1.95"
|
|
authors = ["SolidCraft contributors"]
|
|
repository = "https://github.com/bherbruck/solidcraft"
|
|
|
|
[workspace.dependencies]
|
|
robust = "1.2"
|
|
# internal
|
|
solidcraft-geom = { path = "crates/geom" }
|
|
solidcraft-profile = { path = "crates/profile" }
|
|
solidcraft-sketch = { path = "crates/sketch" }
|
|
solidcraft-kernel = { path = "crates/kernel" }
|
|
solidcraft-smlib = { path = "crates/smlib" }
|
|
solidcraft-step = { path = "crates/step" }
|
|
solidcraft-render = { path = "crates/render" }
|
|
solidcraft-dynamics = { path = "crates/dynamics" }
|
|
solidcraft-gpu = { path = "crates/gpu" }
|
|
solidcraft-doc = { path = "crates/doc" }
|
|
solidcraft-io = { path = "crates/io" }
|
|
solidcraft-engine = { path = "crates/engine" }
|
|
solidcraft-ui-egui = { path = "crates/ui-egui" }
|
|
solidcraft-space-mouse = { path = "crates/space-mouse" }
|
|
solidcraft-mcp = { path = "crates/mcp" }
|
|
solidcraft-derive = { path = "crates/derive" }
|
|
solidcraft-3dx-client = { path = "crates/threedx-client" }
|
|
# The Rust port of NVIDIA's SMLib (Apache-2.0), the B-rep kernel behind crates/smlib. Pinned;
|
|
# move the rev on its own commit. For a
|
|
# local checkout, add `[patch."https://github.com/tangency-labs/solidcore"] solidcore = { path =
|
|
# "../solidcore/crates/solidcore" }` to a `.cargo/config.toml` outside the repository.
|
|
solidcore = { git = "https://github.com/tangency-labs/solidcore", rev = "8ddce901671f1cebd9214a31d21895d725e886c8" }
|
|
# Geometry as data (solidcore's layers §1, "Record"): the B-rep record, its structural validation
|
|
# and the native body file. Pinned like solidcore; for a local checkout, patch it as above.
|
|
solidcore-record = { git = "https://github.com/tangency-labs/solidcore", rev = "f5e8e9a29e0c9b7cf6c4040a5bc8878382b3c62f" }
|
|
# test tooling: a dev-dependency only (xtask/src/layers.rs)
|
|
solidcraft-testkit = { path = "crates/testkit" }
|
|
|
|
# foundation
|
|
thiserror = "2"
|
|
serde = { version = "1", features = ["derive", "rc"] }
|
|
# derive macros (crates/derive); already in the tree through serde_derive
|
|
proc-macro2 = "1"
|
|
quote = "1"
|
|
syn = { version = "2", features = ["full"] }
|
|
serde_json = { version = "1", features = ["float_roundtrip"] }
|
|
# command parameter and result schemas
|
|
schemars = "1.2"
|
|
serde_path_to_error = "0.1"
|
|
log = "0.4"
|
|
sha2 = "0.10"
|
|
moxcms = { version = "0.8.1", default-features = false, features = ["extended_range"] }
|
|
semver = "1"
|
|
|
|
# constrained Delaunay + Ruppert refinement for trimmed faces (MIT OR Apache-2.0).
|
|
spade = { version = "2.15", default-features = false, features = ["std"] }
|
|
rayon = "1.12"
|
|
|
|
# packages (3MF)
|
|
zip = { version = "9", default-features = false, features = ["deflate"] }
|
|
quick-xml = "0.41"
|
|
# STEP text in a legacy encoding (GBK, Shift_JIS, …) instead of Part 21 escapes (#2344): detect
|
|
# and decode it. Both MIT OR Apache-2.0 (encoding_rs adds BSD-3-Clause data); encoding_rs is
|
|
# already in the tree through cadmpeg-codec-step.
|
|
chardetng = "0.1"
|
|
encoding_rs = "0.8"
|
|
# glTF 2.0 import (MIT OR Apache-2.0): the document model and GLB container only; buffers are
|
|
# read by crates/io itself, so no image decoding or file access comes with it.
|
|
gltf = { version = "1.4", default-features = false, features = ["names"] }
|
|
# The computer's name in a design's "open elsewhere" lock file (MIT OR Apache-2.0; already in the
|
|
# tree through x11rb).
|
|
gethostname = "1"
|
|
|
|
# FreeCAD and Rhino import (Apache-2.0, pure Rust; native and browser builds).
|
|
# Pinned: its IR and codec APIs change between minor versions. Open formats only: no default
|
|
# features, so cadmpeg's codecs for commercial formats (f3d, sldprt, inventor, catia, creo, nx)
|
|
# and its ShapeManager/ACIS `sat` codec are not compiled in. `step` is the writer we restate through.
|
|
cadmpeg-core = "=0.6.7"
|
|
cadmpeg-ir = "=0.6.7"
|
|
cadmpeg-registry = { version = "=0.6.7", default-features = false, features = ["fcstd", "rhino", "step"] }
|
|
|
|
# fonts (sketch text outlines; MIT OR Apache-2.0, pure Rust)
|
|
ttf-parser = { version = "0.25", default-features = false, features = ["std", "variable-fonts"] }
|
|
|
|
# Ends a process group with the system call (MIT; already in the tree through zip).
|
|
nix = { version = "0.31", default-features = false, features = ["signal"] }
|
|
|
|
# images
|
|
image = { version = "0.25", default-features = false, features = ["png", "hdr"] }
|
|
png = "0.18.1"
|
|
# LZW for GIF animations (MIT OR Apache-2.0, pure Rust; already in the tree through image's tiff).
|
|
weezl = "0.1.12"
|
|
# rasterises the UI icon SVGs (BSD-3-Clause, pure Rust, builds for wasm)
|
|
tiny-skia = { version = "0.12", default-features = false, features = ["std", "simd"] }
|
|
# build scripts: reads the icon palette (MIT OR Apache-2.0)
|
|
toml = "1"
|
|
|
|
# ui
|
|
# default_fonts: the built-in Hack is the UI's symbol fallback (#2955); 0.37 no longer turns it on.
|
|
egui = { version = "0.37", features = ["default_fonts"] }
|
|
eframe = { version = "0.37", default-features = false, features = ["persistence"] }
|
|
# Instant/SystemTime that also work in the browser (std panics on wasm32-unknown-unknown).
|
|
web-time = "1"
|
|
egui-wgpu = "0.37"
|
|
# the wgpu egui-wgpu uses, for compute (crates/gpu); backends come from the apps' features
|
|
wgpu = { version = "30", default-features = false, features = ["std", "wgsl"] }
|
|
naga = { version = "30", default-features = false }
|
|
pollster = "0.4"
|
|
rfd = "0.17"
|
|
|
|
[workspace.lints.rust]
|
|
unsafe_code = "forbid"
|
|
|
|
[workspace.lints.clippy]
|
|
dbg_macro = "warn"
|
|
todo = "warn"
|
|
too_many_arguments = "allow"
|
|
type_complexity = "allow"
|
|
# `!(x > tol)` is our idiom for "not a usable number" (NaN-safe).
|
|
neg_cmp_op_on_partial_ord = "allow"
|
|
|
|
[profile.dev.package."*"]
|
|
opt-level = 2
|
|
|
|
[profile.dev]
|
|
opt-level = 1
|
|
|
|
# Tests and lints (`cargo xtask ci`, GitHub CI): quick to build, quick enough to run. Light
|
|
# optimisation, line tables only (file:line in backtraces), no LTO, no debug assertions.
|
|
[profile.ci]
|
|
inherits = "dev"
|
|
opt-level = 1
|
|
debug = "line-tables-only"
|
|
debug-assertions = false
|
|
overflow-checks = true
|
|
incremental = false
|
|
|
|
[profile.ci.package."*"]
|
|
opt-level = 2
|
|
# No line tables for dependencies: they were over a third of the test archive every CI shard
|
|
# downloads. Our own crates keep theirs, so a backtrace still names file:line in them.
|
|
debug = false
|
|
|
|
[profile.release]
|
|
opt-level = 3
|
|
lto = "thin"
|
|
codegen-units = 16
|
|
# Line tables only: crash reports name file:line in their backtraces (no runtime cost; a larger
|
|
# binary). See docs/crash-reports.md.
|
|
debug = "line-tables-only"
|
|
|
|
|
|
# Vendored crates with SolidCraft fixes (see vendor/README.md and ATTRIBUTION.md).
|
|
[patch.crates-io]
|
|
# Keep OpenGL pipelines, resolve textures and CAD callbacks at the same safe sample count.
|
|
egui-wgpu = { path = "vendor/egui-wgpu" }
|
|
|
|
# Deliver trackpad pinch and rotation gestures on Wayland (zwp_pointer_gestures_v1), which
|
|
# winit 0.30 never binds and eframe 0.37 still requires winit 0.30.
|
|
winit = { path = "vendor/winit" }
|
|
|
|
# Mutation testing (cargo-mutants, docs/mutation-testing.md): the ci profile with incremental
|
|
# builds, since every mutant rebuilds the crates above the one it changes.
|
|
[profile.mutants]
|
|
inherits = "ci"
|
|
incremental = true
|