Implement Infrastructuro to reuse the previous evaluation of the
node graph to blend the new stroke with instead of drawing the
entire trace from scratch.
This does not transition to a blending based approach because that still
caused regressions but allows the brush node to work with input data
natively.
Test Plan:
- Use the brush tool in the editor and check for regressions
- Evaluate the performance
Reviewers: Keavon
Pull Request: https://github.com/GraphiteEditor/Graphite/pull/1190
* Implement download/copy ImageFrame layer output
* Add note about black transparency when copying
* Introspect node graph output type to conditionally disable the download button
---------
Co-authored-by: Dennis Kobert <dennis@kobert.dev>
* Add basic layout - WIP
* Add color input min-width -> 80px
* First pass implementation - WIP
* Allow fill to be None
* Fix null Fill color
* refactor fill and stroke options into struct
* toolbar progress - WIP
* Switch is_working_color bool to PenColorType enum
* Add todo
* Add WorkingColorChanged event
* remove unused import
* Add WorkingColor[Primary/Secondary] icons
* Allow new strokes to have no color
* Set to base color when X is pressed (as per req)
* Improve icons for new UI layout design
* Add radio buttons
* Fix menu bar Edit12px -> Edit
* Add tooltips to radio buttons
* Make the color selector only on custom
* Fix edit icon correctly this time (whoops)
* Fix working colors icons
* Changes to improve the UX
* Remove lines obviated by Default::default()
* Make Eyedropper tool use working_color_changed event
* Fix tests
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Set spline mirror handles to enabled by default
* refactor mirror setting into common function
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
Add the node path to the document node and carry that over to the proto
nodes which are generated from that.
This pr also adds a compiler pass to assign the paths based on the
hierarchical structure of the nodegraph.
Test Plan: - Run units tests which check the path propagation works
Reviewers: Keavon
Reviewed By: Keavon
Pull Request: https://github.com/GraphiteEditor/Graphite/pull/1181
* Initial work towards text to node
* Add the text generate node
* Implement live edit
* Fix merge error
* Cleanup text tool
* Implement text
* Fix transforms
* Fix broken image frame
* Double click to edit text
* Fix rendering text on load
* Moving whilst editing
* Better text properties
* Prevent changing vector when there is a Text node
* Push node api
* Use node fn macro
* Stable ids
* Image module as a seperate file
* Explain check for "Input Frame" node
* Code review
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Migrate Nodes to use RasterMut + Samplable
* Add Pixel trait to include serialization
* Implement traits for Color and propagate new generics
* Always convert to linear color when loading images
* Change tauri build directory back to `../dist` (#1033)
* Select Tool: Deselect selected layer when clicked while holding shift
* Fix formatting
* Change deselecting to happen on mouse up
* Clean up debug and rustfmt
---------
Co-authored-by: Dennis Kobert <dennis@kobert.dev>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* adds lock angle to pen tool
The current [Shift] Break Handle behavior should become Alt instead of Shift
The current [Ctrl] Snap 15° behavior should become Shift instead of Ctrl
Implement the extend-in-this-direction feature called [Ctrl] Lock Angle that exists in the Line tool, but doesn't yet exist in the Pen tool
* avoid clone by passing exlusive ref to tool data field directly
* Rearrange hints
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Restore path handle length to previous length when shift is released while dragging
* Reset previous opposing handle length on Delete and Abort messages
* Move the opposing handle length state to the path tool
* Use MoveManipulatorPoint messages instead of modifying MoveSelectedManipulatorPoints + break handle mirroring on dragging both handles without anchor
* Handle alt + improve reset logic + comments
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Selecting an individual anchor point deselects each of the other points
* git gra
* Selecting intersecting shapes,selects top shape
* Merge commit
* cargo fmt
* fixed: can't drag multiple selected shapes.
* Merge commit
* Merge commit
* Code review tweaks
* Merge commit
* Fixed topmost layer and previous_mouse_position
* Fixed issues when clicking on anchors
* Works
* Function name change
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
Co-authored-by: Dennis Kobert <dennis@kobert.dev>
* Create helper for converting d to t values
* Add euclidean option for tangent and normal
* Modified bezier functions signatures to accept ComputeType
* Stylistic changes per review
* Added ComputeType documentation
* Renamed ComputeType to TValue
* Fixed comments
* Fixed failing unit tests
* Code review
* Fix comments in code review
* Renamed compute_type_to_parametric to t_value_to_parametric
---------
Co-authored-by: Linda Zheng <thelindazheng@gmail.com>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Multiple node outputs
* Add new nodes
* gcore use std by default to allow for testing
* Allow multiple node outputs
* Multiple outputs to frontend
* Add ImageFrameNode to node registry
* Minor cleanup
* Basic transform implementation
* Add some logging to image encoding
* Fix ImageFrameNode
* Add transform input to Imaginate node (#1014)
* Add transform input to imaginate node
* Force the resolution to be edited with no transform
* Add transform to imaginate generation
* Fix compilation
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Add labels to node outputs
* Fix seed; disable mask when transform is disconnected; add Imaginate tooltips
* Rename 'Input Multiple' node to 'Input'
* Code review
* Replicate to Svelte
* Show only the primary input chain in the Properties panel
---------
Co-authored-by: Dennis Kobert <dennis@kobert.dev>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Allow text editing when pressing Enter on a single selected text layer
* Updated LayerDataType import
* Extract the logic to set the edit layer into a function
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* add derive(specta::Type)
* use specta from git
* introduce Uuid type
* remove unnecessary specta::Type
* document export_types test
* upgrade Specta
The previous Specta branch had some hacks that were just for this project. They have all been converted into proper features so they can be merged into main.
* remove some unnecessary specta::Type uses
* add MessageDiscriminantDef explanation
* manually export types with specta
* rename 'specta.rs' to 'export_types.rs'
* rename 'export_types' to 'generate_ts_types'
---------
Co-authored-by: Oscar Beaumont <oscar@otbeaumont.me>
* Use builder pattern for widgets
* Arguments to new function
* Add node graph when dragging in image
* Fix duplicate import
* Skip processing under node graph frame if unused
* Reduce node graph rerenders
* DUPLICATE ALL frontend changes into other frontend
* DUPLICATE more changes to another frontend
* Code review
* Allow importing SVG files as bitmaps
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Convert DocumentSave to struct
* Comit the artboard history save in some cases
* Cause index out of bounds error
* Use box to avoid weird wasm error
* Implement the artboard history
Co-authored-by: Keavon Chambers <keavon@keavon.com>