Commit Graph

237 Commits

Author SHA1 Message Date
Dennis Kobert a4ec50d8ba
Improve robustness and performance of the boolean operation algorithm (#2191)
* Improve perf of path bool lib

* Use swap remove

* Use outer/inner bounding box for inclusion testing

* Reuse allocations for hit testing

* Use direct root finding for inclusion testing

* Reuse bounding box

* Use faster hash and specify capacities

* Use hashmap based approach for find vertices

* Unroll find_vertecies loop and use 32 bit positions

* Tune initial vec capacities

* Remove unused bounding boxes

* Use smallvec for storing outgoing edges

* Improve allocations for compute_minor

* Use approximate bounding box for edge finding

* Transition aabb to use glam vecs

* Make find vertecies use 64 bit again this is slower but less likely to cause issues

* Improve intersection candidate finding

* Remove loop check in bit vec iter

* Special case cubic line intersections

* Optimize grid rounding and add debug output

* Remove file write

* Remove faulty line intersection

* Fix grid rounding

* Improve robustness and cleanaup code

* Make elided lifetime explicit

* Fix tests

* Fix a boolean ops crash

* Add comment

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2025-08-21 23:15:36 +00:00
Dennis Kobert e56f858ced Desktop: Implement GPU accelerated offscreen rendering and improve rendering efficency (#3056)
* WIP accelerade offscreen canvas implementation

* Implement vulkan dmabuf import

* Add fps printing

* Add feature gates

* Forgot to add file

* Experimental windows support

* Cast ptr to isize

* Remove testing chrome://flags url

* Experimental macos support for texture import

* Cleanup code and improve latency / frame pacing

* Add path for importing textures on windows through dx12

* Update doc comment

* Import textures through metal on macos

* Review cleanup

---------

Co-authored-by: Timon Schelling <me@timon.zip>
2025-08-21 10:09:38 -07:00
Timon 2c8913416d
Desktop: Move wrapper to separate crate (#3073)
Move desktop wrapper to separate crate
2025-08-20 15:41:34 +00:00
Dennis Kobert a70c48f69a
Use lyon_geom for intersection calculation of bezier segments (#3071)
* Add lyon_geom for cubic cubic intersections in he path bool crate

* Remove cubic line intersection for now
2025-08-20 13:59:11 +02:00
Dennis Kobert 7c30f6168b
Improve snapping performance (#3067)
* Use lyon_geom for intersection calculation of bezier segments

* Implement approximate nearest point calculation and loosen bounding boxes

* Add algorithm explanation

* Update editor/src/messages/tool/common_functionality/snapping/layer_snapper.rs

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

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2025-08-20 10:47:58 +02:00
Firestar99 0a53eae4e0
Remove unused cargo dependencies (#3063)
* cargo shear

* fix warnings on master

* fix docs needing dev-dependency
2025-08-18 11:26:44 -07:00
Keavon Chambers 3bcec37493
Remove the deprecated/archived Bezier-rs library from the repo (#3058)
Remove the Bezier-rs library from the repo
2025-08-16 17:29:00 -07:00
Priyanshu d22b2ca927
Refactor the Centroid node and `Subpath` struct and methods to use Kurbo, eliminating all remaining usages of Bezier-rs (#3036)
* define Subpath struct in gcore and refactor node-graph

* Refactor few methods

* refactoring worked!

* refactor centoid area and length

* remove unused

* cleanup

* fix pathseg_points function

* fix tranforming segments

* fix segment intersection

* refactor to_path_segments fn in gpath-bool crate

* refactor gcraft

* add bezier-rs dep

* Code review the editor directory

* use path-bool for solving roots

* Code review

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2025-08-16 13:39:25 -07:00
Timon 2995113b39
Desktop: Update CEF to 139.0.1 (#3046)
Update cef to 139.0.1

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2025-08-13 12:55:42 -07:00
jneem 6c3b7b23c5
Simplify Bezier-rs using poly-cool as the root finder (#3031)
* Convert tangents_to_point

* Convert normals_to_point

* Port over roots and project

* Remove symmetrical_basis

* Code style nits

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2025-08-13 19:10:10 +00:00
Timon fa2167dd7f
Desktop: Drag and drop file to open/import functionality (#3035)
* Desktop app add drop file functionality

* Add x11 libs to flake

* Restructure extension matching to remove nesting

---------

Co-authored-by: Dennis Kobert <dennis@kobert.dev>
2025-08-11 11:48:10 +00:00
Keavon Chambers 2bb4509647
Replace the Spreadsheet panel with an improved Data panel (#3037)
* Improve the table data panel

* Add the "Window" menu bar section and polish everything
2025-08-10 07:46:42 -07:00
Dennis Kobert 9b8935d201
Add iai versions of the runtime benchmarks (#3016)
* Include graph runtime benchmarks in ci regression run

* Update benchmarking workflow

* Remove ci script changes
2025-08-07 00:48:25 +02:00
Timon 5f2432cacf
Desktop: Open links in default browser and prevent popups (#3006)
* Deny all browser popups

* Open links with default browser

* Fix review comments
2025-08-06 15:28:10 +00:00
Timon 7cb42b9523
Desktop: Add native file dialogs (#2939)
* Add native open file dialog

* Add native save file dialog

* Fix integer underflow in defer message handler

* Update nix flake

* Cleanup

---------

Co-authored-by: Dennis Kobert <dennis@kobert.dev>
2025-08-04 13:58:33 +00:00
Timon 34a8b9b6f1
Desktop: Render overlays with vello (#2965)
* Render overlays with vello

* Fix nix flake comments

* Rendering refactor with better names and code location

* Remove unnecessary overlay renders

* Post rebase fix
2025-08-02 14:27:24 +00:00
Dennis Kobert 08ec1d08f6
Desktop: Execute editor and node graph natively (#2955)
* Desktop: Execute editor and node graph natively

* Remove decouple execution feature

* Disable feature gate for native communication functions

* Avoid ininite message loop on an infinite canvas

* Add any lint exception

* Build evaluation loop

* Fix texture passing message

* Cleanup

* More cleanup

---------

Co-authored-by: Timon Schelling <me@timon.zip>
2025-07-31 10:26:36 +00:00
Dennis Kobert 00cfa073b8
Stub vello based overlay implementation (#2956)
* Stub vello based overlay implementation

* Fix warnings

* Don't panic on non implemented functions to allow the tests to pass

* Don't draw overlays for tests
2025-07-29 22:06:45 +02:00
Timon 6119dea58c
Desktop add viewport texture (#2953)
* Allow rendering viewport texture beneath ui texture

* Add viewport scale

* Update desktop/src/render/fullscreen_texture.wgsl

---------

Co-authored-by: Dennis Kobert <dennis@kobert.dev>
2025-07-28 17:10:27 +00:00
Firestar99 4fec24893e
Shaders: add `gcore-shaders` and make `graster-nodes` no-std (#2925)
* gcore-shaders: add crate, move `color` and `blending` from gcore

* gcore-shaders: move `AsU32`

* gcore-shaders: move `ChoiceType`, switch `Cow` for `&str`, adjust node macro

* gcore-shaders: move `registry::types`

* gcore-shaders: move `context::Ctx`

* raster-nodes: make it `no_std` with `std` feature

* gcore-shaders: fix doctest
2025-07-25 17:53:26 +00:00
Adam Gerhant 735d58a647
Desktop: Remove unnecessary dependencies in the desktop crate (#2934)
* remove unnecessary dependencies

* Add start-desktop
2025-07-25 01:20:27 -07:00
mTvare 72f1047a27
Display images in the SVG viewport renderer via canvases instead of base64 PNGs (#2903)
* add: move images as rendered canvases to node_graph_executor

* add: added the frontend message

* fix: bytemuck stuff

* fix: canvas element breaking

* fix: width issues

* fix: remove the old message

* npm: run lint-fix

* fix

* works finally

* fix transforms

* Fix self closing tag

* fix: reuse id

* fix: have it working with repeat instance

* cargo: fmt

* fix

* Avoid "canvas" prefix to IDs

* fix

* fix: vello issue from 6111440

* fix: gpu stuff

* fix: vello bbox

* Code review

---------

Co-authored-by: hypercube <0hypercube@gmail.com>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
2025-07-24 17:14:38 -07:00
Timon 9f4f3681c3
Desktop set cef data and cache directory (#2927) 2025-07-24 16:56:57 +00:00
Firestar99 59f3835c5d
Shaders: node macro (#2923)
* node_macro: cleanup attr parsing

* node_macro: add `cfg()` attr to feature gate node impl

* node_macro: add `shader_nodes` option

* node_macro: fixup tests
2025-07-24 12:58:30 +00:00
Firestar99 2d11d96b4a
Re-add upload texture (#2915)
* vello: code cleanup of resource overwrites

* upload_texture: upload cpu textures as SRGBA8

* vello: fix wgpu::Texture leak within vello's `context.resource_overrides` HashMap

* fix missing feature gate
2025-07-24 10:51:03 +00:00
Timon 30abc92900
Implement basic desktop app with chromium embeded framework (#2874)
* Remove tauri based desktop app

* Allow bzip-1.0.6 license

* Implement basic cef based desktop app

* Cleanup build setup

* Use wait until and execute cef loop more frequently

* Remove custom do browser work event

* Move WinitApp into its own module

* Cleanup event handling

* Cleanup + Scheudule cef message loop work

* Fix cpu overheating on idle: https://xkcd.com/1172/

* Use tracing crate for logging instead of println

* Rebase to main

---------

Co-authored-by: Dennis Kobert <dennis@kobert.dev>
2025-07-23 20:27:55 +02:00
mTvare 032f9bdf72
Upgrade vello to version 0.5.0 and wgpu to version 25 (#2890)
* update: vello

* fix compile errors

* create target texture lazily

* fix TextureBlitter texture format mismatch

* use `futures:🔒:Mutex` instead of std Mutex

---------

Co-authored-by: Firestar99 <firestar99@sydow.cloud>
2025-07-22 19:51:02 +02:00
mTvare 8a68683a93
Add pivot type selection with Custom Pivot, Origin (Average Point), and Origin (Active Object) to the Select tool (#2730)
* add origin

* cleanup pivot

* a lot of stuff

* reset pivot

* fix transform with pivot issues

* fixes

* some more cleanup

* fixes

* finally works

* origin fixes

* fix spaces

* fix using dragged_layers

* simplify pivot logic

* fix bugs

* fix the final bug

* fix in select_tool

* fix updates

* some more refactors to fix misunderstanding and refactor

* add checkboxes

* fix labels

* fix stuff which broke at merge

* update

* cargo fmt

* fix serde crash

* fix pivot not updating on move

* fix pivot not becoming last active refernce

* fix redraw issues

* add: active pivot

* cargo fmt

* fix pivot showing up in default mode

* add: pivot pin

* fix: use pin icons

* cargo: cargo lock update?

* fix: use checkbox instead of Overlays

* refactor: add dot to path_tool

* add: active origins

* UI tweaks

* add: add all of the stuff for path tool

* remove: unused layer

* fix: pivot pinning and origin angle

* fix: pin only if moved in first place

* cargo: fmt

* fix: pivot use disabled method

* fix: remove redudant NoOp

* fix: 3 stuff

* fix: select from elsewhere

* fix: compass rose wobbling around

* add: move pivot on grab

* add: move pivot on nudge

* add: move pivot on Grab

* Code review and tooltips

* fixes

* fixes

* fixes

* fix: skipping artboard on bounds calculation

* fix: by default have origin

* Fix prior fix

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2025-07-08 09:24:54 +00:00
Firestar99 a182a7347e
Extract `gbrush` (#2784) 2025-07-01 18:38:47 +00:00
Firestar99 602d7e8bd1
Extract `graster-nodes` (#2783) 2025-07-01 18:12:12 +00:00
Salman Abuhaimed 83773baa00
Replace Rustybuzz with Parley for text layout, and add text tilt parameter (#2739)
* replace rustybuzz with parley for text layout handling

change text input direction based on text direction

* Code review

* change default character spacing to 0

* add shear to text node

this also adds migration code for documents that don't have shear

* shear migration for text node

- add shear property
- set character spacing to 0

* use old max_width and max_height in text migration if available

* Final code review pass

* Add units to the parameters

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2025-07-01 02:23:17 -07:00
Firestar99 ecd7999ca7
Extract `gmath_nodes` from `gcore::ops`, create mods `debug` and `extract_xy` (#2764) 2025-06-28 00:04:24 +02:00
Firestar99 9c4ab34a58
Extract `gsvg_renderer` from `gcore`, remove `gcore/vello` feature (#2760)
Extract `gsvg_renderer` from `gcore`, remove `gcore/vello` feature
2025-06-27 13:47:46 +00:00
Firestar99 ffc6c5532b
Extract `gpath_bool` from `mod gstd::ops` path_bool-related nodes (#2762)
* cargo shear

* Extract `gpath_bool` from `mod gstd::ops` path_bool-related nodes
2025-06-27 13:12:08 +00:00
Dennis Kobert a40a760f27
Add automatic type conversion and the node graph preprocessor (#2478)
* Prototype document network level into node insertion

* Implement Convert trait / node for places we can't use Into

* Add isize/usize and i128/u128 implementations for Convert trait

* Factor out substitutions into preprocessor crate

* Simplify layer node further

* Code review

* Mark preprocessed networks as generated

* Revert changes to layer node definition

* Skip generated flag for serialization

* Don't expand for tests

* Code review

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2025-06-26 16:10:14 -07:00
Firestar99 2d62d01fd4
Make `wasm` only depend on `gstd`, not `gcore` (#2745)
make `wasm` only depend on `gstd`, not `gcore`
2025-06-23 10:30:41 +00:00
Firestar99 0e8eb481bf
Extract `gapplication_io` from `gcore` (#2742)
move `gcore::application_io` into the new crate `gapplication-io`, remove features `wasm` and `wgpu` from `gcore`
2025-06-23 11:35:14 +02:00
0SlowPoke0 8e5abf65cb
Add star/polygon gizmos and refactor the separate shape drawing tools into a unified Shape tool (#2683)
* no trait ,not to fix line

* add hints

* line modification even when other shapes are selected

* added transform and anchor overlays

* removed old code

* fixed transform added hints need to fix modifier keys use

* refactored select-tool

* add point-handle-gizmo

* fix rotate bug

* implement angle snapping gizmo , fix overlay and refactor the code

* implement snapping for point-handle gizmo and implement no of point gizmo need to refactor

* implemented the gizmo for polygon, added tests , brackets to increase sides

* formatting-fix

* small nit-picks

* Make it compile

* Code review

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2025-06-22 00:53:49 -07:00
Firestar99 e520c21b66
Remove the `serde` feature and instead just always require it (#2737)
workspace: remove feature `serde`, always require it instead
2025-06-21 16:52:47 -07:00
Firestar99 ca5ca863cc
Unify feature dependencies with workspace dependencies (#2736)
* graph-craft: fix direct wasm build

* graph-craft: fix no serde feature failing to compile

* graph-craft: make wgpu-executor properly optional

* workspace: unify `image` formats in workspace

* workspace: turn most dependencies into workspace deps, no actual changes

* workspace: unify dependency features in workspace dep
2025-06-21 16:26:25 -07:00
Firestar99 34dced38ba Make `gcore` a std library and remove `std`, `alloc`, and more unused features (#2724)
* gcore: remove features `std`, `alloc`, `gpu` and `reflections`, now always available

* gcore: remove non-working features `kurbo` and `log`
2025-06-19 20:28:17 -07:00
Firestar99 6b69a75391 Bulk rename `gcore` -> `gstd` in editor (#2729)
* remove `gcore` dependency from `editor`

* editor: bulk rename `gcore` -> `gstd`, cargo fmt
2025-06-19 20:28:17 -07:00
Firestar99 14d90195ad Remove unused dependencies from the Cargo.toml files via `cargo shear` (#2723)
* cargo shear ignore rules

* cargo shear

* cargo shear manual dependency removal

* cargo shear: ignore editor in proc-macros
2025-06-19 20:28:17 -07:00
Firestar99 3489f9ddb1 Bulk remove old code for legacy GPU node implementations (#2722)
* fix warning in node-macro

* remove crates `gpu-executor`, `gpu-compiler`, `compilation-client` and `compilation-server`

* remove `wgpu-executor::executor`

* .gitignore .idea/
2025-06-19 20:28:17 -07:00
Keavon Chambers e57637aab1
Make builds of the editor and the website serve their own local fonts (#2186)
* WIP

* Done?

* Install fonts in CI

* Use absolute path so minified inlined CSS works

* Fix Bezier-rs demo fonts?

* Use opsz

* Revert removal of text balancer

* Pull in the text balancer from our static host
2025-05-19 02:38:29 -07:00
kythyria 9ef9b205d9
Auto-generate enum type widget boilerplate for radio buttons and dropdown menus (#2589)
* First draft of factoring out the dropdown boilerplate

* Add proc macro for enum boilerplate

* Detect whether to say `crate` or the name

* Clean up the input and naming of the enum macro

* Rename a file

* Do the rename of code too

* Use the attribute-driven selection of radio vs dropdown

* Add a metadata struct and tooltips

* Move the new traits to a better place.

* Use ChoiceType, part 1

* Use ChoiceType, part 2

* Introduce a builder API for choice widgets

* Start using the new new API

* DomainWarpType should be a dropdown still

* Handle the case where a node property can never have a socket

* Rustfmt

* Code review

* Update stable node IDs in test

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2025-05-01 04:14:26 -07:00
Dennis Kobert 9b23c7e2db
Update Tauri to v2 and execute only the node graph in native (#2362)
* Migrate tauri app to v2

* Move flake files to sub directory

* Remove unused plugins

* Backport some of the tauri code

* Implement async node graph execution

Only move node runtime to native code

* Always use gpu feature for tauri

* Fix serialization

* Add logging filters

* Enable native window rendering with vello

* Cleanup

* Remove unused editor instance

* Remove changes from vite config

* Remove warnings

* Remove unused files

* Fix most tests

* Cleanup

* Apply frontend lint

* Readd flake.nix

* Fix tests using --all-features

* Code review

* Enable all backends

* Fix monitor node downcast types

* Change debug log to a warning

* Disable shader passthrough

* Cleanup unused imports

* Remove warning

* Update project setup instructions

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2025-04-14 11:43:15 +00:00
Keavon Chambers 29479f6e3e Update Cargo dependencies in Cargo.lock 2025-04-13 21:20:55 -07:00
Rahat 1001ec2740
Add test for scaling objects to zero without any crash (#2491)
* Add test for scaling objects to zero

* added non zero scale after near zero scale to check if everything is working ifine

* unnecessary change

* cli failing

* chore: upgrade openssl to fix RUSTSEC-2025-0022

* cli failing

* new changes
2025-04-06 14:42:15 +01:00
Richard Dodd 0570edc463
New node: Merge by Distance (#2307)
* add `merge_by_distance` node

* remove unneeded features of petgraph

Also re-arrange module slightly since because functions are no longer
async, there was name shadowning with the old arrangement.

* remove region if start or end segment is removed

* remove stuff I ended up not using

* "algos" -> "algorithms"

* Code review pass

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2025-03-12 20:40:44 -07:00