Skip to content

Commit 6f6fb3b

Browse files
0HyperCubeKeavon
andauthored
Upgrade several Rust dependencies (#1613)
`specta` from Hypercube's fork commit to latest upstream commit `wasm-bindgen` 0.2.87 -> 0.2.91 `spirv-std` from 0.9 to not-yet-merged commit in EmbarkStudios/rust-gpu#1115 `wgpu` 0.17 -> 0.19 `winit` 0.28.6 -> 0.29 `vello` and `vello_svg` from latest upstream commit to not-yet-merged commit in linebender/vello#427 `resvg` 0.36.0 -> 0.39 `glam` 0.24 -> 0.25 `rustybuzz` 0.8.0 -> 0.10.0 `js-sys` and `web-sys` 0.3.55 -> 0.3.67 `usvg` 0.36.0 -> 0.39 `spirv` 0.2.0 -> 0.3 * Update a couple of dependencies * More test fixing… * Use upstream Specta instead of fork * Update comments in Cargo.toml --------- Co-authored-by: Keavon Chambers <keavon@keavon.com>
1 parent 80bffd3 commit 6f6fb3b

File tree

20 files changed

+863
-877
lines changed

20 files changed

+863
-877
lines changed

Cargo.lock

+733-762
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

+17-20
Original file line numberDiff line numberDiff line change
@@ -20,26 +20,22 @@ members = [
2020
"libraries/bezier-rs",
2121
"website/other/bezier-rs-demos/wasm",
2222
]
23-
2423
resolver = "2"
25-
2624
exclude = ["node-graph/gpu-compiler"]
2725

2826
[workspace.dependencies]
29-
# We are using this fork because:
30-
# - They specify glam=0.22 whereas we use glam=0.24 so the encoding doesn't work.
31-
# - Their current release doesn't allow doc comments and produces a compile error.
32-
# See: https://github.com/GraphiteEditor/Graphite/pull/1346/files/a2206401b5b4cf669e71df57f6c95c67336802c8#r1280201659
33-
specta = { git = "https://github.com/0HyperCube/specta.git", rev = "c47a22b4c0863d27bc47529f300de3969480c66d", features = [
27+
specta = { git = "https://github.com/oscartbeaumont/specta.git", features = [
3428
"glam",
29+
"typescript",
3530
] }
3631
rustc-hash = "1.1.0"
3732
# wasm-bindgen upgrades may break various things so we pin the version
38-
wasm-bindgen = "=0.2.87"
33+
wasm-bindgen = "=0.2.91"
3934
dyn-any = { path = "libraries/dyn-any", features = ["derive", "glam"] }
4035
graphene-core = { path = "node-graph/gcore" }
4136
graph-craft = { path = "node-graph/graph-craft", features = ["serde"] }
42-
spirv-std = { version = "0.9" }
37+
# Remove the `rev` commit hash field once this merges: https://github.com/EmbarkStudios/rust-gpu/pull/1115 (and consider switching to a release version upon the next release)
38+
spirv-std = { git = "https://github.com/EmbarkStudios/rust-gpu.git", rev = "08e7559012ab6645cf36f6cce84426f9e34b88d9" }
4339
bytemuck = { version = "1.13", features = ["derive"] }
4440
async-trait = { version = "0.1" }
4541
serde = { version = "1.0", features = ["derive", "rc"] }
@@ -61,33 +57,34 @@ chrono = "^0.4.23"
6157
ron = "0.8"
6258
fastnoise-lite = "1.1.0"
6359
wgpu-types = "0.17"
64-
wgpu = "0.17"
60+
wgpu = "0.19"
6561
wasm-bindgen-futures = { version = "0.4.36" }
66-
winit = "0.28.6"
62+
winit = "0.29"
6763
url = "2.4.0"
6864
tokio = { version = "1.29", features = ["fs", "io-std"] }
69-
vello = { git = "https://github.com/linebender/vello", version = "0.0.1" }
70-
vello_svg = { git = "https://github.com/linebender/vello", version = "0.0.1" }
71-
resvg = { version = "0.36.0" }
65+
# Remove the `rev` commit hash field once this merges: https://github.com/linebender/vello/pull/427
66+
vello = { git = "https://github.com/linebender/vello.git", rev = "f075f58fc50c569daf5ca720fe81b5fee946ce7f", version = "0.0.1" }
67+
vello_svg = { git = "https://github.com/linebender/vello.git", rev = "f075f58fc50c569daf5ca720fe81b5fee946ce7f", version = "0.0.1" }
68+
resvg = { version = "0.39" }
7269
rand = { version = "0.8.5", default-features = false }
7370
rand_chacha = { version = "0.3.1" }
7471
bezier-rs = { path = "libraries/bezier-rs", features = ["dyn-any"] }
7572
kurbo = { git = "https://github.com/linebender/kurbo.git", features = [
7673
"serde",
7774
] }
78-
glam = { version = "0.24", default-features = false, features = ["serde"] }
75+
glam = { version = "0.25", default-features = false, features = ["serde"] }
7976
node-macro = { path = "node-graph/node-macro" }
8077
base64 = { version = "0.21" }
8178
image = { version = "0.24", default-features = false, features = ["png"] }
82-
rustybuzz = { version = "0.8.0" }
79+
rustybuzz = { version = "0.10.0" }
8380
num-derive = { version = "0.4" }
8481
num-traits = { version = "0.2.15", default-features = false, features = [
8582
"i128",
8683
] }
87-
js-sys = { version = "0.3.55" }
88-
web-sys = { version = "0.3.55" }
89-
usvg = "0.36.0"
90-
spirv = "0.2.0"
84+
js-sys = { version = "=0.3.67" }
85+
web-sys = { version = "=0.3.67" }
86+
usvg = "0.39"
87+
spirv = "0.3"
9188
fern = { version = "0.6", features = ["colored"] }
9289

9390
[profile.dev.package.graphite-editor]

editor/src/generate_ts_types.rs

+11-16
Original file line numberDiff line numberDiff line change
@@ -5,31 +5,26 @@
55
#[test]
66
fn generate_ts_types() {
77
use crate::messages::prelude::FrontendMessage;
8-
use specta::{
9-
ts::{export_datatype, BigIntExportBehavior, ExportConfiguration},
10-
DefOpts, NamedType, Type, TypeDefs,
11-
};
8+
use specta::ts::{export_named_datatype, BigIntExportBehavior, ExportConfig};
9+
use specta::{NamedType, TypeMap};
1210
use std::fs::File;
1311
use std::io::Write;
1412

15-
let config = ExportConfiguration::new().bigint(BigIntExportBehavior::Number);
13+
let config = ExportConfig::new().bigint(BigIntExportBehavior::Number);
1614

17-
let mut type_map = TypeDefs::new();
15+
let mut type_map = TypeMap::default();
1816

19-
let datatype = FrontendMessage::named_data_type(
20-
DefOpts {
21-
parent_inline: false,
22-
type_map: &mut type_map,
23-
},
24-
&FrontendMessage::definition_generics().into_iter().map(Into::into).collect::<Vec<_>>(),
25-
)
26-
.unwrap();
17+
let datatype = FrontendMessage::definition_named_data_type(&mut type_map);
2718

2819
let mut export = String::new();
2920

30-
export += &export_datatype(&config, &datatype).unwrap();
21+
export += &export_named_datatype(&config, &datatype, &type_map).unwrap();
3122

32-
type_map.values().flatten().flat_map(|v| export_datatype(&config, v)).for_each(|e| export += &format!("\n\n{e}"));
23+
type_map
24+
.iter()
25+
.map(|(_, v)| v)
26+
.flat_map(|v| export_named_datatype(&config, v, &type_map))
27+
.for_each(|e| export += &format!("\n\n{e}"));
3328

3429
let mut file = File::create("../types.ts").unwrap();
3530

editor/src/messages/layout/utility_types/layout_widget.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -457,8 +457,9 @@ impl WidgetHolder {
457457
}
458458
}
459459

460-
#[derive(Clone)]
460+
#[derive(Clone, specta::Type)]
461461
pub struct WidgetCallback<T> {
462+
#[specta(skip)]
462463
pub callback: Arc<dyn Fn(&T) -> Message + 'static + Send + Sync>,
463464
}
464465

editor/src/messages/message.rs

+5-3
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ pub enum Message {
4141

4242
/// Provides an impl of `specta::Type` for `MessageDiscriminant`, the struct created by `impl_message`.
4343
/// Specta isn't integrated with `impl_message`, so a remote impl must be provided using this struct.
44-
#[derive(specta::Type)]
45-
#[specta(inline, remote = "MessageDiscriminant")]
46-
pub struct MessageDiscriminantDef(pub u8);
44+
impl specta::Type for MessageDiscriminant {
45+
fn inline(_type_map: &mut specta::TypeMap, _generics: specta::Generics) -> specta::DataType {
46+
specta::DataType::Any
47+
}
48+
}

editor/src/messages/portfolio/document/node_graph/graph_operation_message_handler.rs

+7-9
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ use graphene_core::{Artboard, Color};
1616
use transform_utils::LayerBounds;
1717

1818
use glam::{DAffine2, DVec2, IVec2};
19-
use usvg::NodeExt;
2019

2120
pub mod transform_utils;
2221

@@ -761,7 +760,6 @@ impl MessageHandler<GraphOperationMessage, GraphOperationHandlerData<'_>> for Gr
761760
parent,
762761
insert_index,
763762
} => {
764-
use usvg::TreeParsing;
765763
let tree = match usvg::Tree::from_str(&svg, &usvg::Options::default()) {
766764
Ok(t) => t,
767765
Err(e) => {
@@ -774,7 +772,7 @@ impl MessageHandler<GraphOperationMessage, GraphOperationHandlerData<'_>> for Gr
774772
};
775773
let mut modify_inputs = ModifyInputsContext::new(document_network, document_metadata, node_graph, responses);
776774

777-
import_usvg_node(&mut modify_inputs, &tree.root, transform, id, parent, insert_index);
775+
import_usvg_node(&mut modify_inputs, &usvg::Node::Group(Box::new(tree.root)), transform, id, parent, insert_index);
778776
load_network_structure(document_network, document_metadata, selected_nodes, collapsed);
779777
}
780778
}
@@ -803,14 +801,14 @@ fn import_usvg_node(modify_inputs: &mut ModifyInputsContext, node: &usvg::Node,
803801
return;
804802
};
805803
modify_inputs.layer_node = Some(layer);
806-
match &*node.borrow() {
807-
usvg::NodeKind::Group(_group) => {
808-
for child in node.children() {
804+
match node {
805+
usvg::Node::Group(group) => {
806+
for child in &group.children {
809807
import_usvg_node(modify_inputs, &child, transform, NodeId(generate_uuid()), LayerNodeIdentifier::new_unchecked(layer), -1);
810808
}
811809
modify_inputs.layer_node = Some(layer);
812810
}
813-
usvg::NodeKind::Path(path) => {
811+
usvg::Node::Path(path) => {
814812
let subpaths = convert_usvg_path(path);
815813
let bounds = subpaths.iter().filter_map(|subpath| subpath.bounding_box()).reduce(Quad::combine_bounds).unwrap_or_default();
816814
let transformed_bounds = subpaths
@@ -836,10 +834,10 @@ fn import_usvg_node(modify_inputs: &mut ModifyInputsContext, node: &usvg::Node,
836834
);
837835
apply_usvg_stroke(&path.stroke, modify_inputs);
838836
}
839-
usvg::NodeKind::Image(_image) => {
837+
usvg::Node::Image(_image) => {
840838
warn!("Skip image")
841839
}
842-
usvg::NodeKind::Text(text) => {
840+
usvg::Node::Text(text) => {
843841
let font = Font::new(crate::consts::DEFAULT_FONT_FAMILY.to_string(), crate::consts::DEFAULT_FONT_STYLE.to_string());
844842
modify_inputs.insert_text(text.chunks.iter().map(|chunk| chunk.text.clone()).collect(), font, 24., layer);
845843
modify_inputs.fill_set(Fill::Solid(Color::BLACK));

editor/src/messages/portfolio/document/node_graph/node_graph_message_handler/document_node_types.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1490,7 +1490,7 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
14901490
name: "Render Texture".to_string(),
14911491
inputs: vec![
14921492
NodeInput::Network(concrete!(ShaderInputFrame<WgpuExecutor>)),
1493-
NodeInput::Network(concrete!(Arc<SurfaceHandle<<WgpuExecutor as GpuExecutor>::Surface>>)),
1493+
NodeInput::Network(concrete!(Arc<SurfaceHandle<<WgpuExecutor as GpuExecutor>::Surface<'_>>>)),
14941494
NodeInput::node(NodeId(0), 0),
14951495
],
14961496
implementation: DocumentNodeImplementation::Unresolved(ProtoNodeIdentifier::new("gpu_executor::RenderTextureNode<_, _>")),

editor/src/messages/portfolio/document/overlays/utility_types.rs

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ pub fn empty_provider() -> OverlayProvider {
1919
pub struct OverlayContext {
2020
// Serde functionality isn't used but is required by the message system macros
2121
#[serde(skip, default = "overlay_canvas_context")]
22+
#[specta(skip)]
2223
pub render_context: web_sys::CanvasRenderingContext2d,
2324
pub size: DVec2,
2425
}

frontend/wasm/Cargo.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@ wasm-bindgen = { workspace = true }
2828
serde-wasm-bindgen = "0.6"
2929
js-sys = { workspace = true }
3030
wasm-bindgen-futures = { workspace = true }
31-
ron = { version = "0.8", optional = true }
31+
ron = { workspace = true, optional = true }
3232
bezier-rs = { workspace = true }
3333
# 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
34-
wgpu = { version = "0.17", features = ["fragile-send-sync-non-atomic-wasm"] }
34+
wgpu = { workspace = true, features = ["fragile-send-sync-non-atomic-wasm"] }
3535
meval = "0.2.0"
3636

3737
[dependencies.web-sys]

libraries/bezier-rs/Cargo.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ repository = "https://github.com/GraphiteEditor/Graphite/tree/master/libraries/b
1414
documentation = "https://graphite.rs/libraries/bezier-rs/"
1515

1616
[dependencies]
17-
glam = { version = "0.24", features = ["serde"] }
17+
glam = { version = "0.25", features = ["serde"] }
1818

1919
dyn-any = { version = "0.3.0", path = "../dyn-any", optional = true }
20-
serde = { version = "1.0", workspace = true, optional = true }
20+
serde = { workspace = true, optional = true }
2121
log = { workspace = true, optional = true }

libraries/dyn-any/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ documentation = "https://docs.rs/dyn-any"
1414
[dependencies]
1515
dyn-any-derive = { path = "derive", version = "0.3.0", optional = true }
1616
log = { version = "0.4", optional = true }
17-
glam = { version = "0.24", optional = true, default-features = false }
17+
glam = { version = "0.25", optional = true, default-features = false }
1818

1919
[features]
2020
derive = ["dyn-any-derive"]

node-graph/gcore/src/graphic_element.rs

+22-15
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ impl GraphicGroup {
233233
};
234234

235235
pub fn to_usvg_tree(&self, resolution: UVec2, viewbox: [DVec2; 2]) -> usvg::Tree {
236-
let root_node = usvg::Node::new(usvg::NodeKind::Group(usvg::Group::default()));
236+
let mut root_node = usvg::Group::default();
237237
let tree = usvg::Tree {
238238
size: usvg::Size::from_wh(resolution.x as f32, resolution.y as f32).unwrap(),
239239
view_box: usvg::ViewBox {
@@ -244,7 +244,7 @@ impl GraphicGroup {
244244
};
245245

246246
for element in self.iter() {
247-
root_node.append(element.to_usvg_node());
247+
root_node.children.push(element.to_usvg_node());
248248
}
249249
tree
250250
}
@@ -283,35 +283,34 @@ impl GraphicElement {
283283
}
284284
let path = builder.finish().unwrap();
285285
let mut path = usvg::Path::new(path.into());
286-
path.transform = transform;
286+
path.abs_transform = transform;
287287
// TODO: use proper style
288288
path.fill = None;
289289
path.stroke = Some(usvg::Stroke::default());
290-
usvg::Node::new(usvg::NodeKind::Path(path))
290+
usvg::Node::Path(Box::new(path))
291291
}
292292
GraphicElement::ImageFrame(image_frame) => {
293293
if image_frame.image.width * image_frame.image.height == 0 {
294-
return usvg::Node::new(usvg::NodeKind::Group(usvg::Group::default()));
294+
return usvg::Node::Group(Box::new(usvg::Group::default()));
295295
}
296296
let png = image_frame.image.to_png();
297-
usvg::Node::new(usvg::NodeKind::Image(usvg::Image {
297+
usvg::Node::Image(Box::new(usvg::Image {
298298
id: String::new(),
299-
transform: to_transform(image_frame.transform),
299+
abs_transform: to_transform(image_frame.transform),
300300
visibility: usvg::Visibility::Visible,
301301
view_box: usvg::ViewBox {
302302
rect: usvg::NonZeroRect::from_xywh(0., 0., 1., 1.).unwrap(),
303303
aspect: usvg::AspectRatio::default(),
304304
},
305305
rendering_mode: usvg::ImageRendering::OptimizeSpeed,
306306
kind: usvg::ImageKind::PNG(png.into()),
307+
bounding_box: None,
307308
}))
308309
}
309-
GraphicElement::Text(text) => usvg::Node::new(usvg::NodeKind::Text(usvg::Text {
310+
GraphicElement::Text(text) => usvg::Node::Text(Box::new(usvg::Text {
310311
id: String::new(),
311-
transform: usvg::Transform::identity(),
312+
abs_transform: usvg::Transform::identity(),
312313
rendering_mode: usvg::TextRendering::OptimizeSpeed,
313-
positions: Vec::new(),
314-
rotate: Vec::new(),
315314
writing_mode: usvg::WritingMode::LeftToRight,
316315
chunks: vec![usvg::TextChunk {
317316
text: text.clone(),
@@ -321,17 +320,25 @@ impl GraphicElement {
321320
spans: vec![],
322321
text_flow: usvg::TextFlow::Linear,
323322
}],
323+
dx: Vec::new(),
324+
dy: Vec::new(),
325+
rotate: Vec::new(),
326+
bounding_box: None,
327+
abs_bounding_box: None,
328+
stroke_bounding_box: None,
329+
abs_stroke_bounding_box: None,
330+
flattened: None,
324331
})),
325332
GraphicElement::GraphicGroup(group) => {
326-
let group_element = usvg::Node::new(usvg::NodeKind::Group(usvg::Group::default()));
333+
let mut group_element = usvg::Group::default();
327334

328335
for element in group.iter() {
329-
group_element.append(element.to_usvg_node());
336+
group_element.children.push(element.to_usvg_node());
330337
}
331-
group_element
338+
usvg::Node::Group(Box::new(group_element))
332339
}
333340
// TODO
334-
GraphicElement::Artboard(_board) => usvg::Node::new(usvg::NodeKind::Group(usvg::Group::default())),
341+
GraphicElement::Artboard(_board) => usvg::Node::Group(Box::new(usvg::Group::default())),
335342
}
336343
}
337344
}

0 commit comments

Comments
 (0)