* Tidy up number text alignment and decimal precision for quick measurement overlays
* Tidy up number text alignment and decimal precision for quick measurement overlays
* Tidy up number text alignment and decimal precision for quick measurement overlays
* Tidy up number text alignment and decimal precision for quick measurement overlays
* Tidy up number text alignment and decimal precision for quick measurement overlays
* Tidy up number text alignment and decimal precision for quick measurement overlays
* Tidy up number text alignment and decimal precision for quick measurement overlays
* Tidy up number text alignment and decimal precision for quick measurement overlays
* Formatting changes
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Implement deselect on single-click and select all anchors on double-click
* fixed the single_click_behaviour
* fix flipSmoothSharp when doubleclick and drag
* Cleanup and Clippy fixes
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* setup single edge crossing handling for quick measure tool
* Setup quick measure functionality for intersecting objects and handle centerline cases for non intersecting objects.
* setup single edge crossing handling for quick measure tool
* Setup quick measure functionality for intersecting objects and handle centerline cases for non intersecting objects.
* Setup quick measure functionality for intersecting objects and handle centerline cases for non intersecting objects.
* Setup quick measure functionality for intersecting objects and handle centerline cases for non intersecting objects.
* Setup quick measure functionality for intersecting objects and handle centerline cases for non intersecting objects. Add a dashed_line_with_pattern function that gives more granular control over dash_width and gap_width.
* Setup quick measure functionality for intersecting objects and handle centerline cases for non intersecting objects. Add a dashed_line_with_pattern function that gives more granular control over dash_width and gap_width.
* Setup quick measure functionality for intersecting objects and handle centerline cases for non intersecting objects. Add a dashed_line_with_pattern function that gives more granular control over dash_width and gap_width.
* Setup quick measure functionality for intersecting objects and handle centerline cases for non intersecting objects. Add a dashed_line_with_pattern function that gives more granular control over dash_width and gap_width.
* Nit picks
* Define wrapper for Overlay_context line method
* Comments and consolidating lines of code
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* place new layer from basic tools within an artboard bounds
Signed-off-by: James Ryans <james.ryans2012@gmail.com>
* add for Text Tool
Signed-off-by: James Ryans <james.ryans2012@gmail.com>
* use click_xray function
Signed-off-by: James Ryans <james.ryans2012@gmail.com>
* support for freehand tool
Signed-off-by: James Ryans <james.ryans2012@gmail.com>
* support spline tool
Signed-off-by: James Ryans <james.ryans2012@gmail.com>
---------
Signed-off-by: James Ryans <james.ryans2012@gmail.com>
* Selection history when creating a new layer
* fixed selection history
* cleaned up the code, removed duplicate network_metadata calls
* re: fixed selection history
Added a default value for selection_undo_history to make sure its never actually empty.
* 2115 IP
* Initial implementation of Expression node
* Register Expression Node
* Add Expression DocumentNode Definition
* DocumentNodeImplementation::Expresssion in guess_type_from_node
* Move expression.rs to graphene-core
* WIP: Investigating 'exposed' & 'value_source' params for Expression property
* Node graph render debug IP
* Single input can change node properties; complex debug IP
* Fix epsilon in test
* Handle invalid expressions in expression_node by returning 0.0
* Run cargo fmt
* Set the default expression to "1 + 1"
* Hardcode the A and B inputs at Keavon's request
* Rename and clean up UX
* Move into ops.rs
---------
Co-authored-by: hypercube <0hypercube@gmail.com>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* pen should always snap on last anchor
Signed-off-by: James Ryans <james.ryans2012@gmail.com>
* snap anchor on every single connected points
Signed-off-by: James Ryans <james.ryans2012@gmail.com>
---------
Signed-off-by: James Ryans <james.ryans2012@gmail.com>
* Append to a path with shift
* Fixup transforms
* Revert unnecessary transform change
* Fix delete node button transaction
* Prevent artboard from being selected after making a new document
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Modified Path tool Behaviour
* Make the code simpler and more self-descriptive
* Make it work for transformed layers
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Add "Fade Artwork" slider and disable tools when graph is open
* Add navigation and layer/node management buttons to graph top bar
* Reduce code duplication
* feat: tab alternates between handles
* fix: handle hints, remove anchor to handle switch
Added specific handle hints,
Can no longer switch to handle if just anchor is selected
typo fix
* fix: no longer deselect on esc/rclick
* feat: hides cursor when switching
A pointerlock implementation would be ideal in the future to keep the screen from panning,
* fix: tidy up dynamic tool hints
switch colinear to V
* fix: can no longer hide cursor if anchor selected
remove debug statement
* fix: clippy
* Solve some issues and remap V to C to toggle colinear
* Cleanup + change equidistant key from Shift to Alt
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* in progress:
* cherry-pick
* works kinda, fails when holding down space
* seems to be working
* naming
* fix :clippy
* fix: put back in newline
* fix: add overlay draw message
will now visibly select points when pressing space instantly as opposed
to when its moved
* cleanup + rename
* refactor to use refresh keys
* fix: naming
* add back in todo
* :)
* fix: Small bugs relating to space handle selection
If release mouse before space, reselect previous points and unselects points
selected by space.
If only anchor is selected it will not select handles.
Removed comment as its now clear what its doing / where its coming from
* Add node button
* Improve css a bit
* Add layer renaming to the Properties panel and move New Layer to that, plus add unpinning to properties sections
* Add tooltip
* Re-add layer itself in listing
* Final code review
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Fix me crashing the editor due to not paying attention
* Swap two lines for consistency
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Add path-bool library
* Cleanup code
* Cargo format
* Integrate boolean ops into graphite
* Add test for editor crash
* Fix edge sort floating point instability
* Add unit test for red-dress failure
* Backport tests and aux functions
* Use curvature based sorting
* Convert linear cubic splines to line segments
* Deduplicate reversed path segments
* Fix epsilon for empty segments
* Remove parameter based intersection pruning
* Add support for reversed paths
* Add benchmark infrastructure
* Add intersection benchmark
* Add recursion bound
* Implement support for overlapping path segments
* Remove rouge prinln
* Fix sorting for bezier segments with one control point at the start of the segment
* Cleanup log statements
* Directly translate graphite paths to Path segments
* Round data before passing it to path_bool
* Fix flag_faces traversal order
* Add test for white dots in bottom right of painted dreams
* Make rounding configurable
* Update demo artwork to remove manual path modifications
* Convert from path segments to manipulator groups directly
* Remove dead code
* Fix clippy lints
* Replace functions in path segment with methods and add documentation
* Add more documentation
* Close subpaths
* Reorganize files and add README.md
* Add license information
* Code review
* Fix license info
* Adopt new node macro and fix demo artwork
* Close subpaths with Z
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Add support structure for new node macro to gcore
* Fix compile issues and code generation
* Implement new node_fn macro
* Implement property translation
* Fix NodeIO type generation
* Start translating math nodes
* Move node implementation to outer scope to allow usage of local imports
* Add expose attribute to allow controlling the parameter exposure
* Add rust analyzer support for #[implementations] attribute
* Migrate logic nodes
* Handle where clause properly
* Implement argument ident pattern preservation
* Implement adjustment layer mapping
* Fix node registry types
* Fix module paths
* Improve demo artwork comptibility
* Improve macro error reporting
* Fix handling of impl node implementations
* Fix nodeio type computation
* Fix opacity node and graph type resolution
* Fix loading of demo artworks
* Fix eslint
* Fix typo in macro test
* Remove node definitions for Adjustment Nodes
* Fix type alias property generation and make adjustments footprint aware
* Convert vector nodes
* Implement path overrides
* Fix stroke node
* Fix painted dreams
* Implement experimental type level specialization
* Fix poisson disk sampling -> all demo artworks should work again
* Port text node + make node macro more robust by implementing lifetime substitution
* Fix vector node tests
* Fix red dress demo + ci
* Fix clippy warnings
* Code review
* Fix primary input issues
* Improve math nodes and audit others
* Set no_properties when no automatic properties are derived
* Port vector generator nodes (could not derive all definitions yet)
* Various QA changes and add min/max/mode_range to number parameters
* Add min and max for f64 and u32
* Convert gpu nodes and clean up unused nodes
* Partially port transform node
* Allow implementations on call arg
* Port path modify node
* Start porting graphic element nodes
* Transform nodes in graphic_element.rs
* Port brush node
* Port nodes in wasm_executior
* Rename node macro
* Fix formatting
* Fix Mandelbrot node
* Formatting
* Fix Load Image and Load Resource nodes, add scope input to node macro
* Remove unnecessary underscores
* Begin attemping to make nodes resolution-aware
* Infer a generic manual compositon type on generic call arg
* Various fixes and work towards merging
* Final changes for merge!
* Fix tests, probably
* More free line removals!
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Fix transformation for primitive tools, make odd-sided polygons and stars flipped with radius instead of scale
* Extract to function and add comment
* Code review
---------
Co-authored-by: hypercube <0hypercube@gmail.com>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* modify interval calculation
* modify progression and add powers of 10
* Some small tweaks
* Prevent the graph view from subdividing below 1
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Rework boolean operation node
* Set Boolean Operation name for layer
* Remove memoize
* Update both demo artworks that use booleans
* Delete dead code, rename input connectors
* Remove more dead code
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Add compile time benchmark for the demo artwork
* Implement node input replacement batching
isometric-fountain time: [7.4307 ms 7.5072 ms 7.5974 ms]
change: [-19.302% -18.136% -16.903%] (p = 0.00 < 0.05)
Performance has improved.
Found 10 outliers among 100 measurements (10.00%)
6 (6.00%) high mild
4 (4.00%) high severe
painted-dreams time: [1.8108 ms 1.8223 ms 1.8350 ms]
change: [-12.422% -11.524% -10.650%] (p = 0.00 < 0.05)
Performance has improved.
Found 13 outliers among 100 measurements (13.00%)
5 (5.00%) high mild
8 (8.00%) high severe
procedural-string-lights
time: [551.65 µs 560.58 µs 571.13 µs]
change: [-5.7783% -2.5770% +1.3136%] (p = 0.20 > 0.05)
No change in performance detected.
Found 6 outliers among 100 measurements (6.00%)
1 (1.00%) high mild
5 (5.00%) high severe
red-dress time: [9.7951 ms 9.9006 ms 10.016 ms]
change: [-18.812% -17.558% -16.292%] (p = 0.00 < 0.05)
Performance has improved.
Found 5 outliers among 100 measurements (5.00%)
5 (5.00%) high mild
valley-of-spires time: [4.7294 ms 4.7837 ms 4.8442 ms]
change: [-16.889% -15.712% -14.615%] (p = 0.00 < 0.05)
Performance has improved.
Found 16 outliers among 100 measurements (16.00%)
11 (11.00%) high mild
5 (5.00%) high severe
* Implement node dependency tracking
isometric-fountain time: [6.5695 ms 6.6418 ms 6.7227 ms]
change: [-13.426% -12.112% -10.681%] (p = 0.00 < 0.05)
Performance has improved.
Found 10 outliers among 100 measurements (10.00%)
5 (5.00%) high mild
5 (5.00%) high severe
painted-dreams time: [1.7406 ms 1.7566 ms 1.7742 ms]
change: [-4.7386% -3.5484% -2.3707%] (p = 0.00 < 0.05)
Performance has improved.
Found 11 outliers among 100 measurements (11.00%)
10 (10.00%) high mild
1 (1.00%) high severe
procedural-string-lights
time: [585.40 µs 590.98 µs 596.82 µs]
change: [-3.7739% +0.7591% +4.6293%] (p = 0.76 > 0.05)
No change in performance detected.
Found 3 outliers among 100 measurements (3.00%)
3 (3.00%) high mild
red-dress time: [8.4314 ms 8.5072 ms 8.5899 ms]
change: [-26.797% -25.374% -23.958%] (p = 0.00 < 0.05)
Performance has improved.
Found 11 outliers among 100 measurements (11.00%)
5 (5.00%) high mild
6 (6.00%) high severe
valley-of-spires time: [4.3700 ms 4.4118 ms 4.4579 ms]
change: [-11.470% -10.198% -8.9826%] (p = 0.00 < 0.05)
Performance has improved.
Found 12 outliers among 100 measurements (12.00%)
7 (7.00%) high mild
5 (5.00%) high severe
* Remove clone and use rustc hash for storing nodes
isometric-fountain time: [5.9220 ms 5.9854 ms 6.0570 ms]
change: [-11.974% -10.539% -9.2291%] (p = 0.00 < 0.05)
Performance has improved.
Found 12 outliers among 100 measurements (12.00%)
4 (4.00%) high mild
8 (8.00%) high severe
painted-dreams time: [1.5337 ms 1.5470 ms 1.5618 ms]
change: [-11.901% -10.907% -9.9075%] (p = 0.00 < 0.05)
Performance has improved.
Found 9 outliers among 100 measurements (9.00%)
5 (5.00%) high mild
4 (4.00%) high severe
procedural-string-lights
time: [496.44 µs 501.44 µs 506.33 µs]
change: [-20.002% -15.633% -12.213%] (p = 0.00 < 0.05)
Performance has improved.
Found 4 outliers among 100 measurements (4.00%)
3 (3.00%) high mild
1 (1.00%) high severe
red-dress time: [7.7037 ms 7.7871 ms 7.8774 ms]
change: [-11.906% -10.576% -9.2560%] (p = 0.00 < 0.05)
Performance has improved.
Found 8 outliers among 100 measurements (8.00%)
7 (7.00%) high mild
1 (1.00%) high severe
valley-of-spires time: [3.9182 ms 3.9501 ms 3.9851 ms]
change: [-14.615% -13.075% -11.500%] (p = 0.00 < 0.05)
Performance has improved.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high severe
* Fix test depending on stable node order
* Simplify flattening
* Remove unused dependant vec size safeguards
* Improve topological sort and make assert debug only
isometric-fountain time: [2.9515 ms 2.9971 ms 3.0459 ms]
change: [-61.270% -60.533% -59.747%] (p = 0.00 < 0.05)
Performance has improved.
Found 11 outliers among 100 measurements (11.00%)
7 (7.00%) high mild
4 (4.00%) high severe
Benchmarking painted-dreams: Warming up for 3.0000 s
Warning: Unable to complete 100 samples in 5.0s. You may wish to increase target time to 8.1s, enable flat sampling, or reduce sample count to 50.
painted-dreams time: [1.1134 ms 1.1322 ms 1.1494 ms]
change: [-40.991% -37.660% -34.129%] (p = 0.00 < 0.05)
Performance has improved.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high severe
procedural-string-lights
time: [391.88 µs 397.80 µs 403.84 µs]
change: [-19.953% -17.762% -14.930%] (p = 0.00 < 0.05)
Performance has improved.
Found 6 outliers among 100 measurements (6.00%)
3 (3.00%) high mild
3 (3.00%) high severe
red-dress time: [3.0722 ms 3.1179 ms 3.1707 ms]
change: [-59.878% -59.168% -58.422%] (p = 0.00 < 0.05)
Performance has improved.
Found 12 outliers among 100 measurements (12.00%)
5 (5.00%) high mild
7 (7.00%) high severe
valley-of-spires time: [2.0234 ms 2.0470 ms 2.0737 ms]
change: [-48.994% -47.910% -46.907%] (p = 0.00 < 0.05)
Performance has improved.
Found 9 outliers among 100 measurements (9.00%)
2 (2.00%) high mild
7 (7.00%) high severe
* Improve id remapping logic by reusing id mapping
isometric-fountain time: [2.2464 ms 2.2841 ms 2.3260 ms]
change: [-25.693% -23.790% -22.024%] (p = 0.00 < 0.05)
Performance has improved.
Found 6 outliers among 100 measurements (6.00%)
5 (5.00%) high mild
1 (1.00%) high severe
Benchmarking painted-dreams: Warming up for 3.0000 s
Warning: Unable to complete 100 samples in 5.0s. You may wish to increase target time to 7.3s, enable flat sampling, or reduce sample count to 50.
painted-dreams time: [869.96 µs 886.99 µs 902.36 µs]
change: [-26.928% -19.590% -8.0737%] (p = 0.00 < 0.05)
Performance has improved.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high severe
procedural-string-lights
time: [291.60 µs 296.60 µs 302.45 µs]
change: [-28.175% -25.168% -22.078%] (p = 0.00 < 0.05)
Performance has improved.
Found 8 outliers among 100 measurements (8.00%)
2 (2.00%) high mild
6 (6.00%) high severe
red-dress time: [2.7946 ms 2.8356 ms 2.8800 ms]
change: [-10.991% -9.0546% -6.9757%] (p = 0.00 < 0.05)
Performance has improved.
Found 7 outliers among 100 measurements (7.00%)
7 (7.00%) high mild
valley-of-spires time: [1.5583 ms 1.5801 ms 1.6039 ms]
change: [-24.165% -22.811% -21.213%] (p = 0.00 < 0.05)
Performance has improved.
Found 7 outliers among 100 measurements (7.00%)
7 (7.00%) high mild
* Remove flame graph file
* Add constraint_bounds function to Quad implementation
* Respect Clip property when exporting All Artworks and centering document using the ctrl + 0 hotkey.
Calculate artboard_clip_bounds and then constraint the all_layer_bounds to respect the bounds of the Clipped Artboards.
* Use parent_artboard to find ancestor artboards of each layer and constrain bounds if artboard is clipped
* Remove redundant comments
* Get output/input types by iterating to proto node. Fix types when undoing/redoing
* Remove unused code
* Fix types not updating when modified
* Improve code quality
* Improve proto node type lookup
* Nits
* Fix crash when adding Extract
---------
Co-authored-by: dennis@kobert.dev <dennis@kobert.dev>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
* Make noise generation resolution aware
* Invert "Scale" so it's not "Frequency"; make "Clipping" 100x100 not 1x1
---------
Co-authored-by: Keavon Chambers <keavon@keavon.com>