* 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>
* implements pan/zoom to the selected layer(s) on Period
Relates to #989
* adds layer menu support: Layer -> Center View on Selection
* relocate Center View on Selection to View -> Zoom to selected
* use the proper menu title
* Fix default value for output node
* Don't set frame transform to zero
* Fix typo in hash function
* Clear frame on empty image
---------
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>
* Generate stable node ids
* checkpoint
* Implement borrow tree
* Add eval function on borrow tree
* Refactor Node trait to fix lifetime issues
* Compiler infinite loop
* Impl compose pair
* Transition to double lifetime on trait
* Change node trait to use a generic arg for the input
* Start adapting node_macro
* Migrate more nodes to new macro
* Fix raster tests
* Port vector nodes
* Make Node trait object safe
* Fix FlatMapResultNode
* Translate most of gstd
* Fix DowncastBothNode
* Refactor node trait once again to allow for HRTB for type erased nodes
* Start working on type erased nodes
* Try getting DowncastBothNode to work
* Introduce Upcasting node + work on BorrowTree
* Make enough 'static to get the code to compile
* Transition DynamicExecutor to use borrow tree
* Make Compose Node use HRTB's
* Fix MapResultNode
* Disable blur test
* Add workaround for Composing type erased nodes
* Convert more nodes in the node_registry
* Convert more of the node_registry
* Add update tree fn and hook up to frontend
* Fix blur node
* Implement CacheNode
* Make frontend use graph compiler
* Fix document_node_types type declaration for most nodes
* Remove unused imports
* Move comment down
* Reuse nodes via borrow tree
* Deprecate trait based value in favor of TaggedValue
* Remove unsafe code in buffer creation
* Fix blur node
* Fix stable node id generation
* Fix types for Image adjustment document nodes
* Fix Imaginate Node
* Remove unused imports
* Remove log
* Fix off by one error
* Remove macro generated imaginate node entry
* Create parameterized add node
* Fix test case
* Remove link from layer_panel.rs
* Fix formatting
* 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>
* Added new DocumentResponse variant
* Update Operation::DeleteSelectedManipulatorPoints to update Layer Tree by delegating deletion to Operation::DeleteLayer. Also emits Operation::DeletedSelectedManipulatorPoints to let editor clear Properties panel
* Update process_message() to deal with new DocumentResponse::DeletedSelectedManipulatorPoints match case. When this DocumentResponse is emitted, it clears the Properties panel.
* Added Display trait implementation for DocumentResponse::DeletedSelectedManipulatorPoints. Updated imports in document_message_handler.rs to get the correct types for messages emitted from DocumentResponse::DeletedSelectedManipulatorPoints match case in process_message().
* Removed useless import. Capitalized comments for style consistency.
* Updated messages emitted to clear Properties panel by emitting LayoutMessage::SendLayout's instead, which update the backend widget state
* Revert inclusion of unused imports
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* 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>
* Add self hosted runner to ci.yml
* Remove libgtk install
* Use mold as the linker
* Make build logs non verbose
* Fix crash on failure to get GLOBAL_PLATFORM
* Copy the platform enum before calling unwrap_or_default
Co-authored-by: 0hypercube <0hypercube@gmail.com>
* Fixes issue of hints not closing when all documents are closed
* Fix whitespace and rewrite comment
* Close tool hints when you close all documents by doing File->Close All
* Add some more history states
* Fix undo whilst drawing
* Paste image history
* Toggle output and preview history
* Code review nits
* Remove extra '{'
* Fix typo
* Fix about.toml
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Reuse existing gradient
* Double click to insert gradient stop
* Add history states to the gradient tool
* Do trig in viewport space so it is actually perpendicular
* Sync tool options with active gradient
* Deleting points with delete key
* More tolerance on inserting points
* Add the link button
* Transform around pivot
* Remove log
* Fix tests
* Add a hacky two-line layout for the checkbox
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Store drag start as document position
* Don't open graph whilst drawing
* Rename to is_drawing_node_graph_frame
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Don't allow disabling input or output nodes
* Shortcuts to show and preview node
* Update preview tooltip and label
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Add UI diffs to rust
* Clean up some js
* Fix lints
* Fix test
* Remove one unnecessary keyword
* Rename to widget path
* Rename new_val to new_value
* Rename newVal to layoutGroup in createLayoutGroup
* Extract get_widget_path to a function
* Base skipping on the layout rather than the target
* Rename to ResendActiveWidget
* Switch info to trace
* Add a link to the documentation about Object.assign
* knitpick js changes
* Add more comments to diff functions
Co-authored-by: mfish33 <maxmfishernj@gmail.com>
* Add drag to connect nodes
* Clean up node graph code
* Close node list with escape or click
* Check if line is contained within box
* Shift the nodes
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Cleanup Vector Nodes
* Add the creating nodes guide
* Rename guide as readme so GitHub shows it by default
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Setup tauri component for graphite editor
Integrate graphite into tauri app
Split interpreted-executor out of graph-craft
* Add gpu execution node
* General Cleanup
* Move the Subpath type to graphene-std
* Add the transform subpath node
* Delete selected nodes
* Inserting node list on right click
* Add several bitmap manipulator nodes
* Convert add node to use f64
* Add posterize node
* Rename names randomly
* Fix naming
* Exposure node
* Fix typo
* Adjust exposure node range
* Comment out vector nodes
* Adjust exposure range again
* Posterise as ints
* Rename input
* Use >= in the to hsl function
* Add exposing inputs to graph
* Use uuids and better node positioning
* Fix accidentally refering to the wrong grid spacing
* Secondary input without primary input
* Cleanup document node types
* Rename to input and addend
* Do not select layer immediatly on drag
* Add LayerReferenceInput MVP widget
* Properties Panel
* Fix dragging marker flicker
* Change mask shape to outline
* Add mask rendering
* Simplify select code
* Remove colours
* Fix inpaint/outpaint and rearrage widget UX
* Add mask blur and mask starting fill parameters
* Guard for the case when the layer is missing
* Add icon to LayerReferenceInput to finalize its UI
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Add enum to evaluate for differenciating compute type
* Add euclidean parameterization and update styling in the UI
Co-authored-by: Rob Nadal <robnadal44@gmail.com>
* Update usage of evaluate in graphite
* Add description
* Code review changes
* Update tests
* Improve ComputeType ergonomics
* Large code review/cleanup pass
Co-authored-by: Rob Nadal <robnadal44@gmail.com>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Node graph API stub
* Rename and fix SetInputValue
* Get list of links from network
* Test populating node graph UI
* Node properties
* Fix viewport bounds
* Slightly change promise usage
* A tiny bit of cleanup I did while reading code
* Cleanup and work towards hooking up node links in Vue template
* Add the brighten colour node
* Run cargo fmt
* Add to and from hsla
* GrayscaleImage node with small perf improvement
* Fix gutter panel resizing
* Display node links from backend
* Add support for connecting node links
* Use existing message
* Fix formatting error
* Add a (currently crashing) brighten node
* Replace brighten node with proto node implementation
* Add support for connecting node links
* Update watch dirs
* Add hue shift node
* Add create_node function to editor api
* Basic insert node UI
* Fix broken names
* Add log
* Fix positioning
* Set connector index to 0
* Add properties for Heu shift / brighten
* Allow deselecting nodes
* Redesign Properties panel collapsible sections
Co-authored-by: Keavon Chambers <keavon@keavon.com>
Co-authored-by: Dennis Kobert <dennis@kobert.dev>
* Limit saved undo history
* Do not commit path every mouse move event
* Reference count images in history system instead of cloning the image data
* Increase history storage step limit to 100
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Add range slider to NumberInput
* Cleanup
* Fix event ordering causing bug in Firefox
* Polish the code
* Switch number input modes to range in relevant places
* Add gradient stops
* Better step adding
* Steps can be dragged past each other
* Swapping and switching gradient/fill
* Fix convert to gradient
* Skip non finite transforms for overlays
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Update the Imaginate feature server API
* Change connection status strategy to prevent console errors
* Possible CORS fix? Maybe revert.
* Update to the final API and fix bugs
* Organize persistence.ts
* Switch to simpler promise handling
* Switch document list storage from localStorage to IndexedDB
* Track document auto-save status to avoid re-auto-saving unnecessarily
* Add button to clear storage on crash
* Bump document version and test file
* Switch to IDB-Keyval instead of raw IDB transactions