ice-render 1.0.3 → 1.0.5

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 (145) hide show
  1. package/LICENSE +0 -0
  2. package/README.md +229 -139
  3. package/dist/THIRD-PARTY-NOTICES.txt +32 -0
  4. package/dist/index.cjs +30 -0
  5. package/dist/index.mjs +30 -0
  6. package/dist/index.umd.js +6 -1
  7. package/dist/types/FrameManager.d.mts +26 -0
  8. package/dist/types/FrameManager.d.ts +26 -24
  9. package/dist/types/ICE.d.mts +369 -0
  10. package/dist/types/ICE.d.ts +369 -109
  11. package/dist/types/a11y/accessibility.d.mts +46 -0
  12. package/dist/types/a11y/accessibility.d.ts +46 -0
  13. package/dist/types/animation/AnimationManager.d.mts +96 -0
  14. package/dist/types/animation/AnimationManager.d.ts +96 -25
  15. package/dist/types/animation/Easing.d.mts +33 -0
  16. package/dist/types/animation/Easing.d.ts +33 -32
  17. package/dist/types/consts/BIG_ZINDEX_NUMBER.d.mts +14 -0
  18. package/dist/types/consts/BIG_ZINDEX_NUMBER.d.ts +14 -14
  19. package/dist/types/consts/COMPONENT_TYPE_MAPPING.d.mts +45 -0
  20. package/dist/types/consts/COMPONENT_TYPE_MAPPING.d.ts +45 -36
  21. package/dist/types/consts/DOM_EVENT_MAPPING_CONSTS.d.mts +37 -0
  22. package/dist/types/consts/DOM_EVENT_MAPPING_CONSTS.d.ts +37 -19
  23. package/dist/types/consts/ICE_EVENT_NAME_CONSTS.d.mts +27 -0
  24. package/dist/types/consts/ICE_EVENT_NAME_CONSTS.d.ts +27 -20
  25. package/dist/types/control-panel/AlignmentGuideManager.d.mts +92 -0
  26. package/dist/types/control-panel/AlignmentGuideManager.d.ts +92 -0
  27. package/dist/types/control-panel/ICEControlPanel.d.mts +37 -0
  28. package/dist/types/control-panel/ICEControlPanel.d.ts +37 -37
  29. package/dist/types/control-panel/ICEControlPanelManager.d.mts +25 -0
  30. package/dist/types/control-panel/ICEControlPanelManager.d.ts +25 -23
  31. package/dist/types/control-panel/link-controls/LineControlPanel.d.mts +39 -0
  32. package/dist/types/control-panel/link-controls/LineControlPanel.d.ts +39 -39
  33. package/dist/types/control-panel/transform-controls/ResizeControl.d.mts +38 -0
  34. package/dist/types/control-panel/transform-controls/ResizeControl.d.ts +38 -34
  35. package/dist/types/control-panel/transform-controls/RotateControl.d.mts +12 -0
  36. package/dist/types/control-panel/transform-controls/RotateControl.d.ts +12 -16
  37. package/dist/types/control-panel/transform-controls/TransformControlPanel.d.mts +83 -0
  38. package/dist/types/control-panel/transform-controls/TransformControlPanel.d.ts +83 -74
  39. package/dist/types/control-panel/transform-controls/constraints.d.mts +24 -0
  40. package/dist/types/control-panel/transform-controls/constraints.d.ts +24 -0
  41. package/dist/types/cross-platform/PolyfillPath2D.d.mts +31 -0
  42. package/dist/types/cross-platform/PolyfillPath2D.d.ts +31 -0
  43. package/dist/types/cross-platform/root.d.mts +7 -0
  44. package/dist/types/cross-platform/root.d.ts +7 -2
  45. package/dist/types/event/DOMEventDispatcher.d.mts +68 -0
  46. package/dist/types/event/DOMEventDispatcher.d.ts +68 -29
  47. package/dist/types/event/DOMEventInterceptor.d.mts +36 -0
  48. package/dist/types/event/DOMEventInterceptor.d.ts +36 -7
  49. package/dist/types/event/EventBus.d.mts +27 -0
  50. package/dist/types/event/EventBus.d.ts +27 -27
  51. package/dist/types/event/ICEEvent.d.mts +46 -0
  52. package/dist/types/event/ICEEvent.d.ts +46 -46
  53. package/dist/types/event/ICEEventTarget.d.mts +106 -0
  54. package/dist/types/event/ICEEventTarget.d.ts +106 -106
  55. package/dist/types/event/input-normalize.d.mts +75 -0
  56. package/dist/types/event/input-normalize.d.ts +75 -0
  57. package/dist/types/geometry/GeoLine.d.mts +24 -0
  58. package/dist/types/geometry/GeoLine.d.ts +24 -23
  59. package/dist/types/geometry/GeoPoint.d.mts +53 -0
  60. package/dist/types/geometry/GeoPoint.d.ts +53 -66
  61. package/dist/types/geometry/GeoUtil.d.mts +73 -0
  62. package/dist/types/geometry/GeoUtil.d.ts +73 -37
  63. package/dist/types/geometry/ICEBoundingBox.d.mts +81 -0
  64. package/dist/types/geometry/ICEBoundingBox.d.ts +81 -81
  65. package/dist/types/graphic/ICEComponent.d.mts +436 -0
  66. package/dist/types/graphic/ICEComponent.d.ts +436 -264
  67. package/dist/types/graphic/ICEDotPath.d.mts +99 -0
  68. package/dist/types/graphic/ICEDotPath.d.ts +99 -63
  69. package/dist/types/graphic/ICEImage.d.mts +17 -0
  70. package/dist/types/graphic/ICEImage.d.ts +17 -17
  71. package/dist/types/graphic/ICEPath.d.mts +39 -0
  72. package/dist/types/graphic/ICEPath.d.ts +39 -39
  73. package/dist/types/graphic/container/ICEGroup.d.mts +101 -0
  74. package/dist/types/graphic/container/ICEGroup.d.ts +101 -54
  75. package/dist/types/graphic/link/ICEBezier.d.mts +23 -0
  76. package/dist/types/graphic/link/ICEBezier.d.ts +23 -15
  77. package/dist/types/graphic/link/ICELinkHook.d.mts +52 -0
  78. package/dist/types/graphic/link/ICELinkHook.d.ts +52 -52
  79. package/dist/types/graphic/link/ICELinkSlot.d.mts +54 -0
  80. package/dist/types/graphic/link/ICELinkSlot.d.ts +54 -46
  81. package/dist/types/graphic/link/ICELinkSlotManager.d.mts +28 -0
  82. package/dist/types/graphic/link/ICELinkSlotManager.d.ts +28 -28
  83. package/dist/types/graphic/link/ICEPolyLine.d.mts +292 -0
  84. package/dist/types/graphic/link/ICEPolyLine.d.ts +292 -219
  85. package/dist/types/graphic/link/ICEVisioLink.d.mts +163 -0
  86. package/dist/types/graphic/link/ICEVisioLink.d.ts +163 -129
  87. package/dist/types/graphic/shape/ICECircle.d.mts +19 -0
  88. package/dist/types/graphic/shape/ICECircle.d.ts +19 -19
  89. package/dist/types/graphic/shape/ICEEllipse.d.mts +29 -0
  90. package/dist/types/graphic/shape/ICEEllipse.d.ts +29 -26
  91. package/dist/types/graphic/shape/ICEIsogon.d.mts +52 -0
  92. package/dist/types/graphic/shape/ICEIsogon.d.ts +52 -54
  93. package/dist/types/graphic/shape/ICERect.d.mts +10 -0
  94. package/dist/types/graphic/shape/ICERect.d.ts +10 -17
  95. package/dist/types/graphic/shape/ICERose.d.mts +41 -0
  96. package/dist/types/graphic/shape/ICERose.d.ts +41 -41
  97. package/dist/types/graphic/shape/ICEStar.d.mts +45 -0
  98. package/dist/types/graphic/shape/ICEStar.d.ts +45 -48
  99. package/dist/types/graphic/text/ICEText.d.mts +137 -0
  100. package/dist/types/graphic/text/ICEText.d.ts +137 -64
  101. package/dist/types/index.d.mts +55 -0
  102. package/dist/types/index.d.ts +55 -41
  103. package/dist/types/layout/ICEBorderLayout.d.mts +34 -0
  104. package/dist/types/layout/ICEBorderLayout.d.ts +34 -0
  105. package/dist/types/layout/ICEBoxLayout.d.mts +30 -0
  106. package/dist/types/layout/ICEBoxLayout.d.ts +30 -0
  107. package/dist/types/layout/ICECardLayout.d.mts +36 -0
  108. package/dist/types/layout/ICECardLayout.d.ts +36 -0
  109. package/dist/types/layout/ICEFlowLayout.d.mts +31 -0
  110. package/dist/types/layout/ICEFlowLayout.d.ts +31 -0
  111. package/dist/types/layout/ICEGridLayout.d.mts +33 -0
  112. package/dist/types/layout/ICEGridLayout.d.ts +33 -0
  113. package/dist/types/layout/ICELayeredLayout.d.mts +49 -0
  114. package/dist/types/layout/ICELayeredLayout.d.ts +49 -0
  115. package/dist/types/layout/ICELayoutManager.d.mts +33 -0
  116. package/dist/types/layout/ICELayoutManager.d.ts +33 -0
  117. package/dist/types/layout/ICEOverlayLayout.d.mts +25 -0
  118. package/dist/types/layout/ICEOverlayLayout.d.ts +25 -0
  119. package/dist/types/persistence/Deserializer.d.mts +43 -0
  120. package/dist/types/persistence/Deserializer.d.ts +43 -14
  121. package/dist/types/persistence/Serializer.d.mts +35 -0
  122. package/dist/types/persistence/Serializer.d.ts +35 -26
  123. package/dist/types/plugin/PluginHost.d.mts +86 -0
  124. package/dist/types/plugin/PluginHost.d.ts +86 -0
  125. package/dist/types/renderer/CanvasRenderer.d.mts +150 -0
  126. package/dist/types/renderer/CanvasRenderer.d.ts +150 -24
  127. package/dist/types/renderer/ObjectCache.d.mts +79 -0
  128. package/dist/types/renderer/ObjectCache.d.ts +79 -0
  129. package/dist/types/renderer/dirty-rect-util.d.mts +86 -0
  130. package/dist/types/renderer/dirty-rect-util.d.ts +86 -0
  131. package/dist/types/theme/ICETheme.d.mts +382 -0
  132. package/dist/types/theme/ICETheme.d.ts +382 -0
  133. package/dist/types/util/ImageCache.d.mts +19 -0
  134. package/dist/types/util/ImageCache.d.ts +19 -17
  135. package/dist/types/util/data-util.d.mts +43 -0
  136. package/dist/types/util/data-util.d.ts +43 -19
  137. package/dist/types/util/gl-matrix-skew.d.mts +14 -0
  138. package/dist/types/util/gl-matrix-skew.d.ts +14 -14
  139. package/dist/types/util/lang.d.mts +28 -0
  140. package/dist/types/util/lang.d.ts +28 -0
  141. package/dist/types/util/uuid.d.mts +1 -0
  142. package/dist/types/util/uuid.d.ts +1 -1
  143. package/package.json +119 -81
  144. package/dist/index.cjs.js +0 -25
  145. package/dist/index.js +0 -25
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Copyright (c) 2022 大漠穷秋.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+ import ICEEventTarget from './ICEEventTarget.mjs';
9
+ /**
10
+ * @class EventBus
11
+ * @singleton
12
+ *
13
+ * EventBus 事件总线。
14
+ *
15
+ * - canvas 标签内部没有事件机制,ICE 借助于 EventBus 把原生 DOM 事件转发到 canvas 内部(mouse/keyboard/touch),在转发过程中可能会把原生 DOM 事件转换成 ICEEvent 。
16
+ * - EventBus 是 ICEEventTarget 的实现类。
17
+ * - EventBus 是全局单例,同一个 ICE 实例上只能有一个事件总线的实例。
18
+ * - ICE 内部几乎所有机制都依赖事件总线来实现。
19
+ * - requestAnimationFrame 会利用事件总线触发 FRAME 事件。
20
+ *
21
+ * @see ICEEventTaregt
22
+ * @author 大漠穷秋<damoqiongqiu@126.com>
23
+ */
24
+ declare class EventBus extends ICEEventTarget {
25
+ constructor(props?: any);
26
+ }
27
+ export default EventBus;
@@ -1,27 +1,27 @@
1
- /**
2
- * Copyright (c) 2022 大漠穷秋.
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- *
7
- */
8
- import ICEEventTarget from './ICEEventTarget';
9
- /**
10
- * @class EventBus
11
- * @singleton
12
- *
13
- * EventBus 事件总线。
14
- *
15
- * - canvas 标签内部没有事件机制,ICE 借助于 EventBus 把原生 DOM 事件转发到 canvas 内部(mouse/keyboard/touch),在转发过程中可能会把原生 DOM 事件转换成 ICEEvent 。
16
- * - EventBus 是 ICEEventTarget 的实现类。
17
- * - EventBus 是全局单例,同一个 ICE 实例上只能有一个事件总线的实例。
18
- * - ICE 内部几乎所有机制都依赖事件总线来实现。
19
- * - requestAnimationFrame 会利用事件总线触发 FRAME 事件。
20
- *
21
- * @see ICEEventTaregt
22
- * @author 大漠穷秋<damoqiongqiu@126.com>
23
- */
24
- declare class EventBus extends ICEEventTarget {
25
- constructor(props?: any);
26
- }
27
- export default EventBus;
1
+ /**
2
+ * Copyright (c) 2022 大漠穷秋.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+ import ICEEventTarget from './ICEEventTarget';
9
+ /**
10
+ * @class EventBus
11
+ * @singleton
12
+ *
13
+ * EventBus 事件总线。
14
+ *
15
+ * - canvas 标签内部没有事件机制,ICE 借助于 EventBus 把原生 DOM 事件转发到 canvas 内部(mouse/keyboard/touch),在转发过程中可能会把原生 DOM 事件转换成 ICEEvent 。
16
+ * - EventBus 是 ICEEventTarget 的实现类。
17
+ * - EventBus 是全局单例,同一个 ICE 实例上只能有一个事件总线的实例。
18
+ * - ICE 内部几乎所有机制都依赖事件总线来实现。
19
+ * - requestAnimationFrame 会利用事件总线触发 FRAME 事件。
20
+ *
21
+ * @see ICEEventTaregt
22
+ * @author 大漠穷秋<damoqiongqiu@126.com>
23
+ */
24
+ declare class EventBus extends ICEEventTarget {
25
+ constructor(props?: any);
26
+ }
27
+ export default EventBus;
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Copyright (c) 2022 大漠穷秋.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+ /**
9
+ * @class ICEEvent
10
+ *
11
+ * - 在 ICE 中,所有事件都会被转化成 ICEEvent 进行处理。
12
+ * - ICEEvent 用来模拟 W3C 定义的 Event 接口,ICE 自定义的事件也使用此实现,事件对象上能获取到的属性不同。
13
+ * - 从原始 DOM 事件转发出来的 ICEEvent 实例包含 Event 接口上所定义的所有属性,ICE 内部代码创建的 ICEEvent 实例上只包含很少的自定义属性。
14
+ * - 如果事件是从原始 DOM 事件包装而来,那么ICEEvent 实例的 originalEvent 属性是原始 DOM 事件对象,否则 originalEvent 属性为 null。
15
+ *
16
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/Event
17
+ * @author 大漠穷秋<damoqiongqiu@126.com>
18
+ */
19
+ declare class ICEEvent implements Event {
20
+ originalEvent: any;
21
+ param: any;
22
+ constructor(evt?: any, data?: any);
23
+ bubbles: boolean;
24
+ cancelBubble: boolean;
25
+ cancelable: boolean;
26
+ composed: boolean;
27
+ currentTarget: EventTarget;
28
+ defaultPrevented: boolean;
29
+ eventPhase: number;
30
+ isTrusted: boolean;
31
+ returnValue: boolean;
32
+ srcElement: EventTarget;
33
+ target: EventTarget;
34
+ timeStamp: number;
35
+ type: string;
36
+ composedPath(): EventTarget[];
37
+ initEvent(type: string, bubbles?: boolean, cancelable?: boolean): void;
38
+ preventDefault(): void;
39
+ stopImmediatePropagation(): void;
40
+ stopPropagation(): void;
41
+ readonly AT_TARGET: 2;
42
+ readonly BUBBLING_PHASE: 3;
43
+ readonly CAPTURING_PHASE: 1;
44
+ readonly NONE: 0;
45
+ }
46
+ export default ICEEvent;
@@ -1,46 +1,46 @@
1
- /**
2
- * Copyright (c) 2022 大漠穷秋.
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- *
7
- */
8
- /**
9
- * @class ICEEvent
10
- *
11
- * - 在 ICE 中,所有事件都会被转化成 ICEEvent 进行处理。
12
- * - ICEEvent 用来模拟 W3C 定义的 Event 接口,ICE 自定义的事件也使用此实现,事件对象上能获取到的属性不同。
13
- * - 从原始 DOM 事件转发出来的 ICEEvent 实例包含 Event 接口上所定义的所有属性,ICE 内部代码创建的 ICEEvent 实例上只包含很少的自定义属性。
14
- * - 如果事件是从原始 DOM 事件包装而来,那么ICEEvent 实例的 originalEvent 属性是原始 DOM 事件对象,否则 originalEvent 属性为 null。
15
- *
16
- * @see https://developer.mozilla.org/en-US/docs/Web/API/Event
17
- * @author 大漠穷秋<damoqiongqiu@126.com>
18
- */
19
- declare class ICEEvent implements Event {
20
- originalEvent: any;
21
- param: any;
22
- constructor(evt?: any, data?: any);
23
- bubbles: boolean;
24
- cancelBubble: boolean;
25
- cancelable: boolean;
26
- composed: boolean;
27
- currentTarget: EventTarget;
28
- defaultPrevented: boolean;
29
- eventPhase: number;
30
- isTrusted: boolean;
31
- returnValue: boolean;
32
- srcElement: EventTarget;
33
- target: EventTarget;
34
- timeStamp: number;
35
- type: string;
36
- composedPath(): EventTarget[];
37
- initEvent(type: string, bubbles?: boolean, cancelable?: boolean): void;
38
- preventDefault(): void;
39
- stopImmediatePropagation(): void;
40
- stopPropagation(): void;
41
- AT_TARGET: number;
42
- BUBBLING_PHASE: number;
43
- CAPTURING_PHASE: number;
44
- NONE: number;
45
- }
46
- export default ICEEvent;
1
+ /**
2
+ * Copyright (c) 2022 大漠穷秋.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+ /**
9
+ * @class ICEEvent
10
+ *
11
+ * - 在 ICE 中,所有事件都会被转化成 ICEEvent 进行处理。
12
+ * - ICEEvent 用来模拟 W3C 定义的 Event 接口,ICE 自定义的事件也使用此实现,事件对象上能获取到的属性不同。
13
+ * - 从原始 DOM 事件转发出来的 ICEEvent 实例包含 Event 接口上所定义的所有属性,ICE 内部代码创建的 ICEEvent 实例上只包含很少的自定义属性。
14
+ * - 如果事件是从原始 DOM 事件包装而来,那么ICEEvent 实例的 originalEvent 属性是原始 DOM 事件对象,否则 originalEvent 属性为 null。
15
+ *
16
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/Event
17
+ * @author 大漠穷秋<damoqiongqiu@126.com>
18
+ */
19
+ declare class ICEEvent implements Event {
20
+ originalEvent: any;
21
+ param: any;
22
+ constructor(evt?: any, data?: any);
23
+ bubbles: boolean;
24
+ cancelBubble: boolean;
25
+ cancelable: boolean;
26
+ composed: boolean;
27
+ currentTarget: EventTarget;
28
+ defaultPrevented: boolean;
29
+ eventPhase: number;
30
+ isTrusted: boolean;
31
+ returnValue: boolean;
32
+ srcElement: EventTarget;
33
+ target: EventTarget;
34
+ timeStamp: number;
35
+ type: string;
36
+ composedPath(): EventTarget[];
37
+ initEvent(type: string, bubbles?: boolean, cancelable?: boolean): void;
38
+ preventDefault(): void;
39
+ stopImmediatePropagation(): void;
40
+ stopPropagation(): void;
41
+ readonly AT_TARGET: 2;
42
+ readonly BUBBLING_PHASE: 3;
43
+ readonly CAPTURING_PHASE: 1;
44
+ readonly NONE: 0;
45
+ }
46
+ export default ICEEvent;
@@ -0,0 +1,106 @@
1
+ /**
2
+ * @class ICEEventTarget
3
+ *
4
+ * - canvas 标签内部没有事件机制,模仿 W3C 定义的 EventTaregt 接口,为 Canvas 内部的组件添加事件机制。
5
+ * - ICE 内部的大部分组件都是 ICEEventTarget 的子类。
6
+ * - 部分 API 名称模仿 jQuery ,方便使用者调用。
7
+ *
8
+ * TODO:需要完整模拟 W3C 和 jQuery 提供的事件接口,在 API 名称和调用逻辑上保持完全一致。
9
+ *
10
+ * listeners 的结构:
11
+ * {
12
+ * "click":[
13
+ * {
14
+ * callback:fn1,
15
+ * scope:window
16
+ * },
17
+ * {
18
+ * callback:fn2,
19
+ * scope:component-1
20
+ * }
21
+ * ],
22
+ * "mousemove":[
23
+ * {
24
+ * callback:fn1,
25
+ * scope:window
26
+ * },
27
+ * {
28
+ * callback:fn2,
29
+ * scope:component-1
30
+ * }
31
+ * ]
32
+ * }
33
+ *
34
+ * @abstract
35
+ * @author 大漠穷秋<damoqiongqiu@126.com>
36
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget
37
+ */
38
+ declare abstract class ICEEventTarget {
39
+ protected listeners: any;
40
+ protected suspendedEventNames: any;
41
+ constructor();
42
+ /**
43
+ * @method on
44
+ * 添加事件监听
45
+ * @param eventName
46
+ * @param fn
47
+ * @param scope
48
+ */
49
+ on(eventName: string, fn: (...args: any[]) => any, scope?: any): void;
50
+ /**
51
+ * @method off
52
+ * 删除事件监听
53
+ * @param eventName
54
+ * @param fn
55
+ * @param scope
56
+ * @returns
57
+ */
58
+ off(eventName: string, fn: (...args: any[]) => any, scope?: any): void;
59
+ /**
60
+ * @method dispatchEvent
61
+ *
62
+ * 触发事件。
63
+ *
64
+ * 所有事件都会被转换成 ICEEvent 实例。
65
+ *
66
+ * @param eventName
67
+ * @param originalEvent
68
+ * @param param
69
+ * @returns
70
+ */
71
+ trigger(eventName: string, originalEvent?: any, param?: {}): boolean;
72
+ /**
73
+ * @method once
74
+ * 一次性事件,触发一次就自动删除自己。
75
+ * @param eventName
76
+ * @param fn
77
+ */
78
+ once(eventName: string, fn: (...args: any[]) => any, scope?: any): void;
79
+ /**
80
+ * @method suspend
81
+ * 挂起事件。
82
+ * @param eventName
83
+ */
84
+ suspend(eventName: string): void;
85
+ /**
86
+ * @method resume
87
+ * 恢复事件。
88
+ * @param eventName
89
+ */
90
+ resume(eventName: string): void;
91
+ /**
92
+ * @method purgeEvents
93
+ * 清除所有事件。
94
+ */
95
+ purgeEvents(): void;
96
+ /**
97
+ * @method hasListener
98
+ * 查询是否带有某个事件监听器。
99
+ * @param eventName
100
+ * @param fn
101
+ * @param scope
102
+ * @returns
103
+ */
104
+ hasListener(eventName: string, fn: (...args: any[]) => any, scope?: any): boolean;
105
+ }
106
+ export default ICEEventTarget;
@@ -1,106 +1,106 @@
1
- /**
2
- * @class ICEEventTarget
3
- *
4
- * - canvas 标签内部没有事件机制,模仿 W3C 定义的 EventTaregt 接口,为 Canvas 内部的组件添加事件机制。
5
- * - ICE 内部的大部分组件都是 ICEEventTarget 的子类。
6
- * - 部分 API 名称模仿 jQuery ,方便使用者调用。
7
- *
8
- * TODO:需要完整模拟 W3C 和 jQuery 提供的事件接口,在 API 名称和调用逻辑上保持完全一致。
9
- *
10
- * listeners 的结构:
11
- * {
12
- * "click":[
13
- * {
14
- * callback:fn1,
15
- * scope:window
16
- * },
17
- * {
18
- * callback:fn2,
19
- * scope:component-1
20
- * }
21
- * ],
22
- * "mousemove":[
23
- * {
24
- * callback:fn1,
25
- * scope:window
26
- * },
27
- * {
28
- * callback:fn2,
29
- * scope:component-1
30
- * }
31
- * ]
32
- * }
33
- *
34
- * @abstract
35
- * @author 大漠穷秋<damoqiongqiu@126.com>
36
- * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget
37
- */
38
- declare abstract class ICEEventTarget {
39
- protected listeners: any;
40
- protected suspendedEventNames: any;
41
- constructor();
42
- /**
43
- * @method on
44
- * 添加事件监听
45
- * @param eventName
46
- * @param fn
47
- * @param scope
48
- */
49
- on(eventName: string, fn: Function, scope?: any): void;
50
- /**
51
- * @method off
52
- * 删除事件监听
53
- * @param eventName
54
- * @param fn
55
- * @param scope
56
- * @returns
57
- */
58
- off(eventName: string, fn: Function, scope?: any): void;
59
- /**
60
- * @method once
61
- * 一次性事件,触发一次就自动删除自己。
62
- * @param eventName
63
- * @param fn
64
- */
65
- once(eventName: string, fn: Function, scope?: any): void;
66
- /**
67
- * @method dispatchEvent
68
- *
69
- * 触发事件。
70
- *
71
- * 所有事件都会被转换成 ICEEvent 实例。
72
- *
73
- * @param eventName
74
- * @param originalEvent
75
- * @param param
76
- * @returns
77
- */
78
- trigger(eventName: string, originalEvent?: any, param?: {}): boolean;
79
- /**
80
- * @method suspend
81
- * 挂起事件。
82
- * @param eventName
83
- */
84
- suspend(eventName: string): void;
85
- /**
86
- * @method resume
87
- * 恢复事件。
88
- * @param eventName
89
- */
90
- resume(eventName: string): void;
91
- /**
92
- * @method purgeEvents
93
- * 清除所有事件。
94
- */
95
- purgeEvents(): void;
96
- /**
97
- * @method hasListener
98
- * 查询是否带有某个事件监听器。
99
- * @param eventName
100
- * @param fn
101
- * @param scope
102
- * @returns
103
- */
104
- hasListener(eventName: string, fn: Function, scope?: any): boolean;
105
- }
106
- export default ICEEventTarget;
1
+ /**
2
+ * @class ICEEventTarget
3
+ *
4
+ * - canvas 标签内部没有事件机制,模仿 W3C 定义的 EventTaregt 接口,为 Canvas 内部的组件添加事件机制。
5
+ * - ICE 内部的大部分组件都是 ICEEventTarget 的子类。
6
+ * - 部分 API 名称模仿 jQuery ,方便使用者调用。
7
+ *
8
+ * TODO:需要完整模拟 W3C 和 jQuery 提供的事件接口,在 API 名称和调用逻辑上保持完全一致。
9
+ *
10
+ * listeners 的结构:
11
+ * {
12
+ * "click":[
13
+ * {
14
+ * callback:fn1,
15
+ * scope:window
16
+ * },
17
+ * {
18
+ * callback:fn2,
19
+ * scope:component-1
20
+ * }
21
+ * ],
22
+ * "mousemove":[
23
+ * {
24
+ * callback:fn1,
25
+ * scope:window
26
+ * },
27
+ * {
28
+ * callback:fn2,
29
+ * scope:component-1
30
+ * }
31
+ * ]
32
+ * }
33
+ *
34
+ * @abstract
35
+ * @author 大漠穷秋<damoqiongqiu@126.com>
36
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget
37
+ */
38
+ declare abstract class ICEEventTarget {
39
+ protected listeners: any;
40
+ protected suspendedEventNames: any;
41
+ constructor();
42
+ /**
43
+ * @method on
44
+ * 添加事件监听
45
+ * @param eventName
46
+ * @param fn
47
+ * @param scope
48
+ */
49
+ on(eventName: string, fn: (...args: any[]) => any, scope?: any): void;
50
+ /**
51
+ * @method off
52
+ * 删除事件监听
53
+ * @param eventName
54
+ * @param fn
55
+ * @param scope
56
+ * @returns
57
+ */
58
+ off(eventName: string, fn: (...args: any[]) => any, scope?: any): void;
59
+ /**
60
+ * @method dispatchEvent
61
+ *
62
+ * 触发事件。
63
+ *
64
+ * 所有事件都会被转换成 ICEEvent 实例。
65
+ *
66
+ * @param eventName
67
+ * @param originalEvent
68
+ * @param param
69
+ * @returns
70
+ */
71
+ trigger(eventName: string, originalEvent?: any, param?: {}): boolean;
72
+ /**
73
+ * @method once
74
+ * 一次性事件,触发一次就自动删除自己。
75
+ * @param eventName
76
+ * @param fn
77
+ */
78
+ once(eventName: string, fn: (...args: any[]) => any, scope?: any): void;
79
+ /**
80
+ * @method suspend
81
+ * 挂起事件。
82
+ * @param eventName
83
+ */
84
+ suspend(eventName: string): void;
85
+ /**
86
+ * @method resume
87
+ * 恢复事件。
88
+ * @param eventName
89
+ */
90
+ resume(eventName: string): void;
91
+ /**
92
+ * @method purgeEvents
93
+ * 清除所有事件。
94
+ */
95
+ purgeEvents(): void;
96
+ /**
97
+ * @method hasListener
98
+ * 查询是否带有某个事件监听器。
99
+ * @param eventName
100
+ * @param fn
101
+ * @param scope
102
+ * @returns
103
+ */
104
+ hasListener(eventName: string, fn: (...args: any[]) => any, scope?: any): boolean;
105
+ }
106
+ export default ICEEventTarget;
@@ -0,0 +1,75 @@
1
+ /**
2
+ * 输入归一化:把 mouse / pointer / touch 三类原生输入统一成引擎内部消费的字段。
3
+ *
4
+ * 背景:
5
+ * - 组件、拖拽、变换手柄、对齐吸附、命中检测都只读 `evt.offsetX/offsetY/movementX/movementY`。
6
+ * - 触摸事件(TouchEvent)上没有 offsetX/offsetY/movementX,PointerEvent 上 movementX 在部分
7
+ * 运行时也不可靠;并且全局监听下 `offsetX` 是相对「事件目标元素」而非 canvas。
8
+ *
9
+ * 因此:在事件边界(DOMEventDispatcher)统一归一化一次,上层代码零改动即可同时支持
10
+ * 鼠标 / 触控笔 / 触摸;坐标一律由 `clientX - canvasRect.left` 得到,滚动/缩放后仍正确。
11
+ *
12
+ * 本模块只含纯函数,不依赖 DOM 与引擎实例,便于 jest 直接单测。
13
+ */
14
+ /** 归一化后的输入点(坐标单位:canvas 逻辑像素,尚未扣除视口)。 */
15
+ export interface NormalizedInput {
16
+ /** canvas 内 x(= clientX - rect.left) */
17
+ x: number;
18
+ /** canvas 内 y(= clientY - rect.top) */
19
+ y: number;
20
+ clientX: number;
21
+ clientY: number;
22
+ /** 屏幕像素位移;原生 movementX/Y 优先,缺失时用「与上一次坐标的差」 */
23
+ movementX: number;
24
+ movementY: number;
25
+ pointerType: string;
26
+ pointerId: number;
27
+ button: number;
28
+ buttons: number;
29
+ isPrimary: boolean;
30
+ isTouch: boolean;
31
+ /** 修饰键:变换手柄靠它做「Shift 等比 / 角度吸附」这类约束,必须显式透传 */
32
+ shiftKey: boolean;
33
+ ctrlKey: boolean;
34
+ altKey: boolean;
35
+ metaKey: boolean;
36
+ }
37
+ export interface RectLike {
38
+ left: number;
39
+ top: number;
40
+ }
41
+ /** 是否为 touch* 事件(TouchEvent 系)。 */
42
+ export declare function isTouchEvent(evt: any): boolean;
43
+ /**
44
+ * 从任意原生事件解出「屏幕坐标点」。
45
+ * - touch*:取 touches[0],touchend 时 touches 为空则回退 changedTouches[0]
46
+ * - pointer/mouse:直接用 clientX/clientY
47
+ * - 键盘等无坐标事件:返回 null
48
+ */
49
+ export declare function resolveClientPoint(evt: any): {
50
+ clientX: number;
51
+ clientY: number;
52
+ } | null;
53
+ /**
54
+ * 归一化一次输入事件。
55
+ *
56
+ * @param evt 原生事件(mouse / pointer / touch)
57
+ * @param rect canvas 的 getBoundingClientRect()(缺失时按 (0,0) 处理)
58
+ * @param prev 上一次归一化结果,用于在缺少原生 movement 时补算位移
59
+ * @returns 归一化结果;无坐标的事件(键盘等)返回 null
60
+ */
61
+ export declare function normalizeInput(evt: any, rect: RectLike | null, prev?: NormalizedInput | null): NormalizedInput | null;
62
+ /**
63
+ * 把归一化结果写回事件对象(ICEEvent 是普通对象,可直接写)。
64
+ *
65
+ * - `offsetX/offsetY` 沿用旧字段名,值改为「canvas 内坐标」,修掉全局监听下
66
+ * 相对子元素、以及滚动后 rect 过期导致的命中偏移。
67
+ * - `movementX/movementY` 统一为屏幕像素位移,触摸拖拽因此可用。
68
+ */
69
+ export declare function applyNormalizedInput(target: any, input: NormalizedInput): void;
70
+ /**
71
+ * 原生事件名 → 组件层沿用的「鼠标语义」事件名。
72
+ * pointer/touch 通道要映射成 mouse 名,既有组件与控制面板才能零改动复用。
73
+ * 返回 null 表示无需映射(click/dblclick/contextmenu/wheel/keyboard 等本身即语义名)。
74
+ */
75
+ export declare function toLegacyMouseName(nativeType: string): string | null;