* Separate glyphs into Vector data rows
* Fix `String Length` node
- Properly count characters with
`str.chars().count()` instead of bytes `str.len()`
- Change `String Length` node's output to `u32`
* Apply transform on instance instead of applying it when drawing the glyph
* Add checkbox to enable/disable per-glyph instances
* Tooltips
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* migration: make document migration use ProtoNodeIdentifier
* migration: NodeReplacement struct for better formatting
* migration: test for duplicates and fix them
* fix warnings on master
* make the `ProtoNodeIdentifier` of a Node be accessible and always a borrowed `&'static str`
* always generate `node_name::identifier()`, even with `skip_impl`
* make `FrontendNodeType` use Cow
* remove broken `DocumentNodeDefinition`s for old GPU nodes
* don't reexport `graphic_element` in it's entirety, only data structures
* adjust everything to use the new `node_name::identifier()`
* fixup imports for wasm
* turn identifier fn into a constant
* Make String Value node input a TextArea
Signed-off-by: ezbaze <68749104+Ezbaze@users.noreply.github.com>
* Replace link to Tauri
Signed-off-by: ezbaze <68749104+Ezbaze@users.noreply.github.com>
* Make String Concatenate node & Replace String node inputs into a TextArea
Signed-off-by: ezbaze <68749104+Ezbaze@users.noreply.github.com>
---------
Signed-off-by: ezbaze <68749104+Ezbaze@users.noreply.github.com>
* fix `BoundingBox for Raster<GPU>` when `wgpu` feature is disabled
* fix `tinyvec` crate not being `std` by default
* fixup migration for `CoordinateValueNode`
* fixup migration for raster nodes
* Fix unit usages
* Add node and parameter doc comments
* Fix the parameters panel for the 'Line' node when added from the graph
* Clean up nodes
* Fix tests
* Update the demo artwork
* replace rustybuzz with parley for text layout handling
change text input direction based on text direction
* Code review
* change default character spacing to 0
* add shear to text node
this also adds migration code for documents that don't have shear
* shear migration for text node
- add shear property
- set character spacing to 0
* use old max_width and max_height in text migration if available
* Final code review pass
* Add units to the parameters
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* fixed double-click on anchor connected to linear segments
* fix when scaling when anchor
* Nit
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* move `trait AsU32` from `gcore::vector::misc` to `gcore`
* move blending and gradient to their own modules
* fix unused warnings
* move `Quad`, `Rect` and `BBox` to `gcore::math`
* extract `ReferencePoint` and transform nodes from `transform`
* move color-related code to `mod color`
* fix unused warning in test code
* move blending-related nodes and code to `mod blending_nodes`
* move ClickTarget code to `mod vector::click_target`
* Prototype document network level into node insertion
* Implement Convert trait / node for places we can't use Into
* Add isize/usize and i128/u128 implementations for Convert trait
* Factor out substitutions into preprocessor crate
* Simplify layer node further
* Code review
* Mark preprocessed networks as generated
* Revert changes to layer node definition
* Skip generated flag for serialization
* Don't expand for tests
* Code review
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* fix lerping the target paths to the point at the end of path instead of the start.
* comment
* append a MoveTo element first if the bezpath is empty
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Added Count point Radio button to property pannel
* Implemented on Count radio button functionality
* Fixed linting and Title case problem
* Fixing more linting problem
* Instance tables refactor part 8: Make repeater nodes use pivot not bbox and output instance type not group; rename 'Flatten Vector Elements' to 'Flatten Path' and add 'Flatten Vector' (#2697)
Make repeater nodes use pivot not bbox and output instance type not group; rename 'Flatten Vector Elements' to 'Flatten Path' and add 'Flatten Vector'
* Refactor the 'Bounding Box' node to use Kurbo instead of Bezier-rs (#2662)
* use kurbo's default accuracy constant
* fix append_bezpath() method
* refactor bounding box node
* fix append bezpath implementation.
* comments
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Add overlays for free-floating anchors on hovered/selected vector layers (#2630)
* Add selection overlay for free-floating anchors
* Add hover overlay for free-floating anchors
* Refactor outline_free_floating anchor
* Add single-anchor click targets on VectorData
* Modify ClickTarget to adapt for Subpath and PointGroup
* Fix Rust formatting
* Remove debug statements
* Add point groups support in VectorDataTable::add_upstream_click_targets
* Improve overlay for free floating anchors
* Remove datatype for nodes_to_shift
* Fix formatting in select_tool.rs
* Lints
* Code review
* Remove references to point_group
* Refactor ManipulatorGroup for FreePoint in ClickTargetGroup
* Rename ClickTargetGroup to ClickTargetType
* Refactor outline_free_floating_anchors into outline
* Adapt TransformCage to disable dragging and rotating on a single anchor layer
* Fix hover on single points
* Fix comments
* Lints
* Code review pass
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Add anchor sliding along adjacent segments in the Path tool (#2682)
* Improved comments
* Add point sliding with approximate t value
* Add similarity calculation
* Numerical approach to fit the curve
* Reliable point sliding for cubic segments
* Fix formatting and clean comments
* Fix cubic with one handle logic
* Cancel on right click and escape
* Two parameter optimization
* Esc/ Right click cancellation
* Code review
* Fix dynamic hints
* Revert selected_points_counts and fix comments
* Code review
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Fix Sample Points node to avoid duplicating endpoints instead of closing its sampled paths (#2714)
* Skip duplicate endpoint and close sampled paths in Sample Points node
Closes#2713
* Comment
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Implemented on Count radio button functionality
* Fixed linting and Title case problem
* The sample count can now work with adaptive spacing
* Readying for production
* Rename to 'Sample Polyline' and add migration
* Upgrade demo artwork
* Add monomorphization
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
Co-authored-by: Priyanshu <indierusty@gmail.com>
Co-authored-by: seam0s <153828136+seam0s-dev@users.noreply.github.com>
Co-authored-by: Adesh Gupta <148623820+4adex@users.noreply.github.com>
Co-authored-by: Ezbaze <68749104+Ezbaze@users.noreply.github.com>
* Change node categories
Signed-off-by: ezbaze <rybitwamateusz3@gmail.com>
* Restore Ezbaze's other work that was lost in the rebase
---------
Signed-off-by: ezbaze <rybitwamateusz3@gmail.com>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* impl path length node
* test 'Path Length' node implementation
* improve test
* impl 'Count' node to return the number of instance in a VectorDataTable instances
* impl 'Split Path' node
* don't split if t is close of 0 or 1 or the bezpath is empty
* write comments
* preserve the style on vector data in 'Split Path' node implementation
* Code review
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Ignore tauri gen
* Deny warnings on CI
* Fix all warnings in current nightly rustc
* Disable DWARF debug info for development builds
* Fix typo
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* graph-craft: fix direct wasm build
* graph-craft: fix no serde feature failing to compile
* graph-craft: make wgpu-executor properly optional
* workspace: unify `image` formats in workspace
* workspace: turn most dependencies into workspace deps, no actual changes
* workspace: unify dependency features in workspace dep
Issue:
Previously the `AppendBezpath::append_bezpath()` method didn't append the elements after the first `ClosePath` element in the given BezPath, but the Bezpath can contain more than one path. The 'Solidify Stroke' node creates at least two paths, but the `append_bezpath` method only appends the first path, and hence 'Solidify Stroke' didn't work correctly.
Fix:
Now `AppendBezpath::append_bezpath()` appends all the paths in the given BezPath, which also fixes the 'Solidify Stroke' node.
* 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>
* UI working for spacing enum.
* Implementations.
* UI working for spacing enum.
* Undo all changes.
* unit, display_decimal_places, and step macro implementation.
* Fixing tests.
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* copy and refactor spline algorithm from Bezier-rs
* add comments
* refactor spline node
* fix spline when path is closed
* use refactored version of spline algorithm
* revert changes to 'Spline' node funtion
* use manipulator groups instead of bezpath
* Fix comment
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Start refactoring the boolean operations code
* Switch to iterators in the boolean operations code
* Make boolean operations work on rows of a table, not Vecs of single-row tables
* Remove more .transform()
* Simplify brush code
* Attempt to remove .transform() by using Instance<Image<Color>> in brush code, but a regression is introduced
* Improve blend_image_closure
* Simplify
* Remove leading underscore from type arguments
* Remove .transform() from ImageFrameTable<P> and fix Mask node behavior on stencils not fully overlapping its target image
* Remove more .one_instance_ref()
* Fully remove .one_instance_ref() and improve the 'Combine Channels' node robustness
* Fully remove .once_instance_mut()
* Fix tests
* Remove .one_empty_image()
* Make Instances<T>::default() return an empty table for images, but still not yet vector
---------
Co-authored-by: hypercube <0hypercube@gmail.com>
* fix distribution snapper visualization going far from layers
* fix bugs
* Remove traces
* remove comment
* Fix tests
* Rename distribution snapper variables from x, y to horizontal, vertical
* Fix tests
* Fix bug where center point and corner point have to be enabled for distribution_snapper to work
* Cleanup
---------
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
* Avoid allocating a Vec when precomputed segments lengths is provided.
* improved using option type.
* we don't even need option type as Vec::new() doesn't allocate.
* clean up
* fix naming
* refactor sample_points node/function.
* avoid recalculating segments length to find point on bezpath.
* cleanup
* rename few variables
* fix transformation and use precomputed segment lengths
* write comments
* set POSITION_ACCURACY and PERIMETER_ACCURACY to smaller value to get better approximate euclidean position on a path
* fix segment index when t value is 1.0
* Improve comments
* move sampling points code into a separate function
* it works! finding the segment index is linear now!
* small fix and improve variable names & comment
* Naming
* evaluate segment at t as euclidean distance. fix.
* improve comment & variable name
---------
Co-authored-by: indierusty <priyaayadav@gmail.com>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* First draft of factoring out the dropdown boilerplate
* Add proc macro for enum boilerplate
* Detect whether to say `crate` or the name
* Clean up the input and naming of the enum macro
* Rename a file
* Do the rename of code too
* Use the attribute-driven selection of radio vs dropdown
* Add a metadata struct and tooltips
* Move the new traits to a better place.
* Use ChoiceType, part 1
* Use ChoiceType, part 2
* Introduce a builder API for choice widgets
* Start using the new new API
* DomainWarpType should be a dropdown still
* Handle the case where a node property can never have a socket
* Rustfmt
* Code review
* Update stable node IDs in test
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Fix min and max macro not enforcing limits when data flows
* Use trait based clamping
* Remove min/max from testing
* cargo fmt
* Resolve into min, and hard_min
* cargo fmt
* fix traits
* cargo fmt
* fix tests
* rename as soft_x
* Add validation code
* Clean up (not compiling because of DVec2 clamping)
* Avoid needing to add trait bounds to node definitions
* Code review
---------
Co-authored-by: Dennis Kobert <dennis@kobert.dev>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* rough refactor of Position on Path node
* refactor
* refactor 'Tangent on Path' node implementation to use kurbo API
* Code review
---------
Co-authored-by: indierusty <priyaayadav@gmail.com>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* almost_fixed
* fix need to refactor
* fixed issed need to refactor
* refactor-done fixed issue
* move function to common_functionality
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Make the Pen tool show a path being closed by drawing a filled overlay when hovering the endpoint
* Add to_css to color.rs
* Check before unwrapping layer
* Close if in the right place
* Fix typo
* Format code
* Support discontinuous paths for closing preview
* Code review
* Denser fill lines
* Fill tool preview with strip lines only and revert pen shape-closing opacity
* Small adjustments to fill preview
* Fix line width of fill preview
* Use a pattern to preview the fill tool and fix canvas clearing
* Update pattern
* Simplify code
* Format code
* Use secondary color to preview fill if shift is pressed
* Code review
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* init
* add closed and slice options
* Make it work beyond -360 to 360 degrees
* Switch "closed" and "slice" to ArcType enum
* Update default ranges
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Fix poisson disk sampling with nested subpaths
Previously all subpaths were considered independently for the poisson disk sampling evaluation. We now check agains all subpaths which might contain the point to fix shapes with holes such as fonts with letters with holes in them
* Fix wasm demo
* Fix counting overlapping areas twice
* Rename shape variables to subpath variants
* Include points in bounding box calculations
* Fix unrelated crash from debug assert when reordering root-level folders
* Fix another unrelated crash from debug assert when GRS scaling to size 0
* Fix several vector nodes to respect and propagate local transform space
* Make Bounding Box have empty output on empty input
Fixes a crash when using the text tool and the Text node is connected to
a Bounding Box node.
* Use .map().unwrap_or_default()
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Add InputType based filtering capabilites to NodeCatalog.
Send InputTypes through SendUiMetadata under
odeTypes.
Update NodeCatalog.svelte component to support ype based filtering.
Update ContextMenuData to support compatibleType as an input to the searchTerm for the NodeCatalog.
Update Graph.svelte component to support new ContextMenuData enum types.
Send CompatibleType data from rust backend on wire drag and release to NodeCatalog to already show filtered data.
* Add InputType based filtering capabilites to NodeCatalog.
Send InputTypes through SendUiMetadata under
odeTypes.
Update NodeCatalog.svelte component to support ype based filtering.
Update ContextMenuData to support compatibleType as an input to the searchTerm for the NodeCatalog.
Update Graph.svelte component to support new ContextMenuData enum types.
Send CompatibleType data from rust backend on wire drag and release to NodeCatalog to already show filtered data.
* Open NodeCatalog on DoubleClick in empty node graph area
* Capture Node implementations and filter out uncatogrised nodes before sending metadata.
Update NodeCatalog Search filter to support single type search alongside name and category search
* Take union of DocumentNodeTypes and registered node implementations, Update missing categories and make sure to remove nodes with empty categories
* Code review
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* added handle_types and refactored the handle_adjustments
* anchor move refactor
* code-todo-fix
* removed-draw-mode
* kind of works need to figure out snapping
* some refactoring
* refactor+overlays..need to fix the snapping and dragging
* added docs
* got stuck in space move
* fixed all issues
* comments and small fixes
* completed last issue and refactor
* major fixes and improv
* fixed edge cases
* edge cases fixed
* fix edge cases and add docs
* Code review pass
* rename ,bug fixes
* Add terminology diagram
* Add Ctrl "Lock Angle" hint
* Rename other hint
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Make the Tangent Inverse node accept DVec2
If given a DVec2 it will be atan2 instead of normal atan.
* Remove the now-redundant atan2 node
* Doc comment
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* 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>
* Implement experimental time routing to the node graph
* Allow toggling live preview with SHIFT + SPACE
* Add animation message handler
* Fix hotkeys
* Fix milisecond node
* Adevertize set frame index action
* Fix frame index
* Fix year calculation
* Add comment for why month and day are not exposed
* Combine animation nodes and fix animation time implementation
* Fix animation time interaction with playback
* Add set animation time mode message
* Captalize UTC
* Fix compiling
* Fix crash and add text nodes
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Have red be below quads
* Code review pt 1
* Skip rendering of pivot
* Code review pt 2
* Code review pt 3
* Cancel resize and its hints
* Remove the redundant placing message
* Dragging state for text tool fsm
* Cleanup
* Fix line tool undo and abort problems
* Code review
* 3px textbox overflow bottom
* Some more cleanup
* Fix reversed match arms that had been converted to if-else
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* add `merge_by_distance` node
* remove unneeded features of petgraph
Also re-arrange module slightly since because functions are no longer
async, there was name shadowning with the old arrangement.
* remove region if start or end segment is removed
* remove stuff I ended up not using
* "algos" -> "algorithms"
* Code review pass
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Fix abortion while dragging
* Create function for text bounding box
* Reorder arms of text tool FSM
* add transform cage to textbox pt.1
* add transform cage pt.2
* Fix minor issue after merge
* Get bounding box working in place without action keys
* Add max_height and disable pivot drag
* Cleanup code and write doco for new utility function
* Minor change due to merge
* Add bottom overlay
* Get modifier keys to work pt.1
* Code cleanup
* cleanup
* Fix transform
* Minor improvements
* Undo debug statement!
* Add comments and keep original layer transformation
* Alt from centre
* Fix merge conflict
* Minor code review
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
Co-authored-by: hypercube <0hypercube@gmail.com>
Co-authored-by: James Lindsay <78500760+0HyperCube@users.noreply.github.com>
* Just group
* Partly working but without transforms
* Remove Transform/TransformMut from GraphicElement and GraphicGroupTable
* Fix layers and flattening
* Fix transform group handling on the remaining nodes
* Change collect metadata
* Add transform on vector data. TODO: Remove duplicate transform
* Small code tidying-up
* Add concatenate node?
* Remove ignore_modifications which is always false
* Improve transforms
* Mostly fix the nested transform cage angle (except leaf layers and skew)
* WIP attempt to integrate skew
* Fix nesting bounding box
* Avoid setting the transform
* Fix stroke transforms
* Renderer cleanup
* Fix tests for repeated elements not given unique point IDs
* Suppress cargo-deny warning
* Fix upgrade code for graphic group data
* Work around rendering issue in Isometric Fountain
---------
Co-authored-by: Adam <adamgerhant@gmail.com>
Co-authored-by: hypercube <0hypercube@gmail.com>
* Fix fill tool on raster image temporarily breaks the graph
* Avoid vector filling raster layer via checking node category
* check raster image using input type instead
* Add additional check for TextureFrameTable
* Enable the ignore raster test
---------
Co-authored-by: hypercube <0hypercube@gmail.com>
Allow disabling running of node network in graphite-cli
It seems that graphite-cli currently crashes on some GPUs which do not
support Vulkan. This commit improves the CLI, adding an option to
disable running the node network, which prevents the crash (but also
prevents any output from being shown).
Change default log levels
Restructure argument parsing
* Clean up dyn_any usages
* Migrate ArtboardGroup to ArtboardGroupTable (not yet flattened)
* Reorder graphical data imports
* Flatten and remove ArtboardGroup in favor of ArtboardGroupTable
* Fix test
* 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>