Cargo fmt

This commit is contained in:
Dennis Kobert
2026-08-24 23:15:10 +02:00
parent 0d88e8be9f
commit 9aef511891
12 changed files with 134 additions and 97 deletions

View File

@@ -14,7 +14,9 @@ use crate::{NetworkId, NodeMetadataSource, PeerId, Position, Registry};
/// Test networks with Import inputs will fail compilation (which is expected).
fn verify_network_compiles(network: &NodeNetwork) -> Result<(), String> {
let compiler = Compiler {};
compiler.compile_single(network.clone(), &graph_craft::proto::Registry::new()).map_err(|e| format!("Compilation failed: {:?}", e))?;
compiler
.compile_single(network.clone(), &graph_craft::proto::Registry::new())
.map_err(|e| format!("Compilation failed: {:?}", e))?;
Ok(())
}

View File

@@ -2743,10 +2743,7 @@ pub fn stroke_properties(node_id: NodeId, context: &mut NodePropertiesContext) -
.for_socket(ParameterWidgetsInfo::new(node_id, PaintOrderInput::INDEX, true, context))
.property_row();
let disabled_number_input = NumberInput::default().unit(" px").disabled(has_dash_lengths);
let dash_lengths = array_of_number_widget(
ParameterWidgetsInfo::new(node_id, DashLengthsInput::INDEX, true, context),
TextInput::default().centered(true),
);
let dash_lengths = array_of_number_widget(ParameterWidgetsInfo::new(node_id, DashLengthsInput::INDEX, true, context), TextInput::default().centered(true));
let number_input = disabled_number_input;
let dash_offset = number_widget(ParameterWidgetsInfo::new(node_id, DashOffsetInput::INDEX, true, context), number_input);

View File

