Skip to content

Commit 1b5b590

Browse files
Keavon0HyperCube
andauthored
Instance tables refactor part 2: move the transform and alpha_blending fields up a level (#2249)
* Fix domain data structure field plural naming * Rename method one_item to one_instance Rename method one_item to one_instance * Move the Instance<T> methods over to providing an Instance<T>/InstanceMut<T> Move the Instance<T> methods over to providing an Instance<T>/InstanceMut<T> * Add transform and alpha_blending fields to Instances<T> * Finish the refactor (Brush tool is broken though) * Add test for brush node * Fix brush node * Fix default empty images being 1x1 instead of 0x0 as they should be * Fix tests * Fix path transform * Add correct upgrading to move the transform/blending up a level --------- Co-authored-by: hypercube <0hypercube@gmail.com>
1 parent 17b72f2 commit 1b5b590

33 files changed

+1089
-974
lines changed

editor/src/messages/portfolio/document/document_message_handler.rs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ use crate::node_graph_executor::NodeGraphExecutor;
2828
use bezier_rs::Subpath;
2929
use graph_craft::document::value::TaggedValue;
3030
use graph_craft::document::{NodeId, NodeInput, NodeNetwork, OldNodeNetwork};
31-
use graphene_core::raster::image::ImageFrame;
31+
use graphene_core::raster::image::{ImageFrame, ImageFrameTable};
3232
use graphene_core::raster::BlendMode;
3333
use graphene_core::vector::style::ViewMode;
3434
use graphene_std::renderer::{ClickTarget, Quad};
@@ -818,12 +818,7 @@ impl MessageHandler<DocumentMessage, DocumentMessageData<'_>> for DocumentMessag
818818

819819
responses.add(DocumentMessage::AddTransaction);
820820

821-
let image_frame = ImageFrame {
822-
image,
823-
transform: DAffine2::IDENTITY,
824-
alpha_blending: Default::default(),
825-
};
826-
let layer = graph_modification_utils::new_image_layer(image_frame, layer_node_id, self.new_layer_parent(true), responses);
821+
let layer = graph_modification_utils::new_image_layer(ImageFrameTable::new(ImageFrame { image }), layer_node_id, self.new_layer_parent(true), responses);
827822

828823
if let Some(name) = name {
829824
responses.add(NodeGraphMessage::SetDisplayName {

editor/src/messages/portfolio/document/graph_operation/graph_operation_message.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use crate::messages::prelude::*;
55

66
use bezier_rs::Subpath;
77
use graph_craft::document::NodeId;
8-
use graphene_core::raster::image::ImageFrame;
8+
use graphene_core::raster::image::ImageFrameTable;
99
use graphene_core::raster::BlendMode;
1010
use graphene_core::text::{Font, TypesettingConfig};
1111
use graphene_core::vector::brush_stroke::BrushStroke;
@@ -68,7 +68,7 @@ pub enum GraphOperationMessage {
6868
},
6969
NewBitmapLayer {
7070
id: NodeId,
71-
image_frame: ImageFrame<Color>,
71+
image_frame: ImageFrameTable<Color>,
7272
parent: LayerNodeIdentifier,
7373
insert_index: usize,
7474
},

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

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use bezier_rs::Subpath;
88
use graph_craft::concrete;
99
use graph_craft::document::value::TaggedValue;
1010
use graph_craft::document::{NodeId, NodeInput};
11-
use graphene_core::raster::image::{ImageFrame, ImageFrameTable};
11+
use graphene_core::raster::image::ImageFrameTable;
1212
use graphene_core::raster::BlendMode;
1313
use graphene_core::text::{Font, TypesettingConfig};
1414
use graphene_core::vector::brush_stroke::BrushStroke;
@@ -212,12 +212,11 @@ impl<'a> ModifyInputsContext<'a> {
212212
self.network_interface.move_node_to_chain_start(&stroke_id, layer, &[]);
213213
}
214214

215-
pub fn insert_image_data(&mut self, image_frame: ImageFrame<Color>, layer: LayerNodeIdentifier) {
215+
pub fn insert_image_data(&mut self, image_frame: ImageFrameTable<Color>, layer: LayerNodeIdentifier) {
216216
let transform = resolve_document_node_type("Transform").expect("Transform node does not exist").default_node_template();
217-
let image = resolve_document_node_type("Image").expect("Image node does not exist").node_template_input_override([
218-
Some(NodeInput::value(TaggedValue::None, false)),
219-
Some(NodeInput::value(TaggedValue::ImageFrame(ImageFrameTable::new(image_frame)), false)),
220-
]);
217+
let image = resolve_document_node_type("Image")
218+
.expect("Image node does not exist")
219+
.node_template_input_override([Some(NodeInput::value(TaggedValue::None, false)), Some(NodeInput::value(TaggedValue::ImageFrame(image_frame), false))]);
221220

222221
let image_id = NodeId::new();
223222
self.network_interface.insert_node(image_id, image, &[]);

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

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -571,7 +571,7 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
571571
.collect(),
572572
..Default::default()
573573
}),
574-
inputs: vec![NodeInput::value(TaggedValue::ImageFrame(ImageFrameTable::default()), true)],
574+
inputs: vec![NodeInput::value(TaggedValue::ImageFrame(ImageFrameTable::empty()), true)],
575575
..Default::default()
576576
},
577577
persistent_node_metadata: DocumentNodePersistentMetadata {
@@ -809,8 +809,8 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
809809
document_node: DocumentNode {
810810
implementation: DocumentNodeImplementation::proto("graphene_std::raster::MaskImageNode"),
811811
inputs: vec![
812-
NodeInput::value(TaggedValue::ImageFrame(ImageFrameTable::default()), true),
813-
NodeInput::value(TaggedValue::ImageFrame(ImageFrameTable::default()), true),
812+
NodeInput::value(TaggedValue::ImageFrame(ImageFrameTable::empty()), true),
813+
NodeInput::value(TaggedValue::ImageFrame(ImageFrameTable::empty()), true),
814814
],
815815
..Default::default()
816816
},
@@ -832,8 +832,8 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
832832
document_node: DocumentNode {
833833
implementation: DocumentNodeImplementation::proto("graphene_std::raster::InsertChannelNode"),
834834
inputs: vec![
835-
NodeInput::value(TaggedValue::ImageFrame(ImageFrameTable::default()), true),
836-
NodeInput::value(TaggedValue::ImageFrame(ImageFrameTable::default()), true),
835+
NodeInput::value(TaggedValue::ImageFrame(ImageFrameTable::empty()), true),
836+
NodeInput::value(TaggedValue::ImageFrame(ImageFrameTable::empty()), true),
837837
NodeInput::value(TaggedValue::RedGreenBlue(RedGreenBlue::default()), false),
838838
],
839839
..Default::default()
@@ -856,10 +856,10 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
856856
implementation: DocumentNodeImplementation::proto("graphene_std::raster::CombineChannelsNode"),
857857
inputs: vec![
858858
NodeInput::value(TaggedValue::None, false),
859-
NodeInput::value(TaggedValue::ImageFrame(ImageFrameTable::default()), true),
860-
NodeInput::value(TaggedValue::ImageFrame(ImageFrameTable::default()), true),
861-
NodeInput::value(TaggedValue::ImageFrame(ImageFrameTable::default()), true),
862-
NodeInput::value(TaggedValue::ImageFrame(ImageFrameTable::default()), true),
859+
NodeInput::value(TaggedValue::ImageFrame(ImageFrameTable::empty()), true),
860+
NodeInput::value(TaggedValue::ImageFrame(ImageFrameTable::empty()), true),
861+
NodeInput::value(TaggedValue::ImageFrame(ImageFrameTable::empty()), true),
862+
NodeInput::value(TaggedValue::ImageFrame(ImageFrameTable::empty()), true),
863863
],
864864
..Default::default()
865865
},
@@ -929,7 +929,7 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
929929

930930
..Default::default()
931931
}),
932-
inputs: vec![NodeInput::value(TaggedValue::ImageFrame(ImageFrameTable::default()), true)],
932+
inputs: vec![NodeInput::value(TaggedValue::ImageFrame(ImageFrameTable::empty()), true)],
933933
..Default::default()
934934
},
935935
persistent_node_metadata: DocumentNodePersistentMetadata {
@@ -1011,8 +1011,8 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
10111011
..Default::default()
10121012
}),
10131013
inputs: vec![
1014-
NodeInput::value(TaggedValue::ImageFrame(ImageFrameTable::default()), true),
1015-
NodeInput::value(TaggedValue::ImageFrame(ImageFrameTable::default()), true),
1014+
NodeInput::value(TaggedValue::ImageFrame(ImageFrameTable::empty()), true),
1015+
NodeInput::value(TaggedValue::ImageFrame(ImageFrameTable::empty()), true),
10161016
NodeInput::value(TaggedValue::BrushStrokes(Vec::new()), false),
10171017
NodeInput::value(TaggedValue::BrushCache(BrushCache::new_proto()), false),
10181018
],
@@ -1061,7 +1061,7 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
10611061
node_template: NodeTemplate {
10621062
document_node: DocumentNode {
10631063
implementation: DocumentNodeImplementation::proto("graphene_core::memo::MemoNode"),
1064-
inputs: vec![NodeInput::value(TaggedValue::ImageFrame(ImageFrameTable::default()), true)],
1064+
inputs: vec![NodeInput::value(TaggedValue::ImageFrame(ImageFrameTable::empty()), true)],
10651065
manual_composition: Some(concrete!(Context)),
10661066
..Default::default()
10671067
},
@@ -1080,7 +1080,7 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
10801080
node_template: NodeTemplate {
10811081
document_node: DocumentNode {
10821082
implementation: DocumentNodeImplementation::proto("graphene_core::memo::ImpureMemoNode"),
1083-
inputs: vec![NodeInput::value(TaggedValue::ImageFrame(ImageFrameTable::default()), true)],
1083+
inputs: vec![NodeInput::value(TaggedValue::ImageFrame(ImageFrameTable::empty()), true)],
10841084
manual_composition: Some(concrete!(Context)),
10851085
..Default::default()
10861086
},
@@ -1112,7 +1112,7 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
11121112
.collect(),
11131113
..Default::default()
11141114
}),
1115-
inputs: vec![NodeInput::value(TaggedValue::None, false), NodeInput::value(TaggedValue::ImageFrame(ImageFrameTable::default()), false)],
1115+
inputs: vec![NodeInput::value(TaggedValue::None, false), NodeInput::value(TaggedValue::ImageFrame(ImageFrameTable::empty()), false)],
11161116
..Default::default()
11171117
},
11181118
persistent_node_metadata: DocumentNodePersistentMetadata {
@@ -1825,7 +1825,7 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
18251825
.collect(),
18261826
..Default::default()
18271827
}),
1828-
inputs: vec![NodeInput::value(TaggedValue::ImageFrame(ImageFrameTable::default()), true)],
1828+
inputs: vec![NodeInput::value(TaggedValue::ImageFrame(ImageFrameTable::empty()), true)],
18291829
..Default::default()
18301830
},
18311831
persistent_node_metadata: DocumentNodePersistentMetadata {
@@ -1881,7 +1881,7 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
18811881
document_node: DocumentNode {
18821882
implementation: DocumentNodeImplementation::proto("graphene_std::executor::MapGpuSingleImageNode"),
18831883
inputs: vec![
1884-
NodeInput::value(TaggedValue::ImageFrame(ImageFrameTable::default()), true),
1884+
NodeInput::value(TaggedValue::ImageFrame(ImageFrameTable::empty()), true),
18851885
NodeInput::value(TaggedValue::DocumentNode(DocumentNode::default()), true),
18861886
],
18871887
..Default::default()
@@ -1923,7 +1923,7 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
19231923
document_node: DocumentNode {
19241924
implementation: DocumentNodeImplementation::proto("graphene_core::raster::BrightnessContrastNode"),
19251925
inputs: vec![
1926-
NodeInput::value(TaggedValue::ImageFrame(ImageFrameTable::default()), true),
1926+
NodeInput::value(TaggedValue::ImageFrame(ImageFrameTable::empty()), true),
19271927
NodeInput::value(TaggedValue::F64(0.), false),
19281928
NodeInput::value(TaggedValue::F64(0.), false),
19291929
NodeInput::value(TaggedValue::Bool(false), false),
@@ -1955,7 +1955,7 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
19551955
// document_node: DocumentNode {
19561956
// implementation: DocumentNodeImplementation::proto("graphene_core::raster::CurvesNode"),
19571957
// inputs: vec![
1958-
// NodeInput::value(TaggedValue::ImageFrame(ImageFrameTable::default()), true),
1958+
// NodeInput::value(TaggedValue::ImageFrame(ImageFrameTable::empty()), true),
19591959
// NodeInput::value(TaggedValue::Curve(Default::default()), false),
19601960
// ],
19611961
// ..Default::default()
@@ -2799,7 +2799,7 @@ pub static IMAGINATE_NODE: Lazy<DocumentNodeDefinition> = Lazy::new(|| DocumentN
27992799
..Default::default()
28002800
}),
28012801
inputs: vec![
2802-
NodeInput::value(TaggedValue::ImageFrame(ImageFrameTable::default()), true),
2802+
NodeInput::value(TaggedValue::ImageFrame(ImageFrameTable::empty()), true),
28032803
NodeInput::scope("editor-api"),
28042804
NodeInput::value(TaggedValue::ImaginateController(Default::default()), false),
28052805
NodeInput::value(TaggedValue::F64(0.), false), // Remember to keep index used in `ImaginateRandom` updated with this entry's index

editor/src/messages/portfolio/portfolio_message_handler.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -457,7 +457,7 @@ impl MessageHandler<PortfolioMessage, PortfolioMessageData<'_>> for PortfolioMes
457457
}
458458
};
459459

460-
const REPLACEMENTS: [(&str, &str); 35] = [
460+
const REPLACEMENTS: [(&str, &str); 34] = [
461461
("graphene_core::AddArtboardNode", "graphene_core::graphic_element::AppendArtboardNode"),
462462
("graphene_core::ConstructArtboardNode", "graphene_core::graphic_element::ToArtboardNode"),
463463
("graphene_core::ToGraphicElementNode", "graphene_core::graphic_element::ToElementNode"),
@@ -488,7 +488,6 @@ impl MessageHandler<PortfolioMessage, PortfolioMessageData<'_>> for PortfolioMes
488488
("graphene_core::vector::SplinesFromPointsNode", "graphene_core::vector::SplineNode"),
489489
("graphene_core::vector::generator_nodes::EllipseGenerator", "graphene_core::vector::generator_nodes::EllipseNode"),
490490
("graphene_core::vector::generator_nodes::LineGenerator", "graphene_core::vector::generator_nodes::LineNode"),
491-
("graphene_core::vector::generator_nodes::PathGenerator", "graphene_core::vector::generator_nodes::PathNode"),
492491
("graphene_core::vector::generator_nodes::RectangleGenerator", "graphene_core::vector::generator_nodes::RectangleNode"),
493492
(
494493
"graphene_core::vector::generator_nodes::RegularPolygonGenerator",

editor/src/messages/tool/common_functionality/graph_modification_utils.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use crate::messages::prelude::*;
66

77
use bezier_rs::Subpath;
88
use graph_craft::document::{value::TaggedValue, NodeId, NodeInput};
9-
use graphene_core::raster::image::ImageFrame;
9+
use graphene_core::raster::image::ImageFrameTable;
1010
use graphene_core::raster::BlendMode;
1111
use graphene_core::text::{Font, TypesettingConfig};
1212
use graphene_core::vector::style::Gradient;
@@ -207,7 +207,7 @@ pub fn new_vector_layer(subpaths: Vec<Subpath<PointId>>, id: NodeId, parent: Lay
207207
}
208208

209209
/// Create a new bitmap layer.
210-
pub fn new_image_layer(image_frame: ImageFrame<Color>, id: NodeId, parent: LayerNodeIdentifier, responses: &mut VecDeque<Message>) -> LayerNodeIdentifier {
210+
pub fn new_image_layer(image_frame: ImageFrameTable<Color>, id: NodeId, parent: LayerNodeIdentifier, responses: &mut VecDeque<Message>) -> LayerNodeIdentifier {
211211
let insert_index = 0;
212212
responses.add(GraphOperationMessage::NewBitmapLayer {
213213
id,

editor/src/node_graph_executor.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -298,9 +298,9 @@ impl NodeRuntime {
298298
}
299299
// Insert the vector modify if we are dealing with vector data
300300
else if let Some(record) = introspected_data.downcast_ref::<IORecord<Context, VectorDataTable>>() {
301-
self.vector_modify.insert(parent_network_node_id, record.output.one_item().clone());
301+
self.vector_modify.insert(parent_network_node_id, record.output.one_instance().instance.clone());
302302
} else if let Some(record) = introspected_data.downcast_ref::<IORecord<(), VectorDataTable>>() {
303-
self.vector_modify.insert(parent_network_node_id, record.output.one_item().clone());
303+
self.vector_modify.insert(parent_network_node_id, record.output.one_instance().instance.clone());
304304
}
305305
}
306306
}

node-graph/gcore/src/application_io.rs

Lines changed: 4 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ use crate::instances::Instances;
22
use crate::text::FontCache;
33
use crate::transform::{Footprint, Transform, TransformMut};
44
use crate::vector::style::ViewMode;
5-
use crate::AlphaBlending;
65

76
use dyn_any::{DynAny, StaticType, StaticTypeSized};
87

@@ -73,36 +72,20 @@ pub struct TextureFrame {
7372
pub texture: Arc<wgpu::Texture>,
7473
#[cfg(not(feature = "wgpu"))]
7574
pub texture: (),
76-
pub transform: DAffine2,
77-
pub alpha_blend: AlphaBlending,
7875
}
7976

8077
impl Hash for TextureFrame {
78+
#[cfg(feature = "wgpu")]
8179
fn hash<H: Hasher>(&self, state: &mut H) {
82-
self.transform.to_cols_array().iter().for_each(|x| x.to_bits().hash(state));
83-
#[cfg(feature = "wgpu")]
8480
self.texture.hash(state);
8581
}
82+
#[cfg(not(feature = "wgpu"))]
83+
fn hash<H: Hasher>(&self, _state: &mut H) {}
8684
}
8785

8886
impl PartialEq for TextureFrame {
8987
fn eq(&self, other: &Self) -> bool {
90-
#[cfg(feature = "wgpu")]
91-
return self.transform.eq(&other.transform) && self.texture == other.texture;
92-
93-
#[cfg(not(feature = "wgpu"))]
94-
self.transform.eq(&other.transform)
95-
}
96-
}
97-
98-
impl Transform for TextureFrame {
99-
fn transform(&self) -> DAffine2 {
100-
self.transform
101-
}
102-
}
103-
impl TransformMut for TextureFrame {
104-
fn transform_mut(&mut self) -> &mut DAffine2 {
105-
&mut self.transform
88+
self.texture == other.texture
10689
}
10790
}
10891

0 commit comments

Comments
 (0)