Commit Graph

810 Commits

Author SHA1 Message Date
0HyperCube 237e97f033
Fix github CI branch name (#1396)
* Fix github CI branch name

* Check git branch

* New git command

* Use GITHUB_HEAD_REF if it exists
2023-08-23 15:17:32 +00:00
0HyperCube b881385e3b
Update wasm-bindgen, syn and wgpu (#1398) 2023-08-23 14:53:56 +00:00
Keavon Chambers 0dcfafbf64 Add demo artwork 2023-08-22 03:26:59 -07:00
Keavon Chambers 8fbf0cbb69 Improve the Circular Repeat node 2023-08-19 22:46:44 -07:00
Keavon Chambers 980b692d46 Fix graph view button hotkey tooltip; fix layer CSS bug 2023-08-19 17:04:09 -07:00
isiko a566331f1c
New node: Pixel Noise (#1267)
Add Pixel Noise Node

Currently only White Noise is implemented, but the Code is written so that other's can be added easily
2023-08-19 11:30:03 -07:00
Keavon Chambers 185106132d Move node graph from panel to overlay on viewport 2023-08-19 01:21:37 -07:00
Keavon Chambers 5a7d230156 Improve the layers UI in the node graph 2023-08-18 14:26:59 -07:00
isiko 7558088727
Add more advanced math nodes (#1383)
Added nodes for the following operations:

* Floor
* Ceil
* Round
* Absolute Value
* Logarithm
* Natural Logarithm
* sin
* cos
* tan
2023-08-14 13:43:17 +00:00
xkef c9d3453e46
Fix undo not immediately removing copy/pasted layer (#1381)
Bugfix: Undo does not work when copy/pasting layers (or groups), it should remove the layer that was pasted
2023-08-13 12:47:43 -07:00
Dennis Kobert 752df128e3
Don't include the document node path in the stable node id by default (#1388)
* Don't include the document node path in the stable node id by default

Make the inclusion of the document path for the stable node id optional
and only enable it for the MonitorNode for now

* Fix tests
2023-08-13 10:25:42 +00:00
nat-rix dc4b16aead
Curves image adjustment node (#1214)
* Create ValueMapperNode and use it for brightness/contrast

* move spline code into seperate module

* Add GenerateCurvesNode

* add a `LuminanceMut`-trait
* add `lerp` to `Channel`

* Add frontend code to handle the curves widget's inputs

* Rename spline module to curve

* Make messages in CurveInput pass

* Improve curves widget design and fix sizing issue

* Implement proper bezier handling

* Use bezier_rs's intersections function instead of own cubic root solver

* Debounce CurveInput events and change how debouncer works

the first event issued to the debouncer was unneccessarily delayed.
Instead now the debouncer fires it instantaneously but blocks events
that come in until a timeout was reached.

* Make curve editing more user friendly

* Change code to use project terminology

* sample -> manipulator group or manipulator
* marker -> handle

* Fix small documentation mistake in bezier-rs

* Add find_tvalues_for_x function to bezier-rs

also integrate the function into curves node

* Add tests for find_tvalues_for_x in bezier-rs

* Fix formatting

* Revert BrightnessContrastNode changes

* Frontend cleanup

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
Co-authored-by: Dennis Kobert <dennis@kobert.dev>
2023-08-13 01:07:11 -07:00
Omar Magdy fd338c945f Fix crash from overflowing values given to NumberInput widgets (#1377)
* Added hints for brush tool size

* Added hints for brush tool size

* Solved the user being able to crash the editor by overflowing NumberInputs
2023-08-11 12:26:37 -07:00
Dhruv 1c11ebcc4e Correct snapping offsets after canvas transformation when using snap-reliant tools (#1370)
* fix: pen, spline tool incorrect snap offsets
- re-render snapping offsets if canvas transformed during line draw

* [wip]feat: add CanvasTransformed global message

* [wip]fix: synchronize line tool snap offsets

* fix: update offsets for shape tools on canvas transform

* chore: remove unneeded function parameter

* [wip]fix: use line tool at canvas level

* refactor: revert line tool changes
2023-08-11 12:26:19 -07:00
isiko 2377240d07 Add more math nodes (#1378)
* Adds Max, Min and Equal Nodes

* Add LogToConsoleNode

Logs the data given as the input to the browser console and returns it
as the output
2023-08-11 12:26:13 -07:00
isiko 77e5ec9d4f
Add bounding box node (#1376)
* Add bounding box node

Generates a rectangle based on the bounding box of the input vector data

* Remove redundant <>

* Fix formatting

---------

Co-authored-by: Dennis Kobert <dennis@kobert.dev>
2023-08-08 18:44:14 +02:00
isiko f57fa2e7c9
Add Circular Repeat Node (#1373)
* Add Circular Repeat Node

Repeats a given set of Vector Data in a circular pattern a specified
amount of times.

* Remove debug statement from RepeatNode
2023-08-08 16:13:44 +00:00
Ezbaze 5c08248681
Additional Input and Math Nodes (#1369)
* Add Input Nodes and additional Math Nodes

* Add add node to node registry

* Update node-graph/gcore/src/ops.rs

Co-authored-by: Dennis Kobert <dennis@kobert.dev>

* Fix Color Input Node

Wrong input type

* Remove non Parameter variants

* Remove non Parameter variants

* Remove non Parameter variants

* Apply suggestions from code review

* mod to modulo

---------

Co-authored-by: Dennis Kobert <dennis@kobert.dev>
2023-08-08 17:31:50 +02:00
Dennis Kobert e32d4c29c4
Fix shapes only showing up as outlines on document load (#1375)
No longer treat a graphic group as an error
2023-08-08 14:07:39 +02:00
Dennis Kobert 388d51deac
Add Vector Repeat Node (#1371)
* Implement skeleton for repeat node

* Implemen RepeatNode
2023-08-07 14:59:58 +02:00
Omar Magdy 8b9f279f12
Add hints for Brush tool resizing (#1363)
Added hints for brush tool size
2023-08-06 15:32:06 -07:00
Dennis Kobert 3262f637d1
Decrease graph compilation time significantly (#1368)
* Decrease compilation time significantly

* Refactor reorder_ids method to improve performance
2023-08-06 21:36:44 +02:00
Keavon Chambers 3450d638a6
Layer-based nodes redesign, just the basics so far (#1362)
* Redesign the nodes

* Basic vertical stacking syntax sugar

* Fix node connections

* Primary output and line thickness

---------

Co-authored-by: 0hypercube <0hypercube@gmail.com>
2023-08-04 14:56:00 -07:00
Dhruv 50b67bf6f6
Fix Text Tool Overwriting Existing Text on Editing Text Layer (#1356)
fix: text edit overwriting existing text
2023-08-03 17:08:49 +01:00
Ezbaze 40c26af564
Fix stuck panning after releasing space bar but not LMB (#1353)
Remove modifier from lmb keydown
2023-08-02 22:48:05 -07:00
Keavon Chambers 2b05e1c270 Rename Shape tool to Polygon tool 2023-08-01 01:28:14 -07:00
Keavon Chambers b9e49623a3 Rename PropertyHolder to LayoutHolder 2023-08-01 00:46:30 -07:00
Keavon Chambers 8e87e42f3e Remove widgets built by methods on WidgetHolder 2023-07-31 23:36:12 -07:00
0HyperCube de27f2c006
Switch to the widget builder pattern on all remaining layouts (#1346)
* Prefer widget builder pattern

* Nits

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-07-31 23:21:42 -07:00
0HyperCube 2b9337406a
Fix artboard thumbnails (#1342)
* Fix artboard thumbnails

* Use GraphIdentifier instead of option

* Fix warnings introduced by artboard nodes
2023-07-30 19:37:37 +00:00
Keavon Chambers f151ba39b5
Add checkbox for a transparent BG when exporting image (#1344) 2023-07-30 10:57:07 -07:00
Christopher Mendoza 3f7d484398 Select tool's shallowest behavior improvements and refactoring (#1108)
Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-07-28 18:23:14 -07:00
Bruce Mitchener 5c7dabf70e Remove unused Kurbo deps from editor and node-graph/gstd (#1335)
deps: Remove kurbo deps from editor, node-graph/gstd.

Co-authored-by: Bruce Mitchener <bruce.mitchener@configura.com>
2023-07-29 07:21:36 +07:00
Shouvik Ghosh 6d2ae02c19 Hide snapping overlays when snapping to a point (#1260)
Hide snap points/lines if we snap to a point
2023-07-29 05:25:34 +05:30
Dennis Kobert a49d96ed37 Embed git commit hash in the document file (#1325)
* Embed git commit hash in the document file

* Bump version in test document file

* Fixes

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-07-28 22:52:26 +02:00
Dhruv 8bdc64bb8b Fix Transform node missing its Rotation slider (#1337)
* fix: transform node missing rotation slider

* chore: move variable's value in-line
2023-07-29 01:14:29 +05:30
0HyperCube 08f9be6aaf Artboard nodes (#1328)
* Create artboard nodes

* Update node when resizing artboard

* Render clipped artboards

* More stable feature

* Do not render old artboards

* Fix some issues with transforms

* Fix crash when drawing rectangle

* Format

* Allow renaming document from Properties panel

* Adjust artboard label styling

* Fix document graph refresh so artboards show up

* Make "Clear Artboards" coming soon

* Fix displaying an infinite canvas

* Show document name in node graph options bar

* info!() to debug!()

* Fix Properties panel not being cleared when all docs closed

* Remove dead code

* Remove debug logs added in this branch

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-07-27 07:35:17 +01:00
Dhruv ad0dc3276e Show disabled menu bar entries with no active document (#1332)
Making the change as advised. This change will allow the user to see all possible submenus without being able to use them if there is no active document.
This somewhat reverts the behaviour of one previous PR.
2023-07-27 11:26:37 +05:30
0HyperCube 80cc5bee73 Fix clippy lints (#1327)
* Fix clippy lints

* Update formatting

* Remove unsafe send impls

* New type for Rc<NodeContainer>
2023-07-19 16:38:23 +01:00
Dhruv 743803ce04 Add Snapping Options to the Snap Dropdown Menu (#1321)
* [wip]feat: add snapping options

* [wip]fix: use svelte component for optionsWidget

* fix: use apt PopoverButton types

* refactor: minor formatting improvements

* Fix popover layout

* [wip]feat: attempt implementing CheckboxInputData struct

* fix: use correct Checkbox struct 's default method

* fix: revert adding CheckboxInputData struct

- This reverts commit 2a481887fc89a94a459ef57ba4ab3024d3b60aa1.

* feat: use checkboxes for snapping options

* feat: add label to dropdown checkbox elements

* fix: separate Snap dropdown menu elements
- move each element into separate row

* [wip]feat: modularize snapping states
- maintain individual snapping states for document

* fix: snapping checkboxes' behavior
- checkboxes now update internal snapping state

* refactor: update snap states individually
- this prevents out-of-sync states
- enables reusing existing snap state object

* feat: snap to boxes and nodes conditionally

* [wip]feat: attempt to invert checkbox on update
- attempt implementing mutable WidgetCallback struct
- attempt using above struct to invert checkbox state on update

* Fix widget diffing

* refactor: remove unused code

* feat: align checkboxes consistently with labels

* feat: use separators to stylize snapping menu
- removes need for custom CSS and label property
- ensures consistency across the application

* refactor: remove unneeded css

---------

Co-authored-by: hypercube <0hypercube@gmail.com>, TrueDoctor <dennis@kobert.dev>
2023-07-15 15:07:18 +05:30
Dennis Kobert 4c9daadb01 Move Imaginate cache into the node 2023-07-14 16:40:56 +02:00
Dennis Kobert d52ea18a1f Fix Imaginate node types to prevent an immediate crash 2023-07-14 15:28:54 +02:00
Prikshit Gautam aaf28ba7b7 Added primary output option in DocumentNodeType (#1275)
* Added primary output option in DocumentNodeType

* Changed position of primary output field

* Changed position of primary output field in type definition

* Update editor/src/messages/portfolio/document/node_graph/node_graph_message_handler/document_node_types.rs

* Add missing default implementations to gpu nodes

---------

Co-authored-by: Dennis Kobert <dennis@kobert.dev>
2023-07-05 13:06:28 +05:30
Dennis Kobert 3c2d371173 Graphene CLI + quantization research (#1320)
* Implement skeleton for graphene-cli

* Configure gpu surface on non wasm32 targets

* Create window with full hd size

* Create window using the graphen-cli

* Use window size for surface creation

* Reuse surface configuration

* Reduce window size for native applications to 800x600

* Add compute pipeline test

* Poll wgpu execution externally

* Remove cache node after texture upload

* Add profiling instructions

* Add more debug markers

* Evaluate extract node before flattening the network

* Reenable hue saturation node for compilation

* Make hue saturation node work on the gpu + make f32 default for user inputs

* Add version of test files without caching

* Only dispatch each workgroup not pixel

* ICE

* Add quantization to gpu code

* Fix quantization

* Load images at graph runtime

* Fix quantization calculation

* Feature gate quantization

* Use git version of autoquant

* Add license to `graphene-cli`

* Fix graphene-cli test case

* Ignore tests on non unix platforms

* Fix flattening test
2023-07-04 17:04:09 +02:00
Senne Hofman 61c5dd1f88 Dragging selected folder now drags all children (#1279) 2023-07-04 16:50:31 +02:00
Leonard Pauli 84343f2abe Add Polygon/Star toggle to Shape tool (#1215)
* #1212: added checkbox to toggle star for ngon shape

* Switch from checkbox to radio input

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-07-04 16:29:38 +02:00
Dhruv 92e10b6610 Add Box Selection to Path Tool (#1316)
* [WIP]feat: add bounding box to path tool

* feat: draw bounding box for path tool
- register Enter key for finalizing bounding box position
-  add (WIP)func to select all in bounding box area
- add hint data for new state

* fix: re-render shape overlays after selection

* fix: maintain existing point selection with Shift key

* feat: add Shift key support for Enter Key state

* fix: set apt name for Enter state's keybind

* refactor: remove unnecessary code

* refactor: correct hints and remove unneeded code
- correct DrawingBox state's footer hints
- remove PathToolData's quad and bbox methods

* refactor: remove duplicate mouse position vectors
2023-07-02 13:03:51 +05:30
Dhruv 9c2520111d Minor Tooling and UI Improvements (#1314)
* [wip]fix: disable fill and gradient tools on bmp images
- aims to fix #1161

* [wip]fix: disable gradient tool for bmp images

* fix: disable gradient tool for bitmap images
- fixes https://github.com/GraphiteEditor/Graphite/issues/1161

* [wip]fix: disable menu bar elements if no open document

* [WIP]feat: render certain menubar elements if document is open

* fix: conditional menu bar rendering fixes
- update menu bar on certain document actions
- fix menu bar order on rendering all elements

* refactor: change conditional menu elements property
- use existing 'disabled' property

* feat: render menu dropdown items conditionally

* fix: revert formatter whitespace changes

* refactor: improve variable naming and message usage
- name menu bar bool flag better
- use SendLayout message and remove unneeded calls
2023-06-24 01:49:00 +05:30
Dhruv b937a64c37 Conditionally enable align and pivot buttons (#1313)
* feat: conditionally enable align buttons
- enable select tool align buttons if selected layer count > 1

* wip: conditionally render pivot button

* [wip] feat: conditionally enable select tools' pivot button

* fix: prevent repeated UI updates on layer selection
- set bool flag to false after first UI update
2023-06-17 23:00:33 +05:30
Dennis Kobert 40ec52b395 Node macro lambda parameters (#1309)
* Implement parsing of impl Node<I, …> syntax for the macro

* Extend node macro to allow specifying lambda nodes
2023-06-09 16:43:46 +02:00
nat-rix f76b850b9c Fix Imaginate by porting its JS roundtrip code to graph-based async execution in Rust (#1250)
* Create asynchronous rust imaginate node

* Make a first imaginate request via rust

* Implement parsing of imaginate API result image

* Stop refresh timer from affecting imaginate progress requests

* Add cargo-about clarification for rustls-webpki

* Delete imaginate.ts and all uses of its functions

* Add imaginate img2img feature

* Fix imaginate random seed button

* Fix imaginate ui inferring non-custom resolutions

* Fix the imaginate progress indicator

* Remove ImaginatePreferences from being compiled into node graph

* Regenerate imaginate only when hitting button

* Add ability to terminate imaginate requests

* Add imaginate server check feature

* Do not compile wasm_bindgen bindings in graphite_editor for tests

* Address some review suggestions

- move wasm futures dependency in editor to the future-executor crate
- guard wasm-bindgen in editor behind a `wasm` feature flag
- dont make seed number input a slider
- remove poll_server_check from process_message function beginning
- guard wasm related code behind `cfg(target_arch = "wasm32")` instead
  of `cfg(test)`
- Call the imaginate idle states "Ready" and "Done" instead of "Nothing
  to do"
- Call the imaginate uploading state "Uploading Image" instead of
  "Uploading Input Image"
- Remove the EvalSyncNode

* Fix imaginate host name being restored between graphite instances

also change the progress status texts a bit.

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-06-09 09:03:15 +02:00
Rotteegher a92f1ecab0 Fix zoom with scroll preference reset to default correctly (#1304) 2023-06-08 15:50:19 +00:00
Dennis Kobert 5b6db0a762 Add document nodes for gpu pipeline nodes (#1292)
* Add document nodes for gpu pipeline nodes

* Load existing frame instead of clearing it

* Feature gate gpu imports
2023-06-08 10:13:19 +02:00
Dennis Kobert 45b04f4eb9 Lay groundwork for directly rendering to the canvas without a cpu roundrip (#1291)
* Add Texture handle type

* Add Texture View to shader inputs

* Implement basic rendering pipeline

* Render first texture using render pipeline

* Fix output color space

* Precompute the rendering pipeline

* Move gpu context creation to editor api

* Port gpu-executor nodes to node registry

* Fix canvas nodes and make code compile for non wasm targets

* Pin wasm-bindgen version

* Disable miri temoporarily for better ci times

* Fix formatting

* Remove unsafe block

* Bump wasm-pack version

* Bump wasm-bindgen version

* Add gpu feature guard for push node

* Make Into node async
2023-06-07 17:13:21 +02:00
Orson Peters 0c93a62d55 Add blit caching and blend modes to Brush tool (#1268)
Added blit caching.

Added bulk memory target feature.

Added brush texture caching.

Removed dead format call.

Fix brush_texture_cache crashing on serialization.
2023-06-07 12:24:21 +02:00
Prikshit Gautam 70fcb35444 Remove warnings from build and satisfied clippy (#1288)
* Prefixed unused functions with underscore

* Applied clippy lints

* Fixed some warnings and removed some `allow` statements
2023-06-07 14:46:47 +05:30
isiko 820a2672b8 Add the Extract Opaque node (#1276)
* Add 'Extract Opaqueue Node'

* Fix node

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-06-04 21:51:42 +02:00
0HyperCube abd8e7fab6 Fix Pen tool race condition when drawing handles fast, and stuck overlays (#1283)
* Fix pen tool with async

* Fix overlays staying too long

* Perhaps fix the transform issue

* Fix compile error

* Formatting

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-06-04 04:51:07 +01:00
0HyperCube 4d1c5fc8bf Minimum viewport scale cover when zooming (#1282)
* Minimum viewport scale cover

* Update const name
2023-06-03 21:35:19 +01:00
Dennis Kobert 26473a8002 Restructure node graph execution to be safer (#1277)
* Reorganize file structure

* Remove all unsafe code

* Add testcase for debugging ub

* Convert into proper test with fail condition

* General cleanup

* Fix tests

* Add feature guard for deallocation

* Use raw pointer for storing values to avoid violating aliasing rules

* Add comment explaining the disabling of simd128

* Fix brush node

* Fix formatting
2023-06-03 01:18:44 +02:00
Orson Peters 5558deba5e Brush blend modes and erase/restore (#1261)
* Made blit node numerically stable.

* Added blend mode parameter to brush strokes.

* Fixed difference blend mode.

* Added erase/restore blend modes.

* Added blend mode and draw mode widgets.

* Added comment explaining the ImageFrame.transform.

* Initial blit/blend version.

* Working version of erase/restore.

* Improved inlining for blend functions.

* Dsiable the blend mode selector in erase/draw mode.

* Fixed incorrect bounds calculation.

* Use factor instead of percentage for opacity

* Rearrange options bar widgets

* Tidy up blend modes

* Code review

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-06-02 21:59:55 +02:00
Dennis Kobert 4e1bfddcd8 Remove unsafe code and clean up the code base in general (#1263)
* Remove unsafe code

* Make node graph test syncronous

* Add miri step to ci

* Remove unsafe from node graph evaluation

* Replace operation pseudo_hash with hash based on discriminant

* Fix test

* Move memo module to core and make it safe

* Fix formatting

* Remove unused stuff from gstd

* Use safe casting for creating key variants

* Fix memo node types

* Fix ref node

* "fix" ub

* Use correct input types for ExtractImageFrame

* Fix types for async nodes

* Fix missing implementation

* Manually override output type for async nodes

* Fix types for EditorApi

* Fix output type for WasmSurfaceHandle

* Remove unused miri.yml

* Fix incorrect type for cache node
2023-06-02 11:05:32 +02:00
Dennis Kobert 259dcdc628 Use canvas as target for raster rendering (#1256)
* Implement ApplicationIo

* Simplify output duplication logic

* Fix let node initialization for ExtractImageFrame

* Async macros

* Use manual node registry impl

* Fix canvas insertion into the dom
2023-05-30 20:12:59 +02:00
Alexandru Ică 57415b948b Add the first basic version of the GPU blend node (#1243)
* Implement Gpu Blend node

* Remove duplicate shader input

* Fix formatting

---------

Co-authored-by: Dennis Kobert <dennis@kobert.dev>
2023-05-28 11:34:09 +03:00
Orson Peters 7148b199ec Make Brush tool use per-stroke options and improve its performance (#1242)
* Laid groundwork for per-stroke brush parameters.

* Added new spacing parameter.

* Added back interpolation, using spacing parameter.

* Move bounding box code into core.

* Initial working prototype of per-stroke styles.

* Removed now useless brush node properties.

* Made default spacing 50% for performance comparison.

* Quick and dirty prototype for BlitNode copied from blend.

* Fixed error after rebase.

* Optimized the blitting loop.

* Pretty big optimization for into_flat_u8.

* Insert brush node for images

* Fix starting position transform

* UX polish

* Code review nits

---------

Co-authored-by: 0hypercube <0hypercube@gmail.com>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-05-27 22:55:49 +02:00
Dennis Kobert 0586d52f3a Implement experimental WebGPU support (#1238)
* Web gpu execution MVP

Ready infrastructure for wgpu experimentation

Start implementing simple gpu test case

Fix Extract Node not working with nested networks

Convert inputs for extracted node to network inputs

Fix missing cors headers

Feature gate gcore to make it once again no-std compatible

Add skeleton structure gpu shader

Work on gpu node graph output saving

Fix Get and Set nodes

Fix storage nodes

Fix shader construction errors -> spirv errors

Add unsafe version

Add once cell node

Web gpu execution MVP
2023-05-27 19:27:46 +02:00
Dennis Kobert 4bd9fbd073 Make the dynamic node graph execution asynchronous (#1218)
* Make node graph execution async

Make node macro generate async node implementations

Start propagating async through the node system

Async checkpoint

Make Any<'i> Send + Sync

Determine node io type using panic node

Fix types for raster_node macro

Finish porting node registry?

Fix lifetime errors

Remove Send + Sync requirements and start making node construction async

Async MVP

Fix tests

Clippy fix

* Fix nodes

* Simplify lifetims for node macro + make node macro more modular

* Reenable more nodes

* Fix pasting images

* Remove http test from brush node

* Fix output type for cache node

* Fix types for let scope

* Fix formatting
2023-05-27 11:48:57 +02:00
0HyperCube 0c7b55949d Fix some node connection UI issues (#1248) 2023-05-26 18:02:05 +01:00
0HyperCube 15eb4df8d4 Add the document graph (#1217)
* Thumbnails for the layer node

* Raster node graph frames

* Downscale to a random resolution

* Cleanup and bug fixes

* Generate paths before duplicating outputs

* Fix stable id test

* Add a document node graph

* Fix merge conflict

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-05-26 17:22:58 +01:00
isiko 8d778e4848 Introduce Split/Combine Channels nodes (#1153)
* Add Channel Extrataction Node

* Add hacky BlendModes for Inserting Color Channels

* Fix Channel Exporter

* Add Monochrome Option and Multi Output Node

* Fix Input Mapping

* Fix Formatting

* Split Alpha Extraction to seperate node

* Remove unnecessary functionality

* Add Alpha Channel as an output to the extract channel node

* Fix compilation

* Add unpolished 'Combine Channels' Node

* Fix Rebasing Issues

* Add a bit of polish

* Fix Rebase Issues

* Switch from 'ColorChannel' to 'RedGreenBlue'
I initially added an enum to hold color channels called 'ColorChannel', but while implementing the nodes, there somebody allready added a similar enum so I switched to that type

* Add correct names

* Add Improvement

- Some Performance Improvements
- Some Formatting Improvements

* Add some improvements
Most of this stuff was done by TrueDoctor in my Luchbreak :D

* Implement IO Improvements
- Converted primary output from split node to a dummy output
- Removed primary Input from split node

* Fix Formatting

* Fix Combine RGB Node (hopefully final :D )

* Swap around Inputs and Outputs
Move from ARGB -> RGBA

* Improve naming

* More naming fixes

* Fix Replace -> Into

* Rename Replacment -> Insertion

* Add blank assist area

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
Co-authored-by: Dennis Kobert <dennis@kobert.dev>
2023-05-25 12:15:00 +02:00
Dennis Kobert 5816807f18 Decouple node graph execution (#1209)
* Decouple node graph execution from the main loop

* Trigger document Render + Layer updates after the graph evaluation
2023-05-25 10:36:56 +02:00
Shouvik Ghosh da6261aa75 Delete handle on dragging it into its anchor (#1202)
* Delete handles when dragged to anchor + create mirror handle even if handle is deleted

* Handle different zoom levels + check handle mirroring for removal

* Handle different zoom levels + check handle mirroring for removal

* Add an anchor check

* Code review changes

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-05-20 12:27:48 +05:30
Chase 1039f76502 Fix node copy paste issues (#1208)
* Fix copy issue

* Allow copying of input frame nodes

* Fix duplication delay of node graphs

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-05-20 03:08:59 +08:00
Christopher Mendoza bb1e7c44cf Make duplicating folders also duplicate its children (#1178)
* Latest changes

* Add layer attempt

* layer tree is now correct after duplicating layers

* Latest changes

* Latest Changes

* Recursive idea

* Moving Layers to Dup Folder - not done

* latest changes

* latest progress

* Latest Changes

* Latest Changes

* Latest Changes

* Latest

* Latest

* Latest

* Duplicating Folders works

* Initial Refactoring

* Ready for QA

* Doesn't select all the children after duplicate anymore

* First pass code review with major cleanup

* Removed unused next_asssignment_id function and updated FolderLayer struct

* Removed unused logic

* First iteration of cleaning up the code

* Added Ollie's suggestions

* Code review cleanup

---------

Co-authored-by: Ollie Dolan <olliedolan10@gmail.com>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-05-19 00:41:16 -07:00
0HyperCube 6400953af5 Thumbnails for the layer node (#1210)
* Thumbnails for the layer node

* Raster node graph frames

* Downscale to a random resolution

* Cleanup and bug fixes

* Generate paths before duplicating outputs

* Fix stable id test

* Code review changes

* Code review pass with minor changes

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-05-18 05:12:50 +01:00
Rottie 727e5bdeb1 Replace Fill node's "Use Gradient"/"Use Solid" buttons with toggle (#1220)
* Replace Fill node's Use Gradient\Solid Color with radio selector

* Code Review Round 1

* Code Review Final Round ?
2023-05-17 18:01:13 +00:00
0HyperCube 4e0c673a35 Add Layer and Artboard node definitions and underlying data structures (#1204)
* Add basic node defenitions

* Code review

* change widget code

* Artboard node changes

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-05-09 21:57:22 +01:00
Chase 7e1b452757 Add color choices to the options bar of tools (#1199)
* Generalize PenColorType -> ToolColorType

* impl default for ToolColorOptions

* Add stroke color option to the freehand tool

* Consolidate working color update messages

* Update tool working colours when switching tools

* Update working colors on tool activation

* Add stroke color option to line tool

* Add fill color option to freehand tool

* Add tool color options to spline tool

* Fix freehand tool

* Add color options to text

* Add tool color/weight options to rectangle

* Add tool color/weight options to ellipse

* Add tool color/weight options to shape

* Fix spline default fill/stroke

* Reorder widgets and code cleanup

* Add CustomColor icon

* Fix warnings

* Change color defaults to secondary fill, primary stroke

* Fix spacing between brush options number inputs

* Add toolbar color option to brush

* Implement allowNone on color input widget

* Rearrange widget and remove X from brush

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-05-08 18:00:10 +08:00
0HyperCube ab2de96640 Fix brush layers growing hugely when resizing transforms with Select tool (#1201)
* Fix brush tool resize

* Fix typo

* Fix image transforms

* Remove input from image network

* Fix merge error

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-05-07 12:17:12 +01:00
0HyperCube d7c5658852 Imaginate fixes (#1200) 2023-05-07 11:23:16 +01:00
Keavon Chambers c79cf41c28 Show outline for image frames on hover and when selected with frame tools 2023-05-07 01:30:16 -07:00
Keavon Chambers 59adf9a032 Remove dead code from document-legacy 2023-05-06 17:03:40 -07:00
Dennis Kobert 36f24b7730 Implement bounds input to constrain the output frame of the brush node
Test Plan:
Hook up a constraint to the brush node in the editor and
verify the result looks correct

Reviewers: 

Pull Request: https://github.com/GraphiteEditor/Graphite/pull/1195
2023-05-03 17:05:04 +02:00
Dennis Kobert 3adcc3031a Implement Infrastructure to reuse previous frames for brush drawing
Implement Infrastructuro to reuse the previous evaluation of the
node graph to blend the new stroke with instead of drawing the
entire trace from scratch.
This does not transition to a blending based approach because that still
caused regressions but allows the brush node to work with input data
natively.

Test Plan:
- Use the brush tool in the editor and check for regressions
- Evaluate the performance

Reviewers: Keavon

Pull Request: https://github.com/GraphiteEditor/Graphite/pull/1190
2023-05-03 13:14:41 +02:00
Keavon Chambers ebf67eaa82 Implement download/copy ImageFrame layer output (#1194)
* Implement download/copy ImageFrame layer output

* Add note about black transparency when copying

* Introspect node graph output type to conditionally disable the download button

---------

Co-authored-by: Dennis Kobert <dennis@kobert.dev>
2023-05-03 02:09:07 -07:00
Chase 1aaf2a521b Add fill and stroke color choices to the Pen tool options bar (#1188)
* Add basic layout - WIP

* Add color input min-width -> 80px

* First pass implementation - WIP

* Allow fill to be None

* Fix null Fill color

* refactor fill and stroke options into struct

* toolbar progress - WIP

* Switch is_working_color bool to PenColorType enum

* Add todo

* Add WorkingColorChanged event

* remove unused import

* Add WorkingColor[Primary/Secondary] icons

* Allow new strokes to have no color

* Set to base color when X is pressed (as per req)

* Improve icons for new UI layout design

* Add radio buttons

* Fix menu bar Edit12px -> Edit

* Add tooltips to radio buttons

* Make the color selector only on custom

* Fix edit icon correctly this time (whoops)

* Fix working colors icons

* Changes to improve the UX

* Remove lines obviated by Default::default()

* Make Eyedropper tool use working_color_changed event

* Fix tests

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-05-03 02:08:35 +08:00
Dennis Kobert 1020eb6835 Implement the Brush without relying on a stamp texture
Test Plan: Test the BrushNode in the editor

Reviewers: Keavon

Reviewed By: Keavon

Pull Request: https://github.com/GraphiteEditor/Graphite/pull/1184
2023-04-29 01:31:14 +02:00
Keavon Chambers dcabd6c0b4 Refactor naming to deprecate "node graph frame" terminology (#1187) 2023-04-28 01:30:47 -07:00
Keavon Chambers 3f17207a32 Replace responses.push() with responses.add() everywhere (#1186) 2023-04-27 17:25:19 -07:00
Dennis Kobert bea7cc8dd0 Add node introspection API
Closes #1110

Test Plan: query the introspectNode Endpoint from js

Reviewers: 

Pull Request: https://github.com/GraphiteEditor/Graphite/pull/1183
2023-04-28 00:20:39 +02:00
Chase 0bac707241 Fix #1174: Spline does not have mirror handles enabled (#1182)
* Set spline mirror handles to enabled by default

* refactor mirror setting into common function

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-04-27 19:21:20 +08:00
Keavon Chambers 1f5bfdc2e5 Minor UI design style revamp 2023-04-27 02:05:45 -07:00
Dennis Kobert a4793fb284 Implement source maps between proto/document nodes
Add the node path to the document node and carry that over to the proto
nodes which are generated from that.
This pr also adds a compiler pass to assign the paths based on the
hierarchical structure of the nodegraph.

Test Plan: - Run units tests which check the path propagation works

Reviewers: Keavon

Reviewed By: Keavon

Pull Request: https://github.com/GraphiteEditor/Graphite/pull/1181
2023-04-27 11:02:04 +02:00
0HyperCube ef93f8442a Migrate text layers to nodes (#1155)
* Initial work towards text to node

* Add the text generate node

* Implement live edit

* Fix merge error

* Cleanup text tool

* Implement text

* Fix transforms

* Fix broken image frame

* Double click to edit text

* Fix rendering text on load

* Moving whilst editing

* Better text properties

* Prevent changing vector when there is a Text node

* Push node api

* Use node fn macro

* Stable ids

* Image module as a seperate file

* Explain check for "Input Frame" node

* Code review

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-04-27 03:07:43 +01:00
Dennis Kobert bdc1ef926a Restructure GPU execution to model GPU pipelines in the node graph (#1088)
* Start implementing GpuExecutor for wgpu

* Implement read_output_buffer function

* Implement extraction node in the compiler

* Generate type annotations during shader compilation

* Start adding node wrapprs for graph execution api

* Wrap more of the api in nodes

* Restructure Pipeline to accept arbitrary shader inputs

* Adapt nodes to new trait definitions

* Start implementing gpu-compiler trait

* Adapt shader generation

* Hardstuck on pointer casts

* Pass nodes as references in gpu code to avoid zsts

* Update gcore to compile on the gpu

* Fix color doc tests

* Impl Node for node refs
2023-04-23 10:18:31 +02:00
Keavon Chambers 161bbc62b4 Add the Selective Color adjustment node 2023-04-19 03:02:50 -07:00
Keavon Chambers 9db5ad43bf Add the Channel Mixer node (#1142)
* Add the Channel Mixer node

* Fix NodeIdentifier not found in Registry

* Add radio toggle for red/green/blue

---------

Co-authored-by: Dennis Kobert <dennis@kobert.dev>
2023-04-17 12:47:24 -07:00
OllieDolan 974a37f127 Path tool points manipulation: nudging, drag axis snapping, and G/R/S (#1068)
* issue820: implemented nudging points

* nudge points triggered only when the mouse is moved after selecting one point

* issue 820 // bullet 1 done

* grab working / rotate not

* rotate works (sensitive)

* G/R/S and Shift/Drag working

* Cargo formatted // implemented Hypercubes comments

* Refactored G/R/S - need to fix fast transform

* Finished refactored G/R/S

* Typed Angle needs further touch up

* Cargo formatted

* Dealt with dangerous unwraps

* Cargo fmt (again) - unwraps fixed

* Cleaned up

* cargo fmt

* Ready for Review

* Ready for Review- cargo fmt

* Code review fixes

* Remove duplicate constant for nudging

* Fix consts.rs spacing

* Apply suggestions from code review

Added suggestions

Co-authored-by: Keavon Chambers <keavon@keavon.com>

* Added typo/grammar suggestions

* Nits

---------

Co-authored-by: Shiro <shiro@damedane.local>
Co-authored-by: hypercube <0hypercube@gmail.com>
Co-authored-by: 0HyperCube <78500760+0HyperCube@users.noreply.github.com>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-04-16 15:56:52 -07:00
Christopher Mendoza 4c9ef0fe6c Change selection to only the duplicated layer (not both layers) when using Ctrl+D (#1118)
* Nudging is now based on local pixel dimensions

* Brush tool live preview (#1116)

* Disable vector preview for brush tool

* Fix brush preview

* Fix warping

* Left and right square brackets to change size

* Add linear interpolation

* Modfiy existing selected brush layer

* Resolve warnings

---------

Co-authored-by: Dennis Kobert <dennis@kobert.dev>
Co-authored-by: Keavon Chambers <keavon@keavon.com>

* Duplicating a layer selects only new layer

* Add Ctrl+J duplicate alias hotkey

---------

Co-authored-by: 0HyperCube <78500760+0HyperCube@users.noreply.github.com>
Co-authored-by: Dennis Kobert <dennis@kobert.dev>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-04-16 14:42:12 -07:00
Keavon Chambers fa23e9d55b Update nodes to work with linear color by default (#1135)
* Update nodes to work with linear color by default

* Make tests work in linear not gamma
2023-04-16 12:20:44 -07:00
Alexandru Ică b626d39035 Add the image segmentation node (#1122)
* Add image segmentation node

This is a node which receives as input:
- An image.
- A mask, which consists of colors that define the image segments.

Each unique color in the mask defines an area where a segmen resides.
The node generates a `Vec<ImageFrame>` where the length of the result
is the number of unique colors in the mask.

Signed-off-by: Ică Alexandru-Gabriel <alexandru@seyhanlee.com>

* Add the Index node for image segments

Since the output of the image segmentation node is a `Vec<ImageFrame>`,
we want a way to access the segments individually. The Index node receives
a `Vec<ImageFrame>` as input and an index, and returns the image found
at that index in the vec.

Signed-off-by: Ică Alexandru-Gabriel <alexandru@seyhanlee.com>

* Integrate the image segmentation and index nodes into the editor

Signed-off-by: Ică Alexandru-Gabriel <alexandru@seyhanlee.com>

* Initialize the input of the index node with an empty image frame

Signed-off-by: Ică Alexandru-Gabriel <alexandru@seyhanlee.com>

* Don't expose the parameter for the index node

Signed-off-by: Ică Alexandru-Gabriel <alexandru@seyhanlee.com>

* Don't crash the editor when the number of segments exceeds the accepted limit

Signed-off-by: Ică Alexandru-Gabriel <alexandru@seyhanlee.com>

* Print a warning in the console when the number of segments exceeds the accepted limit

Signed-off-by: Ică Alexandru-Gabriel <alexandru@seyhanlee.com>

* Add a few more checks so that the editor doesn't crash on invalid input

Signed-off-by: Ică Alexandru-Gabriel <alexandru@seyhanlee.com>

* Replace the tagged value for the index node

Signed-off-by: Ică Alexandru-Gabriel <alexandru@seyhanlee.com>

* Fix merge conflicts

---------

Signed-off-by: Ică Alexandru-Gabriel <alexandru@seyhanlee.com>
Co-authored-by: Dennis Kobert <dennis@kobert.dev>
2023-04-16 14:51:33 +03:00
Dennis Kobert 37b892a516 Color system based on traits, and conversion to linear color in the graph (#1123)
* Migrate Nodes to use RasterMut + Samplable

* Add Pixel trait to include serialization

* Implement traits for Color and propagate new generics

* Always convert to linear color when loading images
2023-04-16 02:57:05 +02:00
Dennis Kobert e21c2fb67b Add SetTransformNode (#1131) 2023-04-15 16:34:17 +02:00
Keavon Chambers 0ba0b2e309 Implement the correct Brightness/Contrast node algorithm (#1130)
Implement correct brightness/contrast algorithm
2023-04-15 05:15:58 -07:00
0HyperCube 0e97f352e9 Serialize images as base64 by rounding channels from floats to u8 (#1120)
Serialise images as base64
2023-04-13 20:03:25 +01:00
Christopher Mendoza 951d9912bf Switch nudging from viewport pixels to local pixels (#1114)
Nudging is now based on local pixel dimensions
2023-04-12 11:44:00 -07:00
0HyperCube ed6140b4a7 Brush tool live preview (#1116)
* Disable vector preview for brush tool

* Fix brush preview

* Fix warping

* Left and right square brackets to change size

* Add linear interpolation

* Modfiy existing selected brush layer

* Resolve warnings

---------

Co-authored-by: Dennis Kobert <dennis@kobert.dev>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-04-12 18:50:42 +01:00
Keavon Chambers c7d14c2a7b Fix Levels and Exposure adjustment nodes (#1112)
* Step Imaginate resolution by 64

* Fix the Exposure node

* Change comments and variable names
2023-04-11 01:52:44 -07:00
Dennis Kobert 589ff9a2d3 Implement the Brush tool (#1099)
* Implement Brush Node

* Add color Input

* Add VectorPointsNode

* Add Erase Node

* Adapt compilation infrastructure to allow non Image Frame inputs

* Remove debug output from TransformNode

* Fix transform calculation

* Fix Blending by making the brush texture use associated alpha

* Code improvements and UX polish

* Rename Opacity to Flow

* Add erase option to brush node + fix freehand tool

* Fix crash

* Revert erase implementation

* Fix flattening id calculation

* Fix some transformation issues

* Fix changing the pivot location

* Fix vector data modify bounds

* Minor fn name cleanup

* Fix some tests

* Fix tests

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
Co-authored-by: hypercube <0hypercube@gmail.com>
2023-04-11 10:35:21 +02:00
0HyperCube 758f757775 Fix the properties when loading a saved document (#1111) 2023-04-11 08:31:03 +01:00
Keavon Chambers ce76dbee6a Rename the Downscale node to Downres 2023-04-09 15:22:22 -07:00
isiko 9c4164291c Add the Mask node (#1080)
* Add MaskImageNode

Co-authored-by: Dennis Kobert <dennis@kobert.dev>
2023-04-09 04:56:03 +02:00
Keavon Chambers ea02a2d53a Fix crash upon setting stroke color to none 2023-04-06 18:11:45 -07:00
Keavon Chambers c16ee88b5d Fix some fatal failures related to rendered frame memory size limits 2023-04-02 18:31:41 -07:00
Keavon Chambers 1b50878f3f Prevent rendering when transforming frame layer
Reduces confusion from rendering lag and lessens the opportunity to build up leaked memory from the present lack of node graph cache eviction
2023-04-06 11:53:12 -07:00
Keavon Chambers a0a5f02e2a Change the edit icon used in Imaginate 2023-04-03 14:16:46 -07:00
Keavon Chambers 0a9427fe6e Polish node graph frames and rename them for clarity (#1104)
* Polish layer panel UI and layer type icons/text

* Assorted UI text and comment cleanup

* Insert Transform node before Imaginate node via tool

* Rename "Node Graph Frame" to Layer type and Frame tool

* Rename "Node Graph Frame" to "Frame" tool

* Update Node Graph Frame -> Frame tool icon

* Fix lint warnings
2023-04-03 01:52:25 -07:00
0HyperCube d710285029 Fix regressions introduced in the vector nodes migration (#1100)
* Fix double click to enter path tool

* Fix error

* Fix transform bug

* Fix squaring scale on images

* Shift node position and refresh graph

* Downscale node seperate

* Fix mirror

* Remove duplicate transform

* Always show node graph

* Correctly set freehand and spline tool positions

* Run cargo format

* Maybe fix the scale

* Downscaled image is always smaller than origional

* Fix one crash

* Don't show node graph on welcome screen

* Reduce default graph panel height

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-03-31 21:15:49 +01:00
isiko d0863165a4 Add Range parameter to the Threshold node (#1079)
* Add Range

* Naming, order, and defaults

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-03-28 09:06:24 +02:00
Linda Zheng 3733804d18 Bezier-rs: Add lookup table function for subpath and make it support euclidean parameterization (#1082)
* Add euclidean option for lut

* Add lut for subpath

* Fix rust formatting

* Fixed breakages caused by UI updates

* Code cleanup

* Make ProjectionOptions optional

---------

Co-authored-by: Rob Nadal <robnadal44@gmail.com>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-03-27 21:05:00 -04:00
Sahra Zhou dbcb854cd2 Fix crash when scaling something with 0 width or height (#1078)
* resolve NaN value when trying to change scale value from zero to other numbers

* resolve NaN value when trying to change scale value from zero to other numbers

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-03-26 15:20:00 -07:00
Keavon Chambers d6ab417bcb Code review previous commit, and improve G/R/S hints 2023-03-26 11:49:25 -07:00
0HyperCube 959e790cdf Migrate vector data and tools to use nodes (#1065)
* Add rendering to vector nodes

* Add line, shape, rectange and freehand tool

* Fix transforms, strokes and fills

* Migrate spline tool

* Remove blank lines

* Fix test

* Fix fill in properties

* Select layers when filling

* Properties panel transform around pivot

* Fix select tool outlines

* Select tool modifies node graph pivot

* Add the pivot assist to the properties

* Improve setting non existant fill UX

* Cleanup hash function

* Path and pen tools

* Bug fixes

* Disable boolean ops

* Fix default handle smoothing on ellipses

* Fix test and warnings

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-03-26 08:03:51 +01:00
Keavon Chambers b9374ff88b Add Imaginate help docs link to UI 2023-03-25 01:04:58 -07:00
Keavon Chambers d4e8a5545d Skip showing auto-save document old version error 2023-03-21 09:18:28 -07:00
Keavon Chambers 089df947ac Remove leftover debug logs 2023-03-21 00:41:39 -07:00
0HyperCube 9c10d18308 Imaginate node fixes (#1084) 2023-03-18 20:34:42 +00:00
Dennis Kobert fe233504ca Downscale Images to document resolution (#1077)
* Add DownscaleNode

* Add lambda (call argument) input type + fix caching

* Add comment explaining Lambda input

* Automatically insert cache node after downscale node

* Implement sparse hashing of images
2023-03-15 12:49:56 +01:00
Alexandru Ică 0a775fe9be Take the transform of the ImageFrame into account when blending (#1072)
* Take the transform of the ImageFrame into account when blending

The implementation computes the axis-aligned bounding box after we transform
the corners of the source image, and then iterates through that box
and computes the inverse of the affine transform of the source image.
The samples are taken based on the u/v coordinates, so that the differences
in size/aspect ratio between the images don't matter.

This makes for a much simpler implementation, and gives us the flexibility
to add different filtering methods in the future, for example.

Signed-off-by: Ică Alexandru-Gabriel <alexandru@seyhanlee.com>

* Name the parameters for the blend node properly

This avoids confusion between which one of the images is the `source`
image and which one is the `destination`.

Signed-off-by: Ică Alexandru-Gabriel <alexandru@seyhanlee.com>

* Remove rendundant computation for u/v coordinates

Signed-off-by: Ică Alexandru-Gabriel <alexandru@seyhanlee.com>

* Rewrite the sampling/clamping logic

* Add image frame transform node

* Move transform node to transform module

* Fix a few issues with our transformation logic

* Fix math + do cleanup

---------

Signed-off-by: Ică Alexandru-Gabriel <alexandru@seyhanlee.com>
Co-authored-by: Dennis Kobert <dennis@kobert.dev>
2023-03-15 12:48:13 +02:00
Keavon Chambers 29af355f20 Fix Eyedropper tool and make Svelte's bind:this more robust 2023-03-11 12:32:01 -08:00
Christopher Mendoza 919779130f Add Deepest and Shallowest selection to the Select tool (#1016)
* Single-clicking shape now selects the parent folder

* Added Ratio Button for Layer/Group. Task 1 Done

* All 3 bullet points been checked.Needs refactoring

* Refactored Code + Added descriptive comments

* Reduced code, removed comments, moved/renamed enum

* Hints now change based on selection behavior

* refactored updating hints based on layer behavior

* Updated hints and shift click for shallow select

* fixed cargo check warnings

* shift deselect works. Checking for edge cases

* Fixed the first 5 bullet points suggestions.

* Fixed double click issue

* Double click on shape switches to path tool

* updated deepest select and its hints

* Reworked logic for single click for shallow select

* Fixed CargoCheck warnings + Hypercube suggestions.

* Fix append -> push

* Break out two functions

* Split out big code blocks into functions

* Edit hint text

* Assorted code quality cleanup

* Combine duplicate impl blocks

* Add todo for future code cleanup

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-03-11 02:29:20 -08:00
0HyperCube c32010071e Move G/R/S to tools folder (#1076)
* Move G/R/S to tools folder

* Fix bad cache

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-03-10 23:06:31 +00:00
Dennis Kobert 1c50f0030c Replace hashing algorithm and disable debug logging for improved performance 2023-03-09 18:26:38 +01:00
Keavon Chambers c8a7e58bd5 Add double click input hint icons 2023-03-05 17:49:47 -08:00
Dennis Kobert b55e233fff Update GPU execution and quantization to new node system (#1070)
* Update GPU and quantization to new node system

Squashed commit of the following:

commit 3b69bdafed79f0bb1279609537a8eeead3f06830
Author: Dennis Kobert <dennis@kobert.dev>
Date:   Sun Mar 5 11:37:17 2023 +0100

    Disable dev tools by default

commit dbbbedd68e48d1162442574ad8877c9922d40e4a
Merge: b1018eb5 a8f6e11e
Author: Dennis Kobert <dennis@kobert.dev>
Date:   Sun Mar 5 10:45:00 2023 +0100

    Merge branch 'vite' into tauri-restructure-lite

commit b1018eb5ee56c2d23f9d5a4f034608ec684bd746
Merge: 3195833e 0512cb24
Author: Dennis Kobert <dennis@kobert.dev>
Date:   Fri Mar 3 17:06:21 2023 +0100

    Merge branch 'master' into tauri-restructure-lite

commit 3195833e4088a4ed7984955c72617b27b7e39bfc
Author: Dennis Kobert <dennis@kobert.dev>
Date:   Fri Mar 3 17:06:02 2023 +0100

    Bump number of samples

commit 3e57e1e3280759cf4f75726635e31d2b8e9387f9
Author: Dennis Kobert <dennis@kobert.dev>
Date:   Fri Mar 3 16:55:52 2023 +0100

    Move part of quantization code to gcore

commit 10c15b0bc6ffb51e2bf2d94cd4eb0e24d761fb6f
Merge: 2b3db45a 8fe8896c
Author: Dennis Kobert <dennis@kobert.dev>
Date:   Fri Mar 3 14:28:56 2023 +0100

    Merge remote-tracking branch 'origin/master' into tauri-restructure-lite

commit 2b3db45aee44a20660f0b1204666bb81e5a7e4b6
Author: Dennis Kobert <dennis@kobert.dev>
Date:   Fri Mar 3 14:17:11 2023 +0100

    Fix types in node registry

commit 9122f35c0ba9a86255709680d744a48d3c7dcac4
Merge: 26eefc43 2cf4ee0f
Author: Dennis Kobert <dennis@kobert.dev>
Date:   Fri Mar 3 01:04:55 2023 +0100

    Merge remote-tracking branch 'origin/master' into tauri-restructure-lite

commit 26eefc437eaad873f8d38fdb1fae0a1e3ec189e4
Author: Dennis Kobert <dennis@kobert.dev>
Date:   Thu Mar 2 23:05:53 2023 +0100

    Add Quantize node to document_node_types

commit 3f7606a91329200b2c025010d4a0cffee840a11c
Author: Dennis Kobert <dennis@kobert.dev>
Date:   Thu Mar 2 17:47:51 2023 +0100

    Add quantization nodes to node registry

commit 22d8e477ef79eef5b57b1dc9805e41bbf81cae43
Author: Dennis Kobert <dennis@kobert.dev>
Date:   Thu Mar 2 17:13:28 2023 +0100

    Introduce scopes (#1053)

    * Implement let binding

    * Add lambda inputs

    * Fix tests

    * Fix proto network formatting

    * Generate a template Scoped network by default

    * Add comment to explain the lambda parameter

    * Move binding wrapping out of the template

    * Fix errors cause by image frames

commit 9e0c29d92a164d4a4063e93480e1e289ef5243fe
Author: Alexandru Ică <alexandru@seyhanlee.com>
Date:   Thu Mar 2 15:55:10 2023 +0200

    Make use of ImageFrame in the node system more extensively (#1055) (#1062)

    Make the node system use ImageFrame more extensively (#1055)

commit 5912ef9a1a807917eeb90c1f4835bd8a5de9c821
Author: Dennis Kobert <dennis@kobert.dev>
Date:   Wed Mar 1 16:15:21 2023 +0100

    Split quantization into multiple nodes

commit 285d7b76c176b3e2679ea24eecb38ef867a79f3b
Author: Dennis Kobert <dennis@kobert.dev>
Date:   Mon Feb 27 12:35:57 2023 +0100

    Fix gpu support

commit e0b6327eebba8caf7545c4fedc6670abc4c3652e
Author: Dennis Kobert <dennis@kobert.dev>
Date:   Thu Feb 16 22:08:53 2023 +0100

    Don't watch frontend files when using tauri

commit 58ae146f6da935cfd37afbd25e1c331b615252da
Author: Dennis Kobert <dennis@kobert.dev>
Date:   Thu Feb 16 21:48:54 2023 +0100

    Migrate vue code base to vite

commit f996390cc312618a60f98ccb9cd515f1bae5006d
Author: Dennis Kobert <dennis@kobert.dev>
Date:   Thu Feb 16 19:34:33 2023 +0100

    Start migrating vue to use vite

commit 29d752f47cfd1c74ee51fac6f3d75557a378471c
Author: Dennis Kobert <dennis@kobert.dev>
Date:   Thu Feb 16 19:00:53 2023 +0100

    Kill cargo watch process automatically

commit 4d1c76b07acadbf609dbab7d57d9a7769b81d4b5
Author: Dennis Kobert <dennis@kobert.dev>
Date:   Thu Feb 16 17:37:27 2023 +0100

    Start playing around with vite infrastructure

commit 8494f5e9227aa433fd5ca75b268a6a96b2706b36
Author: Locria Cyber <74560659+locriacyber@users.noreply.github.com>
Date:   Thu Jan 19 18:40:46 2023 +0000

    Fix import style and eslint rules

commit 92490f7774a7351bb40091bcec78f79c28704768
Author: Locria Cyber <74560659+locriacyber@users.noreply.github.com>
Date:   Thu Jan 19 18:25:09 2023 +0000

    Fix icons

commit dc67821abad87f8ff780b12ae96668af2f7bb355
Author: Locria Cyber <74560659+locriacyber@users.noreply.github.com>
Date:   Thu Jan 19 18:20:48 2023 +0000

    Add license generator with rollup

commit 441e339d31b76dac4f91321d39a39900b5a79bc1
Author: Locria Cyber <74560659+locriacyber@users.noreply.github.com>
Date:   Thu Jan 19 18:14:22 2023 +0000

    Use eslint --fix to fix TS-in-svelte type imports. Now it compiles.

commit 2e847d339e7dcd51ed4c4677ed337c1e20636724
Author: Locria Cyber <74560659+locriacyber@users.noreply.github.com>
Date:   Thu Jan 19 17:31:49 2023 +0000

    Remove webpack and plugins

commit 3adab1b7f40ff17b91163e7ca47a403ef3c02fbc
Author: Dennis Kobert <dennis@kobert.dev>
Date:   Thu Mar 2 16:10:19 2023 +0100

    Fix errors cause by image frames

commit 4e5f838995e213b4696225a473b9c56c0084e7a8
Author: Alexandru Ică <alexandru@seyhanlee.com>
Date:   Thu Mar 2 15:55:10 2023 +0200

    Make use of ImageFrame in the node system more extensively (#1055) (#1062)

    Make the node system use ImageFrame more extensively (#1055)

commit 1d4b0e29c693a53c068f1a30f0e857a9c1a59587
Author: Dennis Kobert <dennis@kobert.dev>
Date:   Wed Mar 1 15:13:51 2023 +0100

    Update node graph guide readme with new syntax (#1061)

commit 6735d8c61f5709e22d2b22abd037bab417e868d6
Author: Rob Nadal <Robnadal44@gmail.com>
Date:   Tue Feb 28 18:59:06 2023 -0500

    Bezier-rs: Add function to smoothly join bezier curves (#1037)

    * Added bezier join

    * Stylistic changes per review

commit cd1d7aa7fbcce39fbbf7762d131ee16ad9cb46dd
Author: Dennis Kobert <dennis@kobert.dev>
Date:   Wed Feb 22 23:42:32 2023 +0100

    Implement let binding

    Add lambda inputs

    Fix tests

    Fix proto network formatting

    Generate a template Scoped network by default

    Add comment to explain the lambda parameter

    Move binding wrapping out of the template

* Update package-lock.json

* Regenerate package-lock.json and fix lint errors

* Readd git keep dir

* Revert change to panic.ts

* Fix clippy warnings

* Apply code review

* Clean up node_registry

* Fix test / spriv -> spirv typos
2023-03-05 13:22:14 +01:00
0HyperCube a2046a51b1 Add basic vector nodes (#1059)
* Add some derives

* Allow node_fn with mutable inputs

* Add basic vector nodes

* Revert elipse tool changes

* Fix the elipse tool again

* Change spacer width

* Bubble serde feature in graph craft

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-03-02 21:54:23 +00:00
0HyperCube 7e37fb41a4 Fix crash when using Imaginate tool (#1064)
Fix crash when using imaginate tool
2023-03-02 21:14:12 +00:00
0HyperCube 66ec85a3c9 Bézier-rs: Add utils to subpath (#1058)
* Add utils to bezier-rs subpath

* Apply code review changes

* Remove tan from constant

* Fix compile

* Fix tests
2023-03-02 16:48:09 +00:00
Dennis Kobert 7254c008f9 Introduce scopes (#1053)
* Implement let binding

* Add lambda inputs

* Fix tests

* Fix proto network formatting

* Generate a template Scoped network by default

* Add comment to explain the lambda parameter

* Move binding wrapping out of the template

* Fix errors cause by image frames
2023-03-02 17:13:28 +01:00
Alexandru Ică 0b813805d2 Make use of ImageFrame in the node system more extensively (#1055) (#1062)
Make the node system use ImageFrame more extensively (#1055)
2023-03-02 15:55:10 +02:00
0HyperCube 4495488546 Refactor vector data type from document-legacy into node graph (#1057)
Add vector data type
2023-02-25 16:55:05 +00:00
multisn8 7a52e50a94 Add 'Zoom with Scroll' input navigation scheme to preferences (#1021)
* Add use_scroll_as_zoom field to preference handler

* Add {Create,Delete}Mapping variants to message

* Revert "Add {Create,Delete}Mapping variants to message"

This reverts commit 0ba74754c9fb0c78d0b590c96e1d4fe2cfdd13e7.

* Revert "Add use_scroll_as_zoom field to preference handler"

This reverts commit d30f7c9edfa6d6e156939ca07f4db81f288975fd.

* Add basic scroll_as_zoom mapping

* Create overengineered mapping patch abstraction

* Add (for now passthrough) input layout manager

* Actually handle ModifyLayout messages (untested)

* Add backend preferences <-> layout manager comms

* Add scroll-as-zoom to actual preferences UI

* Rename LayoutManager -> KeyMapping

* Add Input section to preferences and title case

* Add scrollAsZoom frontend handling code (untested)

* Handle frontend <-> preferences comms

* (broken) Move scrollAsZoom persistence into state

* Fix scrollAsZoom having no effect on node graph

* Remove debugging helpers

* Fix confusion between horizontal and vertical

* Rename feature

* Move new message handler into folder

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-02-24 07:18:04 +01:00
Angel Kozlev c2234ce3fe Select Tool: Deselect selected layer when clicked while holding shift (#1030)
* Change tauri build directory back to `../dist` (#1033)

* Select Tool: Deselect selected layer when clicked while holding shift

* Fix formatting

* Change deselecting to happen on mouse up

* Clean up debug and rustfmt

---------

Co-authored-by: Dennis Kobert <dennis@kobert.dev>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-02-24 00:47:21 +00:00
isiko 8fe19063c1 Add "Blend" node (#1024)
* Add Blend node

* Add more implementations

Currently, known buggy implementations:
* Color Burn
* Saturation

Opacity is currently achieved by linear interpolation, this will be changed as soon as all filters are implemented.

* Add more implementations

Currently, known incorrect implementations:
* Color Burn
* Saturation

Not yet Tested:
* Linear Burn
* Linear Dodge
* Vivid Light
* Linear Light
* Pin Light
* Hard Mix
* Subtract
* Divide

Opacity is currently achieved by linear interpolation, this will be changed as soon as all filters are implemented.

* Cleanup

* Removed Unused Code
* Fixed Clamping Issue
* Fixed Inverted Opacity
* Moved Opacity Calculation from individual  Blend Functions into 'blend_node' function

* Fix 'Color Burn' blend mode

Currently, known incorrect implementations:
* Saturation

Not yet Tested:
* Linear Burn
* Darker Color
* Linear Dodge
* Lighter Color
* Vivid Light
* Linear Light
* Pin Light
* Hard Mix
* Subtract
* Divide

Opacity is currently achieved by linear interpolation, this will be changed as soon as all filters are implemented.

* Fix 'Saturation' blend mode

Currently, known incorrect implementations:
* None :D

Not yet Tested:
* Linear Burn
* Darker Color
* Linear Dodge
* Lighter Color
* Vivid Light
* Linear Light
* Pin Light
* Hard Mix
* Subtract
* Divide

Opacity is currently achieved by linear interpolation, this will be changed as soon as all filters are implemented.

* Final Cleanups

* Add proper Inputs

* cargo fmt

* Add test for doubling number

* Display implementation for ProtoNetwork

* Switch top and bottom

* Add input types for blend image node

* Fix test

---------

Co-authored-by: 0hypercube <0hypercube@gmail.com>
Co-authored-by: Dennis Kobert <dennis@kobert.dev>
2023-02-23 12:55:32 +01:00
Dennis Kobert c09af266d8 Fix default type for Identity node (#1051) 2023-02-22 23:22:31 +01:00
Adam Jahn 069a2351f2 Add lock angle modifier to the Pen tool (#1049)
* adds lock angle to pen tool

 The current [Shift] Break Handle behavior should become Alt instead of Shift
 The current [Ctrl] Snap 15° behavior should become Shift instead of Ctrl
 Implement the extend-in-this-direction feature called [Ctrl] Lock Angle that exists in the Line tool, but doesn't yet exist in the Pen tool

* avoid clone by passing exlusive ref to tool data field directly

* Rearrange hints

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-02-22 02:27:49 -05:00
Shouvik Ghosh 92cb553961 Restore handle length when Shift is released while dragging opposite handle with Path tool (#1009)
* Restore path handle length to previous length when shift is released while dragging

* Reset previous opposing handle length on Delete and Abort messages

* Move the opposing handle length state to the path tool

* Use MoveManipulatorPoint messages instead of modifying MoveSelectedManipulatorPoints + break handle mirroring on dragging both handles without anchor

* Handle alt + improve reset logic + comments

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-02-22 05:21:46 +05:30
Keavon Chambers 107e55e91d Improve the Vibrance node (#1050)
* Fix vibrance

* Improve results

* Clean up implementation

* Fix warnings from unrelated commit

* Improve negative vibrance
2023-02-21 15:42:13 -08:00
Adam Jahn 4797aed05b Add 'View > Zoom to Selected' action (#1047)
* implements pan/zoom to the selected layer(s) on Period

Relates to #989

* adds layer menu support: Layer -> Center View on Selection

* relocate Center View on Selection to View -> Zoom to selected

* use the proper menu title
2023-02-20 20:00:07 -05:00
0HyperCube 6caed9e761 Fix default value for the Output node (#1042)
* Fix default value for output node

* Don't set frame transform to zero

* Fix typo in hash function

* Clear frame on empty image

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-02-20 07:32:49 +00:00
Christopher Mendoza b7f2163998 Selecting an individual anchor point deselects each of the other points (#963)
* Selecting an individual anchor point deselects each of the other points

* git gra

* Selecting intersecting shapes,selects top shape

* Merge commit

* cargo fmt

* fixed: can't drag multiple selected shapes.

* Merge commit

* Merge commit

* Code review tweaks

* Merge commit

* Fixed topmost layer and previous_mouse_position

* Fixed issues when clicking on anchors

* Works

* Function name change

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
Co-authored-by: Dennis Kobert <dennis@kobert.dev>
2023-02-19 23:26:02 -08:00
Dennis Kobert 3015a9c8af Chain cache node and Clone to make them usable from the ui (#1032)
Chain cache node and Clone to make it a drop in replacement
2023-02-16 15:03:13 +01:00
isiko 7071aabba8 Add Levels adjustment node (#1028)
* Add Levels Node

* Fix naming and algorithm

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-02-16 01:11:31 +01:00
Dennis Kobert 5dab7de68d Add type checking to the node graph (#1025)
* Implement type inference

Add type hints to node trait

Add type annotation infrastructure

Refactor type ascription infrastructure

Run cargo fix

Insert infer types stub

Remove types from node identifier

* Implement covariance

* Disable rejection of generic inputs + parameters

* Fix lints

* Extend type checking to cover Network inputs

* Implement generic specialization

* Relax covariance rules

* Fix type annotations for TypErasedComposeNode

* Fix type checking errors

* Keep connection information during node resolution
* Fix TypeDescriptor PartialEq implementation

* Apply review suggestions

* Add documentation to type inference

* Add Imaginate node to document node types

* Fix whitespace in macros

* Add types to imaginate node

* Fix type declaration for imaginate node + add console logging

* Use fully qualified type names as fallback during comparison

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-02-15 23:31:30 +01:00
Rob Nadal a64c856ec4 Bezier-rs: Updated Bezier function signatures to accept TValue (#967)
* Create helper for converting d to t values

* Add euclidean option for tangent and normal

* Modified bezier functions signatures to accept ComputeType

* Stylistic changes per review

* Added ComputeType documentation

* Renamed ComputeType to TValue

* Fixed comments

* Fixed failing unit tests

* Code review

* Fix comments in code review

* Renamed compute_type_to_parametric to t_value_to_parametric

---------

Co-authored-by: Linda Zheng <thelindazheng@gmail.com>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-02-13 12:31:51 -05:00
Keavon Chambers 91f5f74d58 Update release series to Alpha Milestone 2 2023-02-11 12:00:00 -08:00
0HyperCube 1b0e1b9bdf Update Imaginate to output bitmap data to the graph via Image Frame node (#1001)
* Multiple node outputs

* Add new nodes

* gcore use std by default to allow for testing

* Allow multiple node outputs

* Multiple outputs to frontend

* Add ImageFrameNode to node registry

* Minor cleanup

* Basic transform implementation

* Add some logging to image encoding

* Fix ImageFrameNode

* Add transform input to Imaginate node (#1014)

* Add transform input to imaginate node

* Force the resolution to be edited with no transform

* Add transform to imaginate generation

* Fix compilation

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>

* Add labels to node outputs

* Fix seed; disable mask when transform is disconnected; add Imaginate tooltips

* Rename 'Input Multiple' node to 'Input'

* Code review

* Replicate to Svelte

* Show only the primary input chain in the Properties panel

---------

Co-authored-by: Dennis Kobert <dennis@kobert.dev>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-02-11 08:56:31 +00:00
isiko a709a772d5 Add color weights to Grayscale node and improve luminance handling (#1015)
* Add weighted grayscale node

* Rename nodes, fix grayscale weighting, add luma calc options

* Fix tests

* Add Tint Option

* Improve (but not full fix) tint

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-02-10 21:55:01 +01:00
Keavon Chambers 875f2a5cd1 Improve Threshold node, move Gamma into Exposure node 2023-02-08 17:48:08 -08:00
Dennis Kobert 8e3480e952 Image adjustment nodes restructure (#1013)
* Add macro for creation of Map image nodes

* Move nodes to adjustments module

* Add Saturation and Lightness to hue shift node

* Fix raster node macro

* Add Threshold Node

* Convert all adjustment nodes to new format

* Start implementing vibrance node

* Remove package-lock.json

* Code review

---------

Co-authored-by: isiko404 <isihd.ko@gmail.com>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-02-09 01:17:09 +01:00
Keavon Chambers 202b0ee6ed Remove Color struct from document-legacy (#1012) 2023-02-07 17:31:50 -08:00
Dennis Kobert 620540d7cd Incremental compilation and stable node IDs (#977)
* Generate stable node ids

* checkpoint

* Implement borrow tree

* Add eval function on borrow tree

* Refactor Node trait to fix lifetime issues

* Compiler infinite loop

* Impl compose pair

* Transition to double lifetime on trait

* Change node trait to use a generic arg for the input

* Start adapting node_macro

* Migrate more nodes to new macro

* Fix raster tests

* Port vector nodes

* Make Node trait object safe

* Fix FlatMapResultNode

* Translate most of gstd

* Fix DowncastBothNode

* Refactor node trait once again to allow for HRTB for type erased nodes

* Start working on type erased nodes

* Try getting DowncastBothNode to work

* Introduce Upcasting node + work on BorrowTree

* Make enough 'static to get the code to compile

* Transition DynamicExecutor to use borrow tree

* Make Compose Node use HRTB's

* Fix MapResultNode

* Disable blur test

* Add workaround for Composing type erased nodes

* Convert more nodes in the node_registry

* Convert more of the node_registry

* Add update tree fn and hook up to frontend

* Fix blur node

* Implement CacheNode

* Make frontend use graph compiler

* Fix document_node_types type declaration for most nodes

* Remove unused imports

* Move comment down

* Reuse nodes via borrow tree

* Deprecate trait based value in favor of TaggedValue

* Remove unsafe code in buffer creation

* Fix blur node

* Fix stable node id generation

* Fix types for Image adjustment document nodes

* Fix Imaginate Node

* Remove unused imports

* Remove log

* Fix off by one error

* Remove macro generated imaginate node entry

* Create parameterized add node

* Fix test case

* Remove link from layer_panel.rs

* Fix formatting
2023-02-07 20:06:24 +01:00
Sahra Zhou 77e69f4e5b Add scaling by nudging with the Alt key (#990)
* update current progress working on issue#930

* Issue#930: features other than local scaling implemented

* runs cargo fmt

* issue930: implemented features(local scaling disregraded) update: merged master branch and solved coflicts

* combined scaling and nudge feature

* combined scaling and nudge feature

* resolved issues when trying to scale below 1. pixel and other comments

* reduce code complexity

* reduce complexity

* Improve code readability/idiomaticness

* Add hints

---------

Co-authored-by: Shiro <shiro@damedane.local>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-02-07 01:14:50 -08:00
Shouvik Ghosh 316df70571 Edit selected text layer by hitting Enter (#1000)
* Allow text editing when pressing Enter on a single selected text layer

* Updated LayerDataType import

* Extract the logic to set the edit layer into a function

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-01-31 22:49:50 +05:30
Keavon Chambers beab0f01c6 Refactor font_cache into render_data; delete image layer type 2023-01-29 20:31:14 -08:00
Keavon Chambers 7ab601c0c6 Clean up arg order in process_message() so data is last 2023-01-29 04:07:41 -08:00
Keavon Chambers d990110f63 Apply lints and cleanup to Rust code 2023-01-29 03:01:57 -08:00
Brendan Allan 5388b59e97 Groundwork for integrating Specta (#949)
* add derive(specta::Type)

* use specta from git

* introduce Uuid type

* remove unnecessary specta::Type

* document export_types test

* upgrade Specta
The previous Specta branch had some hacks that were just for this project. They have all been converted into proper features so they can be merged into main.

* remove some unnecessary specta::Type uses

* add MessageDiscriminantDef explanation

* manually export types with specta

* rename 'specta.rs' to 'export_types.rs'

* rename 'export_types' to 'generate_ts_types'

---------

Co-authored-by: Oscar Beaumont <oscar@otbeaumont.me>
2023-01-28 22:29:38 -08:00
kadir e0146d57f7 Update UI when deleting last point of shape with Path tool (#979)
* Added new DocumentResponse variant

* Update Operation::DeleteSelectedManipulatorPoints to update Layer Tree by delegating deletion to Operation::DeleteLayer. Also emits Operation::DeletedSelectedManipulatorPoints to let editor clear Properties panel

* Update process_message() to deal with new DocumentResponse::DeletedSelectedManipulatorPoints match case. When this DocumentResponse is emitted, it clears the Properties panel.

* Added Display trait implementation for DocumentResponse::DeletedSelectedManipulatorPoints. Updated imports in document_message_handler.rs to get the correct types for messages emitted from DocumentResponse::DeletedSelectedManipulatorPoints match case in process_message().

* Removed useless import. Capitalized comments for style consistency.

* Updated messages emitted to clear Properties panel by emitting LayoutMessage::SendLayout's instead, which update the backend widget state

* Revert inclusion of unused imports

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-01-28 18:32:31 -05:00
kadir 6676f16ea8 Auto switch to Select tool after importing an image (#994)
Forced user tool to be Select Tool after importing image.

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-01-28 05:35:02 -05:00
0HyperCube 0a03aec343 Reduce tool code duplication and boilerplate (#993)
* Reduce tool code duplication

* Add doc comments

* Fix Mac key variant, which can't be auto-converted without false positives

* Rename "key" to "keys"

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-01-28 08:38:52 +00:00
Dennis Kobert 0531df18d5 Implement blur as a document node (#987)
* Implement blur as a document node

* Reuse node node registry

* Add comment explaining the use of once cell

* Fix rebase error
2023-01-27 21:47:47 +01:00
0HyperCube 898b0bb582 Cull snapping of points outside viewport (#961)
Do not snap to points outside viewport

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-01-27 20:28:12 +00:00
0HyperCube 64e62699fc Replace the image layer type with an Image node (#948)
* Use builder pattern for widgets

* Arguments to new function

* Add node graph when dragging in image

* Fix duplicate import

* Skip processing under node graph frame if unused

* Reduce node graph rerenders

* DUPLICATE ALL frontend changes into other frontend

* DUPLICATE more changes to another frontend

* Code review

* Allow importing SVG files as bitmaps

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-01-27 10:01:09 +00:00
Keavon Chambers 66e8325362 Update project readme and MSRV 2023-01-24 01:33:30 -08:00
0HyperCube 5cbe3f7573 Artboard history (#976)
* Convert DocumentSave to struct

* Comit the artboard history save in some cases

* Cause index out of bounds error

* Use box to avoid weird wasm error

* Implement the artboard history

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-01-22 19:51:08 +00:00
Keavon Chambers fb10e5194e Svelte: Fix calling DOM API functions on the actual elements 2023-01-13 17:17:38 -08:00
Oliver Davies 0019340096 Remove additional boolean for mirroring distance (#965)
Removed the additional boolean for mirroring distance
2023-01-13 15:00:20 -08:00
Keavon Chambers bf1a3e3daf Clean up imports and warnings in Rust code 2023-01-13 12:45:14 -08:00
Dennis Kobert b030a1860b Add self hosted runner to ci.yml (#955)
* Add self hosted runner to ci.yml

* Remove libgtk install

* Use mold as the linker

* Make build logs non verbose

* Fix crash on failure to get GLOBAL_PLATFORM

* Copy the platform enum before calling unwrap_or_default

Co-authored-by: 0hypercube <0hypercube@gmail.com>
2023-01-13 21:32:50 +01:00
0HyperCube cd58dcd3dd Pen tool redraw overlays on selection change (#960)
Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-01-12 21:55:08 +00:00
kadir 720cbaf754 Fix hints not closing when all documents are closed (#954)
* Fixes issue of hints not closing when all documents are closed

* Fix whitespace and rewrite comment

* Close tool hints when you close all documents by doing File->Close All
2023-01-10 04:20:06 -05:00
0HyperCube 741e61a59d Hide handle overlays too close to the parent anchor (#951)
Hide handle overlay

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-01-09 03:32:26 +00:00
0HyperCube de407f8b23 Use builder pattern for widgets (#941)
* Use builder pattern for widgets

* Arguments to new function
2023-01-08 14:34:24 +00:00
0HyperCube 2bcc3d3baf Improve history states (#932)
* Add some more history states

* Fix undo whilst drawing

* Paste image history

* Toggle output and preview history

* Code review nits

* Remove extra '{'

* Fix typo

* Fix about.toml

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-01-01 22:02:44 +00:00
0HyperCube 6e142627a3 Fix a derivative causing NaNs in boolean ops (#934)
* Fix a derivative causing NaNs

* Better error messages around boolean ops

* Tweak error dialog wording

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-01-01 08:54:10 +00:00
Dennis Kobert a9601ab164 Implement the Gaussian Blur node (#933) 2022-12-31 21:12:02 +01:00
Dennis Kobert 74bfd630a9 Quantization node (#887)
Add basic quantization node
2022-12-31 18:30:35 +01:00
Dennis Kobert 79ad3e7908 Restructure GPU compilation execution pipeline (#903)
* Restructure gpu compilation execution pipeline

* Add compilation server/client infrastructure

* Add wgpu executor
2022-12-31 02:52:04 +01:00
0HyperCube 0d703e857b Gradient tool improvements (#927)
* Reuse existing gradient

* Double click to insert gradient stop

* Add history states to the gradient tool

* Do trig in viewport space so it is actually perpendicular

* Sync tool options with active gradient

* Deleting points with delete key

* More tolerance on inserting points
2022-12-29 20:00:58 +00:00
0HyperCube 69293964c4 Fix setting the position and rotation in the Properties panel (#928)
Fix setting the position and rotation in the properties panel
2022-12-29 11:29:06 +00:00
0HyperCube 750ef06cba Add a 'Preserve Aspect Ratio' checkbox to Properties panel (#923)
* Add the link button

* Transform around pivot

* Remove log

* Fix tests

* Add a hacky two-line layout for the checkbox

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-12-28 23:21:03 +00:00
0HyperCube 87e550de17 Only open the node graph panel after drawing a new frame to avoid layout shift interruption (#924)
* Store drag start as document position

* Don't open graph whilst drawing

* Rename to is_drawing_node_graph_frame

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-12-28 21:07:10 +00:00
0HyperCube dbd6a032f7 Add a button to refresh the input (#926)
* Add a button to refresh the input

* Align left of refresh button

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-12-28 21:02:03 +00:00
0HyperCube af7779769a Fix stuck outline overlay (#925)
Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-12-28 20:21:13 +00:00
0HyperCube 3bce11edb5 Allow the user to force clear any stuck overlays (#922)
Force clear overlays

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-12-28 20:19:50 +00:00
0HyperCube b408bef14b Make copying/duplicating nodes not preserve the incoming connection (#917)
* Remove wires to nodes outside of copy

* Fix logic error

* Shift pasted nodes

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-12-28 20:00:53 +00:00
0HyperCube c552edd525 Node 'Disable' and 'Preview' UX improvements (#918)
* Don't allow disabling input or output nodes

* Shortcuts to show and preview node

* Update preview tooltip and label

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-12-28 19:38:35 +00:00
0HyperCube 509aab72c1 Clear properties panel and layer tree on close (#920)
* Clear properties panel and layer tree on close

* Fix on close all documents

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-12-28 14:44:11 +00:00
0HyperCube 002b0fc1dd Round document alignment in viewport to avoid AA induced by a shift after zooming in and panning (#921) 2022-12-28 12:06:06 +00:00
Keavon Chambers 0c9f457866 Rename some Imaginate parameters 2022-12-27 14:30:54 -08:00
0HyperCube 559c05f2a9 Save the layouts, even when in the welcome screen (#916) 2022-12-27 21:24:18 +00:00
0HyperCube d742b05d3a Diff simple layout changes to avoid excessive DOM replacements (#910)
* Add UI diffs to rust

* Clean up some js

* Fix lints

* Fix test

* Remove one unnecessary keyword

* Rename to widget path

* Rename new_val to new_value

* Rename newVal to layoutGroup in createLayoutGroup

* Extract get_widget_path to a function

* Base skipping on the layout rather than the target

* Rename to ResendActiveWidget

* Switch info to trace

* Add a link to the documentation about Object.assign

* knitpick js changes

* Add more comments to diff functions

Co-authored-by: mfish33 <maxmfishernj@gmail.com>
2022-12-25 18:56:35 +00:00
0HyperCube 8d7e6c530e Add preview and disable buttons for nodes (#905)
* Add preview and disable button

* Fix tests

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-12-25 10:28:18 +00:00
Keavon Chambers 41b07ad0cf Minor logging code cleanup 2022-12-24 14:21:30 -08:00
Keavon Chambers 54f438642b Fix some paper cuts 2022-12-22 23:53:36 -08:00
0HyperCube af001f8db6 Pasting and duplicating nodes (#902)
* Pasting and duplicating nodes

* Rebind duplication

* Update selection on duplicate
2022-12-22 21:47:48 +00:00
0HyperCube 8f4f7b3cf1 Add drag to connect nodes (#901)
* Add drag to connect nodes

* Clean up node graph code

* Close node list with escape or click

* Check if line is contained within box

* Shift the nodes

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-12-22 21:14:21 +00:00
Keavon Chambers 49b9b8cfec Rename the legacy Graphene crate to document-legacy (#899)
* Rename /graphene to /document-legacy

* Update names in code
2022-12-22 02:12:05 -08:00
0HyperCube 5b3c015f71 Better downcast panics (#898) 2022-12-22 09:27:55 +00:00
0HyperCube 951c49a979 Node code cleanup for vector data, and add node creation guide (#895)
* Cleanup Vector Nodes

* Add the creating nodes guide

* Rename guide as readme so GitHub shows it by default

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-12-21 19:50:40 +00:00
0HyperCube 49b1770c34 Drag out links to disconnect nodes (#894)
* Disconnecting Links

* Fix bug if nodeid is 0
2022-12-21 19:19:24 +00:00
0HyperCube 81f365c999 Show all nodes with no selection (#893)
* Show all nodes with no selection

* Slight text tweaks

* Rename to artwork

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-12-21 11:12:33 +00:00
0HyperCube 3a4a0eaf68 Fix Imaginate flicker during generation (#891)
Fix imaginate flicker

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-12-21 10:09:01 +00:00
0HyperCube 520c9dfec0 Automatic graph popup on Node Graph Frame layer (#890)
Automatic Node Graph Frame Popup
2022-12-21 10:04:58 +00:00
0HyperCube 2732492307 Make Imaginate into a node (#878)
* Simplify document node input defenitions

* Remove imaginate layer

* Imaginate node properties

* Fix serde feature gate

* Add Proc Macro for Protonode implementation

* Fix incorrect type

* Add cargo.toml metadata

* Send imaginate params to frontend

* Fix image_creativity range

* Finish imaginate implementation

* Fix the imaginate draw tool

* Remove node-graph/rpco-macro

* Cargo fmt

* Fix missing workspace member

* Changes to the resolution

* Add checkbox for Imaginate auto resolution; improve Properties panel layouts

And fix bugs in panel resizing

* Implement the Rescale button

* Reorder imports

* Update Rust deps

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-12-20 22:51:38 +00:00
0HyperCube 9d40539dc7 Nested networks UI (#885)
* Initial UI for nested nodes

* Clean up deleting nodes

* Print address of nested network

* Add exiting network message

* Implement the breadcrumb trail

* Remove whitespace

* Fix double click not registering in Chromium

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-12-17 15:38:29 +00:00
Keavon Chambers 52117d642c Add breadcrumb trail widget (#884) 2022-12-12 09:16:40 -08:00
TrueDoctor 7d8f94462a Bundle Graphite using Tauri (#873)
* Setup tauri component for graphite editor

Integrate graphite into tauri app

Split interpreted-executor out of graph-craft

* Add gpu execution node

* General Cleanup
2022-12-07 12:49:34 +01:00
0HyperCube 9a4af4f87a Fix inability to expose the Add node's parameter (#877)
* Fix add node

* Simplify document node input defenitions
2022-12-10 23:54:14 +00:00
Keavon Chambers 33d5db76c0 Improve naming of nodes and 'add' menu styling 2022-12-03 23:29:55 -08:00
0HyperCube eb9848365f Add some additional image effect nodes (#869)
* Move the Subpath type to graphene-std

* Add the transform subpath node

* Delete selected nodes

* Inserting node list on right click

* Add several bitmap manipulator nodes

* Convert add node to use f64

* Add posterize node

* Rename names randomly

* Fix naming

* Exposure node

* Fix typo

* Adjust exposure node range

* Comment out vector nodes

* Adjust exposure range again

* Posterise as ints

* Rename input

* Use >= in the to hsl function
2022-12-03 22:29:45 +00:00
0HyperCube 59b638e4e4 Fix Crashing on Smoothing Vertex (#868)
Fix occasional crashing on smoothing a vertex in a path by double clicking.
2022-11-27 18:57:15 +00:00
0HyperCube 89a431e084 Fix Smoothing on Close Path (#867) 2022-11-24 22:22:13 +00:00
0HyperCube 3dd9e88655 Add support for exposing node parameter inputs (#866)
* Add exposing inputs to graph

* Use uuids and better node positioning

* Fix accidentally refering to the wrong grid spacing

* Secondary input without primary input

* Cleanup document node types

* Rename to input and addend
2022-11-22 19:57:08 +00:00
0HyperCube 0a78ebda25 Add secondary inputs to nodes UI (#863)
* Add secondary inputs to UI

* Fix add node

* Dragging nodes

* Add ParameterExposeButton component

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-11-22 17:36:19 +00:00
Keavon Chambers d46658e189 Fix Imaginate generation with base image but no mask 2022-11-21 11:21:43 -08:00
0HyperCube 9d80defa14 Add inpainting and outpainting to Imaginate (#864)
* Do not select layer immediatly on drag

* Add LayerReferenceInput MVP widget

* Properties Panel

* Fix dragging marker flicker

* Change mask shape to outline

* Add mask rendering

* Simplify select code

* Remove colours

* Fix inpaint/outpaint and rearrage widget UX

* Add mask blur and mask starting fill parameters

* Guard for the case when the layer is missing

* Add icon to LayerReferenceInput to finalize its UI

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-11-21 07:00:38 +00:00
0HyperCube ccdfdd3015 Add double clicking a node frame to open the graph panel (#862)
Double Click to Open Node UI
2022-11-19 21:27:44 +00:00
Hannah Li 01a9724389 Bezier-rs: Add Euclidean parameterization to Bezier::evaluate (#828)
* Add enum to evaluate for differenciating compute type

* Add euclidean parameterization and update styling in the UI

Co-authored-by: Rob Nadal <robnadal44@gmail.com>

* Update usage of evaluate in graphite

* Add description

* Code review changes

* Update tests

* Improve ComputeType ergonomics

* Large code review/cleanup pass

Co-authored-by: Rob Nadal <robnadal44@gmail.com>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-11-18 20:37:52 -08:00
0HyperCube 2994afa6b8 Node graph improvements (#855)
* Selecting multiple nodes

* Improve logs

* Log bad types in dyn any

* Add (broken) node links

* New topological sort

* Fix reorder ids function

* Input and output node

* Add nodes that operate on images

* Fixups

* Show node parameters together with layer properties

* New nodes don't crash editor

* Fix tests

* Node positions backend

* Generate node graph on value change

* Add expose input message

* Fix tests

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-11-17 23:36:23 +00:00
Keavon Chambers cece6de2a9 Bump MSRV to 1.65.0 for let-else syntax
Closes #857
2022-11-16 18:04:04 -08:00
Keavon Chambers 9c87658ae4 Change Imaginate image creativity to a percentage 2022-11-12 14:36:12 -08:00
0HyperCube 504136b61b Add a basic API and rudimentary frontend for node graph layers (#846)
* Node graph API stub

* Rename and fix SetInputValue

* Get list of links from network

* Test populating node graph UI

* Node properties

* Fix viewport bounds

* Slightly change promise usage

* A tiny bit of cleanup I did while reading code

* Cleanup and work towards hooking up node links in Vue template

* Add the brighten colour node

* Run cargo fmt

* Add to and from hsla

* GrayscaleImage node with small perf improvement

* Fix gutter panel resizing

* Display node links from backend

* Add support for connecting node links

* Use existing message

* Fix formatting error

* Add a (currently crashing) brighten node

* Replace brighten node with proto node implementation

* Add support for connecting node links

* Update watch dirs

* Add hue shift node

* Add create_node function to editor api

* Basic insert node UI

* Fix broken names

* Add log

* Fix positioning

* Set connector index to 0

* Add properties for Heu shift / brighten

* Allow deselecting nodes

* Redesign Properties panel collapsible sections

Co-authored-by: Keavon Chambers <keavon@keavon.com>
Co-authored-by: Dennis Kobert <dennis@kobert.dev>
2022-11-12 21:23:28 +00:00
0HyperCube 9d27781c37 Reduce history system's excessive memory usage from storing copies of images each step (#845)
* Limit saved undo history

* Do not commit path every mouse move event

* Reference count images in history system instead of cloning the image data

* Increase history storage step limit to 100

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-11-11 19:44:43 +00:00
0HyperCube a756a2dd3b Fix disappearing path when it is closed with the Pen tool by drawing from its start point (#844) 2022-11-09 21:57:06 +00:00
Keavon Chambers 06791cc197 Fix opacity slider range bug 2022-11-08 16:25:55 -08:00
Keavon Chambers 916dc8277a Add new sampling methods to Imaginate 2022-11-07 00:37:17 -08:00
Keavon Chambers 3f98d1c896 Add rotation custom cursor icon for the transform cage 2022-11-05 23:02:21 -07:00
Keavon Chambers 782f528279 Add the range slider design to the NumberInput widget (#839)
* Add range slider to NumberInput

* Cleanup

* Fix event ordering causing bug in Firefox

* Polish the code

* Switch number input modes to range in relevant places
2022-11-05 22:57:19 -07:00
0HyperCube 18507b78ac Integrate the node graph as a Node Graph Frame layer type (#812)
* Add node graph frame tool

* Add a brighten

* Use the node graph

* Fix topological_sort

* Update UI

* Add icons for the tool and layer type

* Avoid serde & use bitmaps to improve performance

* Allow serialising a node graph

* Fix missing ..Default::default()

* Fix incorrect comments

* Cache node graph output image

* Suppress no-cycle import warning

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-11-05 21:38:14 +00:00
0HyperCube 1462d2b662 Add control over gradient stops (#834)
* Add gradient stops

* Better step adding

* Steps can be dragged past each other

* Swapping and switching gradient/fill

* Fix convert to gradient

* Skip non finite transforms for overlays

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-11-05 13:30:48 +00:00
Keavon Chambers a1e061fa14 Add suffix widget non-rounding; add disabled state to many widgets 2022-11-04 15:03:22 -07:00
Keavon Chambers ff75e0eae9 Revamp UI styling to remove accent color; improve tab navigation 2022-11-04 05:56:33 -07:00
Keavon Chambers 5be59f7fce Update the Imaginate image generation API (#836)
* Update the Imaginate feature server API

* Change connection status strategy to prevent console errors

* Possible CORS fix? Maybe revert.

* Update to the final API and fix bugs
2022-11-02 17:20:29 -07:00
Keavon Chambers 9d56e86203 Refactor persistent data storage code and add button to wipe data on crash (#827)
* Organize persistence.ts

* Switch to simpler promise handling

* Switch document list storage from localStorage to IndexedDB

* Track document auto-save status to avoid re-auto-saving unnecessarily

* Add button to clear storage on crash

* Bump document version and test file

* Switch to IDB-Keyval instead of raw IDB transactions
2022-11-02 15:19:04 -07:00
Keavon Chambers 85c635f92d Revamp the ColorPicker popover and ColorInput widget (#830)
* Add cancel hint to Eyedropper tool

* Improve eyedropper overlay CSS

* Make CSS for transparent checkered background reusable

* Add color choice preview to color picker

* Draw text and markers as contrasting white or black

* Add reactive color updating and new/initial swapping

* Add Hex, RGB, HSV, and Opacity inputs

* Add none color and preset buttons

* Add eyedropper button and fix alignment (now visually done)

* Wire up none colors through the backend and style the ColorInput widget

* Add color info chip to ColorInput widget

* Fix all UX bugs

* Add more tooltips

* Fix FloatingMenu recursive loop

* Prevent mouse stray from closing color picker while dragging pickers

Closes #703

* Fix deselect all layers shortcut

* Add temporary eyedropper for Chromium browsers and a coming soon fallback
2022-10-28 18:36:04 -07:00
0HyperCube fa7116133b Better checks for invalid transforms in the transform cage (#831)
* Better checks for invalid transform

* Fix resize cursor

* Do not allow resizing with no width/height

* Fix pivots for 0 width/height layers
2022-10-27 00:14:32 +01:00
0HyperCube cee1add3a4 Break handle of path being drawn by placing anchor on previous anchor with Pen tool (#814)
* Break path by placing anchor on previous one

* Fix offset on click without dragging

* Fix bug where ids reassigned from saved document

* Fix stuck overlay

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-10-24 23:11:04 +01:00
0HyperCube 0553cc5100 Double click to toggle sharpness of an anchor's handles with the Path tool (#815)
* Double click to flip sharpness of anchor's handles

* Fix bad length

* Convert mirror distance to toggle

* Revert "Convert mirror distance to toggle"

This reverts commit 76b565002265feb29c899840c4b4696b80a220b2.

* Fix mirror_distance_between_handles being inverted
2022-10-24 21:55:31 +01:00
Keavon Chambers 7f9c59dd99 Refactor color picker floating menu (#809)
* Move FloatingMenu template component

* Rewrite the ColorPicker component so it's not horrifically bad code

* Move FloatingMenu into the ColorPicker component

* Little Imaginate fixes

* Add todo
2022-10-23 17:29:04 -07:00
0HyperCube 1219e26d17 Fix image export bounds calculation for selected layers (#807)
* Fix Export Bounds

* Fix the scale of the transform
2022-10-22 22:48:38 +01:00
0HyperCube 05169935ad Allow Imaginate layers to work with rotation and skew (#806)
* Fix AI layer rotation

* Transform things by matricies

* Clean up size calculation

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-10-22 20:01:38 +01:00
Kit PANG b10d7a93b6 Disallow zero-area artboards (#794)
* Fix zero-area artboard

* Add artboard only when user starts dragging

* Rename variables for clarity

* Revert regression caused by commit a11c9ef6ef9c4daa35140148cec9ff85b3a3d8c8

* Fix zero-area artboard properly
2022-10-23 00:14:37 +08:00
Keavon Chambers 58a53a995d Remake Eyedropper tool to sample pixel colors from viewport canvas (#801)
* Remake Eyedropper tool to sample pixel colors from viewport canvas

* Bug fixes

* Reorder export buttons

* Remove the larger primary/secondary ring

* Add aborting with Escape
2022-10-21 01:50:02 -07:00
Keavon Chambers fe1a03fac7 Integrate Stable Diffusion with the Imaginate layer (#784)
* Add AI Artist layer

* WIP add a button to download the rendered folder under an AI Artist layer

* Successfully download the correct image

* Break out image downloading JS into helper function

* Change file download from using data URLs to blob URLs

* WIP rasterize to blob

* Remove dimensions from AI Artist layer

* Successfully draw rasterized image on layer after calculation

* Working txt2img generation based on user prompt

* Add img2img and the main parameters

* Fix ability to rasterize multi-depth documents with blob URL images by switching them to base64

* Fix test

* Rasterize with artboard background color

* Allow aspect ratio stretch of AI Artist images

* Add automatic resolution choosing

* Add a terminate button, and make the lifecycle more robust

* Add negative prompt

* Add range bounds for parameter inputs

* Add seed

* Add tiling and restore faces

* Add server status check, server hostname customization, and resizing layer to fit AI Artist resolution

* Fix background color of infinite canvas rasterization

* Escape prompt text sent in the JSON

* Revoke blob URLs when cleared/replaced to reduce memory leak

* Fix welcome screen logo color

* Add PreferencesMessageHandler

* Add persistent storage of preferences

* Fix crash introduced in previous commit when moving mouse on page load

* Add tooltips to the AI Artist layer properties

* Integrate AI Artist tool into the raster section of the tool shelf

* Add a refresh button to the connection status

* Fix crash when generating and switching to a different document tab

* Add persistent image storage to AI Artist layers and fix duplication bugs

* Add a generate with random seed button

* Simplify and standardize message names

* Majorly improve robustness of networking code

* Fix race condition causing default server hostname to show disconnected when app loads with AI Artist layer selected (probably, not confirmed fixed)

* Clean up messages and function calls by changing arguments into structs

* Update API to more recent server commit

* Add support for picking the sampling method

* Add machinery for filtering selected layers with type

* Replace placeholder button icons

* Improve the random icon by tilting the dice

* Use selected_layers() instead of repeating that code

* Fix borrow error

* Change message flow in progress towards fixing #797

* Allow loading image on non-active document (fixes #797)

* Reduce code duplication with rasterization

* Add AI Artist tool and layer icons, and remove ugly node layer icon style

* Rename "AI Artist" codename to "Imaginate" feature name

Co-authored-by: otdavies <oliver@psyfer.io>
Co-authored-by: 0hypercube <0hypercube@gmail.com>
2022-10-18 22:33:27 -07:00
Brian Wo 02da804f38 Fix view mode affecting result of image export (#790) 2022-10-11 04:03:28 +08:00
Keavon Chambers 35877a3fd9 Break apart and improve the JS for rasterizing SVGs and downloading files (#786)
It now uses a blob URL instead of a data URL in the download process, which is cleaner and better performance.
2022-10-08 11:34:31 -07:00
0HyperCube 914b940122 Fix image importing due to incorrect variable name (#781) 2022-09-23 18:53:03 +01:00
Boutillier 54b63c3eb5 Fix crashes related to 0-scale shapes (#777)
* Fix crashes when dragging the bounding box/transform cage of a 0-scale shape.

* Fix crashes when dragging the pivot point of a 0-scale shape

* Fix rotation computation on DAffine2 when scale.x is 0, avoids Nan display

* remove remaining log::info that I introduced in earlier commit

* Fix crash when updating the scale of a transform that was already 0.

* Fix NumberInput behaviour when the requested value changed is does not happen.

* Fix rotation computation when Scale X and Scale Y are both 0. Display 0. This also fixes crashes when modifying the rotation in such case
2022-09-12 10:46:11 +02:00
0HyperCube 788552e10c #[macro_use] the log crate (#775) 2022-09-08 21:14:01 +01:00
Keavon Chambers 655831eedf Improve wording on the website home page; add a volunteer icon 2022-09-04 14:31:08 -07:00
0HyperCube 1e109dc552 Add a pivot widget to selected layer(s) to control the origin(s) (#772)
* Add pivot

* Add dragging pivot

* Cleanup

* Remove tabs

* Fix multiplication order

* Restyle pivot

* Add move cursor icon

* Update pivot size

* Code review tweaks

* Fix alt with non-centred pivot

* Comment for add one

* Pivot sets layer panel origin

* Tweek alt centre thing

* Fix division by zero case

* Add pivot dots to properties

* FIx some typos

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-08-30 22:36:33 +01:00
Keavon Chambers 0f6f3be6e7 Add the Pivot Assist widget
Part of #525
2022-08-29 00:07:38 -07:00
0HyperCube 41c137ed1b Fix transformation cage centered-scaling to use the center as its pivot (#769)
* Add centre of transformation

* Add alt support

* New breaking file format version

* Spelling

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-08-29 01:30:45 +01:00
0HyperCube 5afaee1e4b Add Alt-dragging to duplicate layers (#762)
* Add alt drag to duplicate

* Allow duplicating whilst dragging

* Remove unused variable

* Clearer names for functions

* Better renaming of functions

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-08-28 21:33:21 +01:00
0HyperCube c28d618291 Fix fast drag with path tool eating handles (#763)
* Fix fast drag with path tool eating handles

* Remove extra space

* Import ordering

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-08-28 02:19:20 +01:00
0HyperCube 9f21a8ae6b Stop dragging after deselecting point with Shift key (#764)
Stop dragging after deselecting point with shift

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-08-28 01:38:45 +01:00
0HyperCube 01c180d478 Prevent using G/R/S without any layers selected (#761)
Stop users from using g/r/s without selected layers

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-08-27 23:21:26 +01:00
Keavon Chambers 3a84de32ac Clean up MenuList types and fix many Vue and Clippy warnings
Also remove hard-coded-in-Vue Graphite logo in the menu bar in favor of a Rust definition.
2022-08-25 14:41:16 -07:00
Keavon Chambers 1a90a4db86 Clean up camelCase and snake_case in frontend code 2022-08-23 13:36:27 -07:00
0HyperCube b46bcc16ba Add point insertion to the Path tool (#754)
* Messaging cleanup

* Add bezier iter

* Add splitting

* Use bezier_rs bounding box

* Cleanup

* Fix comments

* Fix typo

* Code review tweaks

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-08-21 22:43:24 +01:00
0HyperCube 1bcf55939d Add path closing and segment extension to the Pen tool (#753)
* Close paths with pen tool

* Issue Z command always at end of path

* Small code review style changes

* Extending paths

* Fix mirror on extend path

* Code review tweaks

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-08-21 00:36:17 +01:00
Daniel Childs 09dace0147 Nudge selected artboard with arrow keys (#701) (#756) 2022-08-20 21:13:22 +01:00
0HyperCube 8effd6ecca Fix images and text again (#752)
* Images and text now work again

* Fix crash on load images
2022-08-18 13:40:34 +01:00
0HyperCube 4025815515 Fix a new non-infinite document getting a NaN zoom (#750) 2022-08-15 19:11:06 +01:00
Keavon Chambers 863c17b86f Simplify platform-specific keyboard layouts with Accel key and global platform variable (#748)
* Simplify platform-specific keyboard layouts with Accel key and global platform variable


Co-authored-by: Dennis <dennis@kobert.dev>
2022-08-13 04:28:02 -07:00
Keavon Chambers 41bead9028 Rename MovementMessage to NavigationMessage 2022-08-11 17:20:10 -07:00
Keavon Chambers 9559ec58e8 Switch Vec<Key> to KeysGroup newtype 2022-08-11 16:35:04 -07:00
Keavon Chambers cf6bbcfd30 Revamp key/code input processing which fixes Option key on Mac and other locales
Closes #742
Closes #746
2022-08-11 02:53:46 -07:00
Keavon Chambers 765b648704 Extend welcome screen button click area to labels
Closes #738
2022-08-08 01:29:23 -07:00
Keavon Chambers 45a1e144a8 Populate menu bar
Closes #531
2022-08-06 03:17:25 -07:00
Thomas Cheng b84e647f40 Implement arcs for Bezier math library (#731)
* added arcs impl

Co-authored-by: Hannah Li <hannahli2010@gmail.com>
Co-authored-by: Rob Nadal <RobNadal@users.noreply.github.com>

* fixed arc drawing,  todo - fix linear check

Co-authored-by: Hannah Li <hannahli2010@gmail.com>

* fixed linear bug + added comments and tests

Co-authored-by: Hannah Li <hannahli2010@gmail.com>

* added max iteration guard + made params optional  + added impl todo

* Add functionality to get arcs between extrema

* Add ArcsOptions to manage optional parameters of the arcs function

* added slider to toggle between arcs impl

Co-authored-by: Rob Nadal <RobNadal@users.noreply.github.com>

* Remove unused types

* address some comments

* added rustdoc for CircularArc struct

* Extract duplicate code into helper, remove loop labels, use window function

* Make JsValue handling consistent in WasmBezier and add comments for the underlying type

* Add enum for MaximizeArcs Auto/On/Off functionality

* Change Auto to Automatic

* fix errors from resolving merge conflict

* fixed error from resolving merge conflicts

* fixed formatting

* address comments

* Small fix

* Add some missing comments

* address comments

* rename variable

* Use unit to show maximize_arcs values

* Change i32 to usize and other minor adjustments

* Change computation for middle t values

* Remove tsconfig

* Fix more usize number handling

Co-authored-by: Hannah Li <hannahli2010@gmail.com>
Co-authored-by: Rob Nadal <RobNadal@users.noreply.github.com>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-08-06 01:34:39 -04:00
Keavon Chambers 9e34199ca9 Additional cleanup of prelude imports in editor codebase
Closes #744
2022-08-05 17:09:37 -07:00
Keavon Chambers e4306c30e2 Restructure the entire editor codebase to consistently match the message hierarchy
Closes #744
2022-08-05 05:38:11 -07:00
Keavon Chambers f39d6bf00c Add full support for Mac-specific keyboard layouts (#736)
* IPP for Mac, flawed initial experiments

* Cleanup and progress, but not compiling yet

* Fix error and rename nonmac -> standard

* Extentd ipp macros to accomodate mac input

* Add Mac versions of shortcuts; refactor and document the input mapper macros

* Change frontend styling for user input labels in floating menus

* Additional macro documentation

* A little more documentation

* Improve entry macro syntax

* Move input mapper macros to a separate file

* Adapt the keyboard shortcuts to the user's OS

* Display keyboard shortcuts in the menu bar based on OS

* Change Input Mapper macro syntax from {} to ()

* Fix esc key bug in Vue

* Tweaks

* Interim solution for Mac-specific hints

* Feed tooltip input hotkeys from their actions

* Fix hotkeys for tools because of missing actions

* Make Vue respect Ctrl/Cmd differences per platform

* Remove commented lines

* Code review pass by me

* Code review suggestions with TrueDoctor

* Turn FutureKeyMapping struct into ActionKeys enum which is a bit cleaner

* Add serde derive attributes for message discriminants

* Re-add serde deserialize

* Fix not mutating ActionKeys conversion; remove custom serializer

* Add serde to dev dependencies

Co-authored-by: Dennis <dennis@kobert.dev>
2022-08-03 14:12:28 -07:00
Keavon Chambers a07c1a37a8 Implement File > Import and fix Ctrl+O to Open hotkey
Closes #671
2022-07-23 15:17:12 -07:00
Keavon Chambers 4c6f2c80bd Hide canvas zoom widget automatically when zero 2022-07-22 23:09:45 -07:00
0HyperCube db82cf69a4 Tree-based message logging and toggleable trace printing (#728)
* Log message tree

* Log when message execution deferred

* Tree structure in traces

* Fix ordering when queue partially consumed

* Change some log settings and wording

* Revert default max log level to debug

* Change messages to On/Names/Contents as log::info, change trace to toggle, rename GlobalMessage to DebugMessage

* DebugPrintDocument cleanup

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-07-23 01:33:21 +01:00
mfish33 a0c22d20b6 Welcome screen, refactor to allow zero documents, and add TS typing to widgets (#702)
* unfinished implementation

* Add frontend for the empty panel screen

* Add an icon for Folder based on NodeFolder

* fixed messages causing peicees of ui not to render on new document

* Standardize nextTick syntax

* WIP generisization of component subscriptions (not compiling yet)

* Fix crash when loading font and there is no active document

* Only advertise tool actions with a document

* Fix failure to create new document

* Initalise the properties panel

* Fix highlight tab, canvas jump, warns and layer tree

* Fix tests

* Possibly fix some things?

* Move WorkingColors layout definition to backend

* Standardize action macro formatting

* Provide typing for widgets in TS/Vue and associated cleanup

* Fix viewport positioning initialization

* Fix menu bar init at startup not document creation

* Fix no viewport bounds bug

* Change !=0 to >0

* Simplify the init system

Closes #656

Co-authored-by: Keavon Chambers <keavon@keavon.com>
Co-authored-by: 0hypercube <0hypercube@gmail.com>
2022-07-22 16:09:13 -06:00
dchiasson b4b667ded6 Improve behavior of occluded layer selection and dragging (#732)
Improve behavior of occluded layer dragging

Layers or groups of layers can only be dragged if they are
not occluded at the point of dragging. Otherwise the layer(s)
are deselected and the occluding layer is selected instead.

Closes #705

Co-authored-by: David Chiasson <david@sagemotion.com>
2022-07-20 04:26:10 +08:00
0HyperCube f77c1f2ef4 Fix desynced UI (#727) 2022-07-15 18:41:14 +01:00
Oliver Davies 03633bf313 Rename vector components to match new terminology (#719)
* Renamed VectorAnchor, VectorShape and VectorControlPoint. Also fixed other naming inconsistencies.

* Renamed messages relating to vector and updated naming in several tools

* Renamed comments + caught a few areas I had missed.

* Caught a few more incorrect names

* Code review pass

* Review changes

* Fixed warning

* Additional review feedback

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-07-12 17:59:06 -07:00
Rahul 5d1d93917d Fix property panel selection when layer is added or deleted through undo/redo action (#716)
* Fixed layer property panel visibility for a deleted layer through an undo action

* Fix visible layer in property panel using broadcast signal for undo and redo actions

* Changed redo variable name to "next_selected_paths"

* Code review nit picks

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-07-09 17:43:05 -05:00
0HyperCube 13305af8c4 Fix path overlays and pen tool click (#720)
* Fix path overlays

* Fix pen tool click
2022-07-09 21:20:37 +01:00
0HyperCube 8f00a4071d Fix select tool deselect all (#714)
* Fix select tool deselect all

* remove extra log

* add back buffer to branch

* Remove the buffer vec

Co-authored-by: mfish33 <maxmfishernj@gmail.com>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-07-06 17:26:16 +01:00
Oliver Davies 58675eb64d Refactor internal shape and reduce reliance on Kurbo (#617)
* Dissolve Points from path

* Add handling for removing the first anchor

* Add function to turn handles into bez_paths

* Created overlay manager, wip

* WIP Refactor of VectorShape / Overlays / ShapeEditor

* WIP stripping vector shape, anchor, point.

* WIP Removed kurbo deps from vector shape, anchor, point

* WIP Further work to make vector shapes / anchors / points more standalone.

* WIP more pruning

* WIP Progress on overlay_renderer

* WIP more overlay_renderer work

* WIP more pruning, cleared warnings

* WIP decided ShapeRenderer wasn't an accurate name, ShapeAdapter now. Error squashing continues.

* WIP squashed more errors, now need to decide if anchors should have unique IDs

* WIP Errors squashed, now to actually make it work.

* WIP Moved vector structs to graphene, beginning to remove bezpath from shape_layer

* Refactoring: disentangle kurbo from apply_affine

* Refactor internal shape and remove reliance on Kurbo (PR #617) - Disentangle Kurbo (#619)

* Refactoring: disentangle kurbo from apply_affine

* Broke boolean operations, refactor in state which compiles

* "fixed" boolean operation refactor related errors

* fixed apply_affine, which would not have applied any type of affine

* Small Cleanup, readability

* Fix issue with overlay styles no longer showing selection state.

* Resolved error with point option

* WIP, figuring out how to have one source of truth for VectorShape. Trying to avoid cloning.

* WIP work on single source of truth vectorshapes

* More steps toward single source of truth VectorShape

* Continued wip on making VectorShapes mutably accessible without cloning

* Wip using paths to reference vectorshapes instead, need to restructure ShapeEditor

* Decided to allow temporary copies of vectorshapes.

* Removed HashSet for selected shape indices

* Added @TrueDoctor's id_storage.rs with some heavy modification. Added it to VectorShape. Isn't yet used for folders.

* Integrated UniqueElements<T> with VectorShape to store VectorAnchors

* Improved storage_id.rs perf and cleaned up it's interface

* Iterator Implementations and fixes (#637)

* Refactoring: disentangle kurbo from apply_affine

* Broke boolean operations, refactor in state which compiles

* "fixed" boolean operation refactor related errors

* fixed apply_affine, which would not have applied any type of affine

* implemented transforms for VectorAnchors
implemented Not for VectorControlPointType

* started adding Vector Shape implementations of shape prototypes

* added several useful implemtations to UniqueElements

* added another implemnation for UniqueElements to make working with iterators easier, fixed vector-shape errors

* package-lock.json

* clean up rebase, added back Layer paths

* added deref implementation for VectorShape

* unnecesary variable

* simplify code by removing levels of indirection

* fixed errors

* merge cleanup

* removed package-lock.json

* Removed .selected from VectorShape, it isn't needed as layers are selected not shapes specifically.

* Removed transform and layer_path from VectorShape

* Auto-saving tentitively working. Work toward Overlay transform issues.

* Overlays properly hiding and caching. Not clearing cache yet and some tool switching issues remain, but progress.

* Putting layers in folders changes their unique ID. This is problematic. Assumed this was not the case.

* Removed need for closed bool, changed VectorShape to a tuple struct.

* WIP Switched to layer paths as opposed to VectorShapes. Next up add messages for changing VectorShapes.

* Added initial messages to edit VectorShape points.

* DeleteSelectedPoints messages implemented, selection isn't working currently though.

* Selection messages arriving in document, but transform is wrong.

* Selection, Deselection working, delete working for first point.

* Working towards moving points again

* Removed extra vec from UniqueElements, attempting to squash ordering bug. Still appears to occur though.

* Delete more stable, clean up, renamed to HandleIn, HandleOut

* Further vec_unique cleanup

* Further cleanup

* Removed Deref / DerefMut from VectorShape

* Document version++, will likely revert before merge into master

* Seleting / deleting handles tentitively working again.

* Version number bump, fixed tests.

* Fixed comment in VecUnique

* Improved VecUnique descriptor comment

* Renamed VecUnique to IdBackedVec to further clarify usage.

* Resolved formatting.

* WIP Fixing dragging points

* Fixed an instance where an OverlayMessage could be sent to the main document incorrectly.

* Deleting all of a shapes points now gracefully deletes the layer instead of crashing.

* Fixed handle configurations that would panic on deletion

* Single anchor dragging restored with multi-dragging next plus handles

* sides.into()

* Handle and Multi-point dragging working

* WIP Handle symmetry working again

* Handle mirroring functional again.

* Cleaned up warnings

* Fixed overlay outline not matching shape

* Git branch fix of compatibility with new master

* Fixed closed shape bug, replaced kurbo ellipse

* Removed unused func, updated comments

* Deleting points can undo, multiple shape selection deletes now working

* Removed AddOverlay* operations

* Partial fix for select drift, added helpers

* Don't snap against dragging points

* Properly cleanup path outline with multiple shapes

* Clear all points in other selected shapes

* Actually don't snap against dragging points

* Fix path tool & add snap angle and break handle

* Fix handle being set to NaN causing render issues

* Fix cached overlays not showing line -> curve

* Add operations for modifying paths

* Remove kurbo from pen tool

* Do not snap against handles when anchor selected

* Fix overlays not being cleaned up on path tool

* Fix handle position after dragging

* Use `Anchor` for text & no kurbo in operations

* Replace kurbo to_svg function

* Ngon no longer center scales by default, still some weird behaviour when holding alt

* Cleanup overlays

* Fix render and bounding box doctests

* Fix fun to_svg error

* Fix compile error

* Some code review

* Remove legacy `SelectPoint` on doubleclick

* Remove font from test document

* Fix the pen tool selection changed

* Reorder imports

Co-authored-by: Dennis <dennis@kobert.dev>
Co-authored-by: Caleb Dennis <caleb.dennis429@gmail.com>
Co-authored-by: caleb <56044292+caleb-ad@users.noreply.github.com>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
Co-authored-by: 0hypercube <0hypercube@gmail.com>
Co-authored-by: 0HyperCube <78500760+0HyperCube@users.noreply.github.com>
2022-07-05 15:02:18 -07:00
mfish33 a6c91204d6 Event broadcasting system (#692)
* broadcast system implemented but not everywhere

* unused types

* code review with keavon

* - optional signal mappings
- tool.rs simplification

* Cleanup

* reduced code duplication in `tool.rs`

* ran cargo fmt

* code review changes

* fix merge error

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-07-03 08:06:27 -06:00
0HyperCube b2eae904d8 Improve message ordering to use a stack (#707)
* Improve message ordering

* Resovle bug with widgets

* Less code duplication for UpdateOpenDocumentsList

* Fix layer panel
2022-07-01 19:11:15 +01:00
0HyperCube 020f700c92 Image and text bug fixes (#685)
* Image and text bugfixes

* Mark only the required layer types as dirty

* Fix doctest

* Disable selection if empty

* Cleanup naming

* Simplify cache deleting on export

* Minor css style change

* Nit

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-06-30 02:18:01 +01:00
mfish33 7f15cac5e2 Fix crash on document switch (#690)
fix crash on unwrap
2022-06-26 22:25:28 -06:00
Alexi 91219cbe64 Fix layer deletion bugs when tools are in use (#684)
* Added test case of layer delete bug

* Fixed crash in `PenTool`

Updated the document `MessageHandler` to cancel all active tools if the
layer is deleted.  This prevents the tools from crashing due to the
layer being pulled from under them.

* Moved Abort into pre-graphene DeleteLayer message

* Renamed test case for clarity

* Moved tool crash tests to the `tools` module

* Added `test-case` to the dev dependencies

* Added crash test case for all tools

* Ran cargo fmt

Co-authored-by: otdavies <oliver@psyfer.io>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-06-24 09:35:07 -05:00
Keavon Chambers fe4a76a395 Implement the Edit > Paste menu entry (#683)
Closes #682
2022-06-19 00:53:33 -07:00
mfish33 5d6d2b22bc Menu bar definition in backend (#681)
* initial menu layout working

* removed api.rs functions

* no action shortcut for no-op

* code review

* nitpicks
2022-06-18 18:46:23 -06:00
Keavon Chambers 9bd27ec3f8 Change MenuList checkbox to be an icon from a widget 2022-06-17 17:55:04 -07:00
0HyperCube 3a30cdbb70 Add font menu previews and virtual scrolling (#650)
* Keyboard menu navigation

* Fix dropdown keyboard navigation

* Fix merge error

* Some code review

* Interactive dropdowns

* Query by data attr not class name

* Add locking behaviour

* Add font prieviews

* Remove blank line in css

* Use default for interactive in struct

* Use menulist for fontinput

* Polish

* Rename state -> manager

* Code review

* Cleanup fontinput

* More cleanup

* Make fonts.ts an empty state

* Fix regression

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-06-10 23:21:10 +01:00
mfish33 a26a0ddfcf Implement viewport culling (#667)
* culling is working

* fixed tests

* Ready for review

* cleanup

* code review

* Fix import

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-06-10 14:38:42 -07:00
0HyperCube 6f6c67a508 Fix hover outline when panning (#673) 2022-06-10 21:33:36 +01:00
0HyperCube 0887e56533 Fix nudge and textbox creation (#672)
* Fix nudge and textbox creation

* Code review

* Cleanup veriable names
2022-06-10 17:25:37 +01:00
Nupsi a02b7a4635 Preserve layer stacking order on copy and paste (#668)
Fix Issue#610

Fix Issue#610  by reversing the direction of the copy buffer entry vector. This will preserve the layer ordering and match the behaviour of PasteIntoFolder.
2022-06-08 08:03:48 +03:00
mfish33 e623f7cc41 Fix crash on closing all documents (#666)
* editor does not crash on close all documents

* unused import

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-06-07 10:13:40 -07:00
mfish33 359687f478 Fix crash when deselecting layer while editing properties (#665)
- Remove field acsess after destruction
2022-06-06 18:59:39 -07:00
0HyperCube 8923b68e30 Refactor font loading from per-document to the portfolio (#659)
* Cleanup default font loading

* Refactor fonts

* Fix menulist mouse navigation

* Format

* Formatting

* Move default font into consts.rs

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-05-27 00:27:33 +01:00
Rahul d4539bc304 Fix viewport tilt/zoom while snapping to show snapped values (#663) 2022-05-26 13:24:46 -05:00
0HyperCube 81c3420470 Keyboard menu/widget navigation (#628)
* Keyboard menu navigation

* Fix dropdown keyboard navigation

* Fix merge error

* Some code review

* Interactive dropdowns

* Query by data attr not class name

* Add locking behaviour

* Change query selector style

* Change query selector style (again)

* Code review feedback

* Fix highlighted entry regression

* Styling and disabling checkbox tabindex in MenuLists

* Don't redirect space off canvas to backend

* Do not emit update if value same

* Escape closes all floating menus

* Close dropdowns on blur

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-05-25 22:10:18 +01:00
Keavon Chambers 8b94c62697 Refactor source of Git commit build info (closes #661) 2022-05-24 14:33:58 -07:00
Hannah Li 860c4ad6aa Add basic support for radial gradients (#639)
* Add SVG string generator for radial gradients

* Add the UI for the linear vs radial radio inputs

* Initial radial gradient support for gradient tool

* Enabled click and drag support for radial gradients

* Refactor code for gradient in properties panel

* Added gradient type to gradient struct

* Finish refactor to use gradient_type instead of fill

* Fix lint issue

* Combine LinearGradient and RadialGradient in Fill enum

* Add label to properties panel and fix bug

Co-authored-by: Robert Nadal <Robnadal44@gmail.com>
Co-authored-by: Oliver Davies <oliver@psyfer.io>
2022-05-23 20:00:53 -04:00
Keavon Chambers fc2d983bd7 Vue initialization and FloatingMenu codebase refactoring and cleanup (#649)
* Clean up Vue initialization-related code

* Rename folder: dispatcher -> interop

* Rename folder: state -> providers

* Comments and clarification

* Rename JS dispatcher to subscription router

* Assorted cleanup and renaming

* Rename: js-messages.ts -> messages.ts

* Comments

* Remove unused Vue component injects

* Clean up coming soon and add warning about freezing the app

* Further cleanup

* Dangerous changes

* Simplify App.vue code

* Move more disparate init code from components into managers

* Rename folder: providers -> state-providers

* Other

* Move Document panel options bar separator to backend

* Add destructors to managers to fix HMR

* Comments and code style

* Rename variable: font -> font_file_url

* Fix async font loading; refactor janky floating menu openness and min-width measurement; fix Vetur errors

* Fix misaligned canvas in viewport until panning on page (re)load

* Add Vue bidirectional props documentation

* More folder renaming for better terminology; add some documentation
2022-05-21 19:46:15 -07:00
Thomas Cheng 4c3c925c2c Fix polygon overflow (#644)
* changed polygon side to u32 + set max polygon side to 1000

* revert unnecessary change

* Include unwrap for vertices input
2022-05-20 16:40:01 -04:00
Keavon Chambers 29e00e488b Move layouts definitions to backend and fix Firefox overlay scrollbars (#647)
* Fix two-axis scrollbars in scrollable regions on Firefox

* Move Document Mode dropdown to the backend; and related code cleanup

* Port the Layer Tree options bar layout to the backend

* Port the tool shelf to the backend

* Clean up initialization and wasm wrapper

* Fix crash

* Fix missing document bar

* Remove unused functions in api.rs

* Code review

* Tool initalisation

* Remove some frontend functions

* Initalise -> Init so en-US/GB doesn't have to matter :)

* Remove blend_mode and opacity from LayerPanelEntry

Co-authored-by: 0hypercube <0hypercube@gmail.com>
2022-05-17 13:12:52 -07:00
0HyperCube eb43f0b0a5 Restore the zoom to fit behaviour in new bounded documents (#641)
* Restore the zoom to fit behaviour

* cargo fmt

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-05-12 19:31:35 +01:00
Keavon Chambers 19b2d3f859 Build the node graph frontend with placeholder graph info (#581)
* Build the node graph frontend

* Graph pan and zoom

* Graph's dot grid now pans/zooms also

* Interactive horisontal to vertical curves

* Data types and zooming on wires

* Icon definitions code beautification

* Add a visibility toggle

Co-authored-by: 0hypercube <0hypercube@gmail.com>
2022-05-10 22:34:25 -07:00
caleb 0f36329811 Shape boolean operation improvements (#547)
* changed path_intersection structure

* comment

* Removed do_if!

* Create project website with near-complete home page

* Added support for undoing
    - i gotta say the undo system is quite nice

* Website responsive resizing improvements

* Add newsletter signup to website

* Pen tool fixes (#563)

Resolves 3 known bugs with the pen tool.

* Fixed crash pointed out by @caleb-ad

* Fixed issue with final path segment losing handle data

* Replace curves with lines when under a drag threshold, improves usability.

* Readability improvements, improved comments

* Color Input (#565)

* initial working prototype

* clean up component

* Fix alignment

* Code review tweaks

Co-authored-by: Keavon Chambers <keavon@keavon.com>

* Made the non-inclusive end of a pathseg less inclusive
Fixed Bug: When doing a closepath it is possible that the current and beginning edge are both None
Fixed Numerous other things

* changed how closepath works
modified how overlapping_curve_intersections is working

* Add "New Folder"/"Delete Selected" buttons to layer panel

Closes #532

* Update npm dependencies

* Set text color based on its fill when it's being edited

* Reorder tool icons, update favicon and logo, and other icon cleanup

* Bug Fix: Line-Line intersect origin wasn't being preserved

* Bug Fix: proper assignment of t_values in overlapping_curve_intersections

* Honestly, i don't even know what I was thinking when i wrote the logic for splitting a subcurve at endpoints, but it was wrong.

* Feature: overlapping rectangles behave properly, (except when intersections aren't found correctly)

* Remake node type icons (closes #483); color picker cleanup

* Change tool shelf icon colors to use classes not style

* Add Image node icon and rename node from Path to Shape

* Bug Fix: proper intersection construction in partial overlap case

* cleaned up log statements

* Add website revisions and many new pages

* Add features page and fixes to website

* Fix clippy lints and update packages (#568)

* Fix type error in Brave browser (#569)

* Small website text improvements

* Various website fixes

* Adjusted constants
Rearranged intersection algorithm

* Changed BooleanOperation::SubtractBack to use SubtractFront
Added composite_boolean_operation for operations with more than one shape

* Add node graph mockup to website

* Differentiate between scale and dimensions (#570)

* Differentiate between scale and dimensions

* Fix layout and naming of properties

* Add embedable images (#564)

* Add embedable bitmaps

* Initial work on blob urls

* Finish implementing data url

* Fix some bugs

* Rename bitmap to image

* Fix loading image on document load

* Add transform properties for image

* Remove some logging

* Add image dimensions

* Implement system copy and paste

* Fix pasting images

* Fix test

* Address code review

Co-authored-by: Keavon Chambers <keavon@keavon.com>

* Bump minimist from 1.2.5 to 1.2.6 in /frontend (#571)

Bumps [minimist](https://github.com/substack/minimist) from 1.2.5 to 1.2.6.
- [Release notes](https://github.com/substack/minimist/releases)
- [Commits](https://github.com/substack/minimist/compare/1.2.5...1.2.6)

---
updated-dependencies:
- dependency-name: minimist
  dependency-type: indirect
...

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Fix panic dialogue when handling a message (#573)

* Fix panic dialogue when handling a message

* Fix indents for github reporting

* More whitespace improvements

* Save: line_intersection

* Add documentation to many parts of the Rust codebase (#552)

* add lots of doccomments

* add conversion traits from layerdatatypes to layers

* add suggested doc improvements

* Code review changes

Co-authored-by: Keavon Chambers <keavon@keavon.com>

* Add additional stroke properties (#582)

* Add aditional stroke properties

* Add comment explaining clones for closure

* Improve labels

* Fix doc test

Co-authored-by: Keavon Chambers <keavon@keavon.com>

* Bug Fix: .y not .x

* Expand upon the "Announcing Graphite alpha" blog post

* All shapes now have a Fill in the properties panel; color inputs are now optional (#583)

* Add aditional stroke properties

* Make the colour input optional

* Fix fmt

* Apply code review changes

* Code review nitpicks

* Fix recursion

Co-authored-by: Keavon Chambers <keavon@keavon.com>

* New blog post: "Distributed computing with the Graphene runtime"

* Fix gradient transformation (#588)

* Fix with perfect circle

* Actually fix rotated gradient

* Gradient transform & fix on rotated canvas

* Cleanup & remove logging

* Add properties panel entries for artboards (#572)

* Artboards can have properties

* fix crash when renaming artboards

* moved target document to utility types

* moved import and added test for file version information

* fixed missing import

* fix error from merging

* - typed properties message handler data
- removed name from WidgetRow

* clippy warnings

* artboards have seperate properties section

* - color input can be forced to have selection
- crop tool shows on switch
- select tool shows on switch

* variable renamed

* change to use PropType<boolean> instead of PropType<Boolean>

* Add an artboard icon

* Add the "Delete Artboard" hint

* fix unselect glitch

* even better

* Remove the Transform properties group

Co-authored-by: Keavon Chambers <keavon@keavon.com>

* Bug Fix: boolean union on multiple shapes

* Font selection for text layers (#585)

* Add font dropdown

* Add fonts

* Font tool options

* Fix tests

* Replace http with https

* Add variant selection

* Do not embed default font

* Use proxied font list API

* Change default font to Merriweather

* Remove outdated comment

* Specify font once & load font into foreignobject

* Fix tests

* Rename variant to font_style

* Change TextAreaInput to use FieldInput (WIP, breaks functionality)

* Fix textarea functionality

* Fix types

* Add weight name mapping

* Change labeling of "Italic"

* Remove commented HTML node

* Rename font "name" to "font_family" and "file" "font_file"

* Fix errors

* Fix fmt

Co-authored-by: Keavon Chambers <keavon@keavon.com>

* Improvements to the layer transform cage UX (#589)

* Allow input system to handle mousedown while dragging

* Fix abort

* Add apsect ratio

* Make comment more explicit

* Fix abort when dragging

* Constrain when dragging edge

* Rename Crop tool to Artboard tool

* Stop pointerdown event from properties panel (#600)

* Change stroke weight from ints to floats (#601)

Also rename stroke "width" to "weight" in some places. Closes #587

* Change stroke weight from ints to floats

* "miter_limit" -> "line_join_miter_limit"

* Bump file format version

* cargo update
Prevent iterating beyond list bounds

* Bug fix: proper composite intersection behavior

* fix warnings

* Improved ray casting and common intersection cases

Finding intersections near path segment endpoints was previously unreliable
because of imprecision, and the necessity of avoiding double counting any
intersections. And, because of snapping, intersections on the endpoints
of path segments are a common case.
This also improved the ray casting use case, which previously used a "fudge factor"
to mitigate the common problem of casting a ray into line endpoints.

* fixed warnings

* Fix properties deselect (#606)

* Fix properties panel deselect

* Fix arrow cursors on select tool

* Fix drag from UI to document causing mouse down

* Fix tests

* Cleanup

* cleanup messages

* Draw the outlines of shapes on hover and selection (#609)

* Add hover outline overlay

* Increase selection tolerance

* Increase weight

* Only check if top intersection is selected

* Outline selected paths

* Reduce outline weight

* Increase path tool outline thickness to match hover

* Update to use unreachable! instead of panic!

* Upgrade vue-cli to version 5 (#594)

* Upgrade to Vue CLI 5 (fails to compile)

* Upgrade versions with last few weeks of changes

* Updated to fork-ts-checker-webpack-plugin 7.2.3

* Remove package.json overrides in lieu of the fixed fork-ts-checker-webpack-plugin@6.5.1

* Fix svg importing

* Comments

* For debugging only: added infrastructureLogging to vue.config.js

* Now works on Windows, waiting on fork-ts-checker-webpack-plugin backport if possible

* Switch to the fixed fork-ts-checker-webpack-plugin@6.5.2

* Fix license checker build compilation

Co-authored-by: 0hypercube <0hypercube@gmail.com>

* Tidy up the full frontend codebase and use optional chaining where possible (#620)

* Tidy up the full frontend codebase and use optional chaining where possible

* Code review changes

* Add a hotkey to select a random primary color (#622)

* Add shortcut to select a random primary color (#549)

* Rename random primary color message and reduce the number of calls to
generate_uuid

* Add documentation for SelectRandomPrimaryColor message

* Set the alpha value to 255 instead of a random value #622

Co-authored-by: Florent Collin <florentcollin23@gmail.com>

* Move the Layer Tree panel's New Folder and Delete icons into the options bar

* Migrate dialogs to Rust and add a New File dialog (#623)

* Migrate coming soon and about dialog to Rust

* Migrate confirm close and close all

* Migrate dialog error

* Improve keyboard navigation throughout UI

* Cleanup and fix panic dialog

* Reduce css spacing to better match old dialogs

* Add new document modal

* Fix crash when generating default name

* Populate rust about graphite data on startup

* Code review changes

* Move one more :focus CSS rule into App.vue

* Add a dialog message and move dialogs

* Split out keyboard input navigation from this branch

* Improvements including simplifying panic dialog code

Co-authored-by: Keavon Chambers <keavon@keavon.com>

* Snapping system improvements and refactor (#621)

* Snap to points and refactor

* Improve dot position on bounds

* Add snap matrix

* Cleanup

* Code review

* Half axis fade rather than increase it

* Fix fmt

* Hide snap to point overlay when active

Co-authored-by: Keavon Chambers <keavon@keavon.com>

* Add the File > Export dialog and PNG/JPG downloading (#629)

* Add export dialog

* Code review changes

* More code review feedback

* Fix compilation on stable Rust

* Fixes to problems

Co-authored-by: Keavon Chambers <keavon@keavon.com>

* Code review

Co-authored-by: Keavon Chambers <keavon@keavon.com>
Co-authored-by: Oliver Davies <oliver@psyfer.io>
Co-authored-by: mfish33 <32677537+mfish33@users.noreply.github.com>
Co-authored-by: 0HyperCube <78500760+0HyperCube@users.noreply.github.com>
Co-authored-by: TrueDoctor <dennis@kobert.dev>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Alaska <simon.wuelker@arcor.de>
Co-authored-by: 0hypercube <0hypercube@gmail.com>
Co-authored-by: FlorentCollin <florentcollinpro@gmail.com>
Co-authored-by: Florent Collin <florentcollin23@gmail.com>
2022-05-10 17:31:08 -07:00
0HyperCube 060182fd31 Add the File > Export dialog and PNG/JPG downloading (#629)
* Add export dialog

* Code review changes

* More code review feedback

* Fix compilation on stable Rust

* Fixes to problems

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-05-09 07:35:22 +01:00
0HyperCube e3e506ecfb Snapping system improvements and refactor (#621)
* Snap to points and refactor

* Improve dot position on bounds

* Add snap matrix

* Cleanup

* Code review

* Half axis fade rather than increase it

* Fix fmt

* Hide snap to point overlay when active

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-05-09 04:13:57 +01:00
0HyperCube 4b7d8b7ab0 Migrate dialogs to Rust and add a New File dialog (#623)
* Migrate coming soon and about dialog to Rust

* Migrate confirm close and close all

* Migrate dialog error

* Improve keyboard navigation throughout UI

* Cleanup and fix panic dialog

* Reduce css spacing to better match old dialogs

* Add new document modal

* Fix crash when generating default name

* Populate rust about graphite data on startup

* Code review changes

* Move one more :focus CSS rule into App.vue

* Add a dialog message and move dialogs

* Split out keyboard input navigation from this branch

* Improvements including simplifying panic dialog code

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-05-07 09:59:52 +01:00
FlorentCollin c65c33243b Add a hotkey to select a random primary color (#622)
* Add shortcut to select a random primary color (#549)

* Rename random primary color message and reduce the number of calls to
generate_uuid

* Add documentation for SelectRandomPrimaryColor message

* Set the alpha value to 255 instead of a random value #622

Co-authored-by: Florent Collin <florentcollin23@gmail.com>
2022-05-06 08:50:50 +02:00
0HyperCube 265cc0fe32 Draw the outlines of shapes on hover and selection (#609)
* Add hover outline overlay

* Increase selection tolerance

* Increase weight

* Only check if top intersection is selected

* Outline selected paths

* Reduce outline weight

* Increase path tool outline thickness to match hover
2022-04-24 01:21:48 +01:00
0HyperCube ec43b7945e Fix properties deselect (#606)
* Fix properties panel deselect

* Fix arrow cursors on select tool

* Fix drag from UI to document causing mouse down

* Fix tests

* Cleanup
2022-04-22 10:58:29 +01:00
Keavon Chambers f38289f036 Change stroke weight from ints to floats (#601)
Also rename stroke "width" to "weight" in some places. Closes #587

* Change stroke weight from ints to floats

* "miter_limit" -> "line_join_miter_limit"

* Bump file format version
2022-04-21 13:35:35 -07:00
Keavon Chambers 632928f4f6 Rename Crop tool to Artboard tool 2022-04-21 10:52:33 -07:00
0HyperCube 7c8f488ad0 Improvements to the layer transform cage UX (#589)
* Allow input system to handle mousedown while dragging

* Fix abort

* Add apsect ratio

* Make comment more explicit

* Fix abort when dragging

* Constrain when dragging edge
2022-04-21 10:00:22 +01:00
0HyperCube a26679b96c Font selection for text layers (#585)
* Add font dropdown

* Add fonts

* Font tool options

* Fix tests

* Replace http with https

* Add variant selection

* Do not embed default font

* Use proxied font list API

* Change default font to Merriweather

* Remove outdated comment

* Specify font once & load font into foreignobject

* Fix tests

* Rename variant to font_style

* Change TextAreaInput to use FieldInput (WIP, breaks functionality)

* Fix textarea functionality

* Fix types

* Add weight name mapping

* Change labeling of "Italic"

* Remove commented HTML node

* Rename font "name" to "font_family" and "file" "font_file"

* Fix errors

* Fix fmt

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-04-21 09:50:44 +01:00
mfish33 e01f0081a9 Add properties panel entries for artboards (#572)
* Artboards can have properties

* fix crash when renaming artboards

* moved target document to utility types

* moved import and added test for file version information

* fixed missing import

* fix error from merging

* - typed properties message handler data
- removed name from WidgetRow

* clippy warnings

* artboards have seperate properties section

* - color input can be forced to have selection
- crop tool shows on switch
- select tool shows on switch

* variable renamed

* change to use PropType<boolean> instead of PropType<Boolean>

* Add an artboard icon

* Add the "Delete Artboard" hint

* fix unselect glitch

* even better

* Remove the Transform properties group

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-04-20 18:42:32 -07:00
0HyperCube c7e80180c2 Fix gradient transformation (#588)
* Fix with perfect circle

* Actually fix rotated gradient

* Gradient transform & fix on rotated canvas

* Cleanup & remove logging
2022-04-20 18:14:33 +01:00
0HyperCube ac6f4ad325 All shapes now have a Fill in the properties panel; color inputs are now optional (#583)
* Add aditional stroke properties

* Make the colour input optional

* Fix fmt

* Apply code review changes

* Code review nitpicks

* Fix recursion

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-04-18 09:25:09 +01:00
0HyperCube 3e08802c44 Add additional stroke properties (#582)
* Add aditional stroke properties

* Add comment explaining clones for closure

* Improve labels

* Fix doc test

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-04-09 09:28:29 +01:00
0HyperCube 51c31f042b Add embedable images (#564)
* Add embedable bitmaps

* Initial work on blob urls

* Finish implementing data url

* Fix some bugs

* Rename bitmap to image

* Fix loading image on document load

* Add transform properties for image

* Remove some logging

* Add image dimensions

* Implement system copy and paste

* Fix pasting images

* Fix test

* Address code review

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-03-27 11:43:41 +01:00
TrueDoctor 0ee492a857 Differentiate between scale and dimensions (#570)
* Differentiate between scale and dimensions

* Fix layout and naming of properties
2022-03-27 01:48:40 +01:00
Keavon Chambers f6726c1427 Various website fixes 2022-03-17 02:12:23 -07:00
0HyperCube 7ee2fcad44 Fix clippy lints and update packages (#568)
# Conflicts:
#	Cargo.lock
2022-03-14 21:23:08 +00:00
Keavon Chambers 2f6722fb40 Add Image node icon and rename node from Path to Shape 2022-03-05 23:51:59 -08:00
Keavon Chambers 788f8db127 Remake node type icons (closes #483); color picker cleanup 2022-03-04 22:48:22 -08:00
Keavon Chambers 8a05712dac Reorder tool icons, update favicon and logo, and other icon cleanup 2022-03-04 13:04:59 -08:00
Keavon Chambers bd9571103e Set text color based on its fill when it's being edited 2022-03-04 12:15:42 -08:00
Keavon Chambers f128434e50 Add "New Folder"/"Delete Selected" buttons to layer panel
Closes #532
2022-03-02 21:55:32 -08:00
mfish33 8387ffe735 Color Input (#565)
* initial working prototype

* clean up component

* Fix alignment

* Code review tweaks

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-02-22 13:52:58 -08:00
Oliver Davies 38a4dfd8bc Pen tool fixes (#563)
Resolves 3 known bugs with the pen tool.

* Fixed crash pointed out by @caleb-ad

* Fixed issue with final path segment losing handle data

* Replace curves with lines when under a drag threshold, improves usability.

* Readability improvements, improved comments
2022-02-20 19:47:04 -08:00
Dennis 4757e8b8cd Fix panic on non existing document layer 2022-02-16 17:41:45 +01:00
mfish33 37476fc19d fix crash when shape does not have fill (#557) 2022-02-15 16:57:44 -08:00
mfish33 a73d9b5811 Can set stroke and fill on text and shapes (#551)
* Can set stroke and fill on text and shapes

* resend layout on failed update

* text input properly resets on bad input

* support modifying gradients

* can modify gradients in the properties panel

* updated labels

* remove heap allocation in favor of RC

* removed redundent line

* oops
2022-02-15 09:04:11 -08:00
0HyperCube 93dffb8741 Gradient Tool (#546)
* Refactor to support fill enum & svg defs

* Init tool

* Fix advertise

* Gradient tool click and drag

* Overlays

* Drag overlays

* Cleanup

* Fix transform on elongated shapes

* Snap rotate

* Snapping

* Add hints

* Rename to solid

* Code review changes

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-02-14 23:07:11 +00:00
0HyperCube 8bf1289429 Reduce transformation cage rotate tolerance (#548) 2022-02-13 21:49:06 +00:00
0HyperCube 916d10980d Rename tools (#537)
* Rename tools

* Rename Text -> TextLayer
2022-02-12 19:04:34 +00:00
caleb f9f66db5a2 Boolean shape operations (#470)
* added BooleanUnion message for select tool, which is sent by the BooleanUnion button

* select to dispatches a BooleanUnion message
   - as far as I can tell the selected layers aren't stored anywhere

* Added neccesary messages and functions for boolean operation

* Intersection code, as yet untested
does not compile

* Updated intersection algorithm

* Fixed shapes_as_seen
   - should not be effected by root transform, should be effected by the shape transform
Working line intercepts

* updated intersection algorithm

* added SubCurve struct, to reduce creation of new PathSegs and more efficiently calculate bounding boxes

* intersection algorithm modifications

* changed sub_curve to do less copying

* intersection algorithm working for ellipses
   - idk why though, the algorithm isn't finding close, but nearby intersections

* Code for the sub-shape identification pieces of boolean operation algorithm

* cycle direction calculations
boolean_operation code

* final touches (a.k.a. the very begining touches before the debugging)

* removed intersection testing code to draw intersects
added code to add new shapes to document

* Bug Fix: Cycle needs to track egde origin
Bug Fix: vertex markers
Working for simple shapes

* Bug Fix: multiple intersections in same PathSeg

* Bug Fix: compare the absolute value of area magnitudes

* Bug Fix: subdivision algorithm

* cargo fmt

* comments

* Bug Fix: Difference and Subtraction operations

* simplified overlap

* changed shapes_as_seen to transformed_shapes
    - modified function to use existing code for multiplying transforms and traversing layer tree

removed shape_as_seen, helper function to shapes_as_seen

* Bug Fix: selected layers must be sorted

* Changed SubFront to SubtractFront and SubBack to SubtractBack

* moved F64PRECISION to graphene::consts

* Best practices changes
intersection algorithm changes

* Added BooleanOperationError

* modified intersection algorithm to use more dynamic thresholds

* intersection algorithm modification

* Added "do_if"

* Bug Fix: properly subdivide segments with multiple intersections

* Added tests for intersection algorithm

* restructured flow control in intersection algorithm
restructured intersection algorithm to modify single vector
    - should have done this yeeeaars ago

* Shapes will have the pathstyle of alpha

* collect_shapes now uses closure

* BugFix: fixed PathGraph:get_cycles, prevent multicounting cycles

* Added boolean_ops::reverse_path function

* Curves are now reversed before intersections are found

* cleanup

* BugFix: subfront and subback chose wrong shape pathstyle
BugFix: path concat should remove internal movetos and closepaths

* BugFix: prevent movetos from being added due to intersect imprecision

* Changed intersection quality threshhold to CURVE_FIDELITY

* Added functions for cubic/quadratic roots
!Does not compile!

* Added special case algorithms for line-curve intersections
Added tests for cubic root algorithm

* changed line_curve_intersections structure

* Handle intersecting shape without curve intersection case

* Behavior for SubtratFront, SubtractBack, Union, and Intersection for the no-intersect cases

* reformatted PathGraph::add_edges_from_path
Fixed bugs involving closepaths and subpaths

* Bug fix: fix refactoring error

* Bug fix: don't consider 0 length cycles
Bug Fix: dummy vertices are not intersections

* the function document_message_handler::sort_layers sorts the layers from bottom to top
    - we want the reverse

* Bug Fix: ClosePath must be appended to shapes constructed from cycle
    - By default PathGraph edges are not closed.
    - When the input shape was not closed there would be multiple unclosed paths in the resulting shape, causing bugs

* close_path now closes all subpaths in a path
    - if a shape has any subpath which is not closed boolean operations are undefined
        (Also PathGraph::add_edges_from_path breaks when the path isn't closed)

* clean up

* removed unused function "intersectoin_candidates"

* comments

* removed duplicate check for valid intersection in horizontal_ray_cast

* Temporary fix for ray casting

* it wouldn't build cause one of these ->' pesky things was hanging around in the wrong neighborhood

* ignoring intersection test cases because they do exact fp comparison

* Some spelling fixes and abbreviation burnination (more needed)

* spelling fixes
close_path bug

* Fixed: local extrema were not being properly filtered out for subcurves
Fixed: reversing PathSeg removes any closepaths

* spelling

* Code review pass

* partial implementation overlapping identical curves

* Untested implementation for test for overlapping curves
    - Test is not yet used in intersection algorithm

* -Removed PathGraph::intersect()

* readability improvements
changed line_t_value to be more forgiving to error

* Bug Fix: match_control_polygon didn't properly compare different degree polygons

* Added colinear() function
Added projection_on_line() function

* BugFix project_onto_line

* removed extra log

* rust fmt

Co-authored-by: Keavon Chambers <keavon@keavon.com>
Co-authored-by: TrueDoctor <dennis@kobert.dev>
2022-02-12 09:30:08 -08:00
mfish33 91e4201cb1 Implement the Properties panel with a transform section for layers (#527)
* initial layout system with tool options

* cargo fmt

* cargo fmt again

* document bar defined on the backend

* cargo fmt

* removed RC<RefCell>

* cargo fmt

* - fix increment behavior
- removed hashmap from layout message handler
- removed no op message from layoutMessage

* cargo fmt

* only send documentBar when zoom or rotation is updated

* ctrl-0 changes zoom properly

* unfinished layer hook in

* fix layerData name

* layer panel options bar

* basic x/y movment

* working transform section

* changed messages from tuples to structs

* hook up text input

* - fixed number input to be more clear
- fixed actions for properties message handler

* Add styling

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-02-12 08:22:57 -08:00
Oliver Davies d084775d81 Add Pen Tool (#536)
* First steps toward pen tool, similar to spline tool currently.

* Broken WIP

* Progress, but still glitchy

* Improvements, a little farther

* Pen tool functioning as expected

* Merged master

* Fixed commit bug and overlay flashing

* Reordered import statements

TODO: Resolve issue with last segment losing its handle position on confirm
2022-02-12 04:16:31 -08:00
mfish33 f8c2be83dd Properly show document bar on initialization (#535)
* properly show document bar

* updated comments
2022-02-11 11:32:10 -08:00
0HyperCube 011f32395e Allow deleting artboards (#533) 2022-02-10 20:03:14 +00:00
Keavon Chambers 77dc125095 Polishing: standardize binding JS resize event (fixes non-integer AA rendering); remove "X" to delete; cleanup 2022-02-10 02:29:45 -08:00
Keavon Chambers a4d3c343a0 Improve Path Tool hint text 2022-02-09 16:52:54 -08:00
Paul Kupper f8e72be492 Implement the Spline Tool (#512)
* Add Spline Tool

* Adapt to changes from master

* Apply review feedback

* Fixes

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-02-10 01:22:57 +01:00
0HyperCube 45edeb2a2b Implement the Crop Tool for artboard resizing (#519)
* Extract transformation cage to a seperate file

* Hook up tool

* Implement resize

* Draw artboards

* centre and constrain

* Bounding box is rotated

* Fix transform handle positions for artboard

* Drag layers

* Snapping

* Fix imports

* Cleanup

* Remove allocation from bounding_boxes

* Round artboard size and position

* Hints

* Fix rotated transform cage

* Code review changes

* Hints changes

Co-authored-by: Dennis <dennis@kobert.dev>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-02-09 23:22:23 +00:00
Oliver Davies 108b8be595 Overhaul Path Tool (#498)
* First pass cleanup omw to handles

* Handles dragging with anchors, handles still not draggable and some bugs

* Dragging single side of handle works, need to create mirror case

* In progress addition of improved anchor / handle representation

* partially working

* Handle dragging working for non-end points, normal anchor drag bugged

* Fixed corner cases, fixed anchors without handles bug

* Add snapping

* Change path tool selection by clicking on shape

* Fixed path close point being draggable

* Variable length handle, firstpass of alt to stop mirroring

* Alt improved, not done. Only update structures when needed. Added snapping for selected shapes

* Can now undo path edits

* Do not maintain angle between non-mirrored handles

* Replaced segment based overlay setup with anchor based setup

* Cleanup, handle angle comparison bug remains. Investigating.

* Added OverlayPooler. May closely associate overlays to VectorManipulatorAnchors instead.

* Moved anchor / segment creation logic out of document_message_handler

* Overlays are now managed by VectorManipulatorShapes

* Fixed inconsistent handle mirroring.

* Clearly shows which point you have selected

* Removed OverlayPooler system

* Added more comments

* Removed all clones of the vector structures. A little uglier but better.

* Resolved Text path initialization bug with a workaround.

* Cleaned up comments

* More comment cleanup

* Fixed issue with quad handle dragging unwanted behavior, renamed VectorShapeManipulator

* In progress refactor to allow multi-selection

* In progress dragging multiple points, selection works, transform still has issues

* Added Multiselect, major refactor

* Commented out progress for selection change, bug with hop back on multiple shapes

* Removed debug og

* Resolved issue with merge

* Minor cleanup, added a few comments

* Review changes

* Resolved unclear comment

* Fixed snap back for now

* Add todo comment for future snap back fix

* Working situations where curve paths do not close. Thanks for points it out  @pkupper

* Tweaked selection size

* Fix curve start point dragability, renames, cleanup

* Separated into multiple files, applied @TrueDoctor review feedback

* Resolved tests failing due to doc generation

* Re-added closed, added concept of distance mirroring

* Added shift distance mirroring, removed debounce from anchor

Co-authored-by: Keavon Chambers <keavon@keavon.com>
Thank you for the reviews @TrueDoctor and @pkupper
2022-02-09 12:49:14 -08:00
Wuelle cc66ab06b0 Place new layers in tree based on layer selection (#526)
* place new layers based on layer selection
2022-02-09 19:54:38 +01:00
Paul Kupper cb9a37b638 Set text fill color to the primary color (#521)
* Fix text has no fill

* Use primary color for text fill

* Use correct text color when editing

* Change fallback text color to gray
2022-02-07 20:58:22 +01:00
TrueDoctor 5ea4654f53 De duplicate Overlay render messages (#520) 2022-02-07 19:15:25 +01:00
Paul Kupper 386c970b60 Fix shape not closed after using Fill Tool (#510)
* Always set shape property 'closed' on fill

* Remove closed property on Shape

* Make color mandatory in Fill

* Fix intersection for filled but open shapes

* Code style tweak

* Add TODO note to rework ClosePath check
2022-02-06 23:06:23 +01:00
0HyperCube 492025e79b Double click on a SimpleShape to path edit (#507) 2022-02-05 17:19:32 +00:00
0HyperCube 599a9d076b Transformation cage (#502)
* Render corners and edges of selection box

* Refactor

* Add drag detection

* Implement the transform handles

* Implement rotation by dragging <40px from bounds

* Refine clustered handle behaviour

* Add cursors

* Add snap angle

* Fix MMB drag whilst in select tool

* Convert calculate_pivot into a seperate function

* rename start_vec to start_offset

* Fix typo

* Remove Undo transaction on <10px mouse move

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-02-04 16:46:44 +00:00
0HyperCube 794980fb33 Fix overlays on document switching (#505)
* Fix overlays on document switching

* Fix generating new document

* Move messages

* Abort tool when deleteing active document

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-02-03 19:08:39 +00:00
mfish33 96d3ef2650 Layout system implementation and applied to tool options bar (#499)
* initial layout system with tool options

* cargo fmt

* cargo fmt again

* document bar defined on the backend

* cargo fmt

* removed RC<RefCell>

* cargo fmt

* - fix increment behavior
- removed hashmap from layout message handler
- removed no op message from layoutMessage

* cargo fmt

* only send documentBar when zoom or rotation is updated

* ctrl-0 changes zoom properly

* Code review changes

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-01-30 17:53:37 -08:00
0HyperCube 121a68ad3c Implement the Text Tool and text layer MVP (#492)
* Add text tool

* Double click with the select tool to edit text

* Fix (I think?) transitioning to select tool

* Commit and abort text editing

* Transition to a contenteditable div and autosize

* Fix right click blocking

* Cleanup hints

* Ctrl + enter leaves text edit mode

* Render indervidual bounding boxes for text

* Re-format space indents

* Reflect font size in the textarea

* Fix change tool behaviour

* Remove starting text

* Populate the cache (caused doc load bug)

* Remove console log

* Chrome display the flashing text entry cursor

* Update overlay on input

* Cleanup input.ts

* Fix bounding boxes

* Apply review feedback

* Remove manual test

* Remove svg from gitignore

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-01-30 15:10:10 +00:00
Paul Kupper 1d2768c26d Implement Freehand Tool (#503)
* Implement freehand tool

* Address review comments

* Consistent ordering of tools

* Add hotkey N for freehand tool

* Tweak freehand tool hint
2022-01-30 11:39:49 +01:00
Keavon Chambers 434970aa16 Implement layer renaming (#501)
* Implement layer renaming

* Fix sneaky typo in CSS

Co-authored-by: Moritz Vetter <16950410+HansAuger@users.noreply.github.com>

Co-authored-by: Moritz Vetter <16950410+HansAuger@users.noreply.github.com>
2022-01-29 11:04:15 -08:00
TrueDoctor f8d748c07b Simplify point storage for pen tool (#500)
Store points as vectors instead of representing them as transforms to
avoid confusion and improve efficiency
2022-01-27 18:49:49 +01:00
0HyperCube 3bf5023ef8 Add alignment overlays (#462)
* Add alignment overlays

* Made snapping / overlays not render extra times, made snapping distance larger

* Revert snap tolerance change until user testing can be done

* WIP conversion to messages

* Revert "WIP conversion to messages"

This reverts commit ddcc23865a4a93639a0e4c60db66c664da8ccc09.

* Overlay document always has (0,0) in top left

* Fix AA on overlay lines

* Merge branch 'master' into alignment-overlays

* Squashed commit of the following:

commit dbc19912ca62b85c512985c10c1799cec1014c44
Author: asyncth <97792158+asyncth@users.noreply.github.com>
Date:   Sun Jan 16 12:57:03 2022 +0500

    Set the mouse cursor in the canvas based on the current tool and its state (#480)

    * Add FrontendMouseCursor and DisplayMouseCursor

    * Add update_cursor method to the Fsm trait and implement it for all tools

    * Rename DisplayMouseCursor to UpdateMouseCursor

    * Add 'To CSS Cursor Property' transform decorator and change the mouse cursor in the canvas based on the current tool and its state

    * Implement update_cursor for Navigate tool properly

    * Keep the cursor when dragging outside of the canvas

    * Change the mouse cursor to 'zoom-in' when LMB dragging on canvas with Navigate tool

    * Rename FrontendMouseCursor to MouseCursorIcon

    * Rename 'event' to 'e' and replace v-on with @

    * Change the definition of the MouseCursorIcon type in TS

    * Replace switch with dictionary look-up

    * Move the definition of MouseCursorIcon closer to where it's used

commit 9b36e6a909ce54bc8bb0db8d11b0caed3eebec85
Author: Keavon Chambers <keavon@keavon.com>
Date:   Sat Jan 15 17:24:58 2022 -0800

    Fix all remaining Vue/TS errors flagged in Volar

commit 2cc39cdb3782dc3ab42a0cb33f54af577a10b5bd
Author: Keavon Chambers <keavon@keavon.com>
Date:   Sat Jan 15 12:55:51 2022 -0800

    Tweak whitespace around `use` statements and other lint fixes

commit fa390c3875c9c355dc9c63a1f738575fb780f3b0
Author: Keavon Chambers <keavon@keavon.com>
Date:   Sat Jan 15 06:35:06 2022 -0800

    Change canvas artboard background color to be 1 shade lighter

commit ea2d00348474976a6021d06978cbead497bc6e2c
Author: Keavon Chambers <keavon@keavon.com>
Date:   Fri Jan 14 20:54:38 2022 -0800

    Modify all message enum data to use named struct values, not tuples (#479)

    * Massively reorganize and clean up the whole Rust codebase

    * Modify all message enum data to use named struct values, not tuples

commit 9b6cbb5f50f1c2493a6fbbbd6b2e34e83ce72b38
Author: Keavon Chambers <keavon@keavon.com>
Date:   Fri Jan 14 14:58:08 2022 -0800

    Massively reorganize and clean up the whole Rust codebase (#478)

    * Massively reorganize and clean up the whole Rust codebase

    * Additional changes during code review

commit a535f5c1c19c56f53e1d4d8bed7acafb2fac956b
Author: Keavon Chambers <keavon@keavon.com>
Date:   Wed Jan 12 16:17:40 2022 -0800

    Sort messages and message handlers

commit e70858884dc57cf678cb47bf7f38098e08279c1b
Author: Keavon Chambers <keavon@keavon.com>
Date:   Wed Jan 12 14:16:13 2022 -0800

    Standardize FrontendMessage message names

commit 0b4934b4f3754ed8732c0a7d50d87b4624874c3e
Author: Keavon Chambers <keavon@keavon.com>
Date:   Wed Jan 12 12:45:07 2022 -0800

    Rename document_file.rs to document_message_handler.rs

commit ec7bf4a771a3028b07879d1131041bcd9742f666
Author: Keavon Chambers <keavon@keavon.com>
Date:   Wed Jan 12 12:19:14 2022 -0800

    Rename DocumentsMessage to PortfolioMessage

commit 0991312ba009f6a1452a9892e7d5a248a22939ed
Author: Keavon Chambers <keavon@keavon.com>
Date:   Wed Jan 12 11:44:49 2022 -0800

    Rename document_message_handler.rs to portfolio_message_handler.rs

commit c76c92e50028feed99fccf509385baea9442bbdf
Author: 0HyperCube <78500760+0HyperCube@users.noreply.github.com>
Date:   Wed Jan 12 19:05:55 2022 +0000

    Migrate to using MoveSelectedLayersTo (#469)

    * migrate to using MoveSelectedLayersTo

    * Fix dragging a selected layer with multiple selected layers

    * Fix CreatedLayer overriding selection

    * Fix MoveSelectedLayersTo behaviour

    * Squashed commit of the following:

    commit 095d577a49f6b904ba3038327109860e5519f981
    Author: Keavon Chambers <keavon@keavon.com>
    Date:   Mon Jan 10 18:06:12 2022 -0800

        Fix NumberInput clamping regression with undefined bounds

    commit 9f54a376c4ad20a60731bb4a4eca5a25001fcfd1
    Author: mfish33 <32677537+mfish33@users.noreply.github.com>
    Date:   Sun Jan 9 15:52:55 2022 -0800

        Fix bounds with artboards for zoom-to-fit and scrollbar scaling (#473)

        * - document load keeps postition
        - zoom to fit
        - scrollbars use artboard dimensions

        * - review comments
        - svg export uses all artboard bounds

        Co-authored-by: Keavon Chambers <keavon@keavon.com>

    commit 61432de4801d63d62faa18aaa624b11a122a97b1
    Author: 0HyperCube <78500760+0HyperCube@users.noreply.github.com>
    Date:   Sat Jan 8 21:06:15 2022 +0000

        Fix rotation input (#472)

    * Fix insert with no nesting at end of panel

    * Deselect other layers on paste

    * Resolve logging

commit 574028375b4b0aea6ccd76414dd93272a72add5f
Author: Keavon Chambers <keavon@keavon.com>
Date:   Wed Jan 12 06:14:32 2022 -0800

    Add `npm start` script alias for `npm run serve`

commit 75e8fc6614d4b498b0beb93ac9313144160e7689
Author: Keavon Chambers <keavon@keavon.com>
Date:   Wed Jan 12 05:17:56 2022 -0800

    Switch VS Code's Vue extension from Vetur to Volar

commit 389b445ef16065412759c4e4fc1e10835ebb8bdb
Author: Keavon Chambers <keavon@keavon.com>
Date:   Wed Jan 12 03:56:28 2022 -0800

    Remove Charcoal references from the code for now

commit 095d577a49f6b904ba3038327109860e5519f981
Author: Keavon Chambers <keavon@keavon.com>
Date:   Mon Jan 10 18:06:12 2022 -0800

    Fix NumberInput clamping regression with undefined bounds

commit 9f54a376c4ad20a60731bb4a4eca5a25001fcfd1
Author: mfish33 <32677537+mfish33@users.noreply.github.com>
Date:   Sun Jan 9 15:52:55 2022 -0800

    Fix bounds with artboards for zoom-to-fit and scrollbar scaling (#473)

    * - document load keeps postition
    - zoom to fit
    - scrollbars use artboard dimensions

    * - review comments
    - svg export uses all artboard bounds

    Co-authored-by: Keavon Chambers <keavon@keavon.com>

commit 61432de4801d63d62faa18aaa624b11a122a97b1
Author: 0HyperCube <78500760+0HyperCube@users.noreply.github.com>
Date:   Sat Jan 8 21:06:15 2022 +0000

    Fix rotation input (#472)

commit 3eeac79f5a811c10ab898471f41bd796c5cf16b0
Author: 0HyperCube <78500760+0HyperCube@users.noreply.github.com>
Date:   Sat Jan 8 16:30:03 2022 +0000

    Enhance the Navigate Tool zoom behavior (#461)

    * Snap zoom

    * Navigate zoom from centre

    * Ctrl to snap zoom in navigate

    * Use ctrl for global snap rotate

    * Fix the rotation input on snap rotate

    * Update hint to use ctrl

    * Fix mouse centre on drag

    * Click to zoom in

    * Clean up centre zoom

    * Update user input hints; tweak some variable names for clarity and standardization

    Co-authored-by: Keavon Chambers <keavon@keavon.com>

commit a2c2f7fc9da5beb73f677e95d5b4095cd8851318
Author: 0HyperCube <78500760+0HyperCube@users.noreply.github.com>
Date:   Sat Jan 8 16:02:02 2022 +0000

    Add support for resizing workspace panels (#443)

    * Resize panels

    * Removing move_selection test pending #444 resolved

    * Bind event listners and cursor to the document

    * Fix flex grow on document being reset when drawing

    * Call onresize when the boundry is dragged

    * Add min panel size

    * Add explicit function return types

    * Dispatch resize event

    * Lock pointer instead of setting cursor on document

    Co-authored-by: otdavies <oliver@psyfer.io>
    Co-authored-by: Keavon Chambers <keavon@keavon.com>

commit 54e91211158c3b6e3f6597fde85f0340a75f1667
Author: mfish33 <32677537+mfish33@users.noreply.github.com>
Date:   Sat Jan 8 07:50:08 2022 -0800

    Implement artboards and document version enforcement (#466)

    * - graphite document artboard implementation
    - autosave document load hitch fix
    - Autosave will delete saved files when graphite document version changes

    * formating

    * - top left 0,0
    - fixed hitch on first document
    - vue calls first render

    * Revert

    * Merge branch 'master' into artboards

    * Small bug fixes and code review tweaks

    Co-authored-by: Oliver Davies <oliver@psyfer.io>
    Co-authored-by: Keavon Chambers <keavon@keavon.com>

commit 11f15bd6afa7f355b79e2b296f9397c5cb5ad783
Author: Leonard Pauli <leonardpauli@me.com>
Date:   Sat Jan 8 14:25:24 2022 +0100

    Path Tool: Implement anchor point dragging (#451)

    * #82 path-tool: WIP selecting control point working

    * Fix bug where duplication with Ctrl+D doesn't properly duplicate (#423)

    * bug fix: duplication didn't properly duplicate

    * cargo fmt

    * changed the formatting slightly for readability

    * Small cleanups, changed color of handles upon selection

    * Fix changes from merge

    * Remove duplicate anchor points on top of one another

    * Fix possible issues with thumbnails not being updated from Graphene operations

    * path-tool: attempt to move control points on click

    * Add dragging for control points

    * Editing shape anchors functional. Handles next.

    * Comment cleanup & slight cleanup of closest_anchor(..)

    * Removing conflict with master

    * Tiny code tweaks

    Co-authored-by: Keavon Chambers <keavon@keavon.com>
    Co-authored-by: caleb <56044292+caleb-ad@users.noreply.github.com>
    Co-authored-by: otdavies <oliver@psyfer.io>
    Co-authored-by: Dennis <dennis@kobert.dev>

commit 05e8a98f468cb3a8814cf02e482805ed1616e357
Author: Keavon Chambers <keavon@keavon.com>
Date:   Fri Jan 7 23:13:33 2022 -0800

    Redesign the Layer Tree UI (#468)

commit 8e3d2372289872716ab2567da744a213f0c4d1f3
Author: Oliver Davies <oliver@psyfer.io>
Date:   Fri Jan 7 15:53:12 2022 -0800

    Ungroup layers (#465)

    * WIP handling corner cases, like ungrouping subfolders

    * Resolved hanging

    * Fix recursive ungrouping

    * Functional, corner case free Ungroup. Small Undo issue & warnings

    * Update layertree upon undo

    * Also update  layerdata upon redo

    * Add some polish

    * Resolved TODOs

    * Oops didn't save all after rename, ha.

    Co-authored-by: Dennis <dennis@kobert.dev>

commit c1c719294862e049c55c0ede72f2014ba7851dc4
Author: TrueDoctor <dennis@kobert.dev>
Date:   Fri Jan 7 04:15:08 2022 +0100

    Tidy up path handling in document_file (#464)

    * Tidy up path handling in document_file

    + Improve #455

    * Cargo Clippy lints

    * Rename to_vec to map_to_vec

    Co-authored-by: Oliver Davies <oliver@psyfer.io>

commit f4707f9b741973adddf769dee1b64effcc702805
Author: mfish33 <32677537+mfish33@users.noreply.github.com>
Date:   Thu Jan 6 18:45:37 2022 -0800

    Better decimal rounding in the NumberInput widget (#457)

    * better decimal rounding in NumberInput

    * - created function to reuse
    - used math instead of string manipulation

    * updated comment to be correct

    * updated comment

    * updated comment

commit 0219f060b8e13b7dc9e47335f130d1737b9a8529
Author: Keavon Chambers <keavon@keavon.com>
Date:   Wed Jan 5 05:40:32 2022 -0800

    Fix build script to use correct branch name

* Fix indentation

* Overlays fade in

* Fix formatting

* Add consts for snap visible and opacity

* Tweak constants for improved UX, rejigger imports

* Fix AA bounding box

* Snap only visible layers

* Add some comments

Co-authored-by: otdavies <oliver@psyfer.io>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-01-20 20:35:40 +00:00
TrueDoctor 72e638c5da Generify functions in document.rs (#488)
* Generify functions in document.rs
2022-01-18 22:21:44 +01:00
0HyperCube 443f3d3b00 Reverse layer panel entries (#489)
* Reverse layer panel entries

* Ctrl + Bracket moves layers in correct direction

* Fix dragging layers in tree

* Fix reverse in wrong place

* Remove log

* Fix sorting of message enum variants

* Fix hotkeys

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-01-16 22:56:47 +00:00
Keavon Chambers 3038d72226 Fix sorting of message enum variants 2022-01-16 13:21:05 -08:00
0HyperCube b17432b1c4 Add cursors and hints to global viewport navigation (#487)
* Add global nav cursors

* Update hints on global navigation

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-01-16 19:46:41 +00:00
Keavon Chambers 94ecbf7112 Make the toggle overlays button functional (#484)
* Make the toggle overlays button functional

* Move state from the OverlaysMessageHandler to DocumentMessageHandler

* Code review fixes
2022-01-16 09:40:47 -08:00
0HyperCube 10205ef599 Do not transform layers when transforming a parent folder (#481)
* Modify all message enum data to use named struct values, not tuples (#479)

* Massively reorganize and clean up the whole Rust codebase

* Modify all message enum data to use named struct values, not tuples

* Do not transform layers when transforming parent

* Reduce complexity to O(nlogn)

* Add TODO comment about performance

Co-authored-by: Keavon Chambers <keavon@keavon.com>
Co-authored-by: Dennis <dennis@kobert.dev>
2022-01-16 16:55:45 +00:00
asyncth 0515cc4eca Set the mouse cursor in the canvas based on the current tool and its state (#480)
* Add FrontendMouseCursor and DisplayMouseCursor

* Add update_cursor method to the Fsm trait and implement it for all tools

* Rename DisplayMouseCursor to UpdateMouseCursor

* Add 'To CSS Cursor Property' transform decorator and change the mouse cursor in the canvas based on the current tool and its state

* Implement update_cursor for Navigate tool properly

* Keep the cursor when dragging outside of the canvas

* Change the mouse cursor to 'zoom-in' when LMB dragging on canvas with Navigate tool

* Rename FrontendMouseCursor to MouseCursorIcon

* Rename 'event' to 'e' and replace v-on with @

* Change the definition of the MouseCursorIcon type in TS

* Replace switch with dictionary look-up

* Move the definition of MouseCursorIcon closer to where it's used
2022-01-16 12:57:03 +05:00
Keavon Chambers 56599db753 Tweak whitespace around `use` statements and other lint fixes 2022-01-15 12:55:51 -08:00
Keavon Chambers e9e43eb79b Modify all message enum data to use named struct values, not tuples (#479)
* Massively reorganize and clean up the whole Rust codebase

* Modify all message enum data to use named struct values, not tuples
2022-01-14 20:54:38 -08:00
Keavon Chambers f48d4e1884 Massively reorganize and clean up the whole Rust codebase (#478)
* Massively reorganize and clean up the whole Rust codebase

* Additional changes during code review
2022-01-14 14:58:08 -08:00
Keavon Chambers 011c2be26d Sort messages and message handlers 2022-01-12 16:17:40 -08:00
Keavon Chambers 6c639270ae Standardize FrontendMessage message names 2022-01-12 14:16:13 -08:00
Keavon Chambers ae829c63b4 Rename document_file.rs to document_message_handler.rs 2022-01-12 12:45:07 -08:00
Keavon Chambers 4d68d0d061 Rename DocumentsMessage to PortfolioMessage 2022-01-12 12:19:14 -08:00
Keavon Chambers 647b0bc942 Rename document_message_handler.rs to portfolio_message_handler.rs 2022-01-12 11:44:49 -08:00
0HyperCube 5bd91004b1 Migrate to using MoveSelectedLayersTo (#469)
* migrate to using MoveSelectedLayersTo

* Fix dragging a selected layer with multiple selected layers

* Fix CreatedLayer overriding selection

* Fix MoveSelectedLayersTo behaviour

* Squashed commit of the following:

commit 095d577a49f6b904ba3038327109860e5519f981
Author: Keavon Chambers <keavon@keavon.com>
Date:   Mon Jan 10 18:06:12 2022 -0800

    Fix NumberInput clamping regression with undefined bounds

commit 9f54a376c4ad20a60731bb4a4eca5a25001fcfd1
Author: mfish33 <32677537+mfish33@users.noreply.github.com>
Date:   Sun Jan 9 15:52:55 2022 -0800

    Fix bounds with artboards for zoom-to-fit and scrollbar scaling (#473)

    * - document load keeps postition
    - zoom to fit
    - scrollbars use artboard dimensions

    * - review comments
    - svg export uses all artboard bounds

    Co-authored-by: Keavon Chambers <keavon@keavon.com>

commit 61432de4801d63d62faa18aaa624b11a122a97b1
Author: 0HyperCube <78500760+0HyperCube@users.noreply.github.com>
Date:   Sat Jan 8 21:06:15 2022 +0000

    Fix rotation input (#472)

* Fix insert with no nesting at end of panel

* Deselect other layers on paste

* Resolve logging
2022-01-12 19:05:55 +00:00
mfish33 9d2718006f Fix bounds with artboards for zoom-to-fit and scrollbar scaling (#473)
* - document load keeps postition
- zoom to fit
- scrollbars use artboard dimensions

* - review comments
- svg export uses all artboard bounds

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-01-09 15:52:55 -08:00
0HyperCube e39aa2a501 Enhance the Navigate Tool zoom behavior (#461)
* Snap zoom

* Navigate zoom from centre

* Ctrl to snap zoom in navigate

* Use ctrl for global snap rotate

* Fix the rotation input on snap rotate

* Update hint to use ctrl

* Fix mouse centre on drag

* Click to zoom in

* Clean up centre zoom

* Update user input hints; tweak some variable names for clarity and standardization

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-01-08 16:30:03 +00:00
0HyperCube 26da229807 Add support for resizing workspace panels (#443)
* Resize panels

* Removing move_selection test pending #444 resolved

* Bind event listners and cursor to the document

* Fix flex grow on document being reset when drawing

* Call onresize when the boundry is dragged

* Add min panel size

* Add explicit function return types

* Dispatch resize event

* Lock pointer instead of setting cursor on document

Co-authored-by: otdavies <oliver@psyfer.io>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-01-08 16:02:02 +00:00
mfish33 439418896a Implement artboards and document version enforcement (#466)
* - graphite document artboard implementation
- autosave document load hitch fix
- Autosave will delete saved files when graphite document version changes

* formating

* - top left 0,0
- fixed hitch on first document
- vue calls first render

* Revert

* Merge branch 'master' into artboards

* Small bug fixes and code review tweaks

Co-authored-by: Oliver Davies <oliver@psyfer.io>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-01-08 07:50:08 -08:00
Leonard Pauli 3f3ffbc82c Path Tool: Implement anchor point dragging (#451)
* #82 path-tool: WIP selecting control point working

* Fix bug where duplication with Ctrl+D doesn't properly duplicate (#423)

* bug fix: duplication didn't properly duplicate

* cargo fmt

* changed the formatting slightly for readability

* Small cleanups, changed color of handles upon selection

* Fix changes from merge

* Remove duplicate anchor points on top of one another

* Fix possible issues with thumbnails not being updated from Graphene operations

* path-tool: attempt to move control points on click

* Add dragging for control points

* Editing shape anchors functional. Handles next.

* Comment cleanup & slight cleanup of closest_anchor(..)

* Removing conflict with master

* Tiny code tweaks

Co-authored-by: Keavon Chambers <keavon@keavon.com>
Co-authored-by: caleb <56044292+caleb-ad@users.noreply.github.com>
Co-authored-by: otdavies <oliver@psyfer.io>
Co-authored-by: Dennis <dennis@kobert.dev>
2022-01-08 14:25:24 +01:00
Oliver Davies 31220fe276 Ungroup layers (#465)
* WIP handling corner cases, like ungrouping subfolders

* Resolved hanging

* Fix recursive ungrouping

* Functional, corner case free Ungroup. Small Undo issue & warnings

* Update layertree upon undo

* Also update  layerdata upon redo

* Add some polish

* Resolved TODOs

* Oops didn't save all after rename, ha.

Co-authored-by: Dennis <dennis@kobert.dev>
2022-01-07 15:53:12 -08:00
TrueDoctor 522626cd02 Tidy up path handling in document_file (#464)
* Tidy up path handling in document_file

+ Improve #455

* Cargo Clippy lints

* Rename to_vec to map_to_vec

Co-authored-by: Oliver Davies <oliver@psyfer.io>
2022-01-07 04:15:08 +01:00