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