psychedelicious
e5e59bf801
feat(ui): move ephemeral state into canvas classes
...
Things like `$lastCursorPos` are now created within the canvas drawing classes. Consumers in react access them via `useCanvasManager`.
For example:
```tsx
const canvasManager = useCanvasManager();
const lastCursorPos = useStore(canvasManager.stateApi.$lastCursorPos);
```
2024-09-06 22:56:24 +10:00
psychedelicious
dd7d4da5e3
feat(ui): normalize all actions to accept an entityIdentifier
...
Previously, canvas actions specific to an entity type only needed the id of that entity type. This allowed you to pass in the id of an entity of the wrong type.
All actions for a specific entity now take a full entity identifier, and the entity identifier type can be narrowed.
`selectEntity` and `selectEntityOrThrow` now need a full entity identifier, and narrow their return values to a specific entity type _if_ the entity identifier is narrowed.
The types for canvas entities are updated with optional type parameters for this purpose.
All reducers, actions and components have been updated.
2024-09-06 22:56:24 +10:00
psychedelicious
9a089495a1
fix(ui): scaled bbox loses sync
2024-09-06 22:56:24 +10:00
psychedelicious
60b3dc846e
fix(ui): lint & fix issues with adding regional ip adapters
2024-09-06 22:56:24 +10:00
psychedelicious
7f437adaba
feat(ui): duplicate entity
2024-09-06 22:56:24 +10:00
psychedelicious
cc7ae42baa
fix(ui): newly-added entities are selected
2024-09-06 22:56:24 +10:00
psychedelicious
caeefdf2ed
fix(ui): calculate renderable entities correctly in tool module
2024-09-06 22:56:24 +10:00
psychedelicious
583654d176
fix(ui): new rectangles don't trigger rerender
2024-09-06 22:56:24 +10:00
psychedelicious
dd2e68bf00
fix(ui): rip out broken recall logic, NO TS ERRORS
2024-09-06 22:56:24 +10:00
psychedelicious
8dbb473fde
fix(ui): select next entity in the list when deleting
2024-09-06 22:56:24 +10:00
psychedelicious
664987f2aa
tidy(ui): "eye dropper" -> "color picker"
2024-09-06 22:56:24 +10:00
psychedelicious
06944b3ea7
feat(ui): update entity list menu
2024-09-06 22:56:24 +10:00
psychedelicious
56d53b18f0
chore(ui): prettier
2024-09-06 22:56:24 +10:00
psychedelicious
20961215e7
chore(ui): eslint
2024-09-06 22:56:24 +10:00
psychedelicious
49c75ca381
tidy(ui): remove unused stuff 4
2024-09-06 22:56:24 +10:00
psychedelicious
cf6751cc06
tidy(ui): remove unused stuff 3
2024-09-06 22:56:24 +10:00
psychedelicious
c4a85cf1bf
feat(ui): refine canvas entity list items & menus
2024-09-06 22:56:24 +10:00
psychedelicious
efb97c301e
feat(ui): transform tool ux
2024-09-06 22:56:24 +10:00
psychedelicious
cd865347eb
feat(ui): rough out canvas mode
2024-09-06 22:56:24 +10:00
psychedelicious
de8e8d9f68
feat(ui): no entities fallback buttons
2024-09-06 22:56:24 +10:00
psychedelicious
591e8162c1
feat(ui): remove "solid" background option
2024-09-06 22:56:24 +10:00
psychedelicious
3b7b6d6404
feat(ui): add entity group hiding
2024-09-06 22:56:24 +10:00
psychedelicious
e9171c80f6
feat(ui): move all caching out of redux
...
While we lose the benefit of the caches persisting across reloads, this is a much simpler way to handle things. If we need a persistent cache, we can explore it in the future.
2024-09-06 22:56:24 +10:00
psychedelicious
0fd3881b3a
feat(ui): revised rasterization caching
...
- use `stable-hash` to generate stable, non-crypto hashes for cache entries, instead of using deep object comparisons
- use an object to store image name caches
2024-09-06 22:56:24 +10:00
psychedelicious
01ac4c3b3e
feat(ui): revise filter implementation
2024-09-06 22:56:24 +10:00
psychedelicious
04fcb9e8e6
feat(ui): efficient canvas compositing
...
Also solves issue of exporting layers at different opacities than what is visible
2024-09-06 22:56:24 +10:00
psychedelicious
a1534b6503
feat(ui): allow multiple inpaint masks
...
This is easier than making it a nullable singleton
2024-09-06 22:56:24 +10:00
psychedelicious
0aa4b1575d
fix(ui): missing rasterization cache invalidations
2024-09-06 22:56:24 +10:00
psychedelicious
85eb6ad616
feat(ui): iterate on filter UI, flow
2024-09-06 22:56:24 +10:00
psychedelicious
b69350e9ee
feat(ui): default background to checkerboard
2024-09-06 22:56:24 +10:00
psychedelicious
7b429e0a54
feat(ui): clean up logging namespaces, allow skipping namespaces
2024-09-06 22:56:24 +10:00
psychedelicious
ef0699310d
tidy(ui): remove "filter" from CanvasImageState
2024-09-06 22:56:24 +10:00
psychedelicious
0276dac38f
feat(ui): restore transparency effect for control layers
2024-09-06 22:56:24 +10:00
psychedelicious
ad92010778
feat(ui): add line simplification
...
This fixes some awkward issues where line segments stack up.
2024-09-06 22:56:24 +10:00
psychedelicious
d6fec0a0df
feat(ui): layer opacity via caching
2024-09-06 22:56:24 +10:00
psychedelicious
f358bb9364
fix(ui): discard selected staging image not all other images
2024-09-06 22:56:24 +10:00
psychedelicious
82b1d8dab8
feat(ui): move socket event handling out of redux
...
Download events and invocation status events (including progress images) are very frequent. There's no real need for these to pass through redux. Handling them outside redux is a significant performance win - far fewer store subscription calls, far fewer trips through middleware.
All event handling is moved outside middleware. Cleanup of unused actions and listeners to follow.
2024-09-06 22:56:24 +10:00
psychedelicious
5dda364b2c
fix(ui): rebase conflicts
2024-09-06 22:56:24 +10:00
psychedelicious
a0d644ac42
feat(ui): add canvas background style
2024-09-06 22:56:24 +10:00
psychedelicious
37198159c9
feat(ui): mask layers choose own opacity
2024-09-06 22:56:24 +10:00
psychedelicious
7170adf3a2
feat(ui): mask fill patterns
2024-09-06 22:56:24 +10:00
psychedelicious
706a3c8f2b
feat(ui): rough out eyedropper tool
...
It's a bit slow bc we are converting the stage to canvas on every mouse move. Also need to improve the visual but it works.
2024-09-06 22:56:24 +10:00
psychedelicious
384601898a
fix(ui): ip adapters work
2024-09-06 22:56:24 +10:00
psychedelicious
94eb5e638f
feat(ui): rename layers
2024-09-06 22:56:24 +10:00
psychedelicious
5629c54d55
feat(ui): revise entity menus
2024-09-06 22:56:24 +10:00
psychedelicious
1303396d0e
feat(ui): split control layers from raster layers for UI and internal state, same rendering as raster layers
2024-09-06 22:56:24 +10:00
psychedelicious
bcd5bcf8d7
feat(ui): implement cache for image rasterization, rip out some old controladapters code
2024-09-06 22:56:24 +10:00
psychedelicious
787a4422cb
feat(ui, app): use layer as control (wip)
2024-09-06 22:56:24 +10:00
psychedelicious
534d4fa495
fix(ui): depth anything v2
2024-09-06 22:56:24 +10:00
psychedelicious
e6ebb0390e
fix(ui): staging area works
2024-09-06 22:56:24 +10:00