* 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>
* 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>
* 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>
* 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
* 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>
* 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
* 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
* 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
* 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>
* 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
* 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
* 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>
* 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
* 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>
* 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>
* 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>
* 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>
* 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>
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>
* 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>
* 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>
* 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>
* 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>
* 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>
* 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>
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.
* 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>
* 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>
* 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>
* 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>
* 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>
* 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>
* 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>
* 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>
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
* 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
* 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>
* 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>
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
* 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
* 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>
* 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>
* 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
* 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
* 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
* 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>
* 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>
* 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>
* 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>
* 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
* 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>
* 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>
* #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>
* 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>
* WIP fix of folder crash / indent
* Fixed most crashes
* Known cases of crash / incorrect behavior resolved
* Removed todo & readability tweak
* Removed left over test
* Resolved clippy issue resulting from merging master
* Replace recursive tree traversal with prefix matching
* Reverted changes for #453 and added undo functionality to Paste
* Make uuid generator thread local for tests
* Maintain layer order, test still failing 50% of the time
* Reverting back to known working with the knowledge we can optimize later.
This reverts commit 1aaf5c0d7dbe67cd9f4ba8b536a4771a2cef6439.
* Revert "Make uuid generator thread local for tests"
This reverts commit d68e3b9c4ebf639c4b2ecae43f5ad3d060dcb12b.
* Revert "Reverted changes for #453 and added undo functionality to Paste"
This reverts commit d66992ac9440f244d461a6a815ae2a08eede47d7.
* Revert "Replace recursive tree traversal with prefix matching"
This reverts commit 6bcbb9f82f62b1f9aa00287110fbce64e1d2f0db.
* Reverted to working state and added comment back to optimized commit hash
* Re-removed the changes involving #453
Co-authored-by: Dennis <dennis@kobert.dev>
* New overlay system that reimplements how overlays are drawn
* Fix overlay message declaration
* Fix small mistake
* WIP (broken) changes to plumb the overlay document
* Fix confusion over messaging system architecture
* Removed log
* Overlay system working
* (broken) WIP overlay association
* Finish the overlay system (except test failure)
* Change back IDs in test
* Fixed test, but stilled fails due to revealed real problem with layer reordering selection
* Disable broken test that has a bug in issue #444
Co-authored-by: Dennis <dennis@kobert.dev>
Co-authored-by: otdavies <oliver@psyfer.io>
* Populate layer entry cache
* Serialize the DocumentMessageHandler
* Fix restoring of collapsed/expanded state, add iter impl for Layer, and clean up layer_data() functions
* Fixed bug with CreateEmptyLayer revealed by test
Co-authored-by: Keavon Chambers <keavon@keavon.com>
Co-authored-by: otdavies <oliver@psyfer.io>
* removed all use of document indicies
* -add u64 support for wasm bridge
* fixed rust formating
* Cleaned up FrontendDocumentState in js-messages
* Tiny tweaks from code review
* - moved more of closeDocumentWithConfirmation to rust
- updated serde_wasm_bindgen to add feature flag
* working initial auto save impl
* auto save is a lifetime file
* - cargo fmt
- fixc error message
- move document version constant
* code review round 1
* generate seed for uuid in js when wasm is initialized
* Resolve PR feedback
* Further address PR feedback
* Fix failing test
Co-authored-by: Keavon Chambers <keavon@keavon.com>
Co-authored-by: otdavies <oliver@psyfer.io>
* removed all use of document indicies
* -add u64 support for wasm bridge
* fixed rust formating
* Cleaned up FrontendDocumentState in js-messages
* Tiny tweaks from code review
* - moved more of closeDocumentWithConfirmation to rust
- updated serde_wasm_bindgen to add feature flag
* changed to upsteam version of serde_wasm_bindgen
* cargo fmt
* -fix event propigation on delete
- Js message change class extention to typedef
* changed another typedef
* cargo fmt
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Created wasm binding to action's of the radio buttons which control the view mode
Added entry to DocumentMessage Enum
* draw in wireframe mode by changing parameters on each shape
added functions/changed behavior to do as above
not working yet
- newly added shapes should be drawn in wireframe
- setting fill to "none" on a path does not only draw an outline
- maybe the stroke width is 0?
* Wire frame view mostly functional for ellipses
- Need to implement for all shapes
- BUG: shapes don't immediatley update upon changing view-mode
* Fixed: active document now updates after view mode swap
* The Pros:
- wire frame mode effects all shapes correctly
The Cons:
- wire frame mode effects everything, including things that maybe shouldn't be, like select boxes and pen lines
* wire frame view no longer effects overlay layers
* Fixed: While in wireframe view the pen tool will draw regular thickness lines.
* some commenting
* Fixed potential bug:
In layer/file system with a Folder layer with a sub-layer that is also
a Folder cache_dirty must be set in order for all shapes to update properly
* refactored code to use ViewMode enum names throughout
* Changed: All wireframe lines are blank
cargo fmt
* Wireframe thickness doesn't change as a result of zooming
- Added DocumentMessage::ReRenderDocument, which marks layers as dirty and renders with the updated render-string
- All "zoom" messages in the movement_handler send a re-render message
- while in wireframe view, the "render-transform" of all shapes includes the root layer transform
Added getter/setter methods for graphene::Document::view_mode
* cargo fmt
* wireframe now has proper thickness after "Zoom Canvas to Fit all" action
* Refactored
- Changed FrontendMessage::UpdateCanvas to RenderDocument message to allow for lazy evaluation
- Created DocumentOperation::SetViewMode to be more consistent with existing code
- removed log statement
- Added constants for empty fill and thin-black stroke
* cargo fmt
* Removed ReRenderDocument message
* cargo fmt
* Fixes as suggested by TrueDoctor
* clean up merge
cargo fmt
* Refactor:
moved view_mode to DocumentMessageHandler
* Polishing
* changed those two comments
* Remove unknown todo comment
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Hook up user input hints to display in the frontend status bar
Closes#171
* MVP hint system based on tool FSM
* Fix hints for Fill and Eyedropper tools
* Add icons for keyboard shortcuts
* Fix hints for Pen Tool
* Cleanup
* Fix new document pos
* All new documents are centered before deserialization
* Move constructors to the top of to block
* Fix merge (moving coe around is a bad idea)
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Add vue selectLayer(layer, ctrl, shift)
* Individual selection working, range fill next
* Frontend package-lock.json seems apparently needs to be pushed. Weird.
* Selection working with ctrl, shift from editor. Still some bugs to sqaush with folder nesting.
* WIP resolving nesting folders issues
* Changed comparison approach, handling corner cases now
* Fully working selection.
* Reverted changes to package-lock.json
* Removed unused code
* Resolved ctrl click not behaving similar to windows
* Slight comment clarification
* Double checked a windows behavior and corrected. Changed last_selected name.
* Simplified if statement slightly.
* Made the naming clearer regarding UUIDs versus indices
* Clarified comments further
* Minor comment fixup
* Implemented suggestions, clarified comments
* Resolved todo regarding clearing selection when ctrl not pressed
* Ensure we only push responses when needed
Co-authored-by: Keavon Chambers <keavon@keavon.com>
Reviewed by: @TrueDoctor <3
* wasm: do the async initialization only once
This allows the rest of the app to access wasm synchronously.
This allows removing of a global.
* provide the wasm via vue provide/inject.
There's still code directly accessing the wasm. That will be changed later.
* MenuBarInput: use injected wasm instead of the global instance
* Let the App handle event listeners
* move stateful modules into state/
* state/fullscreen: create per instance
* App: load the initial document list on mount.
This got lost a few commits ago. Now it's back.
* state/dialog: create per instance
* util/input: remove dependency on global dialog instance
* state/documents: create per instance
* reponse-handler: move into EditorWasm
* comingSoon: move into dialog
* wasm: allow instantiating multiple editors
* input handlers: do not look at canvases outside the mounted App
* input: listen on the container instead of the window when possible
* - removed proxy from wasm-loader
- integrated with js-dispatcher
- state functions to classes
- integrated some upstream changes
* fix errors caused by merge
* Getting closer:
- added global state to track all instances
- fix fullscreen close trigger
- wasm-loader is statefull
- panic across instanes
* - fix outline while using editor
- removed circular import rule
- added editorInstance to js message constructor
* - changed input handler to a class
- still need a better way of handeling it in App.vue
* - fixed single instance of inputManager to weakmap
* - fix no-explicit-any in a few places
- removed global state from input.ts
* simplified two long lines
* removed global state
* removed $data from App
* add mut self to functions in api.rs
* Update Workspace.vue
remove outdated import
* fixed missing import
* Changes throughout code review; note this causes some bugs to be fixed in a later commit
* PR review round 1
* - fix coming soon bugs
- changed folder structure
* moved declaration to .d.ts
* - changed from classes to functions
- moved decs back to app.vue
* removed need to export js function to rust
* changed folder structure
* fixed indentation breaking multiline strings
* Fix eslint rule to whitelist @/../
* Simplify strip-indents implementation
* replace type assertions with better annotations or proper runtime checks
* Small tweaks and code rearranging improvements after second code review pass
* maybe fix mouse events
* Add back preventDefault for mouse scroll
* code review round 2
* Comment improvements
* -removed runtime checks
- fixed layers not showing
* - extened proxy to cover classes
- stopped multiple panics from logging
- Stop wasm-bindgen from mut ref counting our struct
* cleaned up messageConstructors exports
* Fix input and fullscreen regressions
Co-authored-by: Max Fisher <maxmfishernj@gmail.com>
Co-authored-by: mfish33 <32677537+mfish33@users.noreply.github.com>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* ability to mark an open document as unsaved
* unsaved detection now being triggered based on layer tree height
* Changed responses to use classes instead of interfaces
* - rust implementation of unsaved markers
- upgraded eslint
* updated eslint in package.json
* - Renamed GetOpenDocumentsList -> UpdateOpenDocumentsList
- is not -> was not
* changed hash to current identifier to better reflect its meaning
* resolve some merge conflicts
* removed console.log statement leftover from debuging
* - changed Response to jsMessage
- split files
- Array<> -> []
* -remove path from UpdateLayer
* - remove unused if statements
* - comment for reflect-metadata
- registerJsMessageHandler -> subscribeJsMessage
- readonly message properties
- fixed binding filename and comment
- toRgb -> toRgba
* - newOpacity -> transformer
- added comments
* MessageMaker -> messageMaker
* ability to mark an open document as unsaved
* unsaved detection now being triggered based on layer tree height
* - rust implementation of unsaved markers
- upgraded eslint
* updated eslint in package.json
* - Renamed GetOpenDocumentsList -> UpdateOpenDocumentsList
- is not -> was not
* changed hash to current identifier to better reflect its meaning
* resolve some merge conflicts
* removed console.log statement leftover from debuging
* Test snapping
* Snap new shapes
* Fix snapping when zoomed
* Refactor to use viewport bounds
* Reduce snap tolerance to 3
* Snap line and path tool
* Add disable snapping and refactor
* new_snap -> new status
* Rearrange import
* Cleanup
* Fix incorrect variable name
* Store snap data in tool data
* Upgrade Graphite to Rust 2021 edition; upgrade dependencies
* Fix CI
* Move changes to the project Cargo.tomls
* Remove unnecessary 2021 edition upgrade tweak
* Show version number before and after updating rustc
Co-authored-by: Dennis Kobert <dennis@kobert.dev>
# Conflicts:
# Cargo.lock
* Added some notes on what ds to use for the documents.
* Added a separate list of ids to associate ID to doc. Looks up all
documents by id to retrieve an index via linear search.
* Fixed function name.
* Removed id recycling, replaced document vector with hashmap.
* Uses the same logic for PrevDocument in closing
* Hook up layer tree structure with frontend (decoding and Vue are WIP)
* Fix off by one error
* Avoid leaking memory
* Parse layer structure into list of layers
* Fix thumbnail updates
* Correctly popagate deletions
* Fix selection state in layer tree
* Respect expansion during root serialization
* Allow expanding of subfolders
* Fix arrow direction
Co-authored-by: Dennis Kobert <dennis@kobert.dev>
* Dispatcher::handle_message does not need Result anymore (1)
Callers can get rid of result handling, too.
* Dispatcher::handle_message does not need Result anymore (2)
* Dispatcher::handle_message does not need Result anymore (3) cargo fmt
* Add folders to frontend and folder creation to backend
Closes#149
* Add Group keybind
* Add logic to handle expanding of folders
* Send all paths as (u32, u32)
* Add custom serialization for path
* Merge two layer_panel files
* Refactor frontend layer merging
* Fix JS linting
* Update upstream thumbnail changes
* Add paste into selected folder + fix thumbnail dirtification
* Implement CollapseFolder function
* Skip folders on a different indentation level during reorder
* Only reorder within the same folder
* Add folder node icon for folder layers
* Add expand/collapse folder button; partly implement new layer tree design
* Update terminology in the docs
* Add number labels to ruler marks
* Replace promise with await in MenuList.vue
* Miscellaneous minor code cleanup
* Disallow snake_case variable names in frontend
* Add support for saving and opening files (#325)
* Add support for saving a document
This is similar to the "export" functionality, except that
we store all metadata needed to open the file again.
Currently we store the internal representation of the layer
which is probably pretty fragile.
* Add support for opening a saved document
User can select a file using the browser's file input selector.
We parse it as JSON and load it into the internal representation.
Concerns:
- The file format is fragile
- Loading data directly into internal data structures usually creates
security vulnerabilities
- Error handling: The user is not informed of errors
* Serialize Document and skip "cache" fields in Layer
Instead of serializing the root layer, we serialize the
Document struct directly. Additionally, we mark the
"cache" fields in layer as "skip" fields so they
don't get serialized.
* Opened files use the filename as the tab title
* Split "new document" and "open document" handling
Open document needs name and content to be provided so having a
different interface is cleaner. Also did some refactoring to reuse code.
* Show error to user when a file fails to open
* Clean up code: better variable naming and structure
* Use document name for saved and exported files
We pass through the document name in the export and save
messages. Additionally, we check if the appropriate file
suffixes (.graphite and .svg) need to be added before
passing it to the frontend.
* Refactor document name generation
* Don't assign a default of 1 to Documents that start with something
other than DEFAULT_DOCUMENT_NAME
* Improve runtime complexity by using binary instead of linear search
* Update Layer panel upon document selection
* Add File>Open/Ctrl+O; File>Save (As)/Ctrl+(Shift)+S; browse filters extension; split out download()/upload() into files.ts; change unsaved close dialog text
Co-authored-by: Dennis Kobert <dennis@kobert.dev>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Refactor ViewportPosition from u32 (UVec2) to f64 (DVec2) (#345)
* Refactor ViewportPosition from u32 (UVec2) to f64 (DVec2)
* Fix pseudo_hash call
* Replace hash function with proper function for uuid generation
* Cargo fmt
Co-authored-by: Dennis Kobert <dennis@kobert.dev>
* Improve Frontend -> Backend user input system (#348)
Includes refactor that sends coordinates of the document viewports to the backend so input is sent relative to the application window
Closes#124Fixes#291
* Improve Frontend -> Backend user input system
* Code review changes
* More code review changes
* Fix TS error
* Update the readme
* Make scrollbars interactable (#328)
* Make scrollbars interactable
* Add watcher for position change
* Fix case of data
* Fix updateHandlePosition capitalization
* Clean up class name thing
* Scroll bars between 0 and 1
* Allow width to be 100%
* Scrollbars reflect backend
* Include viewport in scrollbar
* Add half viewport padding for scrollbars
* Refactor scrollbar using lerp
* Send messages to backend
* Refactor
* Use glam::DVec2
* Remove glam::
* Remove unnecessary abs
* Add TrueDoctor's change
* Add missing minus
* Fix vue issues
* Fix viewport size
* Remove unnecessary log
* Linear dragging
* Improve scrollbar behavior (#351)
* Change scrollbar behavior
* Leave space at the end of the scrollbar
* Change mid to center
* Use shorter array initialization
* Add space around scrollbar
* Fix scrollbar spacing
* Smooth end of scrollbars
* Add page up and down
* Page up and down on click in scrollbar track
* Add shift pageup to translate horizontally
* Implement bounding box for selected layers (#349)
* Implement bounding box for selected layers
* Add shift modifier for multi selection
* Fix collapsing of folders
* Add have pixel offset to selection bounding box
* Don't panic on Ctrl + A
* Rename to camel case
* Add todo comment for Keavon
* Apply @Hypercubes review suggestions
* Fix many panics, improve behavior of copy/paste and grouping (but grouping still can panic)
Co-authored-by: Dennis Kobert <dennis@kobert.dev>
* Implement Path Tool
* Draw a red rectangle where the first point on the shape is
* Correctly render anchors, handles, and connecting lines
* Fix drain() which can panic
* Refactor frontend messages to work as return values not callbacks
* Reduce the number of unnecessary frontend updates
* Fix stack overflow by using a loop
* Group Document Render calls and put them at the end
* Speed hacks for dirtification
* Add performance
* Bunch folder changed updates
* Add triggers to redraw overlays to movement_handler
* Polish the pixel-perfect rendering of vector manipulators
* Restore scrollbars that were disabled
* Cleanup
* WIP Add shape outline rendering
* Fix compiling
* Add outlines to selected shapes
* Fix outlines rendering over handles and anchors
* Fix dirtification
* Add a comment
* Address code review feedback
* Formatting
* Small tweaks
Co-authored-by: Oliver Davies <oliver@psyfer.io>
Co-authored-by: Dennis Kobert <dennis@kobert.dev>
* Add two-way tool option messaging system
* Rename tool option functions
* Move repeated frontend messaging code to function
* Address style comments
* Rename variable to be more descriptive
* Move tool options update to SetActiveTool message
* Refactor record of all tool options
* Only pass active tool options to bar
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Implement undo and redo
* Create more save points and hook up menu entry
* Fix operation ordering
* Remove debug statement
* Fix folder changed order
* Don't store overlays in the history chain
* Keep selection
* Add a stroke width option to the Line Tool
* Fix title case for line options
* Add px unit to line stroke width
* Add stroke width to pen tool
* Rename stroke width to weight
* Change number input width to min-width
* Remove the word "stroke" from "stroke weight"
* Change scrollbar behavior
* Leave space at the end of the scrollbar
* Change mid to center
* Use shorter array initialization
* Add space around scrollbar
* Fix scrollbar spacing
* Smooth end of scrollbars
* Add page up and down
* Page up and down on click in scrollbar track
* Add shift pageup to translate horizontally
* Make scrollbars interactable
* Add watcher for position change
* Fix case of data
* Fix updateHandlePosition capitalization
* Clean up class name thing
* Scroll bars between 0 and 1
* Allow width to be 100%
* Scrollbars reflect backend
* Include viewport in scrollbar
* Add half viewport padding for scrollbars
* Refactor scrollbar using lerp
* Send messages to backend
* Refactor
* Use glam::DVec2
* Remove glam::
* Remove unnecessary abs
* Add TrueDoctor's change
* Add missing minus
* Fix vue issues
* Fix viewport size
* Remove unnecessary log
* Linear dragging
Includes refactor that sends coordinates of the document viewports to the backend so input is sent relative to the application window
Closes#124Fixes#291
* Improve Frontend -> Backend user input system
* Code review changes
* More code review changes
* Fix TS error
* Refactor ViewportPosition from u32 (UVec2) to f64 (DVec2)
* Fix pseudo_hash call
* Replace hash function with proper function for uuid generation
* Cargo fmt
Co-authored-by: Dennis Kobert <dennis@kobert.dev>
* Add support for saving a document
This is similar to the "export" functionality, except that
we store all metadata needed to open the file again.
Currently we store the internal representation of the layer
which is probably pretty fragile.
Example document:
```json
{
"nodes": {},
"root": {
"blend_mode": "Normal",
"cache": "...",
"cache_dirty": false,
"data": {
"Folder": {
"layer_ids": [
3902938778642561358
],
"layers": [
{
"blend_mode": "Normal",
"cache": "...",
"cache_dirty": false,
"data": {
"Shape": {
"path": [
{
"MoveTo": {
"x": 0.0,
"y": 0.0
}
},
{
"LineTo": {
"x": 1.0,
"y": 0.0
}
},
{
"LineTo": {
"x": 1.0,
"y": 1.0
}
},
{
"LineTo": {
"x": 0.0,
"y": 1.0
}
},
"ClosePath"
],
"render_index": 1,
"solid": true,
"style": {
"fill": {
"color": {
"alpha": 1.0,
"blue": 0.0,
"green": 0.0,
"red": 0.0
}
},
"stroke": null
}
}
},
"name": null,
"opacity": 1.0,
"thumbnail_cache": "...",
"transform": {
"matrix2": [
223.0,
0.0,
-0.0,
348.0
],
"translation": [
-188.0,
-334.0
]
},
"visible": true
}
],
"next_assignment_id": 3902938778642561359
}
},
"name": null,
"opacity": 1.0,
"thumbnail_cache": "...",
"transform": {
"matrix2": [
1.0,
0.0,
0.0,
1.0
],
"translation": [
479.0,
563.0
]
},
"visible": true
},
"version": 0
}
```
* Add support for opening a saved document
User can select a file using the browser's file input selector.
We parse it as JSON and load it into the internal representation.
Concerns:
- The file format is fragile
- Loading data directly into internal data structures usually creates
security vulnerabilities
- Error handling: The user is not informed of errors
* Serialize Document and skip "cache" fields in Layer
Instead of serializing the root layer, we serialize the
Document struct directly. Additionally, we mark the
"cache" fields in layer as "skip" fields so they
don't get serialized.
* Opened files use the filename as the tab title
* Split "new document" and "open document" handling
Open document needs name and content to be provided so having a
different interface is cleaner. Also did some refactoring to reuse code.
* Show error to user when a file fails to open
* Clean up code: better variable naming and structure
* Use document name for saved and exported files
We pass through the document name in the export and save
messages. Additionally, we check if the appropriate file
suffixes (.graphite and .svg) need to be added before
passing it to the frontend.
* Refactor document name generation
* Don't assign a default of 1 to Documents that start with something
other than DEFAULT_DOCUMENT_NAME
* Improve runtime complexity by using binary instead of linear search
* Update Layer panel upon document selection
* Add File>Open/Ctrl+O; File>Save (As)/Ctrl+(Shift)+S; browse filters extension; split out download()/upload() into files.ts; change unsaved close dialog text
Co-authored-by: Dennis Kobert <dennis@kobert.dev>
Co-authored-by: Keavon Chambers <keavon@keavon.com>