Commit graph

86 commits

Author SHA1 Message Date
TrueDoctor
255cdead28
Add thumbnails for layers (#286)
Fixes: #285
2021-07-21 02:30:49 -07:00
Henry Sloan
06c26f44d0
Options bar widgets for tools to control tool behavior (#283)
* 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
2021-07-21 01:07:48 -04:00
Keavon Chambers
801bae103e Remove outdated todo comment 2021-07-17 03:36:35 -07:00
TrueDoctor
4637cbf12b
Apply clippy lints (#278) 2021-07-17 11:12:37 +02:00
Henry Sloan
7a087ba71a
Pass layer metadata to tools (#277) 2021-07-16 08:38:46 +02:00
Keavon Chambers
64050bc8b3 Make frontend request tab list on initialization 2021-07-15 00:07:21 -07:00
Henry Sloan
7f1ad04a28
Transform nudge coordinates to viewport space (#264)
* Transform nudge coordinates to viewport space

* Refactor nudge transform for clarity
2021-07-14 23:05:46 -07:00
Keavon Chambers
c76bb608d3 Cleanup of variable naming 2021-07-14 20:11:51 -07:00
Keavon Chambers
0330822a94
Implement closing the current, and all, documents from the menu bar (#265)
Closes #261
Additional cleanup and refactoring with the way the backend relays the list of open documents to the frontend and prompts for confirmation.
2021-07-14 16:13:58 -07:00
TrueDoctor
5b397769a2
Order mapping entries precedence based on number of modifiers (#262)
* Order mapping entries precedence based on number of modifiers

* Fix format

* Rename variables

* More renaming
2021-07-15 00:40:37 +02:00
Henry Sloan
9d34aa4867
Implement fill tool (#254)
* 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
2021-07-14 00:49:12 -07:00
TrueDoctor
2b894c55f3
Implement snapping for rotation (#257) 2021-07-13 20:38:58 +02:00
TrueDoctor
0e2097f9d0
Implement more scrolling features (#256)
* 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
2021-07-13 14:02:38 +02:00
Keavon Chambers
7ae91e8330
Clean up and polish some code from the previous commit (#255) 2021-07-13 00:52:45 -07:00
0HyperCube
39e6893630
Viewport canvas navigation with modifier keys and zoom widget (#229)
* Add rotation around the center

* Document transform centred

* Fix drawing hexagon on rotated document

* Format

* Fix translation on rotated document

* Remove logging

* Rotate around centre of viewport

* Rotate with shift + MMB drag

* Zoom with +/- keys

* Rotation input field

* Implement frontend zoom buttons

* Zoom with ctrl + MMB

* Format

* Update number inputs

* Require Ctrl + Plus / Minus key

* Ctrl scroll

* Update zoom -> Multiply Zoom

* Fix typo

* More fixing typo

* Remove :v-on

* Add mouse scroll X

* Scrolling on document

* Refactor

* Format

* Fix ctrl + plus/minus to zoom

* Reduce zoom sensitivity

* Ctrl + shift + mmb drag = snap rotate

* Further reduce zoom speed

* Add ctrl + number key to change zoom

* Switch Ctrl and Shift for zoom and rotate

* Fix compile errors

* Format JS

* Add increment to snap angle

* Edit getting layerdata functions

* Pass viewport size directily into create_document_transform_from_layerdata

* Add to_dvec2()

* Refactor get_transform

* Get -> Calculate

* Add consts

* Use to_radians

* Remove get from function names

* Use .entry when getting layerdata that does not exist

* Fix distance scroll calculations

* Fix zooming.

* Remove 'Violation' in chrome

* Fix compile errors
2021-07-12 23:50:10 -07:00
0HyperCube
8ff545f01c Unmount working folder on select (#253) 2021-07-12 12:58:12 -07:00
Simon Desloges
63b849fac3
Add modifier keys to every keyboard and mouse input (#247)
* Add modifier keys to every keyboard and mouse input

* Fix bad naming convention in Typescript

* Added some tests related to modifier keys
2021-07-11 20:46:00 -07:00
Henry Sloan
3fc7722d89
Implement nudging selected layers with arrow keys (#245)
* 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
2021-07-11 19:22:26 -07:00
Simon Desloges
c9ef64eb7a
Implement Select All/Deselect All layers (#242)
* 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
2021-07-10 17:01:37 -07:00
Paul Kupper
ad064602a5
Implement viewport selection (#178)
* 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>
2021-07-04 16:05:12 -07:00
Till Arnold
20420c1286
Copy and paste layers MVP (#220)
* 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
2021-07-04 15:34:47 -07:00
0HyperCube
f76517a14d
Add a movable canvas with matricies (#175)
* 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>
2021-06-26 21:44:48 +01:00
TrueDoctor
db2561eb9f
Simplify document selection by reusing code (#226) 2021-06-23 11:20:59 +02:00
akshay1992kalbhor
0b0873262c
Add support for closing document tabs (#215)
* 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>
2021-06-22 01:58:02 -07:00
RustyNixieTube
84fef8a87f
Add comment to STORAGE_SIZE and simplify it (#223)
* Add comment to STORAGE_SIZE and simplify it

* Modify comment

Co-authored-by: RustyNixieTube <RustyNixieTube@users.noreply.github.com>
2021-06-19 18:47:42 +02:00
RustyNixieTube
4c10afe4a4
Remove unsafe call in input mapper (#222)
* Remove unsafe call

* Run cargo fmt

Co-authored-by: RustyNixieTube <RustyNixieTube@users.noreply.github.com>
2021-06-17 14:20:54 -07:00
Till Arnold
322526b983
Add keyboard shortcut to duplicate layers (#214)
* Add keyboard shortcut to duplicate layers

* Avoid heap allocation in DuplicateSelectedLayers
2021-06-16 11:15:02 +02:00
George Atkinson
f6b7708a8f
Multi-document management (create new document; tab switching) (#210)
* 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
2021-06-13 20:24:09 -07:00
akshay1992kalbhor
e867f4d7fc
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
2021-06-12 09:00:31 -07:00
TrueDoctor
0e488d99ff
Delete selected layers (#173)
* Delete Layers
* Fix backend selection
* Fix shift selection
* Add desired shape add selection behavior
* Add X and Backspace as keybinds for layer deletion
* Change key storage to u128
* Remove unhelpful trace logging
* Reverse display direction for layers
2021-06-10 09:24:59 +02:00
TrueDoctor
8fa4b86d48
Implement backend part of the layer selection (#172)
* Implement backend part of the layer selection
2021-06-09 12:20:50 +02:00
Keavon Chambers
ad9feda054
Implement menu bar floating list menus (#163)
Progress towards #135
2021-05-31 11:51:32 -07:00
TrueDoctor
eb48fbd180
Export current document as SVG when pressing Ctrl+Shift+S (#160)
* 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
2021-05-28 20:43:51 +02:00
Keavon Chambers
9f63c6e8ea Fix missing keyboard shortcut <P> for the Pen Tool 2021-05-27 22:10:48 -07:00
TrueDoctor
a596ce0104
Major overhaul of input and communication systems
* 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>
2021-05-23 01:26:24 +02:00
akshay1992kalbhor
b23fa6d84f
Make the show/hide layer buttons work (#118) (#127) 2021-05-18 18:55:05 +02:00
Paul Kupper
57252fa828
Cancel in-progress drag with right click or escape key (#119) 2021-05-09 01:26:47 -07:00
RustyStriker
78ff81ffa8
Fix rect/hexagon not centering properly when holding alt (#121) 2021-05-09 00:23:13 -07:00
Keavon Chambers
7ec0558cbd Plumb frontend for layer visibility toggle 2021-05-07 16:57:45 -07:00
Paul Kupper
1230e9d829
Improved Rectangle, Line and Shape Tools (#106) 2021-05-07 11:05:03 -07:00
Keavon Chambers
5bf0452b9c Fix "P" not switching to the Pen Tool 2021-05-07 10:42:09 -07:00
TrueDoctor
437251f90e Plumb layer panel (#107)
* WIP ExpandFolder handling

* Implement response parsing in typescript

* Update layer panel with list sent by wasm

* Add events for layer interaction

* Add proper default naming

* Fix displaying of the eye icon

* Attach path to LayerPanelEntry

* Fix lint issues

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2021-05-07 10:41:38 -07:00
Paul Kupper
9c324edfe0 Fix ellipse tool behavior (#105) 2021-05-07 02:47:38 -07:00
T0mstone
47458115b8 Another round of polishing (#101)
* 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!())`
2021-05-07 02:47:38 -07:00
Paul Kupper
c9fea54ec5 Improve Ellipse Tool (#98) 2021-05-07 02:47:38 -07:00
TrueDoctor
721a442b75 Use serde to serialize responses (#96) 2021-05-07 02:47:38 -07:00
TrueDoctor
cb9d34c84d Improve rendering efficiency and add caching (#95)
Fixes #84

*Reduce heap allocations
* Add caching for rendering svgs
* Deduplicate UpdateCanvas Responses
2021-05-07 02:47:38 -07:00
TrueDoctor
5f1620b008 Add caching to svg rendering (#94)
* Add documentation for functions in the document library
* Restructure backchannel
2021-05-07 02:47:38 -07:00
TrueDoctor
c540d781e1 Fix active tool selection (#92) 2021-05-07 02:47:38 -07:00
TrueDoctor
3ab5f6b7ef Add responses in document for layer system (#91) 2021-05-07 02:47:38 -07:00