Commit Graph

270 Commits

Author SHA1 Message Date
Keavon Chambers d5b161e7d1 Clean up some document-legacy code 2023-12-12 22:40:04 -08:00
Keavon Chambers 83af879a7c
Fix the Imaginate node from crashing (#1512)
* Allow generic node input for type inference

* Make imaginate resolution picking depend on the image resolution instead of the transform

* Remove dead code

* Fix console spam after crash

* Fix crash when disconnecting Imaginate node input

* Update Imaginate tool tooltip

---------

Co-authored-by: Dennis Kobert <dennis@kobert.dev>
2023-12-12 22:39:33 -08:00
0HyperCube 29222700f4
Fix the blend mode and opacity widgets of the Layers panel (#1506)
* Fix blend mode and opacity

* Cleanup and bug fixes

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-12-12 09:27:23 +00:00
0HyperCube 6bce72dccd
Fix document becoming unsaved (*) when clicking with Select tool (#1509)
Fix star on select tool
2023-12-11 22:14:20 +00:00
0HyperCube b60736c2c6
Fixes for removing artboards; white infinite canvas background (#1497)
* Fix crash when drawing on a deleted artboard

* Fix clear artboards button

* White background on no artboards

* Re-disable Clear Artboards since it still crashes

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-12-10 00:17:18 +00:00
Keavon Chambers bd9647eb54 Temporarily disable the Imaginate tool 2023-12-09 05:09:12 -08:00
0HyperCube 10863acd83
Fix crash when reordering layers (#1492) 2023-12-09 13:08:46 +00:00
Keavon Chambers c33ba1b315 Fix Properties panel to show selected layers/nodes 2023-12-09 04:08:07 -08:00
Keavon Chambers 60a9c27bf1
Add viewing/editing layer names, add Blend Mode node, and clean up Layer node (#1489) 2023-12-07 15:10:47 -08:00
Keavon Chambers 01499de8e7 Make the tool shelf adapt to multiple columns and improve panel scrollbars
Closes #176
2023-12-06 02:10:40 -08:00
Keavon Chambers 8f9371dad0 Improve navigation footer bar hints 2023-12-06 01:51:30 -08:00
0HyperCube f8b9c5db6d
Improve text transforms (#1487) 2023-12-04 14:57:44 -08:00
0HyperCube b2ca643e6e
Fix transforms, Brush tool, and G/R/S (#1473)
* Transform fixes

* Fix the desert artwork

* Change artboard icon

* Better handling when transforming brush strokes

* Code review pass

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-11-26 20:54:06 -08:00
0HyperCube 5ee79031ab
Fix hiding and collapsing layers (#1481)
* Hide and collapse layers

* Reorder imports

* Fix Ctrl+H shortcut advertized action and hotkey tooltip; improve graph top right of options bar

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-11-27 02:27:11 +00:00
Keavon Chambers ab3410cffe
Consolidate MenuListButton into TextButton (#1470) 2023-11-25 01:56:05 -08:00
0hypercube da4d95fa7b Fix spline tool deleting layer 2023-11-19 23:09:42 -08:00
0HyperCube 8a1cf3ad5d Migrate demo artwork and fix all failing CI tests (#1459)
* Initial work on fixing tests

* Fix formatting

* Remove dead code to satisfy rustc warnings

* Insert into an artboard

* Load updated artwork in editor

* Remove popup when importing image

* Fix up demo art

* Change transform app[lication method

* Reduce number of enums called BlendMode

* Finalize the demo artwork upgrade

* Code review pass

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-11-19 23:06:21 -08:00
Keavon Chambers 719c96ecd8
Rename and reorganize several widgets (#1462)
* Rename SwatchPairInput -> WorkingColorsButton

* Remove unnecessary Svelte each-loop keys

* Rename (and migrate) MenuBarInput -> MenuListButton

* Rename PivotAssist -> PivotInput

* Rename PersistentScrollbar -> ScrollbarInput and CanvasRuler -> RulerInput

* Rename DIalogModal -> Dialog

* Rename WidgetRow -> WidgetSpan
2023-11-18 04:34:30 -08:00
Keavon Chambers e3f5e7001f Redesign ColorInput widget and rename it to ColorButton 2023-11-16 18:38:39 -08:00
0HyperCube 58660f5548
Allow groups to work with the node graph (#1452)
* Initial groups

* Improve graph arangement

* Fix selecting nested layers

* Code review pass

* Change log

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-11-14 17:17:14 +00:00
Keavon Chambers 605c0de392
Fix Rust code lints (#1448)
* Fix Rust lints to satisfy Clippy

* Remove some unused commented out code
2023-11-05 13:52:00 -08:00
Keavon Chambers e54a2e2fc6 Remove the Frame tool 2023-11-04 03:04:26 -07:00
0HyperCube 9b034a5194
Fix deleting layers (#1441)
* Fix deleting layers

* Code review comments
2023-10-25 15:20:55 -07:00
0HyperCube 54745e210a
Fix the Path tool's smooth/sharp buttons (#1439)
* Fix select tool smooth button

* Nit

* Fix behavior when zero points are selected but the shape is active

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-10-25 09:26:24 +01:00
0HyperCube b8906f344e
Migrate the Text tool to the document graph (#1435)
* Update text tool to document graph

* Fix selection issue

* Log graph reruns and text node evals

* Hash to set node

* Fix let node crash

* Fix loading document with fonts

* Allow pressing enter to edit

* Cleanup

* Code review nits

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-10-24 12:55:13 -07:00
Yuri Astrakhan 3d4e3a74e5
A few minor lints and docs (#1436)
* A few minor lints and docs

* Added required packages to compile on Debian-style linux
* Inlined some format args, and removed some `&` in args (they cause about 6% slowdown that compiler cannot inline)
* a few spelling mistakes

* fix fmt
2023-10-18 23:33:10 -07:00
0HyperCube 5827e989dc Migrate the Select tool to the document graph (#1433)
* function for accessing document metadata

* Better select tool

* Fix render

* Fix transforms

* Fix loading saved documents

* Populate graph UI when loading autosave

* Multiple transform nodes

* Fix deep select

* Graph tooltips

* Fix flip axis icon

* Show disabled widgets

* Stop select tool from selecting artboards

* Disable (not hide) the pivot widget; remove Deep/Shallow select for now

* Code review changes

* Fix pivot position with select tool

* Fix incorrectly selected layers when shift clicking

---------

Co-authored-by: Dennis Kobert <dennis@kobert.dev>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-10-17 11:09:32 -07:00
Dennis Kobert 833f41bccb Insert pasted images as layers in document graph (#1418)
Changes:

Graph is evaluated on every viewport change
move all navigation logic into the viewport
reduce the number of js roundtrips
add canvas rendering
enable image pasting
various cleanups
Fix cache nodes being reset every evaluation
2023-10-17 11:02:07 -07:00
0hypercube b52f831b21 Fix artboard tool and remove old artboard code 2023-10-17 11:02:06 -07:00
0hypercube 9a39c4a0cc Fix gradient tool 2023-10-17 11:02:06 -07:00
0hypercube 6173662a40 Fix freehand and spline tool 2023-10-17 11:02:06 -07:00
hypercube 0d6bec837b Fix path tool 2023-10-17 11:02:06 -07:00
0hypercube 4cd72edb64 Initial work migrating vector layers to document graph
* Fix pen tool (except overlays)
* Thumbnail of only the layer and not the composite
* Fix occasional transform breakages
* Constrain size of thumbnail
* Insert new layers at the top
* Broken layer tree
* Fix crash when drawing
* Reduce calls to send graph
* Reduce calls to updating properties
* Store cached transforms upon the document
* Fix missing node UI updates
* Fix fill tool and clean up imports and indentation
* Error on overide existing layer
* Fix pen tool (partially)
* Fix some lints
2023-10-17 11:02:06 -07:00
mobile-bungalow 9667e5173b
Allow toggling smooth/sharp angle from the path tool options bar (#1415)
* menu in option

* smoothing controls work

* fixed type error

* fix flipping behavior

* silence warning

* consolidate selection state

* update positions options

* blinking logic fixed, smoothing logic implemented

* fixed arbitrary looping when flipping from sharp to smooth

* remove warning

* Tidying up

* refactor manipulator smoothing code, remove bitflags, rename

* Make the point smooth/sharp support mixed better

* Code review tweaks

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-09-11 17:36:08 -07:00
Keavon Chambers 88bdf9580f Make RadioInput accept optional selected_index 2023-09-11 15:40:05 -07:00
mobile-bungalow b29acbd784
Rework navigation tool hints and navigation shortcuts (#1419)
* Added Pan,Tilt,Zoom to View menu + Tilt shortcut changes

* formating

* fixed menus, added action for when dispatch happens from menu

* set key mappings to spec

* fix labels for navigation tool

* fix some spacing

* add action that locks spacebar for navigation when using it as a modifier so the node overlay does not toggle

* escape from the node-graph-overlay, set toggle to ctrl+space, fix demo art

* move all transform state into an enum

* rename confusing flag

* fix demo art and tests

---------

Co-authored-by: Ezbaze <rybitwamateusz3@gmail.com>
2023-09-10 23:42:27 +01:00
Prikshit Gautam ad9ccaa800
Add 'select all points' method to ShapeState struct (#1386)
* Added select all points method to ShapeState struct

* Map select_all_points functions to shortcut

* Make SelectAllPoints action relevant in the current context only

* Refactor select_all_points to only select anchors

* Fix(editor): enable selected point update after selection change via clicking
2023-09-04 19:35:43 -07:00
Keavon Chambers 56f20f2e6d Remove history step creation from Select tool box selection 2023-09-02 15:26:04 -07:00
Keavon Chambers a112ab27cf
Dialog redesign and content revamp (#1409)
* Revamp the content and design of dialogs

* Add the Licenses dialog
2023-09-01 01:58:20 -07:00
mobile-bungalow 48fdaddc37
Add Path tool options for editing X/Y point coordinates (#1404)
* implement path point selector in toolbar

* Transform point to art board space

* fix handle adjustment space

* remove unused branches

* tidy comments

* make function names more descriptive, add guards, fix comments

* add auxillary message for layout update

* change trace to warn, remove unneccessary messages, fix rustfmt

* rustfmt

* support handles

* style and dimensions corrections

* Code review

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-08-29 21:41:01 -07:00
Prikshit Gautam fb1922b49d
Clean up and suppress Clippy warnings (#1402)
* fix: clear and suppress clippy warnings

* Simplification

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-08-27 16:56:53 -07:00
Ezbaze 226b96260c
New nodes: shape/curve primitives (#1389)
* Add new Primitive Shape/Curve Nodes

* Elipse Node and Debug

* N-input Spline node

* Debuging

* Debug

* fmt

* remov debug

* Changes from code review

* Debug: Empty Spline Input

* Changes from code review

* Fix spelling of ellipse

* Rename polygon to regular polygon

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2023-08-27 14:22:09 -07:00
Keavon Chambers 185106132d Move node graph from panel to overlay on viewport 2023-08-19 01:21:37 -07: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
Omar Magdy 8b9f279f12
Add hints for Brush tool resizing (#1363)
Added hints for brush tool size
2023-08-06 15:32:06 -07: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
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
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
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
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
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 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
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
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
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
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 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
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
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
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
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
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
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
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
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
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
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
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
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 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
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
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 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
0HyperCube 7e37fb41a4 Fix crash when using Imaginate tool (#1064)
Fix crash when using imaginate tool
2023-03-02 21:14:12 +00: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
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
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 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
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
Keavon Chambers 202b0ee6ed Remove Color struct from document-legacy (#1012) 2023-02-07 17:31:50 -08: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
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
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
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
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
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 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 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 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 af7779769a Fix stuck outline overlay (#925)
Co-authored-by: Keavon Chambers <keavon@keavon.com>
2022-12-28 20:21:13 +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 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 54f438642b Fix some paper cuts 2022-12-22 23:53:36 -08: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 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
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 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 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 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 3f98d1c896 Add rotation custom cursor icon for the transform cage 2022-11-05 23:02:21 -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 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