mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-09-15 22:28:10 +08:00
Replaces the WIP node crate, which depended on a convex_hull crate that only existed outside the repository, with a self-contained implementation: - The curved hull algorithm lives in vector-types' algorithms module. It splits curves at inflections and cusps into curvature-monotone arcs, discovers the boundary structure from a sampled polygonal hull, refines every transition to an exact tangency with closed-form quartic tangent-through-point solves, then emits the boundary as cuts of the original segments joined by straight bridge lines. - The node moves into vector-nodes alongside the other 'Vector: Modifier' nodes, ported to the List/attributes model. It accepts Graphic[] or Vector[], wraps every subpath (open or closed) and free-floating anchor point across all items, and outputs a single world-space hull path. - The boolean-union pre-pass is dropped as unnecessary: the hull of all segments equals the hull of their union, and the polyline connector it relied on lost floating points and mishandled open paths.
262 lines
8.6 KiB
TOML
262 lines
8.6 KiB
TOML
[workspace]
|
|
members = [
|
|
"desktop",
|
|
"desktop/wrapper",
|
|
"desktop/embedded-resources",
|
|
"desktop/bundle",
|
|
"desktop/platform/linux",
|
|
"desktop/platform/mac",
|
|
"desktop/platform/win",
|
|
"document/graph-storage",
|
|
"document/container",
|
|
"document/document-format",
|
|
"editor",
|
|
"frontend/wrapper",
|
|
"libraries/dyn-any",
|
|
"libraries/math-parser",
|
|
"node-graph/libraries/graphene-hash",
|
|
"node-graph/libraries/*",
|
|
"node-graph/nodes/*",
|
|
"node-graph/nodes/raster/shaders",
|
|
"node-graph/nodes/raster/shaders/entrypoint",
|
|
"node-graph/graph-craft",
|
|
"node-graph/graphene-cli",
|
|
"node-graph/nodes/gstd",
|
|
"node-graph/interpreted-executor",
|
|
"node-graph/node-macro",
|
|
"node-graph/preprocessor",
|
|
"proc-macros",
|
|
"tools/cargo-run",
|
|
"tools/cargo-run/internal/*",
|
|
"tools/crate-hierarchy-viz",
|
|
"tools/third-party-licenses",
|
|
"tools/editor-message-tree",
|
|
"tools/node-docs",
|
|
]
|
|
default-members = [
|
|
"editor",
|
|
"frontend/wrapper",
|
|
"libraries/dyn-any",
|
|
"libraries/math-parser",
|
|
"node-graph/graph-craft",
|
|
"node-graph/interpreted-executor",
|
|
"node-graph/node-macro",
|
|
"node-graph/preprocessor",
|
|
# blocked by https://github.com/rust-lang/cargo/issues/16000
|
|
# "proc-macros",
|
|
"tools/cargo-run",
|
|
]
|
|
resolver = "2"
|
|
|
|
[workspace.package]
|
|
rust-version = "1.88"
|
|
edition = "2024"
|
|
authors = ["Graphite Authors <contact@graphite.art>"]
|
|
homepage = "https://graphite.art"
|
|
repository = "https://github.com/GraphiteEditor/Graphite"
|
|
license = "Apache-2.0"
|
|
version = "0.0.0"
|
|
readme = "README.md"
|
|
publish = false
|
|
|
|
[workspace.dependencies]
|
|
# Local dependencies
|
|
dyn-any = { path = "libraries/dyn-any", features = [
|
|
"derive",
|
|
"glam",
|
|
"reqwest",
|
|
"log-bad-types",
|
|
"rc",
|
|
] }
|
|
graphene-hash = { path = "node-graph/libraries/graphene-hash", features = ["derive"] }
|
|
preprocessor = { path = "node-graph/preprocessor" }
|
|
math-parser = { path = "libraries/math-parser" }
|
|
graphene-application-io = { path = "node-graph/libraries/application-io" }
|
|
graphene-resource = { path = "node-graph/libraries/resources" }
|
|
core-types = { path = "node-graph/libraries/core-types" }
|
|
no-std-types = { path = "node-graph/libraries/no-std-types" }
|
|
raster-types = { path = "node-graph/libraries/raster-types" }
|
|
vector-types = { path = "node-graph/libraries/vector-types" }
|
|
graphic-types = { path = "node-graph/libraries/graphic-types" }
|
|
rendering = { path = "node-graph/libraries/rendering" }
|
|
brush-nodes = { path = "node-graph/nodes/brush" }
|
|
blending-nodes = { path = "node-graph/nodes/blending" }
|
|
graphene-core = { path = "node-graph/nodes/gcore" }
|
|
graphic-nodes = { path = "node-graph/nodes/graphic" }
|
|
text-nodes = { path = "node-graph/nodes/text" }
|
|
transform-nodes = { path = "node-graph/nodes/transform" }
|
|
vector-nodes = { path = "node-graph/nodes/vector" }
|
|
repeat-nodes = { path = "node-graph/nodes/repeat" }
|
|
math-nodes = { path = "node-graph/nodes/math" }
|
|
path-bool-nodes = { path = "node-graph/nodes/path-bool" }
|
|
graph-craft = { path = "node-graph/graph-craft" }
|
|
graph-storage = { path = "document/graph-storage", default-features = false }
|
|
document-format = { path = "document/document-format" }
|
|
document-container = { path = "document/container" }
|
|
raster-nodes = { path = "node-graph/nodes/raster" }
|
|
graphene-std = { path = "node-graph/nodes/gstd" }
|
|
interpreted-executor = { path = "node-graph/interpreted-executor" }
|
|
node-macro = { path = "node-graph/node-macro" }
|
|
wgpu-executor = { path = "node-graph/libraries/wgpu-executor" }
|
|
graphite-proc-macros = { path = "proc-macros" }
|
|
graphite-editor = { path = "editor" }
|
|
graphene-canvas-utils = { path = "node-graph/libraries/canvas-utils" }
|
|
|
|
# Workspace dependencies
|
|
rustc-hash = "2.0"
|
|
bytemuck = { version = "1.13", features = ["derive", "min_const_generics"] }
|
|
serde = { version = "1.0", features = ["derive", "rc"] }
|
|
serde_json = "1.0"
|
|
rmp-serde = "1.3"
|
|
serde_bytes = "0.11"
|
|
serde-wasm-bindgen = "0.6"
|
|
reqwest = { version = "0.13", features = ["blocking", "json"] }
|
|
futures = "0.3"
|
|
env_logger = "0.11"
|
|
log = "0.4"
|
|
bitflags = { version = "2.4", features = ["serde"] }
|
|
ctor = "0.2"
|
|
convert_case = "0.8"
|
|
titlecase = "3.6"
|
|
fancy-regex = "0.18.0"
|
|
unicode-segmentation = "1.13.2"
|
|
indoc = "2.0.5"
|
|
derivative = "2.2"
|
|
thiserror = "2"
|
|
anyhow = "1.0"
|
|
proc-macro2 = { version = "1", features = ["span-locations"] }
|
|
quote = "1.0"
|
|
chrono = "0.4"
|
|
ron = "0.12"
|
|
fastnoise-lite = "1.1"
|
|
wgpu = { version = "29.0", features = [
|
|
# We don't have wgpu on multiple threads (yet) https://github.com/gfx-rs/wgpu/blob/trunk/CHANGELOG.md#wgpu-types-now-send-sync-on-wasm
|
|
"fragile-send-sync-non-atomic-wasm",
|
|
"spirv",
|
|
"strict_asserts",
|
|
] }
|
|
once_cell = "1.13" # Remove and replace with `core::cell::LazyCell` (<https://doc.rust-lang.org/core/cell/struct.LazyCell.html>)
|
|
wasm-bindgen = "=0.2.121" # NOTICE: keep in sync with the `wasm-bindgen-cli` version pinned across CI workflows, devcontainer, Nix, and the `cargo-run` tool. We pin this version because wasm-bindgen upgrades may break various things.
|
|
wasm-bindgen-futures = "0.4"
|
|
js-sys = "=0.3.98"
|
|
web-sys = { version = "=0.3.98", features = [
|
|
"Document",
|
|
"DomRect",
|
|
"Element",
|
|
"HtmlCanvasElement",
|
|
"CanvasRenderingContext2d",
|
|
"CanvasPattern",
|
|
"OffscreenCanvas",
|
|
"OffscreenCanvasRenderingContext2d",
|
|
"TextMetrics",
|
|
"Window",
|
|
"IdleRequestOptions",
|
|
"ImageData",
|
|
"Navigator",
|
|
"Gpu",
|
|
"HtmlImageElement",
|
|
"ImageBitmapRenderingContext",
|
|
] }
|
|
winit = { git = "https://github.com/rust-windowing/winit.git" }
|
|
keyboard-types = "0.8"
|
|
url = "2.5"
|
|
tokio = { version = "1.29", features = ["fs", "macros", "io-std", "rt", "rt-multi-thread"] }
|
|
# Linebender ecosystem (BEGIN)
|
|
kurbo = { version = "0.13", features = ["serde"] }
|
|
vello = "0.9"
|
|
vello_encoding = "0.9"
|
|
resvg = "0.47"
|
|
usvg = "0.47"
|
|
parley = { version = "0.9", default-features = false, features = ["std"] }
|
|
skrifa = "0.42"
|
|
polycool = "0.4"
|
|
color = "0.3"
|
|
# Linebender ecosystem (END)
|
|
rand = { version = "0.9", default-features = false, features = ["std_rng"] }
|
|
rand_chacha = "0.9"
|
|
glam = { version = "0.32.1", default-features = false, features = [
|
|
"nostd-libm",
|
|
"scalar-math",
|
|
"bytemuck",
|
|
] }
|
|
base64 = "0.22"
|
|
blake3 = "1.5"
|
|
mmap-io = { version = "0.9", features = ["hugepages"] }
|
|
image = { version = "0.25", default-features = false, features = [
|
|
"png",
|
|
"jpeg",
|
|
"bmp",
|
|
"gif",
|
|
] }
|
|
pretty_assertions = "1.4"
|
|
fern = { version = "0.7", features = ["colored"] }
|
|
num_enum = { version = "0.7", default-features = false }
|
|
num-derive = "0.4"
|
|
num-traits = { version = "0.2", default-features = false, features = ["libm"] }
|
|
tsify = { version = "0.5", default-features = false, features = ["js"] }
|
|
syn = { version = "2.0", default-features = false, features = [
|
|
"full",
|
|
"derive",
|
|
"parsing",
|
|
"printing",
|
|
"visit-mut",
|
|
"visit",
|
|
"clone-impls",
|
|
"extra-traits",
|
|
"proc-macro",
|
|
] }
|
|
lyon_geom = "1.0"
|
|
petgraph = { version = "0.7", default-features = false, features = ["graphmap"] }
|
|
half = { version = "2.4", default-features = false, features = ["bytemuck"] }
|
|
tinyvec = { version = "1", features = ["std"] }
|
|
criterion = { version = "0.7", features = ["html_reports"] }
|
|
gungraun = { version = "0.18" }
|
|
ndarray = "0.16"
|
|
strum = { version = "0.27", features = ["derive"] }
|
|
dirs = "6.0"
|
|
cef = "149"
|
|
cef-dll-sys = "149"
|
|
include_dir = "0.7"
|
|
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
|
|
tracing = "0.1"
|
|
rfd = "0.17"
|
|
open = "5.3"
|
|
spin = "0.10"
|
|
clap = "4.5"
|
|
spirv-std = { version = "0.10.0-alpha.1", features = ["bytemuck"] }
|
|
cargo-gpu-install = { version = "0.10.0-alpha.1", default-features = false }
|
|
qrcodegen = "1.8"
|
|
lzma-rust2 = { version = "0.16", default-features = false, features = ["std", "encoder", "optimization", "xz"] }
|
|
scraper = "0.25"
|
|
linesweeper = "0.4"
|
|
smallvec = "1.13.2"
|
|
zip = { version = "8", default-features = false }
|
|
|
|
[workspace.lints.rust]
|
|
unexpected_cfgs = { level = "allow", check-cfg = ['cfg(target_arch, values("spirv"))'] }
|
|
|
|
[profile.dev]
|
|
opt-level = 1
|
|
|
|
[profile.dev.package]
|
|
no-std-types = { opt-level = 1 }
|
|
core-types= { opt-level = 1 }
|
|
interpreted-executor = { opt-level = 1 } # This is a mitigation for https://github.com/rustwasm/wasm-pack/issues/981 which is needed because the node_registry function is too large
|
|
graphite-proc-macros = { opt-level = 1 }
|
|
image = { opt-level = 2 }
|
|
rustc-hash = { opt-level = 3 }
|
|
serde_derive = { opt-level = 1 }
|
|
syn = { opt-level = 1 }
|
|
node-macro = { opt-level = 2 }
|
|
|
|
[profile.release]
|
|
lto = "thin"
|
|
debug = true
|
|
|
|
[patch.crates-io]
|
|
# Force cargo to use only one version of the dpi crate (vendoring breaks without this)
|
|
dpi = { git = "https://github.com/rust-windowing/winit.git" }
|
|
rfd = { git = "https://github.com/timon-schelling/rfd.git", branch = "graphite" } # TODO: Remove this once https://github.com/PolyMeilex/rfd/pull/317 is merged and released
|
|
cef = { git = "https://github.com/timon-schelling/cef-rs.git", branch = "graphite-149" }
|
|
cef-dll-sys = { git = "https://github.com/timon-schelling/cef-rs.git", branch = "graphite-149" }
|