* Add JSON-backed options widget
* Add initial tool settings messaging to backend
* Add shape side selection with JSON deserialization
* Enforce minimum number of n-gon sides
* Make tool settings JSON errors safer
* Make tool settings JSON errors safer
* Refactor ToolOptions to ToolSettings
* Revert "Refactor ToolOptions to ToolSettings"
This reverts commit 651161fd16.
* Refactor all instances of "settings" to "options"
* Fix names and formatting
* Rearrange ToolOptions data to enforce types
* Implement fill tool
* Add fill tool shortcut
* Add getters and setters to styles
* Make fill tool act on the topmost layer clicked
* Refactor fill operation
* Refactor and unify selection tolerance
* Add mark_as_dirty function
* Fix getter names
* Use sideways scrolling
* Add horizontal scroll with shift
* Combine WheelCanvasTranslate messages
* Add zooming to current mouse position
* Fix formatting
* Fix scroll direction
* Rename some Constants
* Implement nudging selected layers with arrow keys
* Normalize diagonal nudges and add constants
* Replace sqrt(2.0) with a constant
* Remove normalization of diagonal movement
* Implement select all layers shortcut
* Adjust menu entry for Select All Layers
* Avoid selecting the root of the document when selecting all layers
* Implement deselect all layers
* Fix formatting
* Add extensions.json so VS Code recommends useful extensions
* Add rust-analyzer as the default Rust formatter
* Begin implementing viewport selection
* Implement viewport click and drag selection for ellipse and rectangle
* Begin implementing line selection
* Remove debug prints
* Run cargo format
* Use DVec2 instead of kurbo::Point
* Line and polyline intersection
* Run cargo format
* Add fix for missing layer panel update
* Replace point selection with box selection
* Formatting
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Initial implementation of copy and paste for layers
* Sort layers on copy and add tests
* Fix logger init for test
* Fix `copy_paste_deleted_layers` test
* Readd erroneously removed svg
* Make Layer serializable and cleanup
* Add test for copy and pasting folders
* Cleanup
* Rename left_mouseup
* Cleanup
* Add length check to test
* Fix typo
* Make mouseup, mousedown more consistent
* Convert polygon and rectangle tool to kurbo::BezPath
* Add glam
* Add affine transform to elipse and remove circle
* Format
* Add svg group and add matrix for group
* Convert all operations to use matricies
* Work uses same transform as root
* Format
* Frontend fixed to render changes to working colors when changed from backend (#180)
* Backend and Frontend modification to show working color mods
* Remove comments & change precedence for tool and doc actions
* Add keybind for resetting work colors
* Minor Frontend changes
* Remove early sample "greet" code
* Add a contributing section to the project README
* Add moving document around
* Add document transform for tools
* Update to GraphiteEditor's fork
* Use write in foreach for rendering group / folder
* Add missing TranslateDown action
* Use points for line operation
* Format
* Add todo to change to shape's aspect ratio
* Remove empty if
* Initial pass at refactor
* Fix polyline test
* Use document message to modify document transform
* Messages -> Operations
* Transform layer
* Format
* Use DAffine2::IDENTITY
* Clean up kurbo generation for line and rect
* Use .into for rectangle points
* Rename cols to transform
* Rename other cols to transform
* Add todo for into_iter
* Remove unnecessary clone
Co-authored-by: akshay1992kalbhor <akshay1992kalbhor@gmail.com>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Can only remove last document successfully
* Correctly update the layer tree panel
* Remove comments
* Add support for randomly closing docs
* Create new doc after closing last doc
* Update layer panel when creating new docs
* Fix bug that crashed the program when first doc was closed
* Refactor to make code simpler and increase readability
* Add shortcut to close active doc (Shift + C)
* Add a confirmation dialog box before closing tabs
* New docs get the correct title
* Remove comments and fix typos
* Disable 'eslint-no-alert'
* Refactor and fix document title bug
* Rename the FrontendMessage and ReponseType for showing close confirmation modal
* Change the message displayed in the close confirmation modal
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Multi-docs WIP
* Change to number
* Add new document and switch documents
* Remove keybind for previous document. Change keybind for next document.
* Switch documents by clicking tabs
* Remove keybind for previous document. Change keybind for next document.
* multi-docs
* Update package-lock.json
* Hook up File>New to add new document
* Remove console logs and empty lines. Start new documents from 2 instead of 1.
* Fix formatting
* Backend and Frontend modification to show working color mods
* Remove comments & change precedence for tool and doc actions
* Add keybind for resetting work colors
* Minor Frontend changes
* Export current document when pressing Ctrl+Shift+S
* Use a blob for download
* Add Ctrl + E shortcut, match on lower case
* Don't mount element in DOM
* Polish some keybindings
* Add initialization for MappingEntries
* Implement svg coloring
* Add newline after svg tag
* Add spaces to svg style format
* Fix more svg formatting
* Add space before />
* Remove duplicate whitespace
* Add input manager
* WIP lifetime hell
* Hell yeah, dark lifetime magic
* Replace events with actions in tools
* Fix borrow in GlobalEventHandler
* Fix typo in response-handler
* Distribute dispatch structure
* Add translation from events to actions
* Port default key actions to input_mapper
* Split actions macro
* Add handling for Ambiguous Mouse events
* Fix warnings and clippy lints
* Add actions macro
* WIP rework
* Add AsMessage macro
* Add implementation for derived enums
* Add macro implementation for top level message
* Add #[child] attribute to indicate derivation
* Replace some mentions of Actions and Responses with Message
* It compiles !!!
* Add functionality to some message handlers
* Add document rendering
* ICE
* Rework the previous code while keeping basic functionality
* Reduce parent-top-level macro args to only two
* Add workaround for ICE
* Fix cyclic reference in document.rs
* Make derive_transitive_child a bit more powerful
This addresses the todo that was left,
enabling arbitrary expressions to be passed as the last
parameter of a #[parent] attribute
* Adapt frontend message format
* Make responses use VecDeque
Our responses are a queue so we should use a queue type for them
* Move traits to sensible location
* Are we rectangle yet?
* Simplify, improve & document `derive_discriminant`
* Change `child` to `sub_discriminant`
This only applies to `ToDiscriminant`.
Code using `#[impl_message]` continues to work.
* Add docs for `derive_transitive_child`
* Finish docs and improve macros
The improvements are that impl_message now uses trait
resolution to obtain the parent's discriminant
and that derive_as_message now allows for non-unit
variants (which we don't use but it's nice to have,
just in case)
* Remove logging call
* Move files around and cleanup structure
* Fix proc macro doc tests
* Improve actions_fn!() macro
* Add ellipse tool
* Pass populated actions list to the input mapper
* Add KeyState bitvector
* Merge mouse buttons into "keyboard"
* Add macro for initialization of key mapper table
* Add syntactic sugar for the macro
* Implement mapping function
* Translate the remaining tools
* Fix shape tool
* Add keybindings for line and pen tool
* Fix modifiers
* Cleanup
* Add doc comments for the actions macro
* Fix formatting
* Rename MouseMove to PointerMove
* Add keybinds for tools
* Apply review suggestions
* Rename KeyMappings -> KeyMappingEntries
* Apply review changes
Co-authored-by: T0mstone <realt0mstone@gmail.com>
Co-authored-by: Paul Kupper <kupper.pa@gmail.com>
* Implement basic refactorings
* Simplify some match statements
* Rename `ix` to `index`
If we're not going with a single letter name,
then a full word makes more sense.
* Rename `as_hex` to `to_hex`
`as_` implies lossless reinterpretation
while the function does a conversion that loses information
* Replace `for_each` with for loops
for loops are a lot easier to read and maintain.
* factor out x and y coords in Line::render
this is arguably more ergonomic
* Remove redundant `format!(format_args!())`