mirror of
https://github.com/storytold/vectorcraft.git
synced 2026-10-27 19:27:21 -06:00
* Build: craft-libs at 2869b8cc Pin craft-pdf, craft-print, craft-docpath, craft-ui, craft-keymap, craft-window and the patched hayro/krilla backends to craft-libs 2869b8cc1077530bd07a7e192fb2b0e1304a1354, with the pdf-deps gate, NOTICE, ASSETS.md and docs/pdf-backend.md at the same revision. PDF: no modification date beyond the creation date, DeviceN images are not JPEG-encoded, and clipping text draws nothing (its outlines arrive as a clip path). * Docking: compile against craft-ui at 2869b8cc Floating windows are trees of groups: window_panels and window_active read one as a flat group, and windows rebuilt from the legacy groups keep their ids. Unknown dock actions are rejected, the new ones are checked like the old, and every panel a close action removes keeps its return location. * Docking: panels and canvas on craft-ui's docking area * Docking: tests for the dock area, flyouts, floating panels and the Tools panel * Docking: catalogs without the old dock's strings * Build: craft-libs at 8a503cfe * Docking: floating panels in OS windows of their own on the desktop * Docking: modal dialogs block panel windows; their keys and dropped files reach the main window * Docking: art dragged onto a panel in its own window drops there * Docking: module doc names the OS windows * Build: craft-libs at a042cf26 * Docking: onto, above, below, collapsed, icon and column places on Float and Dock Panel; ui.docking * Docking: command descriptions of Float, Dock, Move and Collapse Panel for the craft-ui layout * Docking: control protocol describes the craft-ui layout, its commands and ui.docking * Docking: rustfmt * Docking: layouts saved before the canvas joined convert on load Saved ui.json files and workspaces from before the shared layout held the canvas (a dock-only tree plus floating_panels, docking_icons, docking_collapsed, dock_collapsed and dock_width) convert into one layout: the dock tree's groups in the main column, the icon column with the panels dropped on it, floating groups and sets, sets docked as columns, collapsed groups, the dock width and the places of closed panels. The legacy fields are read, never written. A ui.json read only in part is copied to ui.unreadable.json before anything saves over it. * Docking: catalogs without the old collapse message * Docking: converted floating sets start at most 720 points tall * Docking: closed icon panels convert into the icon column; old floating rects, set heights and a copy of the file before conversion * Build: craft-libs at 27e60765 * Docking: dock column places and icon count from the icon column; a docked column moves to a later place * Build: craft-libs at d24e4bcc * Build: craft-libs at 5bbe9f62 * Docs: floating panels in OS windows of their own close the other-monitor gap * Docking: keys forwarded from a floating panel's OS window run shortcuts while the main window is unfocused
164 lines
9.2 KiB
TOML
164 lines
9.2 KiB
TOML
[workspace]
|
||
resolver = "3"
|
||
members = ["crates/*", "apps/*", "xtask"]
|
||
default-members = ["crates/*", "apps/vectorcraft", "apps/vectorcraft-cli", "xtask"]
|
||
|
||
[workspace.package]
|
||
version = "0.17.0"
|
||
edition = "2024"
|
||
license = "MIT OR Apache-2.0"
|
||
rust-version = "1.95"
|
||
repository = "https://github.com/storytold/vectorcraft"
|
||
|
||
[workspace.dependencies]
|
||
craft-pdf = { git = "https://github.com/storytold/craft-libs", rev = "a0916808f7d78bed8c7b90cdf937176015454a7f", default-features = false, features = ["interpret", "write"] }
|
||
craft-print = { git = "https://github.com/storytold/craft-libs", rev = "a0916808f7d78bed8c7b90cdf937176015454a7f" }
|
||
craft-docpath = { version = "0.1.0", git = "https://github.com/storytold/craft-libs", rev = "a0916808f7d78bed8c7b90cdf937176015454a7f" }
|
||
craft-ui = { git = "https://github.com/storytold/craft-libs", rev = "a0916808f7d78bed8c7b90cdf937176015454a7f", features = ["serde"] }
|
||
craft-keymap = { git = "https://github.com/storytold/craft-libs", rev = "a0916808f7d78bed8c7b90cdf937176015454a7f" }
|
||
# Decides who draws the window frame (desktop vs. app) so the suite shares one native titlebar per
|
||
# desktop. The `egui` feature adds `craft_window::decorate`. (craft-libs#217.)
|
||
craft-window = { git = "https://github.com/storytold/craft-libs", rev = "a0916808f7d78bed8c7b90cdf937176015454a7f", features = ["egui"] }
|
||
# internal
|
||
vectorcraft-geom = { path = "crates/geom" }
|
||
vectorcraft-color = { path = "crates/color" }
|
||
vectorcraft-doc = { path = "crates/doc" }
|
||
vectorcraft-pathops = { path = "crates/pathops" }
|
||
vectorcraft-brush = { path = "crates/brush" }
|
||
vectorcraft-trace = { path = "crates/trace" }
|
||
# Without its default `bundled-fonts`: a crate that wants the fonts asks for them (the apps and
|
||
# vectorcraft-testkit through the engine's `bundled-fonts`), so a library crate never forces them on
|
||
# an embedder that supplies its fonts at run time.
|
||
vectorcraft-text = { path = "crates/text", default-features = false }
|
||
vectorcraft-effects = { path = "crates/effects" }
|
||
vectorcraft-three-d = { path = "crates/three-d" }
|
||
vectorcraft-render = { path = "crates/render" }
|
||
vectorcraft-svg = { path = "crates/svg" }
|
||
vectorcraft-pdf = { path = "crates/pdf" }
|
||
vectorcraft-format = { path = "crates/format" }
|
||
vectorcraft-tools = { path = "crates/tools" }
|
||
# Without its default `bundled-fonts`, as vectorcraft-text: each crate that wants the fonts asks for
|
||
# them, so an embedder can build without them (docs/development.md › Leaving out the bundled fonts).
|
||
vectorcraft-engine = { path = "crates/engine", default-features = false }
|
||
vectorcraft-ui-egui = { path = "crates/ui-egui" }
|
||
vectorcraft-mcp = { path = "crates/mcp" }
|
||
vectorcraft-testkit = { path = "crates/testkit" }
|
||
vectorcraft-cad = { path = "crates/cad" }
|
||
vectorcraft-eps = { path = "crates/eps" }
|
||
vectorcraft-metafile = { path = "crates/metafile" }
|
||
vectorcraft-plugins = { path = "crates/plugins" }
|
||
vectorcraft-affinity = { path = "crates/affinity" }
|
||
vectorcraft-scriptcheck = { path = "crates/scriptcheck" }
|
||
|
||
# foundation
|
||
kurbo = { version = "0.13", features = ["serde"] }
|
||
peniko = "0.6"
|
||
thiserror = "2"
|
||
serde = { version = "1", features = ["derive", "rc"] }
|
||
serde_json = { version = "1", features = ["float_roundtrip"] }
|
||
log = "0.4"
|
||
# All date/time conversion goes through chrono (no hand-rolled calendar code beyond the 400-year range extension; AGENTS.md).
|
||
chrono = { version = "0.4.45", default-features = false, features = ["std"] }
|
||
proptest = "1"
|
||
crc32fast = "1.5"
|
||
# tests: a TCP port bound without listening (connections to it are refused)
|
||
socket2 = "0.6"
|
||
# Sandboxed WebAssembly plug-ins: a pure-Rust interpreter (MIT OR Apache-2.0) that builds for wasm32
|
||
# too. Without `wat` (text parsing is test-only) and memory64; `validate` keeps full module
|
||
# validation on; the portable dispatcher can't overflow the host stack on long-running modules.
|
||
wasmi = { version = "2.0.0", default-features = false, features = ["std", "validate", "stable", "portable-dispatch"] }
|
||
# Tests: WebAssembly text -> binary for the plug-in fixtures (Apache-2.0 WITH LLVM-exception).
|
||
wat = "1.228"
|
||
|
||
# rendering / formats
|
||
# Without `text` (glyph runs, through glifo and a second skrifa): the renderer draws the outlines
|
||
# vectorcraft-text gives it. The other default features stay.
|
||
vello_cpu = { version = "0.2", default-features = false, features = ["std", "png", "u8_pipeline", "f32_pipeline"] }
|
||
image = { version = "0.25", default-features = false, features = ["png", "jpeg", "webp", "gif", "tiff", "bmp", "tga"] }
|
||
# Without `text` and the system fonts (fontdb, harfrust and skrifa, at other versions than ours):
|
||
# SVG import reads `<text>` from the XML itself and never gives usvg a font. A test of the SVG
|
||
# crate turns `text` on.
|
||
usvg = { version = "0.48", default-features = false, features = ["svgz"] }
|
||
# Without `simple-text` (its text shaping, the only user of rustybuzz and ttf-parser, which are
|
||
# unmaintained, #1730): the PDF writer places glyphs itself. A test of the PDF crate turns it on.
|
||
krilla = { version = "0.8", default-features = false, features = ["raster-images"] }
|
||
skrifa = "0.47"
|
||
harfrust = "0.13"
|
||
linesweeper = "0.5"
|
||
flate2 = { version = "1", default-features = false, features = ["rust_backend"] }
|
||
rustix = { version = "1.1", default-features = false }
|
||
# Zstandard decoder (pure Rust, builds for wasm32 too): the editing copy an EPS carries of its art.
|
||
ruzstd = { version = "0.9.1", default-features = false, features = ["std"] }
|
||
# CCITT Group 3 and Group 4 decoder (ITU-T T.4 and T.6): EPS images read through
|
||
# `CCITTFaxDecode`. The PDF reader's hayro-syntax uses the same version.
|
||
hayro-ccitt = "0.3"
|
||
# Substring search for the EPS reader's PostScript `search`.
|
||
memchr = "2"
|
||
jpeg-encoder = { version = "0.6", default-features = false, features = ["std"] }
|
||
gif = { version = "0.14", default-features = false, features = ["std", "raii_no_panic"] }
|
||
# CMYK image samples (vectorcraft-doc's cmyk module): the image crate's own TIFF and JPEG
|
||
# decoders, read directly (the image crate converts CMYK to RGB).
|
||
tiff = "0.11"
|
||
zune-jpeg = "0.5"
|
||
|
||
# ui
|
||
egui = "0.37"
|
||
egui_extras = { version = "0.37", default-features = false, features = ["svg"] }
|
||
eframe = { version = "0.37", default-features = false }
|
||
egui_kittest = "0.37"
|
||
rfd = "0.17"
|
||
arboard = { version = "3.6", default-features = false }
|
||
clipboard-win = "5.4"
|
||
webbrowser = "1"
|
||
|
||
[workspace.lints.rust]
|
||
unsafe_code = "deny"
|
||
|
||
[workspace.lints.clippy]
|
||
dbg_macro = "warn"
|
||
# VectorCraft never crashes: shipped code returns `Result`/`Option` instead of panicking (see
|
||
# AGENTS.md › Robustness). Tests may unwrap (clippy.toml).
|
||
unwrap_used = "deny"
|
||
expect_used = "deny"
|
||
panic = "deny"
|
||
todo = "deny"
|
||
unimplemented = "deny"
|
||
unreachable = "deny"
|
||
|
||
# Workspace crates keep line tables, so panics and backtraces name file and line; dependencies
|
||
# carry no debug info. Full debug info would make the dev target dir several times larger.
|
||
[profile.dev.package."*"]
|
||
opt-level = 2
|
||
debug = false
|
||
|
||
[profile.dev]
|
||
opt-level = 1
|
||
debug = "line-tables-only"
|
||
|
||
[profile.release]
|
||
lto = "thin"
|
||
codegen-units = 1
|
||
|
||
[patch.crates-io]
|
||
hayro-syntax = { git = "https://github.com/storytold/craft-libs", rev = "a0916808f7d78bed8c7b90cdf937176015454a7f" }
|
||
hayro-interpret = { git = "https://github.com/storytold/craft-libs", rev = "a0916808f7d78bed8c7b90cdf937176015454a7f" }
|
||
hayro-jbig2 = { git = "https://github.com/storytold/craft-libs", rev = "a0916808f7d78bed8c7b90cdf937176015454a7f" }
|
||
hayro-cmap = { git = "https://github.com/storytold/craft-libs", rev = "a0916808f7d78bed8c7b90cdf937176015454a7f" }
|
||
hayro-postscript = { git = "https://github.com/storytold/craft-libs", rev = "a0916808f7d78bed8c7b90cdf937176015454a7f" }
|
||
krilla = { git = "https://github.com/storytold/craft-libs", rev = "a0916808f7d78bed8c7b90cdf937176015454a7f" }
|
||
ecolor = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" }
|
||
emath = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" }
|
||
epaint = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" }
|
||
epaint_default_fonts = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" }
|
||
egui = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" }
|
||
egui-winit = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" }
|
||
egui-wgpu = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" }
|
||
egui_glow = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" }
|
||
egui_extras = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" }
|
||
egui_kittest = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" }
|
||
egui_system_font_provider = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" }
|
||
eframe = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" }
|
||
egui_demo_lib = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" }
|
||
egui_inspection = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" }
|
||
winit = { git = "https://github.com/storytold/winit.git", rev = "a517b3846ee8457d84ee4975110bfda6797c44dc" }
|