@solidrt/2d 0.0.66 → 0.0.67
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +3 -3
- package/src/components/group.tsx +4 -2
- package/src/components/sprite-layer.tsx +4 -0
- package/src/components/sprite.tsx +4 -2
- package/src/components/view2d.tsx +2 -0
- package/src/dispatch.ts +13 -2
- package/src/layer.ts +6 -0
- package/src/views.ts +1 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@solidrt/2d",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.67",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"funding": "https://github.com/sponsors/wellawaretech",
|
|
6
6
|
"author": "Antoine van Wel",
|
|
@@ -15,10 +15,10 @@
|
|
|
15
15
|
"AGENTS.md"
|
|
16
16
|
],
|
|
17
17
|
"devDependencies": {
|
|
18
|
-
"@solidrt/test": "0.0.
|
|
18
|
+
"@solidrt/test": "0.0.67"
|
|
19
19
|
},
|
|
20
20
|
"peerDependencies": {
|
|
21
21
|
"@solidjs/signals": "2.0.0-rc.13",
|
|
22
|
-
"@solidrt/core": "0.0.
|
|
22
|
+
"@solidrt/core": "0.0.67"
|
|
23
23
|
}
|
|
24
24
|
}
|
package/src/components/group.tsx
CHANGED
|
@@ -21,6 +21,7 @@ export type GroupProps = {
|
|
|
21
21
|
onPointerDown?: (event: SpritePointerEvent) => void
|
|
22
22
|
onPointerMove?: (event: SpritePointerEvent) => void
|
|
23
23
|
onPointerUp?: (event: SpritePointerEvent) => void
|
|
24
|
+
onPointerCancel?: (event: SpritePointerEvent) => void
|
|
24
25
|
onWheel?: (event: SpriteWheelEvent) => void
|
|
25
26
|
onTap?: (event: SpriteTapEvent) => void
|
|
26
27
|
/** How pose-prop changes animate (see setGroupTransition). The mount
|
|
@@ -52,11 +53,12 @@ export let Group: ParentComponent<GroupProps> = props => {
|
|
|
52
53
|
transition => setGroupTransition(group, transition ?? null),
|
|
53
54
|
)
|
|
54
55
|
createEffect(
|
|
55
|
-
() => [props.onPointerDown, props.onPointerMove, props.onPointerUp, props.onWheel, props.onTap, props.onTransitionEnd] as const,
|
|
56
|
-
([down, move, up, wheel, tap, end]) => {
|
|
56
|
+
() => [props.onPointerDown, props.onPointerMove, props.onPointerUp, props.onPointerCancel, props.onWheel, props.onTap, props.onTransitionEnd] as const,
|
|
57
|
+
([down, move, up, cancel, wheel, tap, end]) => {
|
|
57
58
|
group.onPointerDown = down
|
|
58
59
|
group.onPointerMove = move
|
|
59
60
|
group.onPointerUp = up
|
|
61
|
+
group.onPointerCancel = cancel
|
|
60
62
|
group.onWheel = wheel
|
|
61
63
|
group.onTap = tap
|
|
62
64
|
group.onTransitionEnd = end
|
|
@@ -19,6 +19,7 @@ export type LayerPointerProps = {
|
|
|
19
19
|
onPointerDown?: (event: LayerPointerEvent) => void
|
|
20
20
|
onPointerMove?: (event: LayerPointerEvent) => void
|
|
21
21
|
onPointerUp?: (event: LayerPointerEvent) => void
|
|
22
|
+
onPointerCancel?: (event: LayerPointerEvent) => void
|
|
22
23
|
onWheel?: (event: LayerWheelEvent) => void
|
|
23
24
|
onTap?: (event: LayerTapEvent) => void
|
|
24
25
|
}
|
|
@@ -143,6 +144,7 @@ const VIEW_PROPS = [
|
|
|
143
144
|
"onPointerDown",
|
|
144
145
|
"onPointerMove",
|
|
145
146
|
"onPointerUp",
|
|
147
|
+
"onPointerCancel",
|
|
146
148
|
"onWheel",
|
|
147
149
|
"onTap",
|
|
148
150
|
] as const
|
|
@@ -249,6 +251,7 @@ export let SpriteLayer: ParentComponent<SpriteLayerProps> = props => {
|
|
|
249
251
|
onPointerDown: e => props.onPointerDown?.(e),
|
|
250
252
|
onPointerMove: e => props.onPointerMove?.(e),
|
|
251
253
|
onPointerUp: e => props.onPointerUp?.(e),
|
|
254
|
+
onPointerCancel: e => props.onPointerCancel?.(e),
|
|
252
255
|
onWheel: e => props.onWheel?.(e),
|
|
253
256
|
onTap: e => props.onTap?.(e),
|
|
254
257
|
}),
|
|
@@ -321,6 +324,7 @@ export let SpriteLayer: ParentComponent<SpriteLayerProps> = props => {
|
|
|
321
324
|
onPointerDown={events ? viewHandlers.onPointerDown : undefined}
|
|
322
325
|
onPointerMove={events ? viewHandlers.onPointerMove : undefined}
|
|
323
326
|
onPointerUp={events ? viewHandlers.onPointerUp : undefined}
|
|
327
|
+
onPointerCancel={events ? viewHandlers.onPointerCancel : undefined}
|
|
324
328
|
onPointerLeave={events ? viewHandlers.onPointerLeave : undefined}
|
|
325
329
|
onWheel={events ? viewHandlers.onWheel : undefined}
|
|
326
330
|
/>
|
|
@@ -18,6 +18,7 @@ export type SpritePointerProps = {
|
|
|
18
18
|
onPointerDown?: (event: SpritePointerEvent) => void
|
|
19
19
|
onPointerMove?: (event: SpritePointerEvent) => void
|
|
20
20
|
onPointerUp?: (event: SpritePointerEvent) => void
|
|
21
|
+
onPointerCancel?: (event: SpritePointerEvent) => void
|
|
21
22
|
/** Sprites only: a Group never receives enter/leave. */
|
|
22
23
|
onPointerEnter?: (event: SpritePointerEvent) => void
|
|
23
24
|
onPointerLeave?: (event: SpritePointerEvent) => void
|
|
@@ -54,11 +55,12 @@ export let Sprite: VoidComponent<SpriteProps> = props => {
|
|
|
54
55
|
transition => setSpriteTransition(sprite, transition ?? null),
|
|
55
56
|
)
|
|
56
57
|
createEffect(
|
|
57
|
-
() => [props.onPointerDown, props.onPointerMove, props.onPointerUp, props.onPointerEnter, props.onPointerLeave, props.onWheel, props.onTap, props.onTransitionEnd] as const,
|
|
58
|
-
([down, move, up, enter, leave, wheel, tap, end]) => {
|
|
58
|
+
() => [props.onPointerDown, props.onPointerMove, props.onPointerUp, props.onPointerCancel, props.onPointerEnter, props.onPointerLeave, props.onWheel, props.onTap, props.onTransitionEnd] as const,
|
|
59
|
+
([down, move, up, cancel, enter, leave, wheel, tap, end]) => {
|
|
59
60
|
sprite.onPointerDown = down
|
|
60
61
|
sprite.onPointerMove = move
|
|
61
62
|
sprite.onPointerUp = up
|
|
63
|
+
sprite.onPointerCancel = cancel
|
|
62
64
|
sprite.onPointerEnter = enter
|
|
63
65
|
sprite.onPointerLeave = leave
|
|
64
66
|
sprite.onWheel = wheel
|
|
@@ -107,6 +107,7 @@ export let View2d: ParentComponent<View2dProps> = props => {
|
|
|
107
107
|
onPointerDown: e => props.onPointerDown?.(e),
|
|
108
108
|
onPointerMove: e => props.onPointerMove?.(e),
|
|
109
109
|
onPointerUp: e => props.onPointerUp?.(e),
|
|
110
|
+
onPointerCancel: e => props.onPointerCancel?.(e),
|
|
110
111
|
onWheel: e => props.onWheel?.(e),
|
|
111
112
|
onTap: e => props.onTap?.(e),
|
|
112
113
|
}),
|
|
@@ -148,6 +149,7 @@ export let View2d: ParentComponent<View2dProps> = props => {
|
|
|
148
149
|
onPointerDown={events ? view.handlers.onPointerDown : undefined}
|
|
149
150
|
onPointerMove={events ? view.handlers.onPointerMove : undefined}
|
|
150
151
|
onPointerUp={events ? view.handlers.onPointerUp : undefined}
|
|
152
|
+
onPointerCancel={events ? view.handlers.onPointerCancel : undefined}
|
|
151
153
|
onPointerLeave={events ? view.handlers.onPointerLeave : undefined}
|
|
152
154
|
onWheel={events ? view.handlers.onWheel : undefined}
|
|
153
155
|
/>
|
package/src/dispatch.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Pointer dispatch behind view.handlers, shared by both layer kinds: the
|
|
2
2
|
// element event model one tree deeper, with the VIEW as the root of the
|
|
3
|
-
// walk. Down, move, up and wheel dispatch on the topmost hit sprite,
|
|
3
|
+
// walk. Down, move, up, cancel and wheel dispatch on the topmost hit sprite,
|
|
4
4
|
// bubble through its enclosing groups and end at the layer's listeners;
|
|
5
5
|
// over empty space the walk is the layer alone (`sprite` null). Claiming
|
|
6
6
|
// is stopPropagation: a handler that stops an event keeps every later
|
|
@@ -49,7 +49,7 @@ export type DispatchDeps = {
|
|
|
49
49
|
listeners: Set<LayerPointerListener>
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
type HandlerName = "onPointerDown" | "onPointerMove" | "onPointerUp" | "onWheel" | "onTap"
|
|
52
|
+
type HandlerName = "onPointerDown" | "onPointerMove" | "onPointerUp" | "onPointerCancel" | "onWheel" | "onTap"
|
|
53
53
|
|
|
54
54
|
// One runtime event object serves every view (SpritePointerEvent for the
|
|
55
55
|
// sprite chain, LayerPointerEvent at the root, plus the wheel and tap
|
|
@@ -212,6 +212,17 @@ export function spriteDispatch(deps: DispatchDeps): (layout: (() => { width: num
|
|
|
212
212
|
tap.tapCount = count
|
|
213
213
|
walk("onTap", tap, !press.claimed)
|
|
214
214
|
},
|
|
215
|
+
onPointerCancel(e) {
|
|
216
|
+
let [x, y] = toLayer(e)
|
|
217
|
+
let press = presses.get(e.pointerId)
|
|
218
|
+
if (!press) {
|
|
219
|
+
walk("onPointerCancel", makeEvent(topmost(x, y), x, y, e), true)
|
|
220
|
+
return
|
|
221
|
+
}
|
|
222
|
+
// The press ends where it was: the walk it captured, never a tap.
|
|
223
|
+
presses.delete(e.pointerId)
|
|
224
|
+
walk("onPointerCancel", makeEvent(press.target, x, y, e), !press.claimed)
|
|
225
|
+
},
|
|
215
226
|
onWheel(e) {
|
|
216
227
|
let [x, y] = toLayer(e)
|
|
217
228
|
let event = makeEvent(topmost(x, y), x, y, e)
|
package/src/layer.ts
CHANGED
|
@@ -183,6 +183,9 @@ export type Sprite = {
|
|
|
183
183
|
onPointerDown?: (event: SpritePointerEvent) => void
|
|
184
184
|
onPointerMove?: (event: SpritePointerEvent) => void
|
|
185
185
|
onPointerUp?: (event: SpritePointerEvent) => void
|
|
186
|
+
/** The pointer's other end: the system took it away (see core's
|
|
187
|
+
* onPointerCancel); bubbles like up, and the press it ends never taps. */
|
|
188
|
+
onPointerCancel?: (event: SpritePointerEvent) => void
|
|
186
189
|
onPointerEnter?: (event: SpritePointerEvent) => void
|
|
187
190
|
onPointerLeave?: (event: SpritePointerEvent) => void
|
|
188
191
|
/** A wheel notch over the sprite; bubbles like down/move/up. */
|
|
@@ -343,6 +346,7 @@ export type LayerPointerListener = {
|
|
|
343
346
|
onPointerDown?: (event: LayerPointerEvent) => void
|
|
344
347
|
onPointerMove?: (event: LayerPointerEvent) => void
|
|
345
348
|
onPointerUp?: (event: LayerPointerEvent) => void
|
|
349
|
+
onPointerCancel?: (event: LayerPointerEvent) => void
|
|
346
350
|
onWheel?: (event: LayerWheelEvent) => void
|
|
347
351
|
onTap?: (event: LayerTapEvent) => void
|
|
348
352
|
}
|
|
@@ -353,6 +357,7 @@ export type LayerHandlers = {
|
|
|
353
357
|
onPointerDown: (event: ElementPointerEvent) => void
|
|
354
358
|
onPointerMove: (event: ElementPointerEvent) => void
|
|
355
359
|
onPointerUp: (event: ElementPointerEvent) => void
|
|
360
|
+
onPointerCancel: (event: ElementPointerEvent) => void
|
|
356
361
|
onPointerLeave: (event: ElementPointerEvent) => void
|
|
357
362
|
onWheel: (event: ElementWheelEvent) => void
|
|
358
363
|
}
|
|
@@ -447,6 +452,7 @@ export type SpriteGroup = {
|
|
|
447
452
|
onPointerDown?: (event: SpritePointerEvent) => void
|
|
448
453
|
onPointerMove?: (event: SpritePointerEvent) => void
|
|
449
454
|
onPointerUp?: (event: SpritePointerEvent) => void
|
|
455
|
+
onPointerCancel?: (event: SpritePointerEvent) => void
|
|
450
456
|
onWheel?: (event: SpriteWheelEvent) => void
|
|
451
457
|
onTap?: (event: SpriteTapEvent) => void
|
|
452
458
|
/** See Sprite.onTransitionEnd. */
|
package/src/views.ts
CHANGED
|
@@ -289,6 +289,7 @@ export function feedPointer(view: ViewHandle, feed: PointerFeed): () => void {
|
|
|
289
289
|
onPointerDown: e => feed.handlers.onPointerDown(e.native),
|
|
290
290
|
onPointerMove: e => feed.handlers.onPointerMove(e.native),
|
|
291
291
|
onPointerUp: e => feed.handlers.onPointerUp(e.native),
|
|
292
|
+
onPointerCancel: e => feed.handlers.onPointerCancel(e.native),
|
|
292
293
|
onWheel: e => feed.handlers.onWheel(e.native),
|
|
293
294
|
})
|
|
294
295
|
}
|