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
f1fcc98a09
fix(ui): add button to delete inpaint mask
2024-09-06 22:56:24 +10:00
psychedelicious
b2823569f0
feat(ui): add contexts/hooks to access entity adapters directly
2024-09-06 22:56:24 +10:00
psychedelicious
3bd98e62de
feat(ui): add CanvasManagerProviderGate
...
This context waits to render its children its until the canvas manager is available. Then its children have access to the manager directly via hook.
2024-09-06 22:56:24 +10:00
psychedelicious
318672be53
feat(ui) do not set $canvasManager until ready
2024-09-06 22:56:24 +10:00
psychedelicious
c5a05691fe
fix(ui): inpaint mask naming
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
9fd2841df0
fix(ui): rehydration data loss
2024-09-06 22:56:24 +10:00
psychedelicious
bd23dcd751
feat(ui): sort log namespaces
2024-09-06 22:56:24 +10:00
psychedelicious
4d480093d9
fix(ui): do not merge arrays by index during rehydration
2024-09-06 22:56:24 +10:00
psychedelicious
bb0d2b6ce2
fix(ui): clone parsed data during state rehydration
...
Without this, the objects and arrays in `parsed` could be mutated, and the log statment would show the mutated data.
2024-09-06 22:56:24 +10:00
psychedelicious
0d863a876b
fix(ui): fix logger filter
...
was accidetnally replacing the filter instead of appending to it.
2024-09-06 22:56:24 +10:00
psychedelicious
3fadfd3bbb
fix(ui): race condition queue status
...
Sequence of events causing the race condition:
- Enqueue batch
- Invalidate `SessionQueueStatus` tag
- Request updated queue status via HTTP - batch still processing at this point
- Batch completes
- Event emitted saying so
- Optimistically update the queue status cache, it is correct
- HTTP request makes it back and overwrites the optimistic update, indicating the batch is still in progress
FIxed by not invalidating the cache.
2024-09-06 22:56:24 +10:00
psychedelicious
401152f16f
fix(ui): handle opacity for masks
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
3d23fe1fe0
chore(ui): bump ui library
2024-09-06 22:56:24 +10:00
psychedelicious
d4117f5595
fix(ui): do not allow drawing if layer disabled
2024-09-06 22:56:24 +10:00
psychedelicious
2686210887
fix(ui): stale state causing race conditions & extraneous renders
2024-09-06 22:56:24 +10:00
psychedelicious
9a804b7986
fix(ui): do not clear buffer when rendering "real" objects
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
afa2da3d2d
feat(ui): better editable title
2024-09-06 22:56:24 +10:00
psychedelicious
ac1132b5bc
fix(ui): stroke eraserline
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
5a3dd83167
feat(ui): use text cursor for entity title
2024-09-06 22:56:24 +10:00
psychedelicious
9f587009cd
tidy(ui): remove extraneous logging in CanvasStateApi
2024-09-06 22:56:24 +10:00
psychedelicious
c5ed5e866e
feat(ui): better buffer commit logic
2024-09-06 22:56:24 +10:00
psychedelicious
1f10bc1d63
feat(ui): render buffer separately from "real" objects
2024-09-06 22:56:24 +10:00
psychedelicious
311451b3c9
fix(ui): pixelRect should always be integer
2024-09-06 22:56:24 +10:00
psychedelicious
a48e5d9cb0
fix(ui): only update stage attrs when stage itself is dragged
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
01e8988fcc
fix(ui): various things listening when they need not listen
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
37dc7ee595
feat(ui): reset view fits all visible objects
2024-09-06 22:56:24 +10:00
psychedelicious
6d79dc61d2
fix(ui): rerenders when changing canvas scale
2024-09-06 22:56:24 +10:00
psychedelicious
966bc67001
fix(ui): do not render rasterized layer unless renderObjects=true
2024-09-06 22:56:24 +10:00
psychedelicious
4c66a0dcd0
feat(ui): revise app layout strategy, add interaction scopes for hotkeys
2024-09-06 22:56:24 +10:00
psychedelicious
50051ee147
feat(ui): tweak mask patterns
2024-09-06 22:56:24 +10:00
psychedelicious
621f12a1bc
fix(ui): dynamic prompts recalcs when presets are loaded
2024-09-06 22:56:24 +10:00
psychedelicious
741b22041d
fix(ui): use style preset prompts correctly
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
65bbc0f00f
fix(ui): respect image size in staging preview
2024-09-06 22:56:24 +10:00
psychedelicious
7bf0e554ea
tidy(ui): cleanup after events change
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