* Snap to points and refactor
* Improve dot position on bounds
* Add snap matrix
* Cleanup
* Code review
* Half axis fade rather than increase it
* Fix fmt
* Hide snap to point overlay when active
Co-authored-by: Keavon Chambers <keavon@keavon.com>
Also rename stroke "width" to "weight" in some places. Closes#587
* Change stroke weight from ints to floats
* "miter_limit" -> "line_join_miter_limit"
* Bump file format version
* Add font dropdown
* Add fonts
* Font tool options
* Fix tests
* Replace http with https
* Add variant selection
* Do not embed default font
* Use proxied font list API
* Change default font to Merriweather
* Remove outdated comment
* Specify font once & load font into foreignobject
* Fix tests
* Rename variant to font_style
* Change TextAreaInput to use FieldInput (WIP, breaks functionality)
* Fix textarea functionality
* Fix types
* Add weight name mapping
* Change labeling of "Italic"
* Remove commented HTML node
* Rename font "name" to "font_family" and "file" "font_file"
* Fix errors
* Fix fmt
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Artboards can have properties
* fix crash when renaming artboards
* moved target document to utility types
* moved import and added test for file version information
* fixed missing import
* fix error from merging
* - typed properties message handler data
- removed name from WidgetRow
* clippy warnings
* artboards have seperate properties section
* - color input can be forced to have selection
- crop tool shows on switch
- select tool shows on switch
* variable renamed
* change to use PropType<boolean> instead of PropType<Boolean>
* Add an artboard icon
* Add the "Delete Artboard" hint
* fix unselect glitch
* even better
* Remove the Transform properties group
Co-authored-by: Keavon Chambers <keavon@keavon.com>
Resolves 3 known bugs with the pen tool.
* Fixed crash pointed out by @caleb-ad
* Fixed issue with final path segment losing handle data
* Replace curves with lines when under a drag threshold, improves usability.
* Readability improvements, improved comments
* Can set stroke and fill on text and shapes
* resend layout on failed update
* text input properly resets on bad input
* support modifying gradients
* can modify gradients in the properties panel
* updated labels
* remove heap allocation in favor of RC
* removed redundent line
* oops
* initial layout system with tool options
* cargo fmt
* cargo fmt again
* document bar defined on the backend
* cargo fmt
* removed RC<RefCell>
* cargo fmt
* - fix increment behavior
- removed hashmap from layout message handler
- removed no op message from layoutMessage
* cargo fmt
* only send documentBar when zoom or rotation is updated
* ctrl-0 changes zoom properly
* unfinished layer hook in
* fix layerData name
* layer panel options bar
* basic x/y movment
* working transform section
* changed messages from tuples to structs
* hook up text input
* - fixed number input to be more clear
- fixed actions for properties message handler
* Add styling
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* First pass cleanup omw to handles
* Handles dragging with anchors, handles still not draggable and some bugs
* Dragging single side of handle works, need to create mirror case
* In progress addition of improved anchor / handle representation
* partially working
* Handle dragging working for non-end points, normal anchor drag bugged
* Fixed corner cases, fixed anchors without handles bug
* Add snapping
* Change path tool selection by clicking on shape
* Fixed path close point being draggable
* Variable length handle, firstpass of alt to stop mirroring
* Alt improved, not done. Only update structures when needed. Added snapping for selected shapes
* Can now undo path edits
* Do not maintain angle between non-mirrored handles
* Replaced segment based overlay setup with anchor based setup
* Cleanup, handle angle comparison bug remains. Investigating.
* Added OverlayPooler. May closely associate overlays to VectorManipulatorAnchors instead.
* Moved anchor / segment creation logic out of document_message_handler
* Overlays are now managed by VectorManipulatorShapes
* Fixed inconsistent handle mirroring.
* Clearly shows which point you have selected
* Removed OverlayPooler system
* Added more comments
* Removed all clones of the vector structures. A little uglier but better.
* Resolved Text path initialization bug with a workaround.
* Cleaned up comments
* More comment cleanup
* Fixed issue with quad handle dragging unwanted behavior, renamed VectorShapeManipulator
* In progress refactor to allow multi-selection
* In progress dragging multiple points, selection works, transform still has issues
* Added Multiselect, major refactor
* Commented out progress for selection change, bug with hop back on multiple shapes
* Removed debug og
* Resolved issue with merge
* Minor cleanup, added a few comments
* Review changes
* Resolved unclear comment
* Fixed snap back for now
* Add todo comment for future snap back fix
* Working situations where curve paths do not close. Thanks for points it out @pkupper
* Tweaked selection size
* Fix curve start point dragability, renames, cleanup
* Separated into multiple files, applied @TrueDoctor review feedback
* Resolved tests failing due to doc generation
* Re-added closed, added concept of distance mirroring
* Added shift distance mirroring, removed debounce from anchor
Co-authored-by: Keavon Chambers <keavon@keavon.com>
Thank you for the reviews @TrueDoctor and @pkupper
* Add alignment overlays
* Made snapping / overlays not render extra times, made snapping distance larger
* Revert snap tolerance change until user testing can be done
* WIP conversion to messages
* Revert "WIP conversion to messages"
This reverts commit ddcc23865a.
* Overlay document always has (0,0) in top left
* Fix AA on overlay lines
* Merge branch 'master' into alignment-overlays
* Squashed commit of the following:
commit dbc19912ca
Author: asyncth <97792158+asyncth@users.noreply.github.com>
Date: Sun Jan 16 12:57:03 2022 +0500
Set the mouse cursor in the canvas based on the current tool and its state (#480)
* Add FrontendMouseCursor and DisplayMouseCursor
* Add update_cursor method to the Fsm trait and implement it for all tools
* Rename DisplayMouseCursor to UpdateMouseCursor
* Add 'To CSS Cursor Property' transform decorator and change the mouse cursor in the canvas based on the current tool and its state
* Implement update_cursor for Navigate tool properly
* Keep the cursor when dragging outside of the canvas
* Change the mouse cursor to 'zoom-in' when LMB dragging on canvas with Navigate tool
* Rename FrontendMouseCursor to MouseCursorIcon
* Rename 'event' to 'e' and replace v-on with @
* Change the definition of the MouseCursorIcon type in TS
* Replace switch with dictionary look-up
* Move the definition of MouseCursorIcon closer to where it's used
commit 9b36e6a909
Author: Keavon Chambers <keavon@keavon.com>
Date: Sat Jan 15 17:24:58 2022 -0800
Fix all remaining Vue/TS errors flagged in Volar
commit 2cc39cdb37
Author: Keavon Chambers <keavon@keavon.com>
Date: Sat Jan 15 12:55:51 2022 -0800
Tweak whitespace around `use` statements and other lint fixes
commit fa390c3875
Author: Keavon Chambers <keavon@keavon.com>
Date: Sat Jan 15 06:35:06 2022 -0800
Change canvas artboard background color to be 1 shade lighter
commit ea2d003484
Author: Keavon Chambers <keavon@keavon.com>
Date: Fri Jan 14 20:54:38 2022 -0800
Modify all message enum data to use named struct values, not tuples (#479)
* Massively reorganize and clean up the whole Rust codebase
* Modify all message enum data to use named struct values, not tuples
commit 9b6cbb5f50
Author: Keavon Chambers <keavon@keavon.com>
Date: Fri Jan 14 14:58:08 2022 -0800
Massively reorganize and clean up the whole Rust codebase (#478)
* Massively reorganize and clean up the whole Rust codebase
* Additional changes during code review
commit a535f5c1c1
Author: Keavon Chambers <keavon@keavon.com>
Date: Wed Jan 12 16:17:40 2022 -0800
Sort messages and message handlers
commit e70858884d
Author: Keavon Chambers <keavon@keavon.com>
Date: Wed Jan 12 14:16:13 2022 -0800
Standardize FrontendMessage message names
commit 0b4934b4f3
Author: Keavon Chambers <keavon@keavon.com>
Date: Wed Jan 12 12:45:07 2022 -0800
Rename document_file.rs to document_message_handler.rs
commit ec7bf4a771
Author: Keavon Chambers <keavon@keavon.com>
Date: Wed Jan 12 12:19:14 2022 -0800
Rename DocumentsMessage to PortfolioMessage
commit 0991312ba0
Author: Keavon Chambers <keavon@keavon.com>
Date: Wed Jan 12 11:44:49 2022 -0800
Rename document_message_handler.rs to portfolio_message_handler.rs
commit c76c92e500
Author: 0HyperCube <78500760+0HyperCube@users.noreply.github.com>
Date: Wed Jan 12 19:05:55 2022 +0000
Migrate to using MoveSelectedLayersTo (#469)
* migrate to using MoveSelectedLayersTo
* Fix dragging a selected layer with multiple selected layers
* Fix CreatedLayer overriding selection
* Fix MoveSelectedLayersTo behaviour
* Squashed commit of the following:
commit 095d577a49
Author: Keavon Chambers <keavon@keavon.com>
Date: Mon Jan 10 18:06:12 2022 -0800
Fix NumberInput clamping regression with undefined bounds
commit 9f54a376c4
Author: mfish33 <32677537+mfish33@users.noreply.github.com>
Date: Sun Jan 9 15:52:55 2022 -0800
Fix bounds with artboards for zoom-to-fit and scrollbar scaling (#473)
* - document load keeps postition
- zoom to fit
- scrollbars use artboard dimensions
* - review comments
- svg export uses all artboard bounds
Co-authored-by: Keavon Chambers <keavon@keavon.com>
commit 61432de480
Author: 0HyperCube <78500760+0HyperCube@users.noreply.github.com>
Date: Sat Jan 8 21:06:15 2022 +0000
Fix rotation input (#472)
* Fix insert with no nesting at end of panel
* Deselect other layers on paste
* Resolve logging
commit 574028375b
Author: Keavon Chambers <keavon@keavon.com>
Date: Wed Jan 12 06:14:32 2022 -0800
Add `npm start` script alias for `npm run serve`
commit 75e8fc6614
Author: Keavon Chambers <keavon@keavon.com>
Date: Wed Jan 12 05:17:56 2022 -0800
Switch VS Code's Vue extension from Vetur to Volar
commit 389b445ef1
Author: Keavon Chambers <keavon@keavon.com>
Date: Wed Jan 12 03:56:28 2022 -0800
Remove Charcoal references from the code for now
commit 095d577a49
Author: Keavon Chambers <keavon@keavon.com>
Date: Mon Jan 10 18:06:12 2022 -0800
Fix NumberInput clamping regression with undefined bounds
commit 9f54a376c4
Author: mfish33 <32677537+mfish33@users.noreply.github.com>
Date: Sun Jan 9 15:52:55 2022 -0800
Fix bounds with artboards for zoom-to-fit and scrollbar scaling (#473)
* - document load keeps postition
- zoom to fit
- scrollbars use artboard dimensions
* - review comments
- svg export uses all artboard bounds
Co-authored-by: Keavon Chambers <keavon@keavon.com>
commit 61432de480
Author: 0HyperCube <78500760+0HyperCube@users.noreply.github.com>
Date: Sat Jan 8 21:06:15 2022 +0000
Fix rotation input (#472)
commit 3eeac79f5a
Author: 0HyperCube <78500760+0HyperCube@users.noreply.github.com>
Date: Sat Jan 8 16:30:03 2022 +0000
Enhance the Navigate Tool zoom behavior (#461)
* Snap zoom
* Navigate zoom from centre
* Ctrl to snap zoom in navigate
* Use ctrl for global snap rotate
* Fix the rotation input on snap rotate
* Update hint to use ctrl
* Fix mouse centre on drag
* Click to zoom in
* Clean up centre zoom
* Update user input hints; tweak some variable names for clarity and standardization
Co-authored-by: Keavon Chambers <keavon@keavon.com>
commit a2c2f7fc9d
Author: 0HyperCube <78500760+0HyperCube@users.noreply.github.com>
Date: Sat Jan 8 16:02:02 2022 +0000
Add support for resizing workspace panels (#443)
* Resize panels
* Removing move_selection test pending #444 resolved
* Bind event listners and cursor to the document
* Fix flex grow on document being reset when drawing
* Call onresize when the boundry is dragged
* Add min panel size
* Add explicit function return types
* Dispatch resize event
* Lock pointer instead of setting cursor on document
Co-authored-by: otdavies <oliver@psyfer.io>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
commit 54e9121115
Author: mfish33 <32677537+mfish33@users.noreply.github.com>
Date: Sat Jan 8 07:50:08 2022 -0800
Implement artboards and document version enforcement (#466)
* - graphite document artboard implementation
- autosave document load hitch fix
- Autosave will delete saved files when graphite document version changes
* formating
* - top left 0,0
- fixed hitch on first document
- vue calls first render
* Revert
* Merge branch 'master' into artboards
* Small bug fixes and code review tweaks
Co-authored-by: Oliver Davies <oliver@psyfer.io>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
commit 11f15bd6af
Author: Leonard Pauli <leonardpauli@me.com>
Date: Sat Jan 8 14:25:24 2022 +0100
Path Tool: Implement anchor point dragging (#451)
* #82 path-tool: WIP selecting control point working
* Fix bug where duplication with Ctrl+D doesn't properly duplicate (#423)
* bug fix: duplication didn't properly duplicate
* cargo fmt
* changed the formatting slightly for readability
* Small cleanups, changed color of handles upon selection
* Fix changes from merge
* Remove duplicate anchor points on top of one another
* Fix possible issues with thumbnails not being updated from Graphene operations
* path-tool: attempt to move control points on click
* Add dragging for control points
* Editing shape anchors functional. Handles next.
* Comment cleanup & slight cleanup of closest_anchor(..)
* Removing conflict with master
* Tiny code tweaks
Co-authored-by: Keavon Chambers <keavon@keavon.com>
Co-authored-by: caleb <56044292+caleb-ad@users.noreply.github.com>
Co-authored-by: otdavies <oliver@psyfer.io>
Co-authored-by: Dennis <dennis@kobert.dev>
commit 05e8a98f46
Author: Keavon Chambers <keavon@keavon.com>
Date: Fri Jan 7 23:13:33 2022 -0800
Redesign the Layer Tree UI (#468)
commit 8e3d237228
Author: Oliver Davies <oliver@psyfer.io>
Date: Fri Jan 7 15:53:12 2022 -0800
Ungroup layers (#465)
* WIP handling corner cases, like ungrouping subfolders
* Resolved hanging
* Fix recursive ungrouping
* Functional, corner case free Ungroup. Small Undo issue & warnings
* Update layertree upon undo
* Also update layerdata upon redo
* Add some polish
* Resolved TODOs
* Oops didn't save all after rename, ha.
Co-authored-by: Dennis <dennis@kobert.dev>
commit c1c7192948
Author: TrueDoctor <dennis@kobert.dev>
Date: Fri Jan 7 04:15:08 2022 +0100
Tidy up path handling in document_file (#464)
* Tidy up path handling in document_file
+ Improve #455
* Cargo Clippy lints
* Rename to_vec to map_to_vec
Co-authored-by: Oliver Davies <oliver@psyfer.io>
commit f4707f9b74
Author: mfish33 <32677537+mfish33@users.noreply.github.com>
Date: Thu Jan 6 18:45:37 2022 -0800
Better decimal rounding in the NumberInput widget (#457)
* better decimal rounding in NumberInput
* - created function to reuse
- used math instead of string manipulation
* updated comment to be correct
* updated comment
* updated comment
commit 0219f060b8
Author: Keavon Chambers <keavon@keavon.com>
Date: Wed Jan 5 05:40:32 2022 -0800
Fix build script to use correct branch name
* Fix indentation
* Overlays fade in
* Fix formatting
* Add consts for snap visible and opacity
* Tweak constants for improved UX, rejigger imports
* Fix AA bounding box
* Snap only visible layers
* Add some comments
Co-authored-by: otdavies <oliver@psyfer.io>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Test snapping
* Snap new shapes
* Fix snapping when zoomed
* Refactor to use viewport bounds
* Reduce snap tolerance to 3
* Snap line and path tool
* Add disable snapping and refactor
* new_snap -> new status
* Rearrange import
* Cleanup
* Fix incorrect variable name
* Store snap data in tool data
* Implement Path Tool
* Draw a red rectangle where the first point on the shape is
* Correctly render anchors, handles, and connecting lines
* Fix drain() which can panic
* Refactor frontend messages to work as return values not callbacks
* Reduce the number of unnecessary frontend updates
* Fix stack overflow by using a loop
* Group Document Render calls and put them at the end
* Speed hacks for dirtification
* Add performance
* Bunch folder changed updates
* Add triggers to redraw overlays to movement_handler
* Polish the pixel-perfect rendering of vector manipulators
* Restore scrollbars that were disabled
* Cleanup
* WIP Add shape outline rendering
* Fix compiling
* Add outlines to selected shapes
* Fix outlines rendering over handles and anchors
* Fix dirtification
* Add a comment
* Address code review feedback
* Formatting
* Small tweaks
Co-authored-by: Oliver Davies <oliver@psyfer.io>
Co-authored-by: Dennis Kobert <dennis@kobert.dev>
* Change scrollbar behavior
* Leave space at the end of the scrollbar
* Change mid to center
* Use shorter array initialization
* Add space around scrollbar
* Fix scrollbar spacing
* Smooth end of scrollbars
* Add page up and down
* Page up and down on click in scrollbar track
* Add shift pageup to translate horizontally
* Add support for saving a document
This is similar to the "export" functionality, except that
we store all metadata needed to open the file again.
Currently we store the internal representation of the layer
which is probably pretty fragile.
Example document:
```json
{
"nodes": {},
"root": {
"blend_mode": "Normal",
"cache": "...",
"cache_dirty": false,
"data": {
"Folder": {
"layer_ids": [
3902938778642561358
],
"layers": [
{
"blend_mode": "Normal",
"cache": "...",
"cache_dirty": false,
"data": {
"Shape": {
"path": [
{
"MoveTo": {
"x": 0.0,
"y": 0.0
}
},
{
"LineTo": {
"x": 1.0,
"y": 0.0
}
},
{
"LineTo": {
"x": 1.0,
"y": 1.0
}
},
{
"LineTo": {
"x": 0.0,
"y": 1.0
}
},
"ClosePath"
],
"render_index": 1,
"solid": true,
"style": {
"fill": {
"color": {
"alpha": 1.0,
"blue": 0.0,
"green": 0.0,
"red": 0.0
}
},
"stroke": null
}
}
},
"name": null,
"opacity": 1.0,
"thumbnail_cache": "...",
"transform": {
"matrix2": [
223.0,
0.0,
-0.0,
348.0
],
"translation": [
-188.0,
-334.0
]
},
"visible": true
}
],
"next_assignment_id": 3902938778642561359
}
},
"name": null,
"opacity": 1.0,
"thumbnail_cache": "...",
"transform": {
"matrix2": [
1.0,
0.0,
0.0,
1.0
],
"translation": [
479.0,
563.0
]
},
"visible": true
},
"version": 0
}
```
* Add support for opening a saved document
User can select a file using the browser's file input selector.
We parse it as JSON and load it into the internal representation.
Concerns:
- The file format is fragile
- Loading data directly into internal data structures usually creates
security vulnerabilities
- Error handling: The user is not informed of errors
* Serialize Document and skip "cache" fields in Layer
Instead of serializing the root layer, we serialize the
Document struct directly. Additionally, we mark the
"cache" fields in layer as "skip" fields so they
don't get serialized.
* Opened files use the filename as the tab title
* Split "new document" and "open document" handling
Open document needs name and content to be provided so having a
different interface is cleaner. Also did some refactoring to reuse code.
* Show error to user when a file fails to open
* Clean up code: better variable naming and structure
* Use document name for saved and exported files
We pass through the document name in the export and save
messages. Additionally, we check if the appropriate file
suffixes (.graphite and .svg) need to be added before
passing it to the frontend.
* Refactor document name generation
* Don't assign a default of 1 to Documents that start with something
other than DEFAULT_DOCUMENT_NAME
* Improve runtime complexity by using binary instead of linear search
* Update Layer panel upon document selection
* Add File>Open/Ctrl+O; File>Save (As)/Ctrl+(Shift)+S; browse filters extension; split out download()/upload() into files.ts; change unsaved close dialog text
Co-authored-by: Dennis Kobert <dennis@kobert.dev>
Co-authored-by: Keavon Chambers <keavon@keavon.com>