181 Commits

Author SHA1 Message Date
Timur Khazamov
bc2bae2a9a Shift drag to add to selection (#355)
* Shift drag to add to selection

* Inlined variable
2020-01-12 15:32:25 -08:00
Guillermo Peralta Scura
4c62cbf57e Don't show resize cursor if multiple elements are selected (#353) 2020-01-12 12:24:11 -08:00
Christopher Chedeau
f91b708abb
Revert "Shift drag to add to selection (#350)" (#352)
This reverts commit ce467f7b6572615c5f4050f3e514943867b6fb9d.
2020-01-12 12:08:18 -08:00
Timur Khazamov
ce467f7b65 Shift drag to add to selection (#350) 2020-01-12 11:56:10 -08:00
David Luzar
58ad6d741d fix selecting elem inside already selected element (#349) 2020-01-12 11:43:31 -08:00
Guillermo Peralta Scura
c67435719f Use cursor delta to resize shape (#341) 2020-01-12 09:05:08 -08:00
Jeremy Press
abf2aaa102 "Select All" only appears when clicking outside of a shape via actionFilter (#329)
Co-authored-by: Christopher Chedeau <vjeuxx@gmail.com>
2020-01-12 07:10:15 -08:00
Enzo Ferey
88a9cee8bb History improvements (#337)
* Simplified redoOnce.

* Help mental model.

* Move clear redo stack where it belongs.

* Not needed anymore as we check for same state.
2020-01-12 03:19:24 -08:00
Christopher Chedeau
bc909b76da
Move copy paste handler to document (#334)
Hopefully it should resolve the copy pasting issues

Fixes #249
2020-01-11 21:39:16 -08:00
Christopher Chedeau
aad6e8f434
Reset to selection after creating a text (#333)
Fixes #252

Test plan:
- Click on text icon
- Click anywhere to start entering text
- Add a letter
- Make sure the cursor is selection and not text
- Click anywhere else, make sure it completes the text and not create a new one
2020-01-11 21:00:55 -08:00
Christopher Chedeau
44657efe71
Fix undoOnce (#332)
I just pasted @enzoferey's implementation and it fixed the bug reported by @dwelle

Fixes #307
2020-01-11 20:45:56 -08:00
Christopher Chedeau
dd2a7eb597
Fix copy-paste on input (#331)
If the input is active, we shouldn't override copy paste behavior
2020-01-11 20:41:47 -08:00
Christopher Chedeau
d45f48e60f
Set shape background to be transparent by default (#330)
Also makes "Clear canvas" reset the entire app state
2020-01-11 20:34:21 -08:00
Christopher Chedeau
3db7d69849
Debounce localstorage save (#328)
I profiled dragging and it looks like it takes ~3ms to save to localStorage a smallish scene and we're doing it twice per mousemove. Let's debounce so we don't pay that cost on every mouse move.

Stole the implementation from #220 which got reverted.
2020-01-11 20:15:41 -08:00
Christopher Chedeau
c745fd4e5e
Prevent cmd-r from selecting rectangle (#327)
I keep adding empty rectangles because I reload with cmd-r which enables rectangle :p Let's only make the shortcut work if there's no modifier enabled
2020-01-11 19:42:34 -08:00
Christopher Chedeau
407f00bbd5
Fix alt-duplicate (#326)
We need to unselect all the previous elements and select all the new ones. Also made sure that the shape is regenerated when the element is duplicated
2020-01-11 19:35:06 -08:00
Christopher Chedeau
5bdd0a35f6
Fix cmd-a drawing arrows (#321)
We need to quit if we have either elements OR appState, not both.
2020-01-11 16:06:25 -08:00
Gasim Gasimzada
74764b06eb Regenerate roughjs shape only when the item is updated (#316)
* Regenerate roughjs shape only when the item is updated

* Remove shape object during export and history undo/redo

* Remove shape element during copying

* Fix shape generation during creation
2020-01-11 16:00:00 -08:00
Gasim Gasimzada
f465121f9b Feature: Action System (#298)
* Add Action System

- Add keyboard test
- Add context menu label
- Add PanelComponent

* Show context menu items based on actions

* Add render action feature

- Replace bringForward etc buttons with action manager render functions

* Move all property changes and canvas into actions

* Remove unnecessary functions and add forgotten force update when elements array change

* Extract export operations into actions

* Add elements and app state as arguments to `keyTest` function

* Add key priorities

- Sort actions by key priority when handling key presses

* Extract copy/paste styles

* Add Context Menu Item order

- Sort context menu items based on menu item order parameter

* Remove unnecessary functions from App component
2020-01-11 14:22:03 -08:00
Timur Khazamov
c253c0b635 Command clicking should "xor" selection (#300)
* Command clicking should "xor" selection

* Only shift key should play a role

* Get rid of `isDraggingElements`

* Renamed someElementIsDragged to draggingOccured
2020-01-10 22:45:58 +01:00
Gunay Mert Karadogan
3eb6d1de68 Fix history saving for resizing/dragging element (#292) 2020-01-10 16:01:00 +01:00
Gasim Gasimzada
f2346275ef
Extract Side Panel from App component (#295)
* Extract Side Panel from App component

* Refactor SidePanel component

- Remove unnecessary props (we are already passing appState as a prop)
- Remove unnecessary allback (we are already passing setState)
2020-01-10 18:00:19 +04:00
David Luzar
2fb3cdd5e4
fix copy/paste regression (#291) 2020-01-09 18:43:24 +01:00
David Luzar
deee57314d
support export canvas to clipboard (#232) 2020-01-09 17:37:08 +01:00
Giovanni Giordano
1541428ab1 Clear active tool on escape (#286)
* Clear active tool on escape

* Remove console log
2020-01-09 16:30:18 +01:00
Gasim Gasimzada
862231da4f Make all operations on elements array immutable (#283)
* Make scene functions return array instead of mutate array

- Not all functions were changes; so the given argument was a new array to some

* Make data restoration functions immutable

- Make mutations in App component

* Make history actions immutable

* Fix an issue in change property that was causing elements to be removed

* mark elements params as readonly & remove unnecessary copying

* Make `clearSelection` return a new array

* Perform Id comparisons instead of reference comparisons in onDoubleClick

* Allow deselecting items with SHIFT key

- Refactor hit detection code

* Fix a bug in element selection and revert drag functionality

Co-authored-by: David Luzar <luzar.david@gmail.com>
2020-01-09 16:22:04 +01:00
Faustino Kialungila
1ea72e9134
Center element on paste (#248)
* Center element on paste

* paste on cursor position

* correctly center elements

* rename vars
2020-01-09 12:34:46 +01:00
Guillermo Peralta Scura
4a044d3ace Show move and resize cursors on hover (#280)
* Change to move cursor on hover

* Show resize handlers on hover
2020-01-08 18:56:35 -08:00
davidbonan
a16cd3a34f Add font size and font familly option for selection (#278)
* Add font size and font familly option for selection

* Allow copy font style

* More clearner method name

* Update options size and font-familly
2020-01-08 17:29:41 -08:00
Gasim Gasimzada
299e7e9099
Extract app and keys (#276)
* Extract app component from entrypoint (index)

- Use refs to refer to canvas and rough context
- Remove ReactDOM double rendering

* Extract keys and key related utils into their own module

* Move everything back to entrypoint
2020-01-09 02:00:59 +04:00
Gasim Gasimzada
36ce6a26e6 Make panels collapsible (#239)
* Make panels collapsible

- Add Panel component with collapse logic
- Use the component in all the necessary panel groups

* Remove unnecessary container from PanelCanvas

* Add "hide property" to Pane component to hide Panel contents using a prop

- Instead of doing conditional rendering, pass the condition to Panel as props

* Change collapse icon rotation for closed

- Use one icon and use CSS transforms to rotate it

* Remove unnecessary imports from PanelSelection
2020-01-08 13:06:36 -08:00
Timur Khazamov
1739540f00
Creating a text near the center of a shape should put it in the center (#270)
* Snap to element center

* Fixed typo

* Added comment

* Reduced threshold to 30

* Skip snapping if alt key is pressed

* Fixed creating text with shape tool
2020-01-09 01:09:09 +05:00
David Luzar
068dca604f
prevent commit on eslint warnings & fix lint (#268) 2020-01-08 20:08:43 +01:00
Timur Khazamov
37934c0f8b
Fixes text jumping on creation (#266)
* Fixes text jumping on creation

* Do not remove node on ESC

* Fixed typo
2020-01-09 00:06:25 +05:00
David Luzar
2122a9cf9f
fix for duplicating elements (#261) 2020-01-08 19:54:42 +01:00
David Luzar
58ec6567ae ensure alt+drag duplicates all selected elems (#258) 2020-01-08 09:09:02 -08:00
dwelle
009412a093 improve typing for handlerRectangles 2020-01-08 17:05:00 +01:00
Jeremy Scatigna
e7bf034fef duplicate element by alt dragging (#255) 2020-01-08 17:03:13 +01:00
Timur Khazamov
2d66616e3f Fixed: Copy + Paste moves text inside rectangle #229 (#245) 2020-01-07 19:02:15 +01:00
Timur Khazamov
10955f8bb0 Wysiwyg text 2.0 (#238)
* Fixed cleaning handlers after cleanup

* Double click to edit text

* Preserve text styles on change
2020-01-07 09:21:05 -08:00
Timur Khazamov
ae982e9298 Revert "Save scene in URL (#220)" (#234)
This reverts commit db973c61e85347120c46adba6cb33e50d49988ba.
2020-01-07 07:18:20 -08:00
Gasim Gasimzada
829a65b8cb
Refactor Element Functions (#233)
* Remove `generatedraw` from element object

- Create a function that renders a single element
- Refactor rendering selected elements

* Replace getElementAbsoluteXY with getElementAbsoluteCoords
2020-01-07 19:04:52 +04:00
Gasim Gasimzada
85365e5bcb
Extract Sidebar panels into separate components (#230)
* Extract Sidebar panels into separate components

* Add Jest TS types
2020-01-07 15:06:22 +04:00
Faustino Kialungila
2fb5c4cd13 Add styles copy and pasting in the context menu (#227) 2020-01-06 23:04:15 -08:00
Christopher Chedeau
f2665408fc
Revert "Wysiwyg text (#200)" (#225)
This reverts commit abbc04df0e5a3b9265ada12a73bc9b8a810a329c.
2020-01-06 19:50:37 -08:00
Timur Khazamov
db973c61e8 Save scene in URL (#220)
Co-authored-by: Christopher Chedeau <vjeuxx@gmail.com>
2020-01-06 19:08:23 -08:00
Timur Khazamov
abbc04df0e Wysiwyg text (#200) 2020-01-06 19:03:05 -08:00
Anirban Sengupta
b2eb2807cc Use Ctrl instead of Cmd for keyboard shortcuts on Windows (#216)
Co-authored-by: Christopher Chedeau <vjeuxx@gmail.com>
2020-01-06 18:57:38 -08:00
Timur Khazamov
257f697a98 Context menu with some commands (#217) 2020-01-06 18:50:59 -08:00
Faustino Kialungila
9305a33dba
Copy and paste styles (#219)
* copy and paste styles

* save copied styles in memory
2020-01-06 23:22:48 +01:00