* Generate the MVP node catalog in the manual (with some placeholders)
* Implement nearly the rest of everything
* Move to the tools directory and make it generate nicer default values
* Add category descriptions
* Organize file structure and improve type naming
* Improve book table of contents code
* Add collapsing chapter navigation to the book template
* Add to build workflow
* Clean up site structure
* Include single connected points as extrema in the extrude node
* Update styling of loading indicator
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Add blue layer origin cross overlay
* Apply suggestion from @Keavon
* Skip layers without local transforms
* Disable the Custom Pivot by default
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Add tooltip documentation to web request, text, and brush nodes
- Add descriptive tooltips to web request nodes (GET/POST, string/image conversion, resource loading, image decoding)
- Add tooltip to GPU rasterization node explaining footprint usage
- Improve text node tooltip with clearer per_glyph_instances parameter explanation
- Add tooltips to brush stamp generator and blit operations explaining their internal roles
- Fix typos in tooltip and variable names (it's→its, perview→preview, instnace→instance)
* Fixed 2 issues with previous changes. Reversed order of documentation about per_glyph_instances. Can it be 3 lines?
* Improve post_request node documentation
Change doc comment to describe the node's purpose rather than focusing
only on the "Discard Result" parameter. Now clearly states this is an
HTTP POST operation with optional async behavior.
* Fix post_request documentation error
Corrected doc comment to say "HTTP POST" instead of "HTTP GET" since
this function performs POST requests with binary data.
* Review changes
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* add arrow shape feature in editor
Signed-off-by: krVatsal <kumarvatsal34@gmail.com>
* fix the arrow tool to show arrow in viewport space
Signed-off-by: krVatsal <kumarvatsal34@gmail.com>
* fix the direction of arrow and make the new arrow node
Signed-off-by: krVatsal <kumarvatsal34@gmail.com>
* updated arrow tool to hae start and end points
Signed-off-by: krVatsal <kumarvatsal34@gmail.com>
* fixed calculate point bug
Signed-off-by: krVatsal <kumarvatsal34@gmail.com>
* fixed some bugs of arrow positioning
Signed-off-by: krVatsal <kumarvatsal34@gmail.com>
* fixed formatting in whole codebase and added fill to arrow
Signed-off-by: krVatsal <kumarvatsal34@gmail.com>
* fix
---------
Signed-off-by: krVatsal <kumarvatsal34@gmail.com>
Co-authored-by: Timon <me@timon.zip>
* fix: handle PointId remapping when joining paths from different layers
When using Ctrl+J to join two points from different layers, the operation
failed because PointIds change during merge due to collision resolution.
The fix uses index-based point tracking instead of PointIds:
1. Before merge: Record the index of each selected point in its layer
2. Calculate post-merge indices using the point offset from layer1
3. After merge: Retrieve the actual PointIds at those indices
4. Create the connecting segment using the resolved PointIds
This works because Vector::concat() preserves point ordering during merge,
so we can use exact index arithmetic to find points after remapping.
Fixes#3519
* fix: use position-based lookup when joining paths from different layers
* fix cmd + g group case
* fix check for grouped folder
* add in the single layer inside a group case
* use ApplyPointDelta instead of creating a dummy segment
* Update editor/src/messages/tool/common_functionality/shape_editor.rs
Co-authored-by: James Lindsay <78500760+0HyperCube@users.noreply.github.com>
* Update editor/src/messages/tool/common_functionality/shape_editor.rs
Co-authored-by: James Lindsay <78500760+0HyperCube@users.noreply.github.com>
* encapsulate point connection logic in defer_connect_points_by_position
* reduce tolerance to 1e-6
* remove wrong comments
---------
Co-authored-by: James Lindsay <78500760+0HyperCube@users.noreply.github.com>
* Add median filter option to blur node:
- Add median parameter to blur function for noise reduction
- Implement median_filter_algorithm with efficient quickselect
- Support gamma space calculations for median filtering
- Preserve edges while removing noise, complementing existing blur options
Feature in Issue: #912
* Optimize median filter algorithm by reusing buffers and improving pixel neighborhood collection
* Add median filter option to blur node:
- Add median parameter to blur function for noise reduction
- Implement median_filter_algorithm with efficient quickselect
- Support gamma space calculations for median filtering
- Preserve edges while removing noise, complementing existing blur options
Feature in Issue: #912
* Optimize median filter algorithm by reusing buffers and improving pixel neighborhood collection
* Improve median filter's NaN handling by using total_cmp for safe comparisons
* Add median filter node for noise reduction
- Create dedicated median_filter node separate from blur functionality
- Implement median_filter_algorithm with efficient quickselect
- Support gamma space calculations for consistency
- Use safe NaN handling with f32::total_cmp to prevent panics
- Optimize performance with memory reuse and O(n) median selection
* Refactor median filter to remove gamma handling and simplify algorithm
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
Co-authored-by: Dennis Kobert <dennis@kobert.dev>
* Exclude node registry functions from desktop frontend builds
This reduces compile times and file sizes
* Use early return
* Fix branch name in build-linux pipeline
* Desktop: Fix helper window zorder on Windows
* Attach to parent console if launched from a terminal
* Workaround for a Windows-specific exception that occurs when `app` is dropped
* Add #[data] and #[serialize] attributes to node macro
- Add #[data] attribute for struct fields that aren't node parameters
- Data fields are initialized with Default::default()
- Passed as references to the underlying function
- Excluded from registry metadata (internal state)
- Generic types in data fields allowed without #[implementations]
- Add #[serialize] attribute for custom Node::serialize() implementation
- Receives references to all data fields
- Generates serialize() method in Node trait impl
- Conditional derives based on data field presence
- With data fields: Debug, Clone only
- Without data fields: Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash
* Refactor Memo and Monitor Node to use node macro
* Move Complex type into type alias
* Fix format
* Update node-graph/nodes/gcore/src/memo.rs
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Update node-graph/nodes/gcore/src/memo.rs
Co-authored-by: Keavon Chambers <keavon@keavon.com>
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* fix: rasterize node document leakage with hashmap and eq check
* Use single Hashmap and ignore source id
* use or_insert_with instead of Entry match
---------
Co-authored-by: Dennis Kobert <dennis@kobert.dev>