psychedelicious
27e829b955
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-08-23 19:47:01 +10:00
psychedelicious
e03e870d5b
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-08-23 19:47:01 +10:00
psychedelicious
9465ff450b
feat(ui): revise filter implementation
2024-08-23 19:47:01 +10:00
psychedelicious
92906a9575
fix(ui): add button to delete inpaint mask
2024-08-23 19:47:01 +10:00
psychedelicious
77f206abe4
feat(ui): add contexts/hooks to access entity adapters directly
2024-08-23 19:47:01 +10:00
psychedelicious
44a3f61580
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-08-23 19:47:01 +10:00
psychedelicious
0a2afed08b
feat(ui) do not set $canvasManager until ready
2024-08-23 19:47:01 +10:00
psychedelicious
9b3b961105
fix(ui): inpaint mask naming
2024-08-23 19:47:01 +10:00
psychedelicious
9b1828e1aa
feat(ui): efficient canvas compositing
...
Also solves issue of exporting layers at different opacities than what is visible
2024-08-23 19:47:01 +10:00
psychedelicious
5101873f49
feat(ui): allow multiple inpaint masks
...
This is easier than making it a nullable singleton
2024-08-23 19:47:01 +10:00
psychedelicious
c612f18114
fix(ui): missing rasterization cache invalidations
2024-08-23 19:47:01 +10:00
psychedelicious
7e400d876f
feat(ui): iterate on filter UI, flow
2024-08-23 19:47:01 +10:00
psychedelicious
677dddcfc9
fix(ui): rehydration data loss
2024-08-23 19:47:01 +10:00
psychedelicious
0792b9175e
feat(ui): sort log namespaces
2024-08-23 19:47:01 +10:00
psychedelicious
e4829f80af
fix(ui): do not merge arrays by index during rehydration
2024-08-23 19:47:01 +10:00
psychedelicious
bb760f3eb4
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-08-23 19:47:01 +10:00
psychedelicious
388c65287b
fix(ui): fix logger filter
...
was accidetnally replacing the filter instead of appending to it.
2024-08-23 19:47:01 +10:00
psychedelicious
12cd41e05c
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-08-23 19:47:01 +10:00
psychedelicious
7765c03949
fix(ui): handle opacity for masks
2024-08-23 19:47:01 +10:00
psychedelicious
3daa80c57f
feat(ui): default background to checkerboard
2024-08-23 19:47:01 +10:00
psychedelicious
5dbbef4ebd
feat(ui): clean up logging namespaces, allow skipping namespaces
2024-08-23 19:47:01 +10:00
psychedelicious
db33b3f7b5
chore(ui): bump ui library
2024-08-23 19:47:01 +10:00
psychedelicious
8ffcf2a6be
fix(ui): do not allow drawing if layer disabled
2024-08-23 19:47:01 +10:00
psychedelicious
2e7ae6a07e
fix(ui): stale state causing race conditions & extraneous renders
2024-08-23 19:47:01 +10:00
psychedelicious
fea1711f0c
fix(ui): do not clear buffer when rendering "real" objects
2024-08-23 19:47:01 +10:00
psychedelicious
2a3546db97
tidy(ui): remove "filter" from CanvasImageState
2024-08-23 19:47:01 +10:00
psychedelicious
285c266612
feat(ui): better editable title
2024-08-23 19:47:01 +10:00
psychedelicious
426ad54c53
fix(ui): stroke eraserline
2024-08-23 19:47:01 +10:00
psychedelicious
fc75f7919f
feat(ui): restore transparency effect for control layers
2024-08-23 19:47:01 +10:00
psychedelicious
6c6b1aaff6
feat(ui): use text cursor for entity title
2024-08-23 19:47:01 +10:00
psychedelicious
c319d653ac
tidy(ui): remove extraneous logging in CanvasStateApi
2024-08-23 19:47:01 +10:00
psychedelicious
d887e474e7
feat(ui): better buffer commit logic
2024-08-23 19:47:01 +10:00
psychedelicious
da7b52d6ba
feat(ui): render buffer separately from "real" objects
2024-08-23 19:47:01 +10:00
psychedelicious
b5aa308593
fix(ui): pixelRect should always be integer
2024-08-23 19:47:01 +10:00
psychedelicious
0b7ceb3bb6
fix(ui): only update stage attrs when stage itself is dragged
2024-08-23 19:47:01 +10:00
psychedelicious
3a70cefda2
feat(ui): add line simplification
...
This fixes some awkward issues where line segments stack up.
2024-08-23 19:47:01 +10:00
psychedelicious
4b609251e1
fix(ui): various things listening when they need not listen
2024-08-23 19:47:01 +10:00
psychedelicious
0839eac0f7
feat(ui): layer opacity via caching
2024-08-23 19:47:01 +10:00
psychedelicious
5f2a7feeee
feat(ui): reset view fits all visible objects
2024-08-23 19:47:01 +10:00
psychedelicious
982535eb92
fix(ui): rerenders when changing canvas scale
2024-08-23 19:47:01 +10:00
psychedelicious
0c2b8edc8d
fix(ui): do not render rasterized layer unless renderObjects=true
2024-08-23 19:47:01 +10:00
psychedelicious
f78f4ca25f
feat(ui): revise app layout strategy, add interaction scopes for hotkeys
2024-08-23 19:47:01 +10:00
psychedelicious
d6b3e6c07d
feat(ui): tweak mask patterns
2024-08-23 19:47:01 +10:00
psychedelicious
071ff8e74a
fix(ui): dynamic prompts recalcs when presets are loaded
2024-08-23 19:47:01 +10:00
psychedelicious
1ea8aafca1
fix(ui): use style preset prompts correctly
2024-08-23 19:46:05 +10:00
psychedelicious
533dd221f8
fix(ui): discard selected staging image not all other images
2024-08-23 19:46:05 +10:00
psychedelicious
2b325c6683
fix(ui): respect image size in staging preview
2024-08-23 19:46:05 +10:00
psychedelicious
3845b1b3e6
tidy(ui): cleanup after events change
2024-08-23 19:46:05 +10:00
psychedelicious
cea7890a67
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-08-23 19:46:05 +10:00
psychedelicious
c38fe8025d
fix(ui): rebase conflicts
2024-08-23 19:46:05 +10:00