@flighthq/interaction 0.2.0 → 0.2.1-next.410.a23f189

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.
Files changed (74) hide show
  1. package/dist/cursorBackend.d.ts +12 -0
  2. package/dist/cursorBackend.d.ts.map +1 -0
  3. package/dist/cursorBackend.js +17 -0
  4. package/dist/cursorBackend.js.map +1 -0
  5. package/dist/displayHitTests.d.ts +10 -11
  6. package/dist/displayHitTests.d.ts.map +1 -1
  7. package/dist/displayHitTests.js +12 -14
  8. package/dist/displayHitTests.js.map +1 -1
  9. package/dist/enableInteractionGuards.d.ts +23 -0
  10. package/dist/enableInteractionGuards.d.ts.map +1 -0
  11. package/dist/enableInteractionGuards.js +75 -0
  12. package/dist/enableInteractionGuards.js.map +1 -0
  13. package/dist/focusManager.d.ts +46 -0
  14. package/dist/focusManager.d.ts.map +1 -0
  15. package/dist/focusManager.js +243 -0
  16. package/dist/focusManager.js.map +1 -0
  17. package/dist/hitTests.d.ts +45 -24
  18. package/dist/hitTests.d.ts.map +1 -1
  19. package/dist/hitTests.js +164 -47
  20. package/dist/hitTests.js.map +1 -1
  21. package/dist/index.d.ts +9 -1
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +9 -1
  24. package/dist/index.js.map +1 -1
  25. package/dist/interactionManager.d.ts +10 -2
  26. package/dist/interactionManager.d.ts.map +1 -1
  27. package/dist/interactionManager.js +58 -6
  28. package/dist/interactionManager.js.map +1 -1
  29. package/dist/interactionSpatialIndex.d.ts +17 -0
  30. package/dist/interactionSpatialIndex.d.ts.map +1 -0
  31. package/dist/interactionSpatialIndex.js +77 -0
  32. package/dist/interactionSpatialIndex.js.map +1 -0
  33. package/dist/nodeInteractionState.d.ts +39 -0
  34. package/dist/nodeInteractionState.d.ts.map +1 -0
  35. package/dist/nodeInteractionState.js +72 -0
  36. package/dist/nodeInteractionState.js.map +1 -0
  37. package/dist/registerBitmapHitTest.d.ts +11 -0
  38. package/dist/registerBitmapHitTest.d.ts.map +1 -0
  39. package/dist/registerBitmapHitTest.js +55 -0
  40. package/dist/registerBitmapHitTest.js.map +1 -0
  41. package/dist/registerDefaultHitTests.d.ts +2 -0
  42. package/dist/registerDefaultHitTests.d.ts.map +1 -0
  43. package/dist/registerDefaultHitTests.js +20 -0
  44. package/dist/registerDefaultHitTests.js.map +1 -0
  45. package/dist/registerShapeHitTest.d.ts +10 -0
  46. package/dist/registerShapeHitTest.d.ts.map +1 -0
  47. package/dist/registerShapeHitTest.js +32 -0
  48. package/dist/registerShapeHitTest.js.map +1 -0
  49. package/dist/registerTextHitTest.d.ts +12 -0
  50. package/dist/registerTextHitTest.d.ts.map +1 -0
  51. package/dist/registerTextHitTest.js +32 -0
  52. package/dist/registerTextHitTest.js.map +1 -0
  53. package/dist/spriteHitTests.d.ts +3 -3
  54. package/dist/spriteHitTests.d.ts.map +1 -1
  55. package/dist/spriteHitTests.js +5 -5
  56. package/dist/spriteHitTests.js.map +1 -1
  57. package/package.json +13 -7
  58. package/src/cursorBackend.test.ts +24 -0
  59. package/src/displayHitTests.test.ts +39 -47
  60. package/src/enableInteractionGuards.test.ts +102 -0
  61. package/src/focusManager.test.ts +307 -0
  62. package/src/hitTests.test.ts +235 -98
  63. package/src/interactionManager.test.ts +59 -8
  64. package/src/interactionSpatialIndex.test.ts +103 -0
  65. package/src/nodeInteractionState.test.ts +141 -0
  66. package/src/registerBitmapHitTest.test.ts +22 -0
  67. package/src/{registerDefaultHitTestPoints.test.ts → registerDefaultHitTests.test.ts} +10 -7
  68. package/src/registerShapeHitTest.test.ts +27 -0
  69. package/src/registerTextHitTest.test.ts +54 -0
  70. package/src/spriteHitTests.test.ts +15 -15
  71. package/dist/registerDefaultHitTestPoints.d.ts +0 -2
  72. package/dist/registerDefaultHitTestPoints.d.ts.map +0 -1
  73. package/dist/registerDefaultHitTestPoints.js +0 -21
  74. package/dist/registerDefaultHitTestPoints.js.map +0 -1
