* 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>
* Added granular overlays control based on features
* Added basic support for pivot, path, anchors and handles overlay settings
* Added more overlay checks on anchors and handles
* Add new settings over measurements, hover and selection overlays
* Fix errors introduced while rebasing
* Disable anchors and handles functionality with their overlays, extended selection outline check
* Add check to enable/disable outlines on selected layers
* Toggle handles checkbox in sync with anchors checkbox
* Refactor overlays checks
* Remove debug statements
* Update select_tool.rs to resolve conflict
* Minor fix to reflect anchor checkbox state on the handles
* Minor fix to make anchors checkbox work
* Rearrange menu items, and code review
* Fix pivot dragging
* Add handles overlay check when drawing with pen tool
* Fix constrained dragging when transform cage is disabled
* Fix deselecting user selection when anchors are disabled
* Minor fix for disabling anchors
* Remove All from OverlaysType
* Remove debug statements
* Fix editor crash when selecting other layers with path tool and anchors disabled
* Minor fix on overlays check for all overlays
* Add proper code formatting
* Nits
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* segment overlay change
* Segment split and delete
* Cleanup
* graceful handling of edge cases
* Moved constants to conts.rs and tuned the threshold
* Remove going into another state
* Insert point mode cleanup
* Linting fix
* Code review
* Added hints
* Added field for delete segment
* Change controls and fix too far logic
* Fixes
* Code review
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Add Spline tool tests for drawing within a transformed artboard
* Refactor spline tool test to use click_tool and add draw_spline helper method
* refactor asserting point positions
* Fix decimal fomat
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Adding tests for spline PTZ
* Some refactoring
* Feedback applied from James
* Unnecessary changes
* refactor with current merged pr
* Code refactoring based on guidelines
* cli failing
* 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>
* Send path tool FSM to Dragging state on MouseDown if clicking selected point
* Cleanup
* Store selected point state before new selection is made and setup deselect logic
* update previously saved point data on every point selection
* Decide whether to deselect or select on extended_select if node not already selected, when DragStop state is reached instead of inside the mouse_down function.
* Fix broken merge and remove leftover debug statements
* Code review
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Added initial logic for dragging
* Alt drag stop makes opposite handle back to its position
* Implement new requested behaviour
* Fix sharp point bug
* Apply suggestions from code review
* Add hints
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Add Gradient tool test for dragging an endpoint sets the correct point in the viewport
* add canvas_zoom and transformset to verify correct viewport-space behavior
* cli failing
* cli failing
* test_transform_with_different_selections and groups
* merge conflict
* Use abs_diff_eq in assertions
* Added test 4
* Added test 4
* removed unnecessary changes
* 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
* 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>
* Fixes issues
* Revert changes
* Viewing angle using R
* Revert other fix so it can be its own PR
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* zoom rate preference
* Add generic range mapping functions for improved reusability
* cleanup
* Map zoom slider's default value of 50 to the original zoom rate (0.005)
* use . instead of .0 for whole-number floats
* Refactor zoom rate mapping to use a fixed reference point and adjustable curve steepness
* 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>
* Add test for scaling objects to zero
* added non zero scale after near zero scale to check if everything is working ifine
* unnecessary change
* cli failing
* chore: upgrade openssl to fix RUSTSEC-2025-0022
* cli failing
* new changes
* Fix line overlays not showing up for horizontal/vertical line
* Fix spline tool transform
* Fix line tool transform
* Fix pivot following mouse even after confirm
* cargo fmt
---------
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
* added tests for chained tasks
* added tests for chained tasks, applied the feedback from 0hypercube
* some changes in grs chained test to make it more robust
* unnecessary changes
* 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>
* fixed deep-select and overlays
* minor fix
* made minor fixes in filtering
* small fix
* Code review
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Make sure that quick measure overlays are based on AABBs drawn in the viewport local space
* Draw overlays to visualise AABBs of selected and hovered shapes
* use pre-existing functions to render dashed lines
* Redraw selected bounds using existing BoundingBoxManager
* remove unused variables
* Render transform cage after overlay is drawn
* Bring overlay and transform cage render calls above(before) other gizmos
* Add line length tolerance and render single line for singal edge alignment with one axis overlap
* Comments
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* implemented space drag need to handle unwrap + clean snap cache
* completed the space drag need to refactor
* refactor
* small comment changes
* formating_fix
---------
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>
* disable "Colinear Handles" checkbox when only endpoint or its handle is selected
* small refactor
* ignore endpoints when calculating multiple selected points colinearity
---------
Co-authored-by: indierusty <priyaayadav@gmail.com>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Replace `.selected_nodes(&[])` with `.selected_nodes_in_nested_network()` and `.selected_nodes()`
* Replace `.network(&[])` with `.document_network()` and `.nested_network()`
* Replace `.network_metadata(&[])` with `.document_network_metadata()`
* 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>
* 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>
* Initial attempt
* Allow editing and display overlays
* Fix modifier keys
* Handles show up correctly when layer is transformed
* Add multi-layer editing support and cleanup
* Fix transform breaking the handles
* line between handles
* Code review
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Enable free movement of edge during skew when ctrl is held
Fixes#2299
Follow-up to #2300
* Simplify code
* Change test along the lines of new behaviour
* Make the hint Title Case
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* WIP, for TrueDoctor to continue
* Expose first implementation type as default type in field metadata
* Cleanup
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* fix nudging the transform of 0 scaled object to `Nan` value by avoid division by zero vec2
* Update editor/src/messages/portfolio/document/document_message_handler.rs
---------
Co-authored-by: indierusty <priyaayadav@gmail.com>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Add feature for toggling an existing boolean to another type in Select tool
* Code simplifications and comments
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* refactor
* impl find_spline function
* impl merge_layers() to merge two spline layer to one spline layer
* impl merging spline to another spline which are not in the same layer
* impl merging of spline with path
* impl merge spline start endpoint and last endpoint
* fix naming
* fix handle transformation
* refactor
* fix merging with path with only one segment
* refactor
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Fixed Pen extension having collienar handles
* Reformat a little
* handles being colinear for GRS
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Fix mouse states and priority order of operation
* Add metadata for tampered transform
* Add comments explaining details
* Improve comments
* Move out of bounds checks into rotate check
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* pen tool feature and other minor fixes
* ctrl done,need to improve handle_modifications
* completes collinear and ctrl for all cases,need to refactor
* more bug fix need to refactor
* fixed minor issues and refactor done
* Code review
* minor bug fixes
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Rotate pivot and squares to orient along quad
* Add compass rose UI
* Add compass rose functionality
* Refactor code and polish things
* Fix UI
* Fix crash
* More polish
* Rework arrow to use different selection method
* Adjust for rotated layer and show when within cage
* Don't show when other modes are possible
* Fix glitchy compass
* fixes
* fixes
* WIP separate pivot and compass rose (not compiling)
* Complete file moving fixes
* Code review
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* write document upgrade code to transfrom Spline node into Path -> Spline from Points
* fix only connecting to single output
* shift position of newly inserted Path -> Spline from Points node
* refactor
* remove all old Spline node code
* rename Spline from Points node to Spline
* Code cleanup
* Update the demo art to natively use the new Spline node
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>