mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2025-08-04 13:30:48 +00:00
Update dependencies and lock files (#1841)
* Bump lock files * Fix glam mismatch version * Add tokio feature * Update all deps * Fix gpu-compiler not able to reference the root workspace * Bump a few more deps --------- Co-authored-by: Keavon Chambers <keavon@keavon.com>
This commit is contained in:
parent
ab71d26d84
commit
fa1535d0bb
31 changed files with 7466 additions and 8962 deletions
382
Cargo.lock
generated
382
Cargo.lock
generated
File diff suppressed because it is too large
Load diff
15
Cargo.toml
15
Cargo.toml
|
@ -55,8 +55,8 @@ axum = "0.7"
|
|||
chrono = "0.4"
|
||||
ron = "0.8"
|
||||
fastnoise-lite = "1.1"
|
||||
spirv-std = { git = "https://github.com/EmbarkStudios/rust-gpu.git" }
|
||||
wgpu-types = "0.17"
|
||||
spirv-std = { git = "https://github.com/GraphiteEditor/rust-gpu.git" }
|
||||
wgpu-types = "0.20"
|
||||
wgpu = { version = "0.20", features = ["strict_asserts", "api_log_info"] }
|
||||
once_cell = "1.13" # Remove when `core::cell::LazyCell` (<https://doc.rust-lang.org/core/cell/struct.LazyCell.html>) is stabilized in Rust 1.80 and we bump our MSRV
|
||||
wasm-bindgen = "=0.2.92" # NOTICE: ensure this stays in sync with the `wasm-bindgen-cli` version in `website/content/volunteer/guide/getting-started/_index.md`. We pin this version because wasm-bindgen upgrades may break various things.
|
||||
|
@ -67,11 +67,11 @@ winit = "0.29"
|
|||
url = "2.5"
|
||||
tokio = { version = "1.29", features = ["fs", "io-std"] }
|
||||
vello = "0.2"
|
||||
resvg = "0.41"
|
||||
usvg = "0.41"
|
||||
resvg = "0.42"
|
||||
usvg = "0.42"
|
||||
rand = { version = "0.8", default-features = false }
|
||||
rand_chacha = "0.3"
|
||||
glam = { version = "0.25", default-features = false, features = ["serde"] }
|
||||
glam = { version = "0.28", default-features = false, features = ["serde"] }
|
||||
base64 = "0.22"
|
||||
image = { version = "0.25", default-features = false, features = ["png"] }
|
||||
rustybuzz = "0.17"
|
||||
|
@ -83,15 +83,14 @@ num-derive = "0.4"
|
|||
num-traits = { version = "0.2", default-features = false, features = ["i128"] }
|
||||
specta = { git = "https://github.com/oscartbeaumont/specta.git", features = [
|
||||
"glam",
|
||||
"derive",
|
||||
# "typescript",
|
||||
] }
|
||||
syn = { version = "2.0", default-features = false, features = [
|
||||
"full",
|
||||
"derive",
|
||||
] }
|
||||
kurbo = { version = "0.11.0", features = [
|
||||
"serde",
|
||||
] }
|
||||
kurbo = { version = "0.11.0", features = ["serde"] }
|
||||
|
||||
[profile.dev]
|
||||
opt-level = 1
|
||||
|
|
|
@ -569,8 +569,7 @@ impl MessageHandler<GraphOperationMessage, GraphOperationMessageData<'_>> for Gr
|
|||
parent,
|
||||
insert_index,
|
||||
} => {
|
||||
let database = usvg::fontdb::Database::new();
|
||||
let tree = match usvg::Tree::from_str(&svg, &usvg::Options::default(), &database) {
|
||||
let tree = match usvg::Tree::from_str(&svg, &usvg::Options::default()) {
|
||||
Ok(t) => t,
|
||||
Err(e) => {
|
||||
responses.add(DocumentMessage::DocumentHistoryBackward);
|
||||
|
|
|
@ -304,7 +304,7 @@ impl MessageHandler<NavigationMessage, NavigationMessageData<'_>> for Navigation
|
|||
let half_viewport = ipp.viewport_bounds.size() / 2.;
|
||||
let start_offset = self.mouse_position - half_viewport;
|
||||
let end_offset = ipp.mouse.position - half_viewport;
|
||||
let angle = start_offset.angle_between(end_offset);
|
||||
let angle = start_offset.angle_to(end_offset);
|
||||
|
||||
tilt_raw_not_snapped + angle
|
||||
};
|
||||
|
|
|
@ -435,7 +435,7 @@ pub fn are_manipulator_handles_colinear(group: &bezier_rs::ManipulatorGroup<Poin
|
|||
let anchor_is_endpoint = !subpath.closed() && (index == 0 || index == subpath.len() - 1);
|
||||
|
||||
// Unless this is an endpoint, check if both handles are colinear (within an angular epsilon)
|
||||
!anchor_is_endpoint && handle_in.is_some_and(|handle_in| handle_out.is_some_and(|handle_out| handle_in.angle_between(handle_out) < 1e-5))
|
||||
!anchor_is_endpoint && handle_in.is_some_and(|handle_in| handle_out.is_some_and(|handle_out| handle_in.angle_to(handle_out) < 1e-5))
|
||||
}
|
||||
|
||||
pub fn get_layer_snap_points(layer: LayerNodeIdentifier, snap_data: &SnapData, points: &mut Vec<SnapCandidatePoint>) {
|
||||
|
|
|
@ -204,7 +204,7 @@ pub fn axis_align_drag(axis_align: bool, position: DVec2, start: DVec2) -> DVec2
|
|||
if axis_align {
|
||||
let mouse_position = position - start;
|
||||
let snap_resolution = SELECTION_DRAG_ANGLE.to_radians();
|
||||
let angle = -mouse_position.angle_between(DVec2::X);
|
||||
let angle = -mouse_position.angle_to(DVec2::X);
|
||||
let snapped_angle = (angle / snap_resolution).round() * snap_resolution;
|
||||
if snapped_angle.is_finite() {
|
||||
start + DVec2::new(snapped_angle.cos(), snapped_angle.sin()) * mouse_position.length()
|
||||
|
|
|
@ -163,7 +163,7 @@ impl SelectedGradient {
|
|||
let delta = point - mouse;
|
||||
|
||||
let length = delta.length();
|
||||
let mut angle = -delta.angle_between(DVec2::X);
|
||||
let mut angle = -delta.angle_to(DVec2::X);
|
||||
|
||||
let snap_resolution = LINE_ROTATE_SNAP_ANGLE.to_radians();
|
||||
angle = (angle / snap_resolution).round() * snap_resolution;
|
||||
|
@ -181,7 +181,7 @@ impl SelectedGradient {
|
|||
let (start, end) = (self.transform.transform_point2(self.gradient.start), self.transform.transform_point2(self.gradient.end));
|
||||
|
||||
// Calculate the new position by finding the closest point on the line
|
||||
let new_pos = ((end - start).angle_between(mouse - start)).cos() * start.distance(mouse) / start.distance(end);
|
||||
let new_pos = ((end - start).angle_to(mouse - start)).cos() * start.distance(mouse) / start.distance(end);
|
||||
|
||||
// Should not go off end but can swap
|
||||
let clamped = new_pos.clamp(0., 1.);
|
||||
|
@ -332,7 +332,7 @@ impl Fsm for GradientToolFsmState {
|
|||
let (start, end) = (transform.transform_point2(gradient.start), transform.transform_point2(gradient.end));
|
||||
|
||||
// Compute the distance from the mouse to the gradient line in viewport space
|
||||
let distance = (end - start).angle_between(mouse - start).sin() * (mouse - start).length();
|
||||
let distance = (end - start).angle_to(mouse - start).sin() * (mouse - start).length();
|
||||
|
||||
// If click is on the line then insert point
|
||||
if distance < (SELECTION_THRESHOLD * 2.) {
|
||||
|
|
|
@ -299,7 +299,7 @@ fn generate_transform(tool_data: &mut LineToolData, snap_data: SnapData, lock_an
|
|||
let document_to_viewport = snap_data.document.metadata.document_to_viewport;
|
||||
let mut document_points = [tool_data.drag_start, document_to_viewport.inverse().transform_point2(tool_data.drag_current)];
|
||||
|
||||
let mut angle = -(document_points[1] - document_points[0]).angle_between(DVec2::X);
|
||||
let mut angle = -(document_points[1] - document_points[0]).angle_to(DVec2::X);
|
||||
let mut line_length = (document_points[1] - document_points[0]).length();
|
||||
if lock_angle {
|
||||
angle = tool_data.angle;
|
||||
|
@ -352,11 +352,11 @@ fn generate_transform(tool_data: &mut LineToolData, snap_data: SnapData, lock_an
|
|||
}
|
||||
|
||||
// Used for keeping the same angle next frame
|
||||
tool_data.angle = -(document_points[1] - document_points[0]).angle_between(DVec2::X);
|
||||
tool_data.angle = -(document_points[1] - document_points[0]).angle_to(DVec2::X);
|
||||
|
||||
let viewport_points = [document_to_viewport.transform_point2(document_points[0]), document_to_viewport.transform_point2(document_points[1])];
|
||||
let line_length = (viewport_points[1] - viewport_points[0]).length();
|
||||
let angle = -(viewport_points[1] - viewport_points[0]).angle_between(DVec2::X);
|
||||
let angle = -(viewport_points[1] - viewport_points[0]).angle_to(DVec2::X);
|
||||
GraphOperationMessage::TransformSet {
|
||||
layer: tool_data.layer.unwrap(),
|
||||
transform: glam::DAffine2::from_scale_angle_translation(DVec2::new(line_length, 1.), angle, viewport_points[0]),
|
||||
|
|
|
@ -362,7 +362,7 @@ impl PenToolData {
|
|||
let angle = if lock_angle {
|
||||
self.angle
|
||||
} else if (relative - document_pos) != DVec2::ZERO && !lock_angle {
|
||||
(-(relative - document_pos).angle_between(DVec2::X) / resolution).round() * resolution
|
||||
(-(relative - document_pos).angle_to(DVec2::X) / resolution).round() * resolution
|
||||
} else {
|
||||
self.angle
|
||||
};
|
||||
|
@ -405,7 +405,7 @@ impl PenToolData {
|
|||
|
||||
if let Some(relative) = relative.map(|layer| transform.transform_point2(layer)) {
|
||||
if (relative - document_pos) != DVec2::ZERO {
|
||||
self.angle = -(relative - document_pos).angle_between(DVec2::X)
|
||||
self.angle = -(relative - document_pos).angle_to(DVec2::X)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -757,7 +757,7 @@ impl Fsm for SelectToolFsmState {
|
|||
let start_offset = tool_data.drag_start - bounds.center_of_transformation;
|
||||
let end_offset = input.mouse.position - bounds.center_of_transformation;
|
||||
|
||||
start_offset.angle_between(end_offset)
|
||||
start_offset.angle_to(end_offset)
|
||||
};
|
||||
|
||||
let snapped_angle = if input.keyboard.key(modifier_keys.snap_angle) {
|
||||
|
|
|
@ -186,7 +186,7 @@ impl<'a> MessageHandler<TransformLayerMessage, TransformData<'a>> for TransformL
|
|||
TransformOperation::Rotating(rotation) => {
|
||||
let start_offset = *selected.pivot - self.mouse_position;
|
||||
let end_offset = *selected.pivot - input.mouse.position;
|
||||
let angle = start_offset.angle_between(end_offset);
|
||||
let angle = start_offset.angle_to(end_offset);
|
||||
|
||||
let change = if self.slow { angle / SLOWING_DIVISOR } else { angle };
|
||||
|
||||
|
|
5654
frontend/package-lock.json
generated
5654
frontend/package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
@ -15,7 +15,7 @@ documentation = "https://graphite.rs/libraries/bezier-rs/"
|
|||
|
||||
[dependencies]
|
||||
# Required dependencies
|
||||
glam = { version = "0.25", features = ["serde"] }
|
||||
glam = { version = "0.28", features = ["serde"] }
|
||||
|
||||
# Optional local dependencies
|
||||
dyn-any = { version = "0.3.0", path = "../dyn-any", optional = true }
|
||||
|
|
|
@ -273,7 +273,7 @@ impl Bezier {
|
|||
BezierHandles::Cubic { .. } => {
|
||||
// Axis align the curve.
|
||||
let translated_bezier = self.translate(-self.start);
|
||||
let angle = translated_bezier.end.angle_between(DVec2::new(1., 0.));
|
||||
let angle = translated_bezier.end.angle_to(DVec2::new(1., 0.));
|
||||
let rotated_bezier = translated_bezier.rotate(angle);
|
||||
if let BezierHandles::Cubic { handle_start, handle_end } = rotated_bezier.handles {
|
||||
// These formulas and naming conventions follows https://pomax.github.io/bezierinfo/#inflections
|
||||
|
@ -413,7 +413,7 @@ impl Bezier {
|
|||
if other.is_linear() {
|
||||
// Rotate the bezier and the line by the angle that the line makes with the x axis
|
||||
let line_directional_vector = other.end - other.start;
|
||||
let angle = line_directional_vector.angle_between(DVec2::new(0., 1.));
|
||||
let angle = line_directional_vector.angle_to(DVec2::new(0., 1.));
|
||||
let rotation_matrix = DMat2::from_angle(angle);
|
||||
let rotated_bezier = self.apply_transformation(|point| rotation_matrix * point);
|
||||
|
||||
|
@ -452,7 +452,7 @@ impl Bezier {
|
|||
/// If this needs to be called frequently with a line of the same rotation angle, consider instead using [`line_test_crossings_prerotated`] and moving this function's setup code into your own logic before the repeated call.
|
||||
pub fn line_test_crossings(&self, point_on_line: DVec2, direction_vector: DVec2) -> impl Iterator<Item = f64> + '_ {
|
||||
// Rotate the bezier and the line by the angle that the line makes with the x axis
|
||||
let angle = direction_vector.angle_between(DVec2::new(0., 1.));
|
||||
let angle = direction_vector.angle_to(DVec2::new(0., 1.));
|
||||
let rotation_matrix = DMat2::from_angle(angle);
|
||||
let rotated_bezier = self.apply_transformation(|point| rotation_matrix * point);
|
||||
|
||||
|
@ -476,7 +476,7 @@ impl Bezier {
|
|||
/// If this needs to be called frequently with a ray of the same rotation angle, consider instead using [`ray_test_crossings_prerotated`] and moving this function's setup code into your own logic before the repeated call.
|
||||
pub fn ray_test_crossings(&self, ray_start: DVec2, ray_direction: DVec2) -> impl Iterator<Item = f64> + '_ {
|
||||
// Rotate the bezier and the line by the angle that the line makes with the x axis
|
||||
let angle = ray_direction.angle_between(DVec2::new(0., 1.));
|
||||
let angle = ray_direction.angle_to(DVec2::new(0., 1.));
|
||||
let rotation_matrix = DMat2::from_angle(angle);
|
||||
let rotated_bezier = self.apply_transformation(|point| rotation_matrix * point);
|
||||
|
||||
|
|
|
@ -140,8 +140,8 @@ impl Bezier {
|
|||
}
|
||||
// Verify all the handles are located on a single side of the curve.
|
||||
if let BezierHandles::Cubic { handle_start, handle_end } = self.handles {
|
||||
let angle_1 = (self.end - self.start).angle_between(handle_start - self.start);
|
||||
let angle_2 = (self.end - self.start).angle_between(handle_end - self.start);
|
||||
let angle_1 = (self.end - self.start).angle_to(handle_start - self.start);
|
||||
let angle_2 = (self.end - self.start).angle_to(handle_end - self.start);
|
||||
if (angle_1 > 0. && angle_2 < 0.) || (angle_1 < 0. && angle_2 > 0.) {
|
||||
return false;
|
||||
}
|
||||
|
@ -533,9 +533,9 @@ impl Bezier {
|
|||
let center = wrapped_center.unwrap();
|
||||
let radius = center.distance(p1);
|
||||
|
||||
let angle_p1 = DVec2::new(1., 0.).angle_between(p1 - center);
|
||||
let angle_p2 = DVec2::new(1., 0.).angle_between(p2 - center);
|
||||
let angle_p3 = DVec2::new(1., 0.).angle_between(p3 - center);
|
||||
let angle_p1 = DVec2::new(1., 0.).angle_to(p1 - center);
|
||||
let angle_p2 = DVec2::new(1., 0.).angle_to(p2 - center);
|
||||
let angle_p3 = DVec2::new(1., 0.).angle_to(p3 - center);
|
||||
|
||||
let mut start_angle = angle_p1;
|
||||
let mut end_angle = angle_p3;
|
||||
|
|
|
@ -377,7 +377,7 @@ impl<PointId: crate::Identifier> Subpath<PointId> {
|
|||
// Draw the miter join if the intersection occurs in the correct direction with respect to the path
|
||||
if start_to_intersection.normalize().abs_diff_eq(in_tangent, MAX_ABSOLUTE_DIFFERENCE)
|
||||
&& intersection_to_end.normalize().abs_diff_eq(out_tangent, MAX_ABSOLUTE_DIFFERENCE)
|
||||
&& miter_limit >= 1. / (start_to_intersection.angle_between(-intersection_to_end).abs() / 2.).sin()
|
||||
&& miter_limit >= 1. / (start_to_intersection.angle_to(-intersection_to_end).abs() / 2.).sin()
|
||||
{
|
||||
return Some(ManipulatorGroup {
|
||||
anchor: intersection,
|
||||
|
@ -406,10 +406,10 @@ impl<PointId: crate::Identifier> Subpath<PointId> {
|
|||
let in_segment = self.get_segment(self.len_segments() - 1).unwrap();
|
||||
let in_tangent = in_segment.tangent(TValue::Parametric(1.));
|
||||
|
||||
let mut angle = center_to_right.angle_between(center_to_left) / 2.;
|
||||
let mut angle = center_to_right.angle_to(center_to_left) / 2.;
|
||||
let mut arc_point = center + DMat2::from_angle(angle).mul_vec2(center_to_right);
|
||||
|
||||
if (arc_point - left).angle_between(in_tangent).abs() > PI / 2. {
|
||||
if (arc_point - left).angle_to(in_tangent).abs() > PI / 2. {
|
||||
angle = angle - PI * (if angle < 0. { -1. } else { 1. });
|
||||
arc_point = center + DMat2::from_angle(angle).mul_vec2(center_to_right);
|
||||
}
|
||||
|
@ -874,8 +874,8 @@ mod tests {
|
|||
|
||||
let middle = (round_start + round_end) / 2.;
|
||||
|
||||
assert!((round_point - middle).angle_between(round_start - middle) > 0.);
|
||||
assert!((round_end - middle).angle_between(round_point - middle) > 0.);
|
||||
assert!((round_point - middle).angle_to(round_start - middle) > 0.);
|
||||
assert!((round_end - middle).angle_to(round_point - middle) > 0.);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -915,7 +915,7 @@ mod tests {
|
|||
|
||||
let middle = (round_start + round_end) / 2.;
|
||||
|
||||
assert!((round_point - middle).angle_between(round_start - middle) < 0.);
|
||||
assert!((round_end - middle).angle_between(round_point - middle) < 0.);
|
||||
assert!((round_point - middle).angle_to(round_start - middle) < 0.);
|
||||
assert!((round_end - middle).angle_to(round_point - middle) < 0.);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -388,7 +388,7 @@ impl<PointId: crate::Identifier> Subpath<PointId> {
|
|||
// Calculate the angle formed between two consecutive Subpaths
|
||||
let out_tangent = self.get_segment(i).unwrap().tangent(TValue::Parametric(1.));
|
||||
let in_tangent = self.get_segment(j).unwrap().tangent(TValue::Parametric(0.));
|
||||
let angle = out_tangent.angle_between(in_tangent);
|
||||
let angle = out_tangent.angle_to(in_tangent);
|
||||
|
||||
// The angle is concave. The Subpath overlap and must be clipped
|
||||
let mut apply_join = true;
|
||||
|
@ -428,7 +428,7 @@ impl<PointId: crate::Identifier> Subpath<PointId> {
|
|||
if self.closed {
|
||||
let out_tangent = self.get_segment(self.len_segments() - 1).unwrap().tangent(TValue::Parametric(1.));
|
||||
let in_tangent = self.get_segment(0).unwrap().tangent(TValue::Parametric(0.));
|
||||
let angle = out_tangent.angle_between(in_tangent);
|
||||
let angle = out_tangent.angle_to(in_tangent);
|
||||
|
||||
let mut apply_join = true;
|
||||
if (angle > 0. && distance > 0.) || (angle < 0. && distance < 0.) {
|
||||
|
|
|
@ -29,7 +29,7 @@ dyn-any-derive = { path = "derive", optional = true }
|
|||
|
||||
# Optional dependencies
|
||||
log = { version = "0.4", optional = true }
|
||||
glam = { version = "0.25", optional = true, default-features = false }
|
||||
glam = { version = "0.28", optional = true, default-features = false }
|
||||
|
||||
[package.metadata.docs.rs]
|
||||
all-features = true
|
||||
|
|
|
@ -51,7 +51,7 @@ impl Quad {
|
|||
let offset = |index_before, index, index_after| {
|
||||
let [point_before, point, point_after]: [DVec2; 3] = [self.0[index_before], self.0[index], self.0[index_after]];
|
||||
let [line_in, line_out] = [point - point_before, point_after - point];
|
||||
let angle = line_in.angle_between(-line_out);
|
||||
let angle = line_in.angle_to(-line_out);
|
||||
let offset_length = offset / (std::f64::consts::FRAC_PI_2 - angle / 2.).cos();
|
||||
point + (line_in.perp().normalize_or_zero() + line_out.perp().normalize_or_zero()).normalize_or_zero() * offset_length
|
||||
};
|
||||
|
|
|
@ -203,7 +203,7 @@ fn construct_vector2(_primary: (), x: f64, y: f64) -> glam::DVec2 {
|
|||
|
||||
// Size Of
|
||||
#[cfg(feature = "std")]
|
||||
struct SizeOfNode;
|
||||
pub struct SizeOfNode;
|
||||
#[cfg(feature = "std")]
|
||||
#[node_macro::node_fn(SizeOfNode)]
|
||||
fn flat_map(ty: crate::Type) -> Option<usize> {
|
||||
|
|
|
@ -81,7 +81,7 @@ impl<T: Linear + Debug + Copy> LinearChannel for T {}
|
|||
|
||||
use num_derive::*;
|
||||
#[derive(Copy, Clone, Debug, PartialEq, PartialOrd, Num, NumCast, NumOps, One, Zero, ToPrimitive, FromPrimitive)]
|
||||
struct SRGBGammaFloat(f32);
|
||||
pub struct SRGBGammaFloat(f32);
|
||||
|
||||
impl Channel for SRGBGammaFloat {
|
||||
#[inline(always)]
|
||||
|
|
|
@ -178,7 +178,7 @@ impl Gradient {
|
|||
let (start, end) = (transform.transform_point2(self.start), transform.transform_point2(self.end));
|
||||
|
||||
// Calculate the new position by finding the closest point on the line
|
||||
let new_position = ((end - start).angle_between(mouse - start)).cos() * start.distance(mouse) / start.distance(end);
|
||||
let new_position = ((end - start).angle_to(mouse - start)).cos() * start.distance(mouse) / start.distance(end);
|
||||
|
||||
// Don't insert point past end of line
|
||||
if !(0. ..=1.).contains(&new_position) {
|
||||
|
|
|
@ -638,7 +638,7 @@ mod test {
|
|||
for (index, (_, subpath)) in repeated.region_bezier_paths().enumerate() {
|
||||
let expected_angle = (index as f64 + 1.) * 45.;
|
||||
let center = (subpath.manipulator_groups()[0].anchor + subpath.manipulator_groups()[2].anchor) / 2.;
|
||||
let actual_angle = DVec2::Y.angle_between(center).to_degrees();
|
||||
let actual_angle = DVec2::Y.angle_to(center).to_degrees();
|
||||
assert!((actual_angle - expected_angle).abs() % 360. < 1e-5);
|
||||
}
|
||||
}
|
||||
|
|
3307
node-graph/gpu-compiler/Cargo.lock
generated
3307
node-graph/gpu-compiler/Cargo.lock
generated
File diff suppressed because it is too large
Load diff
|
@ -9,25 +9,28 @@ default = []
|
|||
profiling = ["nvtx"]
|
||||
serde = ["graphene-core/serde", "glam/serde"]
|
||||
|
||||
# NOTE: We can't use workspace dependencies in this crate because it uses a different toolchain
|
||||
[dependencies]
|
||||
# Local dependencies
|
||||
graph-craft = { path = "../graph-craft", features = ["serde"] }
|
||||
gpu-executor = { path = "../gpu-executor" }
|
||||
|
||||
# Workspace dependencies
|
||||
graphene-core = { workspace = true, features = ["async", "std", "alloc"] }
|
||||
dyn-any = { workspace = true, features = ["log-bad-types", "rc", "glam"] }
|
||||
num-traits = { workspace = true }
|
||||
log = { workspace = true }
|
||||
serde = { workspace = true }
|
||||
glam = { workspace = true }
|
||||
base64 = { workspace = true }
|
||||
bytemuck = { workspace = true }
|
||||
tempfile = { workspace = true }
|
||||
anyhow = { workspace = true }
|
||||
serde_json = { workspace = true }
|
||||
graphene-core = { path = "../gcore", features = ["std", "alloc"] }
|
||||
dyn-any = { path = "../../libraries/dyn-any", features = [
|
||||
"log-bad-types",
|
||||
"rc",
|
||||
"glam",
|
||||
] }
|
||||
|
||||
# Required dependencies
|
||||
num-traits = { version = "0.2", default-features = false, features = ["i128"] }
|
||||
log = "0.4"
|
||||
serde = { version = "1.0", features = ["derive", "rc"] }
|
||||
glam = { version = "0.28", default-features = false, features = ["serde"] }
|
||||
base64 = "0.22"
|
||||
bytemuck = { version = "1.13", features = ["derive"] }
|
||||
tempfile = "3.6"
|
||||
anyhow = "1.0"
|
||||
serde_json = "1.0"
|
||||
tera = { version = "1.17.1" }
|
||||
spirv-builder = { version = "0.9", default-features = false, features = [
|
||||
"use-installed-tools",
|
||||
|
|
|
@ -9,6 +9,7 @@ default = ["dealloc_nodes"]
|
|||
serde = ["dep:serde", "graphene-core/serde", "glam/serde", "bezier-rs/serde"]
|
||||
dealloc_nodes = []
|
||||
wgpu = []
|
||||
tokio = ["dep:tokio"]
|
||||
|
||||
[dependencies]
|
||||
# Local dependencies
|
||||
|
@ -35,6 +36,7 @@ wgpu-executor = { workspace = true }
|
|||
|
||||
# Optional workspace dependencies
|
||||
serde = { workspace = true, optional = true }
|
||||
tokio = { workspace = true, optional = true }
|
||||
|
||||
[target.'cfg(target_arch = "wasm32")'.dependencies]
|
||||
# Workspace dependencies
|
||||
|
|
|
@ -225,8 +225,7 @@ fn to_svg_string(vector: &VectorData, transform: DAffine2) -> String {
|
|||
|
||||
fn from_svg_string(svg_string: &str) -> VectorData {
|
||||
let svg = format!(r#"<svg xmlns="http://www.w3.org/2000/svg"><path d="{}"></path></svg>"#, svg_string);
|
||||
let fontdb = usvg::fontdb::Database::new();
|
||||
let Some(tree) = usvg::Tree::from_str(&svg, &Default::default(), &fontdb).ok() else {
|
||||
let Some(tree) = usvg::Tree::from_str(&svg, &Default::default()).ok() else {
|
||||
return VectorData::empty();
|
||||
};
|
||||
let Some(usvg::Node::Path(path)) = tree.root().children().first() else {
|
||||
|
|
2892
website/other/bezier-rs-demos/package-lock.json
generated
2892
website/other/bezier-rs-demos/package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
@ -33,8 +33,5 @@
|
|||
"ts-node": "^10.9.2",
|
||||
"typescript": "^5.4.2",
|
||||
"vite": "^5.1.5"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"wasm-pack": "0.12.1"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,16 +6,6 @@ use bezier_rs::{ArcStrategy, ArcsOptions, Bezier, Identifier, TValue, TValueType
|
|||
use glam::DVec2;
|
||||
use wasm_bindgen::prelude::*;
|
||||
|
||||
#[derive(serde::Serialize, serde::Deserialize)]
|
||||
struct CircleSector {
|
||||
center: DVec2,
|
||||
radius: f64,
|
||||
#[serde(rename = "startAngle")]
|
||||
start_angle: f64,
|
||||
#[serde(rename = "endAngle")]
|
||||
end_angle: f64,
|
||||
}
|
||||
|
||||
#[wasm_bindgen]
|
||||
pub enum WasmMaximizeArcs {
|
||||
Automatic, // 0
|
||||
|
|
4052
website/package-lock.json
generated
4052
website/package-lock.json
generated
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue