Commit Graph

92 Commits

Author SHA1 Message Date
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
Simon Desloges
5068f77580 Add support for folder bounding boxes (#276) 2021-07-16 16:34:04 +02:00
Henry Sloan
7a087ba71a Pass layer metadata to tools (#277) 2021-07-16 08:38:46 +02:00
Simon Desloges
6648e244a0 Add a document method that returns a layer's bounding box (#273)
* Add a document method that returns a layer's bounding box

* Moved `use` to the top of the file

* Add layer local bounding box method
2021-07-15 20:18:32 -07: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
0HyperCube
721f418ea2 Allow transforming layers (#244)
* Allow transforming layers

* Add document_layer function to return non mut
2021-07-11 10:24:46 +01: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
7b65409c58 Re-add PartialEq removed in #230 (#232) 2021-07-04 14:27:09 -07:00
kastenbutt
34ae4d7387 Auto-select new layer created by Pen Tool. (#235)
Signed-off-by: kastenbutt <hello@jonasklein.dev>
2021-07-03 02:28:52 -07:00
0HyperCube
69a446091f Remove partialeq for layers (#230) 2021-06-29 21:06:37 +01: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
64f716e081 Rename human-readable layer types (#117) 2021-05-07 21:13:22 -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