@@ -0,0 +1,103 @@
1
+ import { createDisplayObject, createDisplayObjectGeneric } from '@flighthq/displayobject';
2
+ import { setRectangle } from '@flighthq/geometry';
3
+ import { addNodeChild, getNodeLocalBoundsRectangle, invalidateNodeLocalTransform } from '@flighthq/node';
4
+ import { createSpatialIndex, createUniformGridSpatialBackend } from '@flighthq/spatial';
5
+ import { DisplayObjectKind } from '@flighthq/types';
6
+
7
+ import { hitTestGraphLocalBounds, registerHitTest } from './hitTests';
8
+ import { createInteractionManager } from './interactionManager';
9
+ import { findSpatialInteractionTarget, refreshInteractionSpatialIndex } from './interactionSpatialIndex';
10
+ import { setNodeHitArea, setNodeHitTestEnabled } from './nodeInteractionState';
11
+
12
+ function candidate(x: number, y: number, w: number, h: number) {
13
+ const obj = createDisplayObjectGeneric(DisplayObjectKind);
14
+ obj.x = x;
15
+ obj.y = y;
16
+ invalidateNodeLocalTransform(obj);
17
+ setRectangle(getNodeLocalBoundsRectangle(obj), 0, 0, w, h);
18
+ setNodeHitTestEnabled(obj, true);
19
+ return obj;
20
+ }
21
+
22
+ function managedScene() {
23
+ registerHitTest(DisplayObjectKind, hitTestGraphLocalBounds);
24
+ const root = createDisplayObject();
25
+ const index = createSpatialIndex(createUniformGridSpatialBackend(64));
26
+ const manager = createInteractionManager(root, { spatialIndex: index });
27
+ return { manager, root };
28
+ }
29
+
30
+ describe('findSpatialInteractionTarget', () => {
31
+ it('returns the candidate whose region contains the point', () => {
32
+ const { manager, root } = managedScene();
33
+ const a = candidate(0, 0, 50, 50);
34
+ const b = candidate(200, 200, 50, 50);
35
+ addNodeChild(root, a);
36
+ addNodeChild(root, b);
37
+ refreshInteractionSpatialIndex(manager);
38
+
39
+ expect(findSpatialInteractionTarget(manager, 25, 25)).toBe(a);
40
+ expect(findSpatialInteractionTarget(manager, 225, 225)).toBe(b);
41
+ expect(findSpatialInteractionTarget(manager, 500, 500)).toBeNull();
42
+ });
43
+
44
+ it('returns the topmost (last-drawn) candidate when regions overlap', () => {
45
+ const { manager, root } = managedScene();
46
+ const under = candidate(0, 0, 100, 100);
47
+ const over = candidate(0, 0, 100, 100);
48
+ addNodeChild(root, under);
49
+ addNodeChild(root, over);
50
+ refreshInteractionSpatialIndex(manager);
51
+
52
+ expect(findSpatialInteractionTarget(manager, 50, 50)).toBe(over);
53
+ });
54
+
55
+ it('returns null before the index is refreshed', () => {
56
+ const { manager, root } = managedScene();
57
+ addNodeChild(root, candidate(0, 0, 50, 50));
58
+ expect(findSpatialInteractionTarget(manager, 25, 25)).toBeNull();
59
+ });
60
+ });
61
+
62
+ describe('refreshInteractionSpatialIndex', () => {
63
+ it('indexes only opted-in nodes', () => {
64
+ const { manager, root } = managedScene();
65
+ const inert = createDisplayObjectGeneric(DisplayObjectKind);
66
+ setRectangle(getNodeLocalBoundsRectangle(inert), 0, 0, 50, 50);
67
+ addNodeChild(root, inert);
68
+ refreshInteractionSpatialIndex(manager);
69
+
70
+ expect(findSpatialInteractionTarget(manager, 25, 25)).toBeNull();
71
+
72
+ setNodeHitTestEnabled(inert, true);
73
+ refreshInteractionSpatialIndex(manager);
74
+ expect(findSpatialInteractionTarget(manager, 25, 25)).toBe(inert);
75
+ });
76
+
77
+ it('indexes an atomic hitArea unit without descending into its children', () => {
78
+ const { manager, root } = managedScene();
79
+ const unit = candidate(0, 0, 100, 100);
80
+ setNodeHitArea(unit, 'bounds');
81
+ const child = candidate(0, 0, 20, 20);
82
+ addNodeChild(root, unit);
83
+ addNodeChild(unit, child);
84
+ refreshInteractionSpatialIndex(manager);
85
+
86
+ // The child sits inside the unit, but the atomic unit is what resolves.
87
+ expect(findSpatialInteractionTarget(manager, 10, 10)).toBe(unit);
88
+ });
89
+
90
+ it('agrees with the linear pick after a transform change is re-synced', () => {
91
+ const { manager, root } = managedScene();
92
+ const a = candidate(0, 0, 50, 50);
93
+ addNodeChild(root, a);
94
+ refreshInteractionSpatialIndex(manager);
95
+ expect(findSpatialInteractionTarget(manager, 25, 25)).toBe(a);
96
+
97
+ a.x = 300;
98
+ invalidateNodeLocalTransform(a);
99
+ refreshInteractionSpatialIndex(manager);
100
+ expect(findSpatialInteractionTarget(manager, 25, 25)).toBeNull();
101
+ expect(findSpatialInteractionTarget(manager, 325, 25)).toBe(a);
102
+ });
103
+ });
@@ -0,0 +1,141 @@
1
+ import { createDisplayObject } from '@flighthq/displayobject';
2
+ import { createRectangle } from '@flighthq/geometry';
3
+
4
+ import {
5
+ createNodeInteractionState,
6
+ enableNodeInteractionState,
7
+ getNodeCursor,
8
+ getNodeHitArea,
9
+ getNodeInteractionState,
10
+ getNodeTabIndex,
11
+ isNodeFocusable,
12
+ isNodeHitTestEnabled,
13
+ setNodeCursor,
14
+ setNodeFocusable,
15
+ setNodeHitArea,
16
+ setNodeHitTestEnabled,
17
+ setNodeTabIndex,
18
+ } from './nodeInteractionState';
19
+
20
+ describe('createNodeInteractionState', () => {
21
+ it('returns a cell with every field at its default', () => {
22
+ expect(createNodeInteractionState()).toEqual({
23
+ cursor: null,
24
+ focusable: false,
25
+ hitArea: null,
26
+ hitTestEnabled: false,
27
+ tabIndex: -1,
28
+ });
29
+ });
30
+ });
31
+
32
+ describe('enableNodeInteractionState', () => {
33
+ it('creates the cell on first use and returns the same instance thereafter', () => {
34
+ const obj = createDisplayObject();
35
+ const first = enableNodeInteractionState(obj);
36
+ expect(getNodeInteractionState(obj)).toBe(first);
37
+ expect(enableNodeInteractionState(obj)).toBe(first);
38
+ });
39
+ });
40
+
41
+ describe('getNodeCursor', () => {
42
+ it('is null by default and returns the set cursor', () => {
43
+ const obj = createDisplayObject();
44
+ expect(getNodeCursor(obj)).toBeNull();
45
+ setNodeCursor(obj, 'pointer');
46
+ expect(getNodeCursor(obj)).toBe('pointer');
47
+ });
48
+ });
49
+
50
+ describe('getNodeHitArea', () => {
51
+ it('is null by default and returns the set proxy', () => {
52
+ const obj = createDisplayObject();
53
+ const area = createRectangle(0, 0, 10, 10);
54
+ expect(getNodeHitArea(obj)).toBeNull();
55
+ setNodeHitArea(obj, area);
56
+ expect(getNodeHitArea(obj)).toBe(area);
57
+ });
58
+ });
59
+
60
+ describe('getNodeInteractionState', () => {
61
+ it('is null until a field is set', () => {
62
+ const obj = createDisplayObject();
63
+ expect(getNodeInteractionState(obj)).toBeNull();
64
+ setNodeFocusable(obj, true);
65
+ expect(getNodeInteractionState(obj)).not.toBeNull();
66
+ });
67
+ });
68
+
69
+ describe('getNodeTabIndex', () => {
70
+ it('defaults to -1 and returns the set value', () => {
71
+ const obj = createDisplayObject();
72
+ expect(getNodeTabIndex(obj)).toBe(-1);
73
+ setNodeTabIndex(obj, 3);
74
+ expect(getNodeTabIndex(obj)).toBe(3);
75
+ });
76
+ });
77
+
78
+ describe('isNodeFocusable', () => {
79
+ it('defaults to false and reflects the setter', () => {
80
+ const obj = createDisplayObject();
81
+ expect(isNodeFocusable(obj)).toBe(false);
82
+ setNodeFocusable(obj, true);
83
+ expect(isNodeFocusable(obj)).toBe(true);
84
+ });
85
+ });
86
+
87
+ describe('isNodeHitTestEnabled', () => {
88
+ it('defaults to false (opt-in) and reflects the setter', () => {
89
+ const obj = createDisplayObject();
90
+ expect(isNodeHitTestEnabled(obj)).toBe(false);
91
+ setNodeHitTestEnabled(obj, true);
92
+ expect(isNodeHitTestEnabled(obj)).toBe(true);
93
+ });
94
+ });
95
+
96
+ describe('setNodeCursor', () => {
97
+ it('assigns and clears the cursor', () => {
98
+ const obj = createDisplayObject();
99
+ setNodeCursor(obj, 'grab');
100
+ expect(getNodeCursor(obj)).toBe('grab');
101
+ setNodeCursor(obj, null);
102
+ expect(getNodeCursor(obj)).toBeNull();
103
+ });
104
+ });
105
+
106
+ describe('setNodeFocusable', () => {
107
+ it('assigns focusability', () => {
108
+ const obj = createDisplayObject();
109
+ setNodeFocusable(obj, true);
110
+ expect(isNodeFocusable(obj)).toBe(true);
111
+ });
112
+ });
113
+
114
+ describe('setNodeHitArea', () => {
115
+ it('assigns and clears the hit-area proxy', () => {
116
+ const obj = createDisplayObject();
117
+ const area = createRectangle(0, 0, 5, 5);
118
+ setNodeHitArea(obj, area);
119
+ expect(getNodeHitArea(obj)).toBe(area);
120
+ setNodeHitArea(obj, null);
121
+ expect(getNodeHitArea(obj)).toBeNull();
122
+ });
123
+ });
124
+
125
+ describe('setNodeHitTestEnabled', () => {
126
+ it('opts the node in and out of hit testing', () => {
127
+ const obj = createDisplayObject();
128
+ setNodeHitTestEnabled(obj, true);
129
+ expect(isNodeHitTestEnabled(obj)).toBe(true);
130
+ setNodeHitTestEnabled(obj, false);
131
+ expect(isNodeHitTestEnabled(obj)).toBe(false);
132
+ });
133
+ });
134
+
135
+ describe('setNodeTabIndex', () => {
136
+ it('assigns the focus-order key', () => {
137
+ const obj = createDisplayObject();
138
+ setNodeTabIndex(obj, 7);
139
+ expect(getNodeTabIndex(obj)).toBe(7);
140
+ });
141
+ });
@@ -0,0 +1,22 @@
1
+ import { createBitmap } from '@flighthq/displayobject';
2
+ import { setRectangle } from '@flighthq/geometry';
3
+ import { getNodeLocalBoundsRectangle } from '@flighthq/node';
4
+
5
+ import { findGraphHitTargetPrecise } from './hitTests';
6
+ import { setNodeHitTestEnabled } from './nodeInteractionState';
7
+ import { registerBitmapHitTest } from './registerBitmapHitTest';
8
+
9
+ describe('registerBitmapHitTest', () => {
10
+ // Positive alpha-accuracy is exercised by the functional suite (jsdom cannot rasterize pixels); this
11
+ // covers the wiring and the documented bounds fallback when no readable image is present.
12
+ it('installs a precise Bitmap provider with a no-image bounds fallback', () => {
13
+ registerBitmapHitTest();
14
+ const bitmap = createBitmap();
15
+ setRectangle(getNodeLocalBoundsRectangle(bitmap), 0, 0, 100, 100);
16
+ setNodeHitTestEnabled(bitmap, true);
17
+
18
+ // No image → the exact provider falls back to a bounds hit inside the box, miss outside.
19
+ expect(findGraphHitTargetPrecise(bitmap, 50, 50)).toBe(bitmap);
20
+ expect(findGraphHitTargetPrecise(bitmap, 200, 200)).toBeNull();
21
+ });
22
+ });
@@ -4,26 +4,29 @@ import { getNodeLocalBoundsRectangle } from '@flighthq/node';
4
4
  import { createShape } from '@flighthq/shape';
