* refactor: opacity + blend_mode -> blend_style
* Add code for clipping
* Add alt-click masking
* Clip to all colors. Fill option
* Fix undo not working. Fix strokes not being white
* Allow clipped to be grouped or raster
* Switch to alpha mode in mask-type
* add plumbing to know if clipped in frontend and add fill slider
* Attempt at document upgrade code
* Fix fill slider
* Add clipped styling and Alt-click layer border
* Use mask attr judiciously by using clip when possible
* Fix breaking documents and upgrade code
* Fix fixes
* No-op toggle if last child of parent and don't show clip UI if last element
* Fix mouse styles by plumbing clippable to frontend
* Fix Clip detection by disallowed groups as clipPath according to SVG spec doesn't allow <g>
* Add opacity to clippers can_use_clip check
* Fix issue with clipping not working nicely with strokes by using masks
* Add vello code
* cleanup
* Add stroke alignment hacks to SVG renderer
* svg: Fix mask bounds in vector data
* vello: Implement mask hacks to support stroke alignment
* Move around alignment and doc upgrade code
* rename Line X -> X
* An attempt at fixing names not updating
* svg: add stroke order with svg
* vello: add stroke order with by calling one before the other explicitly
* fix merge
* fix svg renderer messing up transform det
* Code review; reorder and rename parameters (TODO: fix tools)
* Fixes to previous
* Formatting
* fix bug 3
* some moving around (not fixed)
* fix issue 1
* fix vello
* Final code review
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Fix several broken raster nodes and clean up leftover old node system code
* Migrate Brightness/Contrast to the new node macro, and fix it
* Remove last usages of old_node_fn
* Remove old_node_fn
* WIP debugging
* Only create parent ref if var args are used in context + Cleanup
* Eval nodes with None instead of relying on MemoImpure
* Remove unused imports
* Show parent in debug output
* Remove TODO comment
* Remove subtyping for () from node graph type system
* Remove special-case in DynAnyNode for downcasting to ()
* Correct input type for CreateGpuSurfaceNode
* Remove unncessary imports
---------
Co-authored-by: Dennis Kobert <dennis@kobert.dev>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
Co-authored-by: hypercube <0hypercube@gmail.com>
* 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>
* Implement experimental Context struct and traits
* Add Ctx super trait
* Checkpoint
* Return Any instead of DynAny
* Fix send implementation for inputs with lifetimes
* Port more nodes
* Uncomment nodes
* Port more nodes
* Port vector nodes
* Partial progress (the stuff I'm more sure about)
* Partial progress (the stuff that's not compiling and I'm not sure about)
* Fix more errors
* First pass of fixing errors introduced by rebase
* Port wasm application io
* Fix brush node types
* Add type annotation
* Fix warnings and wasm compilation
* Change types for Document Node definitions
* Improve debugging for footprint not found errors
* Forward context in append artboard node
* Fix thumbnails
* Fix loading most demo artwork
* Wrap output type of all nodes in future
* Encode futures as part of the type
* Fix document node definitions for future types
* Remove Clippy warnings
* Fix more things
* Fix opening demo art with manual composition upgrading
* Set correct type for manual composition
* Fix brush
* Fix tests
* Update docs for deps
* Fix up some node signature issues
* Code review
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
Co-authored-by: hypercube <0hypercube@gmail.com>
* Use the identity matrix as the default for an image frame
* Fix all usages to be equivalent to their pre-refactor versions, opting to keep ZERO not IDENTITY as the default image size
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Port VectorData to Instances<VectorData>
* Port ImageFrame<P> and TextureFrame to Instances<ImageFrame<P>> and Instances<TextureFrame>
* Avoid mutation with the TransformMut trait
* Port GraphicGroup to Instances<GraphicGroup>
* It compiles!
* Organize debugging
* Document upgrading
* Fix Brush node
* Restore TransformMut in lieu of TransformSet trait
* Fix tests
* Final code review
* Add path-bool library
* Cleanup code
* Cargo format
* Integrate boolean ops into graphite
* Add test for editor crash
* Fix edge sort floating point instability
* Add unit test for red-dress failure
* Backport tests and aux functions
* Use curvature based sorting
* Convert linear cubic splines to line segments
* Deduplicate reversed path segments
* Fix epsilon for empty segments
* Remove parameter based intersection pruning
* Add support for reversed paths
* Add benchmark infrastructure
* Add intersection benchmark
* Add recursion bound
* Implement support for overlapping path segments
* Remove rouge prinln
* Fix sorting for bezier segments with one control point at the start of the segment
* Cleanup log statements
* Directly translate graphite paths to Path segments
* Round data before passing it to path_bool
* Fix flag_faces traversal order
* Add test for white dots in bottom right of painted dreams
* Make rounding configurable
* Update demo artwork to remove manual path modifications
* Convert from path segments to manipulator groups directly
* Remove dead code
* Fix clippy lints
* Replace functions in path segment with methods and add documentation
* Add more documentation
* Close subpaths
* Reorganize files and add README.md
* Add license information
* Code review
* Fix license info
* Adopt new node macro and fix demo artwork
* Close subpaths with Z
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Add support structure for new node macro to gcore
* Fix compile issues and code generation
* Implement new node_fn macro
* Implement property translation
* Fix NodeIO type generation
* Start translating math nodes
* Move node implementation to outer scope to allow usage of local imports
* Add expose attribute to allow controlling the parameter exposure
* Add rust analyzer support for #[implementations] attribute
* Migrate logic nodes
* Handle where clause properly
* Implement argument ident pattern preservation
* Implement adjustment layer mapping
* Fix node registry types
* Fix module paths
* Improve demo artwork comptibility
* Improve macro error reporting
* Fix handling of impl node implementations
* Fix nodeio type computation
* Fix opacity node and graph type resolution
* Fix loading of demo artworks
* Fix eslint
* Fix typo in macro test
* Remove node definitions for Adjustment Nodes
* Fix type alias property generation and make adjustments footprint aware
* Convert vector nodes
* Implement path overrides
* Fix stroke node
* Fix painted dreams
* Implement experimental type level specialization
* Fix poisson disk sampling -> all demo artworks should work again
* Port text node + make node macro more robust by implementing lifetime substitution
* Fix vector node tests
* Fix red dress demo + ci
* Fix clippy warnings
* Code review
* Fix primary input issues
* Improve math nodes and audit others
* Set no_properties when no automatic properties are derived
* Port vector generator nodes (could not derive all definitions yet)
* Various QA changes and add min/max/mode_range to number parameters
* Add min and max for f64 and u32
* Convert gpu nodes and clean up unused nodes
* Partially port transform node
* Allow implementations on call arg
* Port path modify node
* Start porting graphic element nodes
* Transform nodes in graphic_element.rs
* Port brush node
* Port nodes in wasm_executior
* Rename node macro
* Fix formatting
* Fix Mandelbrot node
* Formatting
* Fix Load Image and Load Resource nodes, add scope input to node macro
* Remove unnecessary underscores
* Begin attemping to make nodes resolution-aware
* Infer a generic manual compositon type on generic call arg
* Various fixes and work towards merging
* Final changes for merge!
* Fix tests, probably
* More free line removals!
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Rework boolean operation node
* Set Boolean Operation name for layer
* Remove memoize
* Update both demo artworks that use booleans
* Delete dead code, rename input connectors
* Remove more dead code
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Make noise generation resolution aware
* Invert "Scale" so it's not "Frequency"; make "Clipping" 100x100 not 1x1
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* WIP
* Introduce `Raster` enum and plumb texture injection to vello
* Use correct texture formas for usage in vello
* Add missing cache implementations
* Update vello image override api
* Use git version of vello
* Fix type for upload texture node
* Improve crash resiliance
* Fix warnings
* Remove unused node impls
* Start integrating vello into render pipeline
Cache vello render creation
Implement viewport navigation
Close vello path
Add transform parameter to vello render pass
* Fix render node types
* Fix a bunch of bugs in the path translation
* Avoid panic on empty document
* Fix rendering of holes
* Implement image rendering
* Implement graph recompilation afer editor api change
* Implement preferences toggle for using vello as the renderer
* Make surface creation optional
* Feature gate vello usages
* Implement skeleton for radial gradient
* Rename vello preference
* Fix some gradients
* Only update monitor nodes on graph recompile
* Fix warnings + remove dead code
* Update everything except for thumbnails after a node graph evaluation
* Fix missing click targets for Image frames
* Improve perfamance by removing unecessary widget updates
* Fix node graph paning
* Fix thumbnail loading
* Implement proper hash for vector modification
* Fix test and warnings
* Code review
* Fix dep
* Remove warning
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* WIP
* Start deprecating let nodes
* Replace WasmEditorApi network imports with new Scope input
* Add missing unwrap
* Add #[serde(default)] to scope_injections
* Restructure WasmEditorApi definition to be available as a TaggedValue
* Fix text node
* Use stable toolchain in nix shell again
* Code review
* FIx text node and remove all remaining warnings
* Require executor input to be 'static
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* possible location of the change is decided.
* fix for issue #1774
* possible location of the change is decided.
* fix for issue #1774
* fix for #1706
* fix for #1706, code reformatted
* fix for #1706, Label input removed from Properties
* fix for #1706
* deleted the comment
* Gradient picker
* Fix up color picker layout CSS problems
* Begin hooking up SpectrumInput for gradient in the ColorPicker
* Working gradient picking on the frontend only
* Plumb FillColorChoice into the backend
* Hook everything else up, just with a weird bug remaining
* Fix some svelty reactivity issues
* Add and remove stops
* Cleanup
* Rename type
* Fill node document format upgrading
* Fix lint
* Polish the color picker UX and fix a bug
---------
Co-authored-by: 0hypercube <0hypercube@gmail.com>
* Breadcrumb visualization, nested network consistency, create definitions for Merge internal nodes
* Add index to network inputs, remove imports usage from flatten network
* Replace NodeOutput with NodeInput::Node
* Fully remove imports field, remove unnecessary identity nodes, move Output node to encapsulating network
* Replace previous_outputs with root_node, fix adding artboard/layer to empty network
* Import/Export UI nodes
* Display input/output types dynamically from compiled network
* Add LayerNodeIdentifer::ROOT_PARENT
* Prevent .to_node() on ROOT_PARENT
* Separate NodeGraphMessage and GraphOperationMessage
* General bug fixes with nested networks
* Change layer color, various bug fixes and improvements
* Fix disconnect and set node input for proto nodes and UI export node
* Dashed line to export for previewed node
* Fix deleting proto nodes and nodes that feed into export
* Allow modifications to nodes outside of nested network
* Get network from Node Id parameter
* Change root_node to previous_root_node
* Get TaggedValue from proto node implementation type when disconnecting
* Improve preview functionality and state
* Artboard position and delete children fix
* Name inputs/outputs based on DocumentNodeDefinition or type, fix new artboard/layer insertion
* replace "Link" with "Wire", adjust previewing
* Various bug fixes and improvements
* Modify Sample and Poisson-Disk points, fix incorrect input index and deleting currently viewed node
* Open demo artwork
* Fix opening already upgraded documents and refactor FrontendGraphDataType usages
* Fix deleting within network and other bugs
* Get default node input from compiled network when copying, fix previews, tests, demo artwork
* Code cleanup
* Hide EditorApi and add a comment describing unresolved Import node input types
* Code review
* Replace placeholder ROOT_PARENT NodeId with std::u64::MAX
* Breadcrumb padding
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* initial attempt for area node
* allow node preview for more types
* make AreaNode sync and add CentroidNode
* cargo fmt
* preview of DVec2
* make the nodes async again
* use segment domain instead of region domain
* modify the check for linearity
* create a limit for area in centroid calculation
* cargo fmt
* reverse unnecessary changes
* add threshold to area calculation too.
* handle zero area edge case
* add todo comment
* implement 1D centroid and use it as fallback
* formatting floats to skip last zero
* add Centroid Type radio button to Centroid Node
* rename docs to use area and perimeter centroid
* add web demos for perimeter centroid
* add tests for perimeter centroid
* add fallback to use average of points
* Fix for broken area
* missing fixes
* Code review and rename Perimeter Centroid to Length Centroid
* Use dummy footprint in Area and Centroid nodes
* add doc and todo to clarify when `is_linear` fails
* use epsilon instead of zero
---------
Co-authored-by: 0hypercube <0hypercube@gmail.com>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
Co-authored-by: Dennis Kobert <dennis@kobert.dev>
* added struct and registered fill from stroke node. not functional yet.
* properly registered new node
* finished fill-from-stroke feature. works on both closed and open shapes. supports line caps and line joins.
* fixed import issues and miter limit handling
* fix outline function. use both subpaths for solid shapes now
* code quality improvements
* use radius instead of diameter, functionality not yet working for shapes as transform is not properly applied before calculating new shapes.
* Updated to follow new VectorData structure. Fully functional.
* fix repeat node
* remove comment
* add a test, remove unused code.
* Use doubles in graph
* Format .graphite files onto one line
* Rename new node to Vector2
* No primary input
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Cache base64 representation of images when converting to graphic group
* Fix build
* Fix build again
* Actually fix it this time
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* WIP, transforms broken with rot/scale
* Transform around bounding box centre
* Add units and tooltips
---------
Co-authored-by: 0hypercube <0hypercube@gmail.com>
* Add Poisson-disk sampling node and Bezier-rs 0.4 release
* Additional optimizations
* More performance optimizations with help from 0Hypercube
* Add comments
* Add morph node
* Range slider time parameter, better lerping
* Lerp more fill and stroke parameters
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Allow generic node input for type inference
* Make imaginate resolution picking depend on the image resolution instead of the transform
* Remove dead code
* Fix console spam after crash
* Fix crash when disconnecting Imaginate node input
* Update Imaginate tool tooltip
---------
Co-authored-by: Dennis Kobert <dennis@kobert.dev>
* Initial work on fixing tests
* Fix formatting
* Remove dead code to satisfy rustc warnings
* Insert into an artboard
* Load updated artwork in editor
* Remove popup when importing image
* Fix up demo art
* Change transform app[lication method
* Reduce number of enums called BlendMode
* Finalize the demo artwork upgrade
* Code review pass
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
Changes:
Graph is evaluated on every viewport change
move all navigation logic into the viewport
reduce the number of js roundtrips
add canvas rendering
enable image pasting
various cleanups
Fix cache nodes being reset every evaluation
* Make transform node accept footprint as input and pass it along to its input
use f32 instead of f64 and add default to document node definition
* Add cull node
* Fix types for Transform and Cull Nodes
* Add render config struct
* Add Render Node skeleton
* Add Render Node to node_registry
* Make types macro use macro hygiene
* Place Render Node as output
* Start making DownresNode footprint aware
* Correctly calculate footprint in Transform Node
* Add cropping and resizing to downres node
* Fix Output node declaration
* Fix image transform
* Fix Vector Data rendering
* Add concept of ImageRenderMode
* Take base image size into account when calculating the final image size
* Supply viewport transform to the node graph
* Start adapting document graph to resolution agnosticism
* Make document node short circuting not shift the input index
* Apply clippy lints
* Fix pen tool (except overlays)
* Thumbnail of only the layer and not the composite
* Fix occasional transform breakages
* Constrain size of thumbnail
* Insert new layers at the top
* Broken layer tree
* Fix crash when drawing
* Reduce calls to send graph
* Reduce calls to updating properties
* Store cached transforms upon the document
* Fix missing node UI updates
* Fix fill tool and clean up imports and indentation
* Error on overide existing layer
* Fix pen tool (partially)
* Fix some lints
* Create node (no implementation)
* Resampling - WIP
* use bezier::from_linear_dvec2
* Use from anchors instead of Bezier
* Tidy up anchor collection & subpath creation
* Add Spline from Points node (not implemented)
* Add spline from points node implementation
* Update resampling
* Update minimum density 0.01 -> 1.0
* Add a way to create a custom vector network
* Add spline from points node to spline tool
* Fix crash when no points
* Add anchor method to subpath
* Exact start and end point
* Fix compile errors from rebase
* Fix spline tool
* Rename 'Density' to 'Spacing'
* Fix transforms
* Only close subpaths with >1 anchor
* Fix compile
* Fix compile error
* Fix from points with many subpaths
* Fix new_cubic_spline crash with one point
* Rename to resample as polyline
* Fix div zero
* Fix missing file
* Fix resample
* Rename to resample points
---------
Co-authored-by: hypercube <0hypercube@gmail.com>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Add Boolean Operations Nodes
Adds OR AND XOR and NOT operators
* Fix operand naming
Inputs to the 'Min' 'Max' 'Equality' and boolean operations nodes were
previously named 'First' and 'Second' and are now called 'Operand A' and
'Operand B'
* Rename Equality to Equals
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>