Commit Graph

26 Commits

Author SHA1 Message Date
Keavon Chambers
7138580ea3 Improve web infrastructure
Upgrade npm packages that were locked to old versions due to now-resolved problems
Remove unused/unnecessary dependencies and their configurations
Fix VS Code format on save
Fix VS Code removing EOF newline in JSON files in conflict with npm
Remove JSON files from ESLint because it doesn't properly support JSON
Add detailed comments to web-related configuration files
2021-08-27 02:19:30 -07:00
TrueDoctor
0b5423b516 Implement Undo and Redo (#354)
* Implement undo and redo

* Create more save points and hook up menu entry

* Fix operation ordering

* Remove debug statement

* Fix folder changed order

* Don't store overlays in the history chain

* Keep selection
2021-08-26 12:20:00 +02:00
Henry Sloan
564aaf7ca3 Add a stroke width option to the Line Tool (#355)
* Add a stroke width option to the Line Tool

* Fix title case for line options

* Add px unit to line stroke width

* Add stroke width to pen tool

* Rename stroke width to weight

* Change number input width to min-width

* Remove the word "stroke" from "stroke weight"
2021-08-23 21:55:59 -04:00
Oliver Davies
ce2348e86d Fix crash when clicking non-document tabs and remove extraneous tabs (#352) 2021-08-20 16:30:48 -07:00
TrueDoctor
68d8ae4804 Implement bounding box for selected layers (#349)
* Implement bounding box for selected layers

* Add shift modifier for multi selection
2021-08-20 09:57:00 +02:00
0HyperCube
7c64e1a816 Improve scrollbar behavior (#351)
* 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
2021-08-16 13:25:00 -07:00
0HyperCube
0a0f747aa0 Make scrollbars interactable (#328)
* Make scrollbars interactable

* Add watcher for position change

* Fix case of data

* Fix updateHandlePosition capitalization

* Clean up class name thing

* Scroll bars between 0 and 1

* Allow width to be 100%

* Scrollbars reflect backend

* Include viewport in scrollbar

* Add half viewport padding for scrollbars

* Refactor scrollbar using lerp

* Send messages to backend

* Refactor

* Use glam::DVec2

* Remove glam::

* Remove unnecessary abs

* Add TrueDoctor's change

* Add missing minus

* Fix vue issues

* Fix viewport size

* Remove unnecessary log

* Linear dragging
2021-08-15 21:48:42 +01:00
Keavon Chambers
eff511b00d Improve Frontend -> Backend user input system (#348)
Includes refactor that sends coordinates of the document viewports to the backend so input is sent relative to the application window
Closes #124
Fixes #291

* Improve Frontend -> Backend user input system

* Code review changes

* More code review changes

* Fix TS error
2021-08-14 05:38:35 -07:00
Keavon Chambers
d82e328a73 Refactor ViewportPosition from u32 (UVec2) to f64 (DVec2) (#345)
* Refactor ViewportPosition from u32 (UVec2) to f64 (DVec2)

* Fix pseudo_hash call

* Replace hash function with proper function for uuid generation

* Cargo fmt

Co-authored-by: Dennis Kobert <dennis@kobert.dev>
2021-08-14 02:45:24 -07:00
Azeem Bande-Ali
d4674e5856 Add support for saving and opening files (#325)
* 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>
2021-08-14 00:56:52 -07:00
Keavon Chambers
8551121793 Disallow snake_case variable names in frontend 2021-08-12 21:49:03 -07:00
Keavon Chambers
395e2b86ea Miscellaneous minor code cleanup
# Conflicts:
#	graphene/Cargo.toml
2021-08-12 20:34:36 -07:00
Keavon Chambers
3ae376e0e8 Replace promise with await in MenuList.vue 2021-08-12 19:25:57 -07:00
Keavon Chambers
e494b43029 Add number labels to ruler marks 2021-08-12 02:55:00 -07:00
Keavon Chambers
99a7dbdb97 Clean up popovers: background color and placeholder text 2021-08-11 23:53:05 -07:00
Keavon Chambers
e065046841 Revert "Fix floating menu positioning behavior when web page has scrollbars (#263) (#341)"
This reverts commit 02fd00da10.
2021-08-11 23:49:31 -07:00
0HyperCube
a828f38327 Fix floating menu positioning behavior when web page has scrollbars (#263) (#341)
* Fix color picker position on scrolled window

* Robust fix with proper usage of CSS stacking contexts

* Fix mobile device scaling

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2021-08-11 16:56:18 -07:00
Keavon Chambers
e00b040ce1 Update npm dependencies 2021-08-10 20:25:21 -07:00
dependabot[bot]
e152b34b12 Bump url-parse from 1.5.1 to 1.5.3 in /frontend (#339)
Bumps [url-parse](https://github.com/unshiftio/url-parse) from 1.5.1 to 1.5.3.
- [Release notes](https://github.com/unshiftio/url-parse/releases)
- [Commits](https://github.com/unshiftio/url-parse/compare/1.5.1...1.5.3)

---
updated-dependencies:
- dependency-name: url-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-08-10 20:18:57 -07:00
dependabot[bot]
a90c8784c2 Bump path-parse from 1.0.6 to 1.0.7 in /frontend (#340)
Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.6 to 1.0.7.
- [Release notes](https://github.com/jbgutierrez/path-parse/releases)
- [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7)

---
updated-dependencies:
- dependency-name: path-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-08-10 20:08:57 -07:00
Keavon Chambers
8bdca0b301 Fix documentation links 2021-08-10 20:03:30 -07:00
Keavon Chambers
a570ff22e8 Improve document zooming to work based on nice steps (#336)
* Improve document zooming to work based on nice steps

* Code review improvements
2021-08-10 16:21:18 -07:00
Keaton Brandt
1ee94f41f0 Fix clicking on menu bar sub-menu entries (#337)
* Fix a bug where clicking a submenu would cause the parent menu to be closed before the submenu click could be registered. Also ignores package-lock.json.

* Remove package-lock gitignore

* Add back empty line
2021-08-10 14:54:09 -07:00
Keavon Chambers
ca40e373bf Upgrade packages and a couple fix warnings 2021-08-09 18:41:29 -07:00
Keavon Chambers
f73ee29fdd Add DisplayError to show user errors from the backend 2021-08-08 16:52:09 -07:00
Keavon Chambers
4b9c2eb793 Restructure project directories (#333)
`/client/web` -> `/frontend`
`/client/cli` -> *delete for now*
`/client/native` -> *delete for now*
`/core/editor` -> `/editor`
`/core/document` -> `/graphene`
`/core/renderer` -> `/charcoal`
`/core/proc-macro` -> `/proc-macros` *(now plural)*
2021-08-07 05:17:18 -07:00