Commit Graph
100 Commits
Author SHA1 Message Date
Keavon Chambers fc7d3aa457 Auto-generate third-party license notices (#370)
Closes #294
Closes #371
2021-09-06 06:57:35 -07:00
Keavon Chambers 208e4bbba3 Upgrade wasm-pack to 0.10.1 (#369)
Closes #167
2021-09-05 18:43:16 -07:00
Keavon Chambers 7c3f57c25d Postpone 0.1 launch in readme from Aug to early Sept 2021-09-01 06:18:43 -07:00
Keavon Chambers 5675126a89 Reorganize and clean up the WASM wrapper 2021-09-01 06:10:05 -07:00
Keavon Chambers 699657974a Improve and clean up panic dialog code and wasm wrapper (#368)
Part of #357
2021-09-01 04:09:23 -07:00
Keavon Chambers d290aaf712 Show a crash dialog when the editor panics (#362)
* Show a crash dialog when the editor panics

Closes #357

* Suppress console usage lints

* Proxy cleanup and comments
2021-08-31 18:34:19 -07:00
Keavon Chambers 8b012f9831 Additional WASM translation layer cleanup 2021-08-31 01:40:11 -07:00
Keavon ChambersandDennis Kobert 6b274b3f1c Add folders to frontend and folder creation to backend (#315)
* Add folders to frontend and folder creation to backend

Closes #149

* Add Group keybind

* Add logic to handle expanding of folders

* Send all paths as (u32, u32)

* Add custom serialization for path

* Merge two layer_panel files

* Refactor frontend layer merging

* Fix JS linting

* Update upstream thumbnail changes

* Add paste into selected folder + fix thumbnail dirtification

* Implement CollapseFolder function

* Skip folders on a different indentation level during reorder

* Only reorder within the same folder

* Add folder node icon for folder layers

* Add expand/collapse folder button; partly implement new layer tree design

* Update terminology in the docs

* Add number labels to ruler marks

* Replace promise with await in MenuList.vue

* Miscellaneous minor code cleanup

* Disallow snake_case variable names in frontend

* 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.

* 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>

* 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>

* 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

* Update the readme

* 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

* 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

* Implement bounding box for selected layers (#349)

* Implement bounding box for selected layers

* Add shift modifier for multi selection

* Fix collapsing of folders

* Add have pixel offset to selection bounding box

* Don't panic on Ctrl + A

* Rename to camel case

* Add todo comment for Keavon

* Apply @Hypercubes review suggestions

* Fix many panics, improve behavior of copy/paste and grouping (but grouping still can panic)

Co-authored-by: Dennis Kobert <dennis@kobert.dev>
2021-08-29 08:27:49 -07:00
e75714330c Implement anchor and handle point rendering with the Path Tool (#353)
* Implement Path Tool

* Draw a red rectangle where the first point on the shape is

* Correctly render anchors, handles, and connecting lines

* Fix drain() which can panic

* Refactor frontend messages to work as return values not callbacks

* Reduce the number of unnecessary frontend updates

* Fix stack overflow by using a loop

* Group Document Render calls and put them at the end

* Speed hacks for dirtification

* Add performance

* Bunch folder changed updates

* Add triggers to redraw overlays to movement_handler

* Polish the pixel-perfect rendering of vector manipulators

* Restore scrollbars that were disabled

* Cleanup

* WIP Add shape outline rendering

* Fix compiling

* Add outlines to selected shapes

* Fix outlines rendering over handles and anchors

* Fix dirtification

* Add a comment

* Address code review feedback

* Formatting

* Small tweaks

Co-authored-by: Oliver Davies <oliver@psyfer.io>
Co-authored-by: Dennis Kobert <dennis@kobert.dev>
2021-08-29 00:10:54 -07:00
Keavon Chambers 05ac4ac9b8 Fix bug where swiching to the Fill Tool would trigger a fill operation 2021-08-27 05:06:41 -07:00
Keavon Chambers 4174f339be Minor code readability improvements 2021-08-27 03:39:47 -07:00
Keavon Chambers d2395b4dcf 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-26 19:20:38 -07:00
Keavon Chambers 5c36242aeb Update the readme 2021-08-15 02:40:30 -07:00
Keavon Chambers fd01e60551 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 ChambersandDennis Kobert 3f230c02b4 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
Keavon Chambers 47af8d9bed Disallow snake_case variable names in frontend 2021-08-12 21:43:50 -07:00
Keavon Chambers 35d7fe8860 Miscellaneous minor code cleanup
# Conflicts:
#	graphene/Cargo.toml
2021-08-12 20:34:36 -07:00
Keavon Chambers db2fe322c3 Replace promise with await in MenuList.vue 2021-08-12 19:25:57 -07:00
Keavon Chambers 3a11bf02f8 Add number labels to ruler marks 2021-08-12 02:54:07 -07:00
Keavon Chambers 2367f5e56b Update terminology in the docs 2021-08-12 00:39:29 -07:00
Keavon Chambers 92953e348b Clean up popovers: background color and placeholder text 2021-08-11 23:53:05 -07:00
Keavon Chambers 7c9a3ba4c3 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
Keavon Chambers 39c784599d Update npm dependencies 2021-08-10 20:25:21 -07:00
Keavon Chambers 26ae4e2751 Fix documentation links 2021-08-10 20:03:15 -07:00
Keavon Chambers 22947933b0 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
Keavon Chambers b7976219f3 Upgrade packages and a couple fix warnings 2021-08-09 18:41:09 -07:00
Keavon Chambers a1fec1c93f Add DisplayError to show user errors from the backend 2021-08-08 16:52:09 -07:00
Keavon Chambers 53ad105f57 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
Keavon Chambers 434695d578 Refactor RadioInput widget (#332) 2021-08-07 03:15:40 -07:00
Keavon Chambers 4d90d70220 Refactor document tab management from Panel.vue into utilities/documents.ts 2021-08-04 12:39:18 -07:00
Keavon ChambersandDennis Kobert 7afb28b995 Add a selected_layers() function and refactor code to use it (#314)
* Add a selected_layers() function 

* Refactor AlignSelectedLayers

Co-authored-by: Dennis Kobert <dennis@kobert.dev>
2021-08-01 01:29:23 -07:00
Keavon Chambers 11d8b80698 Add checkbox to MenuBarInput widget 2021-07-31 18:20:51 -07:00
Keavon Chambers e02250e8c6 Add DialogModal and use it for close confirmations and "coming soon" features (#322)
Closes #269
Closes #196

* Add DialogModal and use it for close confirmations and "coming soon" features

* Code cleanup; add Enter key to accept emphasized dialog button
2021-07-31 14:30:31 -07:00
Keavon Chambers 1c317d0166 Add TextButton widget (#321) 2021-07-31 04:58:25 -07:00
Keavon Chambers e1ac2a85b3 Fix two small bugs introduced in #311 2021-07-30 18:46:23 -07:00
Keavon Chambers 3948389806 Add "Sides" label to Shape Tool's options bar number input 2021-07-30 15:45:49 -07:00
Keavon Chambers 652f192a50 Add the ability for NumberInput widgets to display labels
Part of #313
2021-07-29 13:56:18 -07:00
Keavon Chambers 0cdd1762b8 Layer opacity (#312)
Closes #187

* Add layer opacity input

* Improve Rust code cleanliness
2021-07-27 23:15:23 -07:00
Keavon Chambers 12fc330952 Add features to NumberInput widget; refactor widgets and tool options (#311)
Closes #310

* Add features to NumberInput widget; refactor widgets and tool options

* Fix swap/reset working colors using @click instead of :action
2021-07-27 18:28:21 -07:00
Keavon Chambers 5c7fe243bf Fix antialiasing caused by <svg> width/height 100% 2021-07-25 17:25:39 -07:00
Keavon Chambers dca84742ca Swap "Layer" and "Document" menu bar entries 2021-07-24 01:54:27 -07:00
Keavon Chambers c663b160e6 Fix inconsistent whitespace 2021-07-23 17:48:39 -07:00
Keavon Chambers f5376599e9 Improve various code and docs spelling/grammar 2021-07-23 17:25:05 -07:00
Keavon Chambers 552cee4d6b Fix tooltips in Document panel 2021-07-19 18:02:08 -07:00
Keavon Chambers ba7531121b Fix dropdown menu widget showing wrong active entry
Fixes #250
2021-07-19 15:03:08 -07:00
Keavon Chambers b650658810 Add (nonfunctional) rulers and scrollbars to the viewport (#279)
* Add nonfunctional rulers and scrollbars to viewport

* Switch from DOM divs to SVG lines

* Switch from SVG lines to a single SVG path

* Change variable names
2021-07-17 16:11:52 -07:00
Keavon Chambers f5bb235ae0 Remove outdated todo comment 2021-07-17 03:36:35 -07:00
Keavon Chambers c2f735504d Clean up widget type naming conventions 2021-07-16 15:57:42 -07:00
Keavon Chambers c453199704 Categorize frontend widgets to match design system 2021-07-16 15:37:35 -07:00
Keavon Chambers 5ab610f959 Edit readme with various updates and simplifications 2021-07-16 04:01:32 -07:00
Keavon Chambers 67131a23fd Remove CLI client stub 2021-07-15 03:44:57 -07:00
Keavon Chambers 7785ed2b1d Adjust OptionalInput widget design to add back its right border 2021-07-15 01:01:05 -07:00
Keavon Chambers 86bd9e7cdf Rename tool icons 2021-07-15 00:46:32 -07:00
Keavon Chambers 7b63e27168 Switch all JS imports to absolute paths 2021-07-15 00:34:56 -07:00
Keavon Chambers 37e6335557 Make frontend request tab list on initialization 2021-07-15 00:07:21 -07:00
Keavon Chambers eab498f795 Cleanup of variable naming 2021-07-14 20:11:51 -07:00
Keavon Chambers 0656f8abc5 Add a fullscreen button and the keyboard lock API (#266)
Closes #249
2021-07-14 18:56:22 -07:00
Keavon Chambers 3a520071cf Enforce downgraded dependency versions in package.json 2021-07-14 16:51:56 -07:00
Keavon Chambers ccea88dfd7 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
Keavon Chambers e0f049ab00 Frontend refactor to move response handler, key input handling, and more into new utilities folder (#260)
Part of #124
2021-07-14 14:31:09 -07:00
Keavon Chambers 3156b3af05 Clean up and polish some code from the previous commit (#255) 2021-07-13 00:52:45 -07:00
Keavon Chambers 29faf704f6 Add a pull request template so GitHub reminds to reference issue numbers 2021-07-10 13:58:54 -07:00
Keavon Chambers 373c74fbf3 Downgrade wasm-pack and Vue-related dependencies which are causing issues
This reverts commit 744e3729d7.
2021-07-09 20:29:14 -07:00
Keavon Chambers bc8fe2d844 Improve panel tabs to fix pixel mislaignments and support MMB closing 2021-07-09 16:49:54 -07:00
Keavon Chambers 13e73b92bd Improve readability of OptionalInput widget design styling 2021-07-09 16:02:36 -07:00
Keavon Chambers 29a2b46684 Add the checkbox input widget (#204)
* Add the checkbox input widget

* Add OptionalInput widget
2021-07-08 14:10:30 -07:00
Keavon Chambers 8666ff4390 Fix horizontal scrollbar due to status bar negative margin 2021-07-05 00:38:18 -07:00
Keavon Chambers 78b369547a Downgrade @vue/compiler-sfc which breaks linting 2021-07-02 15:02:01 -07:00
Keavon Chambers 739f420224 Update wasm-pack dependency and others, fixes #167 2021-07-02 13:50:19 -07:00
Keavon Chambers cd5e36af28 Add styled scrollbars (#231) 2021-07-01 22:08:23 -07:00
Keavon Chambers 0692bc8727 Fix bug where other panel tabs would switch the document panel tabs 2021-06-26 23:46:39 -07:00
Keavon Chambers 923e63c045 Separate Graphite header logo from menu bar 2021-06-25 00:38:32 -07:00
Keavon Chambers e551ba529f Add "Guide Mode" to viewport mode selector dropdown 2021-06-23 23:10:48 -07:00
Keavon Chambers a3d96f1dae Reduce the greediness of keyboard input redirection
Part of #124
2021-06-20 02:05:31 -07:00
Keavon Chambers d1c392b085 Add info to README to help with a possible Windows compilation issue 2021-06-13 16:05:58 -07:00
Keavon Chambers 3672c6919c Fix Layer Tree panel CSS to allow scrolling (#208) 2021-06-13 12:29:50 -07:00
Keavon Chambers 9c0a23d03f Add additional keyboard shortcut tooltips 2021-06-13 11:20:48 -07:00
Keavon Chambers 70c9e4ada6 Change default document title to "Untitled Document" 2021-06-13 01:45:58 -07:00
Keavon Chambers 3b2e460265 Add a contributing section to the project README 2021-06-12 21:34:09 -07:00
Keavon Chambers ffb83b06c1 Remove early sample "greet" code 2021-06-12 12:05:34 -07:00
Keavon Chambers 13dd51dbf8 Improve UI behavior at smaller screen sizes so status bar overflows (#158)
Also includes various CSS flex-related cleanup throughout the UI.
Progress for #150
2021-06-08 00:54:24 -07:00
Keavon Chambers 569af162ae Add the Dropdown Input widget (#168)
Fixes #135.

* Add the Dropdown Input widget

* Fix font loading race condition
2021-06-06 02:17:36 -07:00
Keavon Chambers 4bcdbbe092 Implement "Export" entry in File menu; add Copy/Paste icons in Edit menu 2021-06-01 19:49:04 -07:00
Keavon Chambers d1bf68320e Implement menu bar floating list menus (#163)
Progress towards #135
2021-05-31 11:51:32 -07:00
Keavon Chambers 3d646d2bc3 Generalize and rename overlays as "floating menus"
Progress towards #135.
2021-05-29 21:55:43 -07:00
Keavon Chambers 805116b031 Fix missing keyboard shortcut <P> for the Pen Tool 2021-05-27 22:10:48 -07:00
Keavon Chambers a11892db70 Minor CSS custom property rename for accuracy 2021-05-27 15:03:49 -07:00
Keavon Chambers a70605b514 Fix layer visibility icons incorrectly referenced in previous cleanup commit. 2021-05-27 09:26:38 -07:00
Keavon Chambers cdcddf176b Move all icon SVG imports to the Icon component
This change also removes the need to specify the icon size.
2021-05-27 02:14:32 -07:00
Keavon Chambers 5016fde231 Standardize icon sizes and folder paths (closes #110) 2021-05-27 00:14:50 -07:00
Keavon Chambers 9930ea2e13 Fix popover positioning regression 2021-05-25 21:49:43 -07:00
Keavon Chambers 0ed6f24664 Update the readme with new progress, details, and mockup screenshot 2021-05-24 00:33:09 -07:00
Keavon Chambers 34efac990b Update UI colors and alignment for consistency with the design mockup (#157)
Closes #111
2021-05-23 19:01:13 -07:00
Keavon Chambers c08b2d4b31 Fix icon cursor hitbox below SVGs by setting images to display: block
Fixes #133
2021-05-21 14:28:11 -07:00
Keavon Chambers 3b0762ef18 Rename and organize widget components to conform to design terminology (#132) 2021-05-21 13:10:32 -07:00
Keavon Chambers b9248b828c Complete implementing popover system main features (#131)
* Make popover buttons open popover menus and add placeholder messages to all of them.
* Implement all directions for drawing, aligning, and edge-clamping popovers.
* Fix popovers so they are drawn outside their parent panel bounds and not clipped.
* Fix popover HTML to avoid nesting it inside a <button> element.
2021-05-21 12:22:30 -07:00
Keavon Chambers 267331728d Popovers now close when clicked out or mouse strays 100px outside bounds (#129) 2021-05-19 01:02:58 -07:00
Keavon Chambers 564560c7dd Move .eslintignore file rules into .eslintrc.js 2021-05-17 18:56:41 -07:00
Keavon Chambers a439b27d2b Implement popover component and beginnings of color picker (#128) 2021-05-17 12:07:54 -07:00
Keavon Chambers b7b329c85a Rename Panel Area -> Workspace and Dockable Panel -> Workspace Panel 2021-05-16 18:15:04 -07:00