psychedelicious
606c4ae88c
feat(ui): masking UX (wip - issue w/ positioning)
2024-10-23 16:01:15 +11:00
psychedelicious
f666bac77f
tidy(ui): CanvasToolView -> CanvasViewToolModule
2024-10-23 16:01:15 +11:00
psychedelicious
c9bf7da23a
tidy(ui): CanvasToolRect -> CanvasRectToolModule
2024-10-23 16:01:15 +11:00
psychedelicious
dfc65b93e9
tidy(ui): CanvasToolMove -> CanvasMoveToolModule
2024-10-23 16:01:15 +11:00
psychedelicious
9ca40b4cf5
tidy(ui): CanvasToolErase -> CanvasEraserToolModule
2024-10-23 16:01:15 +11:00
psychedelicious
d571e71d5e
tidy(ui): CanvasToolColorPicker -> CanvasColorPickerToolModule
2024-10-23 16:01:15 +11:00
psychedelicious
ad1e6c3fe6
tidy(ui): CanvasToolBrush -> CanvasBrushToolModule
2024-10-23 16:01:15 +11:00
psychedelicious
21d02911dd
tidy(ui): CanvasBboxModule -> CanvasBboxToolModule, move file
2024-10-23 16:01:15 +11:00
psychedelicious
43afe0bd9a
feat(ui): move cursor handling to tool modules
...
Also add cursors for move tool and bbox tool - when pointer is over the layer or bbox, use the move cursor.
2024-10-23 16:01:15 +11:00
psychedelicious
e7a68c446d
feat(ui): add CanvasToolView
...
It's nearly a noop but I think it makes sense to have a module for each tool...
2024-10-23 16:01:15 +11:00
psychedelicious
b9c68a2e7e
feat(ui): add CanvasToolMove
...
It's essentially a noop but I think it makes sense to have a module for each tool...
2024-10-23 16:01:15 +11:00
psychedelicious
371a1b1af3
feat(ui): make CanvasBboxModule child of CanvasToolModule
2024-10-23 16:01:15 +11:00
psychedelicious
dae4591de6
feat(ui): let tool modules set own visibility
2024-10-23 16:01:15 +11:00
psychedelicious
8ccb2e30ce
feat(ui): bail on stage events when not targeting the stage
2024-10-23 16:01:15 +11:00
psychedelicious
ce51e9582a
feat(ui): add CanvasRectTool
2024-10-23 16:01:15 +11:00
psychedelicious
00848eb631
feat(ui): let color picker tool handle its events
2024-10-23 16:01:15 +11:00
psychedelicious
b48430a892
feat(ui): let eraser tool handle its events
2024-10-23 16:01:15 +11:00
psychedelicious
9eb695d0b4
docs(ui): update CanvasToolModule
2024-10-23 16:01:15 +11:00
psychedelicious
babab17e1d
feat(ui): let brush tool handle its events
...
Move brush tool event logic to its class.
2024-10-23 16:01:15 +11:00
psychedelicious
9b30363177
tidy(ui): CanvasToolModule structure
2024-10-23 16:01:15 +11:00
psychedelicious
80bf9ddb71
feat(ui): rough out points UI for segment anything module
2024-10-23 16:01:15 +11:00
psychedelicious
8d6996cdf0
fix(ui): sync pointer position on pointerdown
...
There's a Konva bug where `pointerenter` & `pointerleave` events aren't fired correctly on the stage.
In 87fdea4cc6 I made a change that surfaced this bug, breaking touch and Apple Pencil interactions, because the cursor position doesn't get updated.
Simple fix - ensure we update the cursor on `pointerdown` events, even though we shouldn't need to.
Will make a bug report upstream
2024-10-09 13:59:20 +11:00
psychedelicious
aa54c1f969
feat(ui): fix color picker wrong color, improved perf
...
The color picker take some time to sample the color from the canvas state. This could cause a race condition where the cursor position changes between the time sampling starts, resulting in the picker showing the wrong color. Sometimes it picks up the color picker tool preview!
To resolve this, the color picker's color syncing is now throttled to once per animation frame. Besides fixing the incorrect color issue, it improves the perf substantially by reducing number of samples we take.
2024-10-05 23:41:33 -04:00
psychedelicious
87fdea4cc6
feat(ui): updated cursor position tracking
...
- Record both absolute and relative positions
- Use simpler method to get relative position
- Generalize getColorUnderCursor to be getColorAtCoordinate
2024-10-05 23:41:33 -04:00
psychedelicious
53443084c5
tidy(ui): move getColorUnderCursor to utils
2024-10-05 23:41:33 -04:00
psychedelicious
8d2e5bfd77
tidy(ui): use constants for keys
2024-10-05 23:41:33 -04:00
psychedelicious
05e285c95a
tidy(ui): getCanDraw code style
2024-10-05 23:41:33 -04:00
psychedelicious
25f19a35d7
tidy(ui): use entity isInteractable in tool module
2024-10-05 23:41:33 -04:00
psychedelicious
e79b316645
feat(ui): mmb panning
2024-10-03 00:08:41 -04:00
psychedelicious
324a46d0c8
fix(ui): edge cases with tool rendering
2024-10-02 08:02:30 -04:00
psychedelicious
4a135c1017
feat(ui): hide brush preview when drawing with pen
2024-10-02 08:02:30 -04:00
psychedelicious
0e65f295ac
feat(ui): initial pressure sensitivity implementation
2024-10-02 08:02:30 -04:00
psychedelicious
ab7fbb7b30
feat(ui): use touch-action: none instead of events to prevent pan/zoom
2024-10-02 08:02:30 -04:00
psychedelicious
d9b0697d1f
feat(ui): use pointer events instead of mouse events
...
This gets touch input and tablet input working for basic drawing functions.
2024-10-02 08:02:30 -04:00
psychedelicious
34a9409bc1
feat(ui): prevent app from scrolling on touch events
2024-10-02 08:02:30 -04:00
psychedelicious
a6062a4229
fix(ui): hide tool previews when staging
2024-09-25 14:44:01 +03:00
psychedelicious
137624983c
fix(ui): hide tool preview when filtering
2024-09-23 16:16:51 +03:00
psychedelicious
61f26dfba8
fix(ui): tool reverting on window blur
2024-09-22 18:41:11 +03:00
psychedelicious
1a258e9497
fix(ui): reset tool buffer on window blur
2024-09-20 09:11:33 +10:00
psychedelicious
ae6bf6f5c0
feat(ui): more detailed repr outputs for canvas
2024-09-15 10:18:43 +10:00
psychedelicious
d9cb718e33
fix(ui): bbox interactability
2024-09-15 10:18:43 +10:00
psychedelicious
ae7440b721
fix(ui): cursor sometimes hidden during staging
...
Need a to track a few more things to ensure we update the cursor correctly in all situations.
2024-09-15 10:18:43 +10:00
psychedelicious
e5792278b9
feat(ui): revised canvas "busyness" state tracking
...
Track various canvas states:
- Filtering an entity
- Transforming an entity
- Rasterizing an entity
- Compositing
- Busy (derived from all of the above)
Also track individual entity states:
- Locked
- Disabled
- All of type are hidden
- Has objects
- Interactable (derived from all of the above)
These states then gate various actions. For example:
- Cannot invoke while the canvas is busy.
- Cannot transform, filter, duplicate, or delete when the canvas is busy.
Tool interaction restrictions are not yet implemented.
2024-09-13 22:33:34 +10:00
psychedelicious
b6cef9d440
fix(ui): do not clear buffer on escape if filtering/transforming
2024-09-09 23:40:38 +10:00
psychedelicious
6b2d900b54
tidy(ui): organise canvas tool classes
2024-09-08 21:55:26 +10:00