5
5
 
6
6
  import { findGraphHitTarget } from './hitTests';
7
- import { registerDefaultHitTestPoints } from './registerDefaultHitTestPoints';
7
+ import { setNodeHitTestEnabled } from './nodeInteractionState';
8
+ import { registerDefaultHitTests } from './registerDefaultHitTests';
8
9
 
9
- describe('registerDefaultHitTestPoints', () => {
10
+ describe('registerDefaultHitTests', () => {
10
11
  it('registers all built-in kinds so findGraphHitTarget resolves them', () => {
11
- registerDefaultHitTestPoints();
12
+ registerDefaultHitTests();
12
13
 
13
14
  const bitmap = createBitmap();
14
15
  setRectangle(getNodeLocalBoundsRectangle(bitmap), 0, 0, 100, 100);
16
+ setNodeHitTestEnabled(bitmap, true);
15
17
  expect(findGraphHitTarget(bitmap, 50, 50)).toBe(bitmap);
16
18
 
17
19
  const shape = createShape();
18
20
  setRectangle(getNodeLocalBoundsRectangle(shape), 0, 0, 100, 100);
21
+ setNodeHitTestEnabled(shape, true);
19
22
  expect(findGraphHitTarget(shape, 50, 50)).toBe(shape);
20
23
  });
21
24
 
22
25
  it('containers return null for self hit', () => {
23
- registerDefaultHitTestPoints();
26
+ registerDefaultHitTests();
24
27
 
25
- const stage = createStage();
26
- setRectangle(getNodeLocalBoundsRectangle(stage), 0, 0, 100, 100);
27
- expect(findGraphHitTarget(stage, 50, 50)).toBeNull();
28
+ const root = createStage().root;
29
+ setRectangle(getNodeLocalBoundsRectangle(root), 0, 0, 100, 100);
30
+ expect(findGraphHitTarget(root, 50, 50)).toBeNull();
28
31
  });
29
32
  });
@@ -0,0 +1,27 @@
1
+ import { setRectangle } from '@flighthq/geometry';
2
+ import { getNodeLocalBoundsRectangle } from '@flighthq/node';
3
+ import { appendShapeBeginFill, appendShapeCircle, appendShapeEndFill, createShape } from '@flighthq/shape';
4
+ import { ShapeKind } from '@flighthq/types';
5
+
6
+ import { findGraphHitTargetPrecise, hitTestGraphLocalBounds, hitTestGraphPoint, registerHitTest } from './hitTests';
7
+ import { setNodeHitTestEnabled } from './nodeInteractionState';
8
+ import { registerShapeHitTest } from './registerShapeHitTest';
9
+
10
+ describe('registerShapeHitTest', () => {
11
+ it('winding-tests the actual fill for precise queries, so a bbox corner outside the circle misses', () => {
12
+ registerHitTest(ShapeKind, hitTestGraphLocalBounds);
13
+ registerShapeHitTest();
14
+ const shape = createShape();
15
+ appendShapeBeginFill(shape, 0xff0000ff, 1);
16
+ appendShapeCircle(shape, 50, 50, 40);
17
+ appendShapeEndFill(shape);
18
+ setRectangle(getNodeLocalBoundsRectangle(shape), 10, 10, 80, 80);
19
+ setNodeHitTestEnabled(shape, true);
20
+
21
+ // Center is inside the fill; (85,85) is inside the bounding box but outside the circle.
22
+ expect(findGraphHitTargetPrecise(shape, 50, 50)).toBe(shape);
23
+ expect(findGraphHitTargetPrecise(shape, 85, 85)).toBeNull();
24
+ // The coarse query still counts (85,85) as a hit.
25
+ expect(hitTestGraphPoint(shape, 85, 85)).toBe(true);
26
+ });
27
+ });
@@ -0,0 +1,54 @@
1
+ import { setRectangle } from '@flighthq/geometry';
2
+ import { getNodeLocalBoundsRectangle } from '@flighthq/node';
3
+ import { createTextLabel, setTextLabelString } from '@flighthq/text';
4
+ import { setTextLayoutMeasureProvider } from '@flighthq/textlayout';
5
+ import type { HitTestResult, TextLabel } from '@flighthq/types';
6
+ import { TextLabelKind } from '@flighthq/types';
7
+
8
+ import { describeGraphHit, findGraphHitTargetPrecise, hitTestGraphLocalBounds, registerHitTest } from './hitTests';
9
+ import { setNodeHitTestEnabled } from './nodeInteractionState';
10
+ import { registerTextHitTest } from './registerTextHitTest';
11
+
12
+ function hittableLabel(text: string): TextLabel {
13
+ const label = createTextLabel();
14
+ setTextLabelString(label, text);
15
+ setRectangle(getNodeLocalBoundsRectangle(label), 0, 0, 200, 30);
16
+ setNodeHitTestEnabled(label, true);
17
+ return label;
18
+ }
19
+
20
+ function emptyResult(node: TextLabel): HitTestResult {
21
+ return { localX: 0, localY: 0, node, subIndex: -99 };
22
+ }
23
+
24
+ beforeAll(() => {
25
+ registerHitTest(TextLabelKind, hitTestGraphLocalBounds);
26
+ registerTextHitTest();
27
+ });
28
+
29
+ afterEach(() => {
30
+ setTextLayoutMeasureProvider(null);
31
+ });
32
+
33
+ describe('registerTextHitTest', () => {
34
+ it('hits the whole box precisely, and describes subIndex 0 when no layout is available', () => {
35
+ setTextLayoutMeasureProvider(null);
36
+ const label = hittableLabel('hello');
37
+ expect(findGraphHitTargetPrecise(label, 5, 10)).toBe(label);
38
+ const out = emptyResult(label);
39
+ describeGraphHit(label, 5, 10, out);
40
+ expect(out.subIndex).toBe(0);
41
+ });
42
+
43
+ it('describes the character index under the pointer via the layout', () => {
44
+ // Fixed 7px-per-character measure — a real layout without a renderer.
45
+ setTextLayoutMeasureProvider((t) => t.length * 7);
46
+ const label = hittableLabel('ABCDE');
47
+ const left = emptyResult(label);
48
+ const right = emptyResult(label);
49
+ describeGraphHit(label, 1, 10, left);
50
+ describeGraphHit(label, 30, 10, right);
51
+ expect(left.subIndex).toBe(0);
52
+ expect(right.subIndex).toBeGreaterThan(left.subIndex);
53
+ });
54
+ });
@@ -3,9 +3,9 @@ import { addNodeChild, getNodeLocalBoundsRectangle } from '@flighthq/node';
3
3
  import { createQuadBatch, createSprite, createTilemap } from '@flighthq/sprite';
4
4
 
5
5
  import {
6
- defaultQuadBatchHitTestPointHandler,
7
- defaultSpriteHitTestPointHandler,
8
- defaultTilemapHitTestPointHandler,
6
+ defaultQuadBatchHitTestHandler,
7
+ defaultSpriteHitTestHandler,
8
+ defaultTilemapHitTestHandler,
9
9
  } from './spriteHitTests';
10
10
 
11
11
  function makeSprite(boundsW = 100, boundsH = 100) {
@@ -16,13 +16,13 @@ function makeSprite(boundsW = 100, boundsH = 100) {
16
16
  return sprite;
17
17
  }
18
18
 
19
- describe('defaultQuadBatchHitTestPointHandler', () => {
19
+ describe('defaultQuadBatchHitTestHandler', () => {
20
20
  it('returns true inside bounds', () => {
21
21
  const parent = createSprite();
22
22
  const qb = createQuadBatch();
23
23
  addNodeChild(parent, qb);
24
24
  setRectangle(getNodeLocalBoundsRectangle(qb), 0, 0, 100, 100);
25
- expect(defaultQuadBatchHitTestPointHandler(qb, 50, 50, false)).toBe(true);
25
+ expect(defaultQuadBatchHitTestHandler(qb, 50, 50)).toBe(true);
26
26
  });
27
27
 
28
28
  it('returns false outside bounds', () => {
@@ -30,40 +30,40 @@ describe('defaultQuadBatchHitTestPointHandler', () => {
30
30
  const qb = createQuadBatch();
31
31
  addNodeChild(parent, qb);
32
32
  setRectangle(getNodeLocalBoundsRectangle(qb), 0, 0, 100, 100);
33
- expect(defaultQuadBatchHitTestPointHandler(qb, 200, 200, false)).toBe(false);
33
+ expect(defaultQuadBatchHitTestHandler(qb, 200, 200)).toBe(false);
34
34
  });
35
35
  });
36
36
 
37
- describe('defaultSpriteHitTestPointHandler', () => {
37
+ describe('defaultSpriteHitTestHandler', () => {
38
38
  it('returns true when point is inside local bounds', () => {
39
39
  const sprite = makeSprite();
40
- expect(defaultSpriteHitTestPointHandler(sprite, 50, 50, false)).toBe(true);
40
+ expect(defaultSpriteHitTestHandler(sprite, 50, 50)).toBe(true);
41
41
  });
42
42
 
43
43
  it('returns false when point is outside local bounds', () => {
44
44
  const sprite = makeSprite();
45
- expect(defaultSpriteHitTestPointHandler(sprite, 200, 200, false)).toBe(false);
45
+ expect(defaultSpriteHitTestHandler(sprite, 200, 200)).toBe(false);
46
46
  });
47
47
 
48
48
  it('returns false for a zero-size sprite', () => {
49
49
  const sprite = makeSprite(0, 0);
50
- expect(defaultSpriteHitTestPointHandler(sprite, 0, 0, false)).toBe(false);
50
+ expect(defaultSpriteHitTestHandler(sprite, 0, 0)).toBe(false);
51
51
  });
52
52
 
53
53
  it('ignores shapeFlag', () => {
54
54
  const sprite = makeSprite();
55
- expect(defaultSpriteHitTestPointHandler(sprite, 10, 10, true)).toBe(true);
56
- expect(defaultSpriteHitTestPointHandler(sprite, 200, 200, true)).toBe(false);
55
+ expect(defaultSpriteHitTestHandler(sprite, 10, 10)).toBe(true);
56
+ expect(defaultSpriteHitTestHandler(sprite, 200, 200)).toBe(false);
57
57
  });
58
58
  });
59
59
 
60
- describe('defaultTilemapHitTestPointHandler', () => {
60
+ describe('defaultTilemapHitTestHandler', () => {
61
61
  it('returns true inside bounds', () => {
62
62
  const parent = createSprite();
63
63
  const tilemap = createTilemap();
64
64
  addNodeChild(parent, tilemap);
65
65
  setRectangle(getNodeLocalBoundsRectangle(tilemap), 0, 0, 100, 100);
66
- expect(defaultTilemapHitTestPointHandler(tilemap, 10, 10, false)).toBe(true);
66
+ expect(defaultTilemapHitTestHandler(tilemap, 10, 10)).toBe(true);
67
67
  });
68
68
 
69
69
  it('returns false outside bounds', () => {
@@ -71,6 +71,6 @@ describe('defaultTilemapHitTestPointHandler', () => {
71
71
  const tilemap = createTilemap();
72
72
  addNodeChild(parent, tilemap);
73
73
  setRectangle(getNodeLocalBoundsRectangle(tilemap), 0, 0, 100, 100);
74
- expect(defaultTilemapHitTestPointHandler(tilemap, 999, 999, false)).toBe(false);
74
+ expect(defaultTilemapHitTestHandler(tilemap, 999, 999)).toBe(false);
75
75
  });
76
76
  });
@@ -1,2 +0,0 @@
1
- export declare function registerDefaultHitTestPoints(): void;
2
- //# sourceMappingURL=registerDefaultHitTestPoints.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registerDefaultHitTestPoints.d.ts","sourceRoot":"","sources":["../src/registerDefaultHitTestPoints.ts"],"names":[],"mappings":"AAoCA,wBAAgB,4BAA4B,IAAI,IAAI,CAenD"}
@@ -1,21 +0,0 @@
1
- import { BitmapKind, DisplayObjectKind, HtmlViewKind, MovieClipKind, QuadBatchKind, RenderViewKind, RichTextKind, Scale9ShapeKind, ShapeKind, SpriteKind, StageKind, TextLabelKind, TilemapKind, VideoKind, } from '@flighthq/types';
2
- import { defaultBitmapHitTestPointHandler, defaultDisplayObjectHitTestPointHandler, defaultHtmlViewHitTestPointHandler, defaultMovieClipHitTestPointHandler, defaultRenderViewHitTestPointHandler, defaultRichTextHitTestPointHandler, defaultShapeHitTestPointHandler, defaultStageHitTestPointHandler, defaultTextHitTestPointHandler, defaultVideoHitTestPointHandler, } from './displayHitTests';
3
- import { registerHitTestPoint } from './hitTests';
4
- import { defaultQuadBatchHitTestPointHandler, defaultSpriteHitTestPointHandler, defaultTilemapHitTestPointHandler, } from './spriteHitTests';
5
- export function registerDefaultHitTestPoints() {
6
- registerHitTestPoint(BitmapKind, defaultBitmapHitTestPointHandler);
7
- registerHitTestPoint(DisplayObjectKind, defaultDisplayObjectHitTestPointHandler);
8
- registerHitTestPoint(HtmlViewKind, defaultHtmlViewHitTestPointHandler);
9
- registerHitTestPoint(MovieClipKind, defaultMovieClipHitTestPointHandler);
10
- registerHitTestPoint(QuadBatchKind, defaultQuadBatchHitTestPointHandler);
11
- registerHitTestPoint(RenderViewKind, defaultRenderViewHitTestPointHandler);
12
- registerHitTestPoint(RichTextKind, defaultRichTextHitTestPointHandler);
13
- registerHitTestPoint(Scale9ShapeKind, defaultShapeHitTestPointHandler);
14
- registerHitTestPoint(ShapeKind, defaultShapeHitTestPointHandler);
15
- registerHitTestPoint(SpriteKind, defaultSpriteHitTestPointHandler);
16
- registerHitTestPoint(StageKind, defaultStageHitTestPointHandler);
17
- registerHitTestPoint(TextLabelKind, defaultTextHitTestPointHandler);
18
- registerHitTestPoint(TilemapKind, defaultTilemapHitTestPointHandler);
19
- registerHitTestPoint(VideoKind, defaultVideoHitTestPointHandler);
20
- }
21
- //# sourceMappingURL=registerDefaultHitTestPoints.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registerDefaultHitTestPoints.js","sourceRoot":"","sources":["../src/registerDefaultHitTestPoints.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,aAAa,EACb,cAAc,EACd,YAAY,EACZ,eAAe,EACf,SAAS,EACT,UAAU,EACV,SAAS,EACT,aAAa,EACb,WAAW,EACX,SAAS,GACV,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,gCAAgC,EAChC,uCAAuC,EACvC,kCAAkC,EAClC,mCAAmC,EACnC,oCAAoC,EACpC,kCAAkC,EAClC,+BAA+B,EAC/B,+BAA+B,EAC/B,8BAA8B,EAC9B,+BAA+B,GAChC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EACL,mCAAmC,EACnC,gCAAgC,EAChC,iCAAiC,GAClC,MAAM,kBAAkB,CAAC;AAE1B,MAAM,UAAU,4BAA4B;IAC1C,oBAAoB,CAAC,UAAU,EAAE,gCAAgC,CAAC,CAAC;IACnE,oBAAoB,CAAC,iBAAiB,EAAE,uCAAuC,CAAC,CAAC;IACjF,oBAAoB,CAAC,YAAY,EAAE,kCAAkC,CAAC,CAAC;IACvE,oBAAoB,CAAC,aAAa,EAAE,mCAAmC,CAAC,CAAC;IACzE,oBAAoB,CAAC,aAAa,EAAE,mCAAmC,CAAC,CAAC;IACzE,oBAAoB,CAAC,cAAc,EAAE,oCAAoC,CAAC,CAAC;IAC3E,oBAAoB,CAAC,YAAY,EAAE,kCAAkC,CAAC,CAAC;IACvE,oBAAoB,CAAC,eAAe,EAAE,+BAA+B,CAAC,CAAC;IACvE,oBAAoB,CAAC,SAAS,EAAE,+BAA+B,CAAC,CAAC;IACjE,oBAAoB,CAAC,UAAU,EAAE,gCAAgC,CAAC,CAAC;IACnE,oBAAoB,CAAC,SAAS,EAAE,+BAA+B,CAAC,CAAC;IACjE,oBAAoB,CAAC,aAAa,EAAE,8BAA8B,CAAC,CAAC;IACpE,oBAAoB,CAAC,WAAW,EAAE,iCAAiC,CAAC,CAAC;IACrE,oBAAoB,CAAC,SAAS,EAAE,+BAA+B,CAAC,CAAC;AACnE,CAAC"}