@@ -2012,10 +2012,10 @@ mod test_gradient {
pub use crate::test_utils::test_prelude::*;
use glam::DAffine2;
use graph_craft::document::value::TaggedValue;
use graphene_std::NodeInputDecleration;
use graphene_std::color::SRGBA8;
use graphene_std::vector::style::{GradientSpreadMethod, build_transform_with_y_preservation};
use graphene_std::vector::{GradientStop, GradientStops, fill};
use graphene_std::NodeInputDecleration;
use super::gradient_space_transform;

View File

@@ -10,7 +10,9 @@ fn compile_to_proto(c: &mut Criterion) {
for name in DEMO_ART {
let network = load_from_name(name);
c.bench_function(name, |b| b.iter_batched(|| network.clone(), |network| compile(black_box(network), registry), criterion::BatchSize::SmallInput));
c.bench_function(name, |b| {
b.iter_batched(|| network.clone(), |network| compile(black_box(network), registry), criterion::BatchSize::SmallInput)
});
}
}

View File

@@ -382,8 +382,10 @@ impl ProtoNetwork {
layout,
}),
ConstructionArgs::Nodes(inputs) => node.resolved.layout_meta.as_ref().and_then(|meta| {
let input_layouts: Vec<Option<&core_types::record::Layout>> =
inputs.iter().map(|input| self.nodes[input.0 as usize].1.resolved.layout.as_ref().map(|resolved| &resolved.layout)).collect();
let input_layouts: Vec<Option<&core_types::record::Layout>> = inputs
.iter()
.map(|input| self.nodes[input.0 as usize].1.resolved.layout.as_ref().map(|resolved| &resolved.layout))
.collect();
meta.sources.iter().all(|&source| input_layouts[source as usize].is_some()).then(|| meta.resolve(&input_layouts))
}),
ConstructionArgs::Inline(_) => None,
@@ -1042,13 +1044,7 @@ fn check_generic(types: &NodeIOTypes, input: &Type, parameters: &[Type], generic
.into_iter()
.chain(types.inputs.iter().map(|x| x.fn_input()).zip(parameters.iter().map(|x| x.fn_input())))
.chain(types.inputs.iter().map(|x| x.fn_output()).zip(parameters.iter().map(|x| x.fn_output())))
.chain(
types
.inputs
.iter()
.map(|x| record_element(x.fn_output()))
.zip(parameters.iter().map(|x| record_element(x.fn_output()))),
);
.chain(types.inputs.iter().map(|x| record_element(x.fn_output())).zip(parameters.iter().map(|x| record_element(x.fn_output()))));
let concrete_inputs = inputs.filter(|(ni, _)| matches!(ni, Some(Type::Generic(input)) if generic == input));
let mut outputs = concrete_inputs.flat_map(|(_, out)| out);
let out_ty = outputs
@@ -1090,10 +1086,7 @@ mod test {
ProtoNode {
construction_args: args,
resolved: Resolved {
layout: Some(core_types::record::RecordLayout {
frame_bytes: 1,
..Default::default()
}),
layout: Some(core_types::record::RecordLayout { frame_bytes: 1, ..Default::default() }),
..Default::default()
},
..Default::default()

View File

@@ -358,7 +358,6 @@ impl ContextDependencies {
self
}
pub fn sources(&self) -> &[SourceId] {
&self.sources
}

View File

@@ -268,8 +268,8 @@ impl Layout {
align: field.align,
read_erased: field.read_erased,
repark: field.repark,
content_hash: field.content_hash,
content_eq: field.content_eq,
content_hash: field.content_hash,
content_eq: field.content_eq,
})
.collect();
union = union.with_writes(union.depth, union.element, &writes);
@@ -818,14 +818,7 @@ impl<'a, El: Clone, N> ElementLazyInput<'a, El, N> {
impl<'a, Out, N> ElementLazyInput<'a, Out, N> {
/// `read` must be sound against the layout the offsets in `reads` were
/// resolved from; the macro proves both at wiring.
pub fn with_reads(
node: &'a N,
cell: &'a crate::node::StatusCell,
input_index: usize,
layout: &'a Layout,
reads: &'a [Option<usize>],
read: unsafe fn(Rec, &[Option<usize>]) -> Out,
) -> Self {
pub fn with_reads(node: &'a N, cell: &'a crate::node::StatusCell, input_index: usize, layout: &'a Layout, reads: &'a [Option<usize>], read: unsafe fn(Rec, &[Option<usize>]) -> Out) -> Self {
Self {
node,
cell,
@@ -1350,7 +1343,6 @@ pub unsafe fn read_element<T: Clone>(rec: Rec) -> T {
unsafe { borrow_element::<T>(rec) }.clone()
}
/// # Safety
/// `dst` must be fresh element storage of a record whose element is `T`.
/// `None` reports arena exhaustion for a parked element.

View File

@@ -2,7 +2,6 @@ use core_types::attribute::{Attr, BlendMode as BlendModeAttr, ClippingMask, Opac
use core_types::registry::types::Percentage;
use core_types::{BlendMode, Ctx};
/// Applies the blend mode to the input graphics. Setting this allows for customizing how overlapping content is composited together.
#[node_macro::node(category("Blending"))]
fn blend_mode<T>(

View File

@@ -5,14 +5,14 @@
//! tests; the node forms are the production authoring surface, and the
//! wiring is by hand until the compiler pass constructs layouts.
use core_types::Ctx;
use core_types::attribute::{Attr, EditorLayerPath, Opacity, RemoveAttr, Transform};
use glam::DAffine2;
use core_types::context::{DeriveCtx, ExtractIndex, ExtractIndices, IndexLink, InjectIndex};
use core_types::extent::{ExtentIn, LevelIn, ListIn, ValueIn};
use core_types::gpoll::{ErrorKind, Extent, GPoll, GraphError, Interrupt, Level};
use core_types::node::Lane;
use core_types::uuid::NodeId;
use core_types::Ctx;
use glam::DAffine2;
core_types::attribute! {
/// Test-only measured length of an element.
@@ -116,11 +116,7 @@ fn repeat_extent(content: ExtentIn<'_>, count: ValueIn<'_, u32>, _reverse: Value
/// Test-only lazy-carrier creator: each copy evaluates the content at its own
/// index and re-scales the row's opacity by the copy number.
#[node_macro::node(category("Test"), extent(repeat_faded_extent))]
fn repeat_faded<T>(
ctx: impl Ctx + DeriveCtx + ExtractIndex,
content: impl Node<Context<'_>, Output = (T, Attr<Opacity>)>,
count: u32,
) -> Result<IList<(T, Attr<Opacity>)>, Interrupt> {
fn repeat_faded<T>(ctx: impl Ctx + DeriveCtx + ExtractIndex, content: impl Node<Context<'_>, Output = (T, Attr<Opacity>)>, count: u32) -> Result<IList<(T, Attr<Opacity>)>, Interrupt> {
let inner = content.inner_extent(ctx)?;
let (copy, rest) = ctx.split_innermost(inner);
if copy >= count as u64 {
@@ -143,11 +139,7 @@ fn repeat_faded_extent(content: ExtentIn<'_>, count: ValueIn<'_, u32>, level: Le
/// Rank-model Extend: the output's top level is `base`'s lanes followed by
/// `new`'s, each side evaluated within its own index range.
#[node_macro::node(category("Test"), extent(extend_extent))]
fn extend<T>(
ctx: impl Ctx + ExtractIndex + InjectIndex + Copy,
base: impl Node<Context<'_>, Output = T>,
new: impl Node<Context<'_>, Output = T>,
) -> Result<T, Interrupt> {
fn extend<T>(ctx: impl Ctx + ExtractIndex + InjectIndex + Copy, base: impl Node<Context<'_>, Output = T>, new: impl Node<Context<'_>, Output = T>) -> Result<T, Interrupt> {
let split = match base.extent(ctx, Level::Total) {
GPoll::Final(Extent::Exactly(count)) => count as u64,
// A scalar side joins the concat as a single lane, per `Extent::sum`.
@@ -375,12 +367,7 @@ async fn double_async(_: impl Ctx, element: f64) -> f64 {
}
#[node_macro::node(category("Test"))]
fn fallback(
ctx: impl Ctx,
_: (),
#[expose] content: impl Node<Context<'_>, Output = (f64, Attr<Opacity>)>,
#[expose] alternate: impl Node<Context<'_>, Output = f64>,
) -> Result<f64, Interrupt> {
fn fallback(ctx: impl Ctx, _: (), #[expose] content: impl Node<Context<'_>, Output = (f64, Attr<Opacity>)>, #[expose] alternate: impl Node<Context<'_>, Output = f64>) -> Result<f64, Interrupt> {
let (element, opacity) = content.eval(ctx)?;
Ok(if *opacity > 0. { element } else { alternate.eval(ctx)? })
}
@@ -747,7 +734,14 @@ mod tests {
folded: None,
};
let repeat = install(
RepeatNode::new(RecordSource::new(IndexSourceNode { layout: base.clone() }, &base, &base), count_edge, reverse_edge, &base, &count_layout, &reverse_layout),
RepeatNode::new(
RecordSource::new(IndexSourceNode { layout: base.clone() }, &base, &base),
count_edge,
reverse_edge,
&base,
&count_layout,
&reverse_layout,
),
meta,
&[Some(&base)],
);
@@ -789,7 +783,14 @@ mod tests {
folded: None,
};
let repeat = install(
RepeatNode::new(RecordSource::new(IndexSourceNode { layout: base.clone() }, &base, &base), count_edge, reverse_edge, &base, &count_layout, &reverse_layout),
RepeatNode::new(
RecordSource::new(IndexSourceNode { layout: base.clone() }, &base, &base),
count_edge,
reverse_edge,
&base,
&count_layout,
&reverse_layout,
),
meta,
&[Some(&base)],
);
@@ -833,7 +834,14 @@ mod tests {
folded: None,
};
let repeat = install(
RepeatNode::new(RecordSource::new(content, &leveled_content, &leveled_content), count_edge, reverse_edge, &leveled_content, &count_layout, &reverse_layout),
RepeatNode::new(
RecordSource::new(content, &leveled_content, &leveled_content),
count_edge,
reverse_edge,
&leveled_content,
&count_layout,
&reverse_layout,
),
meta,
&[Some(&leveled_content)],
);
@@ -1157,7 +1165,14 @@ mod tests {
field: None,
};
install(
RepeatNode::new(RecordSource::new(content, &content_layout, &content_layout), count_edge, reverse_edge, &content_layout, count_layout, reverse_layout),
RepeatNode::new(
RecordSource::new(content, &content_layout, &content_layout),
count_edge,
reverse_edge,
&content_layout,
count_layout,
reverse_layout,
),
meta(),
&[Some(&content_layout)],
)
@@ -1536,7 +1551,14 @@ mod tests {
folded: None,
};
let nested = install(
RepeatNode::new(RecordSource::new(content, &leveled_content, &leveled_content), count_edge, reverse_edge, &leveled_content, &count_layout, &reverse_layout),
RepeatNode::new(
RecordSource::new(content, &leveled_content, &leveled_content),
count_edge,
reverse_edge,
&leveled_content,
&count_layout,
&reverse_layout,
),
meta,
&[Some(&leveled_content)],
);
@@ -1578,7 +1600,14 @@ mod tests {
folded: None,
};
let nested = install(
RepeatNode::new(RecordSource::new(content, &leveled_content, &leveled_content), count_edge, reverse_edge, &leveled_content, &count_layout, &reverse_layout),
RepeatNode::new(
RecordSource::new(content, &leveled_content, &leveled_content),
count_edge,
reverse_edge,
&leveled_content,
&count_layout,
&reverse_layout,
),
meta,
&[Some(&leveled_content)],
);
@@ -1807,7 +1836,14 @@ mod tests {
folded: None,
};
let repeat = install(
RepeatNode::new(RecordSource::new(IndexSourceNode { layout: base.clone() }, &base, &base), count_edge, reverse_edge, &base, &count_layout, &reverse_layout),
RepeatNode::new(
RecordSource::new(IndexSourceNode { layout: base.clone() }, &base, &base),
count_edge,
reverse_edge,
&base,
&count_layout,
&reverse_layout,
),
meta,
&[Some(&base)],
);
@@ -1850,7 +1886,11 @@ mod tests {
let chain = install(
MultiplyOpacityNode::new(
install(MultiplyOpacityNode::new(bare_source(&source_layout, 2.), ValueNode(0.5), &source_layout), multiply_opacity_layout_meta(), &[Some(&source_layout)]),
install(
MultiplyOpacityNode::new(bare_source(&source_layout, 2.), ValueNode(0.5), &source_layout),
multiply_opacity_layout_meta(),
&[Some(&source_layout)],
),
ValueNode(0.5),
&modified,
),
@@ -1900,7 +1940,11 @@ mod tests {
let chain = install(
MeasureNode::new(
install(MultiplyOpacityNode::new(bare_source(&source_layout, -2.), ValueNode(0.5), &source_layout), multiply_opacity_layout_meta(), &[Some(&source_layout)]),
install(
MultiplyOpacityNode::new(bare_source(&source_layout, -2.), ValueNode(0.5), &source_layout),
multiply_opacity_layout_meta(),
&[Some(&source_layout)],
),
&modified,
),
measure_layout_meta(),
@@ -1934,7 +1978,11 @@ mod tests {
let chain = install(
ShadeNode::new(
install(MultiplyOpacityNode::new(bare_source(&source_layout, 4.), ValueNode(0.5), &source_layout), multiply_opacity_layout_meta(), &[Some(&source_layout)]),
install(
MultiplyOpacityNode::new(bare_source(&source_layout, 4.), ValueNode(0.5), &source_layout),
multiply_opacity_layout_meta(),
&[Some(&source_layout)],
),
&modified,
),
shade_layout_meta(),
@@ -2053,13 +2101,21 @@ mod tests {
let modified = checked_multiply_opacity_layout(&source_layout);
reserve_for(&[&source_layout, &modified]);
let ok = install(CheckedMultiplyOpacityNode::new(bare_source(&source_layout, 1.), ValueNode(0.5), &source_layout), checked_multiply_opacity_layout_meta(), &[Some(&source_layout)]);
let ok = install(
CheckedMultiplyOpacityNode::new(bare_source(&source_layout, 1.), ValueNode(0.5), &source_layout),
checked_multiply_opacity_layout_meta(),
&[Some(&source_layout)],
);
let GPoll::Final(value) = ok.eval(&ctx) else {
panic!("expected a final record");
};
assert_eq!(unsafe { modified.rec(&value).read::<f64>(modified.offset_of(Opacity::NAME, 0).unwrap()) }, 0.5);
let failing = install(CheckedMultiplyOpacityNode::new(bare_source(&source_layout, 1.), ValueNode(-1.), &source_layout), checked_multiply_opacity_layout_meta(), &[Some(&source_layout)]);
let failing = install(
CheckedMultiplyOpacityNode::new(bare_source(&source_layout, 1.), ValueNode(-1.), &source_layout),
checked_multiply_opacity_layout_meta(),
&[Some(&source_layout)],
);
let GPoll::Error(error) = failing.eval(&ctx) else {
panic!("expected an error");
};
@@ -2080,7 +2136,11 @@ mod tests {
let chain = install(
ScaleNode::new(
install(MultiplyOpacityNode::new(bare_source(&source_layout, 2.), ValueNode(0.5), &source_layout), multiply_opacity_layout_meta(), &[Some(&source_layout)]),
install(
MultiplyOpacityNode::new(bare_source(&source_layout, 2.), ValueNode(0.5), &source_layout),
multiply_opacity_layout_meta(),
&[Some(&source_layout)],
),
ValueNode(3.),
&modified,
),
@@ -2139,7 +2199,11 @@ mod tests {
panic!("expected a final record");
};
let rec = transferred.rec(&value);
assert_eq!(unsafe { rec.read::<f64>(transferred.offset_of(Opacity::NAME, 0).unwrap()) }, 0.5, "an absent secondary attribute reads its default");
assert_eq!(
unsafe { rec.read::<f64>(transferred.offset_of(Opacity::NAME, 0).unwrap()) },
0.5,
"an absent secondary attribute reads its default"
);
}
#[test]
@@ -2346,7 +2410,11 @@ mod tests {
ShadeNode::new(
install(
StripOpacityNode::new(
install(MultiplyOpacityNode::new(bare_source(&source_layout, 4.), ValueNode(0.5), &source_layout), multiply_opacity_layout_meta(), &[Some(&source_layout)]),
install(
MultiplyOpacityNode::new(bare_source(&source_layout, 4.), ValueNode(0.5), &source_layout),
multiply_opacity_layout_meta(),
&[Some(&source_layout)],
),
&modified,
),
strip_opacity_layout_meta(),
@@ -2409,7 +2477,11 @@ mod tests {
let chain = install(
LabelNode::new(
install(LabelNode::new(bare_source(&source_layout, 1.), ValueNode(String::from("a")), &source_layout), label_layout_meta(), &[Some(&source_layout)]),
install(
LabelNode::new(bare_source(&source_layout, 1.), ValueNode(String::from("a")), &source_layout),
label_layout_meta(),
&[Some(&source_layout)],
),
ValueNode(String::from("b")),
&labeled,
),
@@ -2774,7 +2846,11 @@ mod tests {
let labeled = label_layout(&source_layout);
reserve_for(&[&labeled, &labeled]);
let chain = install(LabelNode::new(bare_source(&source_layout, 1.), ValueNode(String::from("a")), &source_layout), label_layout_meta(), &[Some(&source_layout)]);
let chain = install(
LabelNode::new(bare_source(&source_layout, 1.), ValueNode(String::from("a")), &source_layout),
label_layout_meta(),
&[Some(&source_layout)],
);
let memo = crate::memo::MemoizeNode::new(chain, &labeled);
let first_arena = Arena::new(1024).unwrap();

View File

@@ -273,15 +273,7 @@ fn mirror<'e>(
)>,
Interrupt,
> {
mirror_lane(
ctx.arena(),
legacy_render_list_of(content),
ctx.index() as usize,
relative_to_bounds,
offset,
angle,
keep_original,
)
mirror_lane(ctx.arena(), legacy_render_list_of(content), ctx.index() as usize, relative_to_bounds, offset, angle, keep_original)
}
/// The kept originals double the level, counted from the subject's extent
@@ -331,15 +323,7 @@ fn mirror_vector<'e>(
)>,
Interrupt,
> {
mirror_lane(
ctx.arena(),
legacy_render_list_of(content),
ctx.index() as usize,
relative_to_bounds,
offset,
angle,
keep_original,
)
mirror_lane(ctx.arena(), legacy_render_list_of(content), ctx.index() as usize, relative_to_bounds, offset, angle, keep_original)
}
fn mirror_vector_extent(

View File

@@ -15,14 +15,14 @@ use core_types::transform::Footprint;
#[cfg(target_family = "wasm")]
use core_types::{ATTR_TRANSFORM, WasmNotSend};
use core_types::{Color, Ctx, ExtractIndex, InjectIndex};
#[cfg(target_family = "wasm")]
use graphic_types::ATTR_EDITOR_MERGED_LAYERS;
pub use graph_craft::application_io::resource::{Resource, ResourceHash};
pub use graph_craft::application_io::*;
pub use graph_craft::document::value::RenderOutputType;
#[cfg(target_family = "wasm")]
pub use graphene_canvas_utils as canvas_utils;
#[cfg(target_family = "wasm")]
use graphic_types::ATTR_EDITOR_MERGED_LAYERS;
#[cfg(target_family = "wasm")]
use graphic_types::Graphic;
#[cfg(target_family = "wasm")]
use graphic_types::IntoGraphicList;

View File

@@ -42,8 +42,7 @@ fn transform_extent(content: ExtentIn<'_>, _translation: ValueIn<'_, DVec2>, _ro
#[node_macro::node(category(""))]
fn transform_value<T: ApplyTransform + 'static>(
ctx: impl Ctx + DeriveCtx + ModifyFootprint,
#[implementations(Context -> DAffine2, Context -> DVec2)]
content: impl Node<Context<'_>, Output = T>,
#[implementations(Context -> DAffine2, Context -> DVec2)] content: impl Node<Context<'_>, Output = T>,
#[widget(ParsedWidgetOverride::Custom = "transform_translation")] translation: DVec2,
#[widget(ParsedWidgetOverride::Custom = "transform_rotation")] rotation: f64,
#[widget(ParsedWidgetOverride::Custom = "transform_scale")]
@@ -68,13 +67,7 @@ pub use _transform_value_mod::transform_value_entries;
/// Resets the desired components of the input transform to their default values. If all components are reset, the output will be set to the identity transform.
/// Shear is represented jointly by rotation and scale, so resetting both will also remove any shear.
#[node_macro::node(category("Math: Transform"))]
fn reset_transform<T>(
_: impl Ctx,
(element, transform): (T, Attr<TransformAttr>),
#[default(true)] reset_translation: bool,
reset_rotation: bool,
reset_scale: bool,
) -> (T, Attr<TransformAttr>) {
fn reset_transform<T>(_: impl Ctx, (element, transform): (T, Attr<TransformAttr>), #[default(true)] reset_translation: bool, reset_rotation: bool, reset_scale: bool) -> (T, Attr<TransformAttr>) {
let mut row_transform = *transform;
if reset_translation {
row_transform.translation = DVec2::ZERO;