ice-render 1.0.4 → 1.0.6
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/LICENSE +0 -0
- package/README.md +229 -141
- package/dist/THIRD-PARTY-NOTICES.txt +32 -0
- package/dist/index.cjs +30 -0
- package/dist/index.mjs +30 -0
- package/dist/index.umd.js +6 -1
- package/dist/types/FrameManager.d.mts +26 -0
- package/dist/types/FrameManager.d.ts +26 -26
- package/dist/types/ICE.d.mts +369 -0
- package/dist/types/ICE.d.ts +369 -107
- package/dist/types/a11y/accessibility.d.mts +46 -0
- package/dist/types/a11y/accessibility.d.ts +46 -0
- package/dist/types/animation/AnimationManager.d.mts +96 -0
- package/dist/types/animation/AnimationManager.d.ts +96 -25
- package/dist/types/animation/Easing.d.mts +33 -0
- package/dist/types/animation/Easing.d.ts +33 -32
- package/dist/types/consts/BIG_ZINDEX_NUMBER.d.mts +14 -0
- package/dist/types/consts/BIG_ZINDEX_NUMBER.d.ts +14 -14
- package/dist/types/consts/COMPONENT_TYPE_MAPPING.d.mts +45 -0
- package/dist/types/consts/COMPONENT_TYPE_MAPPING.d.ts +45 -36
- package/dist/types/consts/DOM_EVENT_MAPPING_CONSTS.d.mts +37 -0
- package/dist/types/consts/DOM_EVENT_MAPPING_CONSTS.d.ts +37 -19
- package/dist/types/consts/ICE_EVENT_NAME_CONSTS.d.mts +27 -0
- package/dist/types/consts/ICE_EVENT_NAME_CONSTS.d.ts +27 -20
- package/dist/types/control-panel/AlignmentGuideManager.d.mts +92 -0
- package/dist/types/control-panel/AlignmentGuideManager.d.ts +92 -0
- package/dist/types/control-panel/ICEControlPanel.d.mts +37 -0
- package/dist/types/control-panel/ICEControlPanel.d.ts +37 -37
- package/dist/types/control-panel/ICEControlPanelManager.d.mts +25 -0
- package/dist/types/control-panel/ICEControlPanelManager.d.ts +25 -23
- package/dist/types/control-panel/link-controls/LineControlPanel.d.mts +39 -0
- package/dist/types/control-panel/link-controls/LineControlPanel.d.ts +39 -39
- package/dist/types/control-panel/transform-controls/ResizeControl.d.mts +38 -0
- package/dist/types/control-panel/transform-controls/ResizeControl.d.ts +38 -38
- package/dist/types/control-panel/transform-controls/RotateControl.d.mts +12 -0
- package/dist/types/control-panel/transform-controls/RotateControl.d.ts +12 -12
- package/dist/types/control-panel/transform-controls/TransformControlPanel.d.mts +83 -0
- package/dist/types/control-panel/transform-controls/TransformControlPanel.d.ts +83 -74
- package/dist/types/control-panel/transform-controls/constraints.d.mts +24 -0
- package/dist/types/control-panel/transform-controls/constraints.d.ts +24 -0
- package/dist/types/cross-platform/PolyfillPath2D.d.mts +31 -0
- package/dist/types/cross-platform/PolyfillPath2D.d.ts +31 -0
- package/dist/types/cross-platform/root.d.mts +7 -0
- package/dist/types/cross-platform/root.d.ts +7 -2
- package/dist/types/event/DOMEventDispatcher.d.mts +68 -0
- package/dist/types/event/DOMEventDispatcher.d.ts +68 -29
- package/dist/types/event/DOMEventInterceptor.d.mts +36 -0
- package/dist/types/event/DOMEventInterceptor.d.ts +36 -7
- package/dist/types/event/EventBus.d.mts +27 -0
- package/dist/types/event/EventBus.d.ts +27 -27
- package/dist/types/event/ICEEvent.d.mts +46 -0
- package/dist/types/event/ICEEvent.d.ts +46 -46
- package/dist/types/event/ICEEventTarget.d.mts +106 -0
- package/dist/types/event/ICEEventTarget.d.ts +106 -106
- package/dist/types/event/input-normalize.d.mts +75 -0
- package/dist/types/event/input-normalize.d.ts +75 -0
- package/dist/types/geometry/GeoLine.d.mts +24 -0
- package/dist/types/geometry/GeoLine.d.ts +24 -23
- package/dist/types/geometry/GeoPoint.d.mts +53 -0
- package/dist/types/geometry/GeoPoint.d.ts +53 -66
- package/dist/types/geometry/GeoUtil.d.mts +73 -0
- package/dist/types/geometry/GeoUtil.d.ts +73 -37
- package/dist/types/geometry/ICEBoundingBox.d.mts +81 -0
- package/dist/types/geometry/ICEBoundingBox.d.ts +81 -81
- package/dist/types/graphic/ICEComponent.d.mts +436 -0
- package/dist/types/graphic/ICEComponent.d.ts +436 -264
- package/dist/types/graphic/ICEDotPath.d.mts +99 -0
- package/dist/types/graphic/ICEDotPath.d.ts +99 -63
- package/dist/types/graphic/ICEImage.d.mts +17 -0
- package/dist/types/graphic/ICEImage.d.ts +17 -17
- package/dist/types/graphic/ICEPath.d.mts +39 -0
- package/dist/types/graphic/ICEPath.d.ts +39 -36
- package/dist/types/graphic/container/ICEGroup.d.mts +101 -0
- package/dist/types/graphic/container/ICEGroup.d.ts +101 -53
- package/dist/types/graphic/link/ICEBezier.d.mts +23 -0
- package/dist/types/graphic/link/ICEBezier.d.ts +23 -15
- package/dist/types/graphic/link/ICELinkHook.d.mts +52 -0
- package/dist/types/graphic/link/ICELinkHook.d.ts +52 -52
- package/dist/types/graphic/link/ICELinkSlot.d.mts +54 -0
- package/dist/types/graphic/link/ICELinkSlot.d.ts +54 -46
- package/dist/types/graphic/link/ICELinkSlotManager.d.mts +28 -0
- package/dist/types/graphic/link/ICELinkSlotManager.d.ts +28 -28
- package/dist/types/graphic/link/ICEPolyLine.d.mts +292 -0
- package/dist/types/graphic/link/ICEPolyLine.d.ts +292 -219
- package/dist/types/graphic/link/ICEVisioLink.d.mts +163 -0
- package/dist/types/graphic/link/ICEVisioLink.d.ts +163 -129
- package/dist/types/graphic/shape/ICECircle.d.mts +19 -0
- package/dist/types/graphic/shape/ICECircle.d.ts +19 -19
- package/dist/types/graphic/shape/ICEEllipse.d.mts +29 -0
- package/dist/types/graphic/shape/ICEEllipse.d.ts +29 -23
- package/dist/types/graphic/shape/ICEIsogon.d.mts +52 -0
- package/dist/types/graphic/shape/ICEIsogon.d.ts +52 -52
- package/dist/types/graphic/shape/ICERect.d.mts +10 -0
- package/dist/types/graphic/shape/ICERect.d.ts +10 -17
- package/dist/types/graphic/shape/ICERose.d.mts +41 -0
- package/dist/types/graphic/shape/ICERose.d.ts +41 -41
- package/dist/types/graphic/shape/ICEStar.d.mts +45 -0
- package/dist/types/graphic/shape/ICEStar.d.ts +45 -45
- package/dist/types/graphic/text/ICEText.d.mts +137 -0
- package/dist/types/graphic/text/ICEText.d.ts +137 -65
- package/dist/types/index.d.mts +55 -0
- package/dist/types/index.d.ts +55 -41
- package/dist/types/layout/ICEBorderLayout.d.mts +34 -0
- package/dist/types/layout/ICEBorderLayout.d.ts +34 -0
- package/dist/types/layout/ICEBoxLayout.d.mts +30 -0
- package/dist/types/layout/ICEBoxLayout.d.ts +30 -0
- package/dist/types/layout/ICECardLayout.d.mts +36 -0
- package/dist/types/layout/ICECardLayout.d.ts +36 -0
- package/dist/types/layout/ICEFlowLayout.d.mts +31 -0
- package/dist/types/layout/ICEFlowLayout.d.ts +31 -0
- package/dist/types/layout/ICEGridLayout.d.mts +33 -0
- package/dist/types/layout/ICEGridLayout.d.ts +33 -0
- package/dist/types/layout/ICELayeredLayout.d.mts +49 -0
- package/dist/types/layout/ICELayeredLayout.d.ts +49 -0
- package/dist/types/layout/ICELayoutManager.d.mts +33 -0
- package/dist/types/layout/ICELayoutManager.d.ts +33 -0
- package/dist/types/layout/ICEOverlayLayout.d.mts +25 -0
- package/dist/types/layout/ICEOverlayLayout.d.ts +25 -0
- package/dist/types/persistence/Deserializer.d.mts +43 -0
- package/dist/types/persistence/Deserializer.d.ts +43 -14
- package/dist/types/persistence/Serializer.d.mts +35 -0
- package/dist/types/persistence/Serializer.d.ts +35 -26
- package/dist/types/plugin/PluginHost.d.mts +86 -0
- package/dist/types/plugin/PluginHost.d.ts +86 -0
- package/dist/types/renderer/CanvasRenderer.d.mts +150 -0
- package/dist/types/renderer/CanvasRenderer.d.ts +150 -22
- package/dist/types/renderer/ObjectCache.d.mts +79 -0
- package/dist/types/renderer/ObjectCache.d.ts +79 -0
- package/dist/types/renderer/dirty-rect-util.d.mts +86 -0
- package/dist/types/renderer/dirty-rect-util.d.ts +86 -0
- package/dist/types/theme/ICETheme.d.mts +382 -0
- package/dist/types/theme/ICETheme.d.ts +382 -0
- package/dist/types/util/ImageCache.d.mts +19 -0
- package/dist/types/util/ImageCache.d.ts +19 -19
- package/dist/types/util/data-util.d.mts +43 -0
- package/dist/types/util/data-util.d.ts +43 -19
- package/dist/types/util/gl-matrix-skew.d.mts +14 -0
- package/dist/types/util/gl-matrix-skew.d.ts +14 -14
- package/dist/types/util/lang.d.mts +28 -0
- package/dist/types/util/lang.d.ts +28 -0
- package/dist/types/util/uuid.d.mts +1 -0
- package/dist/types/util/uuid.d.ts +1 -1
- package/package.json +118 -81
- package/dist/index.cjs.js +0 -25
- package/dist/index.js +0 -25
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import ICEComponent from '../../graphic/ICEComponent.mjs';
|
|
2
|
+
import ICEControlPanel from '../ICEControlPanel.mjs';
|
|
3
|
+
/**
|
|
4
|
+
* @class TransformControlPanel
|
|
5
|
+
*
|
|
6
|
+
* 变换控制面板
|
|
7
|
+
*
|
|
8
|
+
* - TransformControlPanel 本身总是直接画在 canvas 上,不是任何组件的孩子。
|
|
9
|
+
* - TransformControlPanel 是全局单例,在任意时刻,不可能同时出现多个 TransformControlPanel 的实例,因为在图形化的用户交互模式下,用户无法同时操控多个控制面板。
|
|
10
|
+
*
|
|
11
|
+
* @author 大漠穷秋<damoqiongqiu@126.com>
|
|
12
|
+
*/
|
|
13
|
+
export default class TransformControlPanel extends ICEControlPanel {
|
|
14
|
+
private rotateControlInstance;
|
|
15
|
+
private rotateControlSize;
|
|
16
|
+
private rotateControlOffsetY;
|
|
17
|
+
private resizeControlInstanceCache;
|
|
18
|
+
private resizeControlSize;
|
|
19
|
+
constructor(props: any);
|
|
20
|
+
/**
|
|
21
|
+
* @method initControls
|
|
22
|
+
* 添加尺寸和旋转变换手柄,初始化时添加在内部的[0,0]位置,此方法只创建对象实例,不执行渲染操作。
|
|
23
|
+
* 创建 8 个 ResizeControl
|
|
24
|
+
* 计算手柄位于父组件的哪一个象限中,有以下取值:
|
|
25
|
+
* - 1: 第1象限;
|
|
26
|
+
* - 2: 第2象限;
|
|
27
|
+
* - 3: 第3象限;
|
|
28
|
+
* - 4: 第4象限;
|
|
29
|
+
* - 5: 位于X轴上方,y值为负,不属于任何象限;
|
|
30
|
+
* - 6: 位于X轴下方,y值为正,不属于任何象限;
|
|
31
|
+
* - 7: 位于Y轴左侧,x值为负,不属于任何象限;
|
|
32
|
+
* - 8: 位于Y轴右侧,x值为正,不属于任何象限;
|
|
33
|
+
* 默认创建顺序,从左上角开始顺时针:tl:2/t:5/tr:1/r:8/rb:4/b:6/lb:3/l:7
|
|
34
|
+
* 第1和第3象限可以交换位置
|
|
35
|
+
* 第2和第4象限可以交换位置
|
|
36
|
+
* X 轴正负可以交换位置
|
|
37
|
+
* Y 轴正负可以交换位置
|
|
38
|
+
* TODO:添加斜切手柄?
|
|
39
|
+
*/
|
|
40
|
+
protected initControls(): void;
|
|
41
|
+
protected initEvents(): void;
|
|
42
|
+
enable(): void;
|
|
43
|
+
disable(): void;
|
|
44
|
+
/**
|
|
45
|
+
* @overwrite
|
|
46
|
+
* @method keyboardEvtHandler 键盘事件处理
|
|
47
|
+
* !ICEControlPanel 的 zIndex 总是大于其它组件,当 ICEControlPanel 显示时,总是会优先判定为被选中的组件,会导致对应的 _targetComponent 收不到鼠标和键盘事件,所以 ICEControlPanel 的实现类需要自己考虑是否需要进行事件转发。
|
|
48
|
+
* !如果当前的 targetComponent 不为空,转发键盘事件。
|
|
49
|
+
* @see {ICEControlPanel}
|
|
50
|
+
* @see {ICEComponent}
|
|
51
|
+
* @param evt
|
|
52
|
+
* @returns
|
|
53
|
+
*/
|
|
54
|
+
protected keyboardEvtHandler(evt: any): void;
|
|
55
|
+
private rotateEvtHandler;
|
|
56
|
+
private resizeEvtHandler;
|
|
57
|
+
/**
|
|
58
|
+
* @overwrite
|
|
59
|
+
* @method updateControlPositions 更新内部控制手柄的位置
|
|
60
|
+
*
|
|
61
|
+
* 控制面板每次重绘时,会在 doRender() 方法内部会调用 updateControlPositions() 来 更新控制手柄的位置。
|
|
62
|
+
* @see ICEConrolPanel.doRender()
|
|
63
|
+
*/
|
|
64
|
+
protected updateControlPositions(): void;
|
|
65
|
+
protected updatePanel(): void;
|
|
66
|
+
/**
|
|
67
|
+
* 目标被移除时的处理。
|
|
68
|
+
*
|
|
69
|
+
* 必须是**稳定引用**:旧实现用 `once(BEFORE_REMOVE, () => {...})`,而 `once` 内部会把回调
|
|
70
|
+
* 再包一层,导致这个箭头函数永远无法被 `off` —— 反复选中组件会在每个组件上累积
|
|
71
|
+
* 无法回收的监听(内存泄漏 + 幽灵回调)。这里改为具名属性 + `on`,
|
|
72
|
+
* 由 setter 负责在切换目标时 `off` 掉(`on` 本身对 (fn, scope) 幂等,也不会重复注册)。
|
|
73
|
+
*/
|
|
74
|
+
private __onTargetRemoved;
|
|
75
|
+
set targetComponent(component: ICEComponent);
|
|
76
|
+
get targetComponent(): ICEComponent;
|
|
77
|
+
/**
|
|
78
|
+
* 交换两个 Control 的象限
|
|
79
|
+
* @param control
|
|
80
|
+
* @param quadrant
|
|
81
|
+
*/
|
|
82
|
+
toggleControlQuadrant(control: any, oldQuadrant: number, newQuadrant: number): void;
|
|
83
|
+
}
|
|
@@ -1,74 +1,83 @@
|
|
|
1
|
-
import ICEComponent from '../../graphic/ICEComponent';
|
|
2
|
-
import ICEControlPanel from '../ICEControlPanel';
|
|
3
|
-
/**
|
|
4
|
-
* @class TransformControlPanel
|
|
5
|
-
*
|
|
6
|
-
* 变换控制面板
|
|
7
|
-
*
|
|
8
|
-
* - TransformControlPanel 本身总是直接画在 canvas 上,不是任何组件的孩子。
|
|
9
|
-
* - TransformControlPanel 是全局单例,在任意时刻,不可能同时出现多个 TransformControlPanel 的实例,因为在图形化的用户交互模式下,用户无法同时操控多个控制面板。
|
|
10
|
-
*
|
|
11
|
-
* @author 大漠穷秋<damoqiongqiu@126.com>
|
|
12
|
-
*/
|
|
13
|
-
export default class TransformControlPanel extends ICEControlPanel {
|
|
14
|
-
private rotateControlInstance;
|
|
15
|
-
private rotateControlSize;
|
|
16
|
-
private
|
|
17
|
-
private resizeControlInstanceCache;
|
|
18
|
-
private resizeControlSize;
|
|
19
|
-
constructor(props: any);
|
|
20
|
-
/**
|
|
21
|
-
* @method initControls
|
|
22
|
-
* 添加尺寸和旋转变换手柄,初始化时添加在内部的[0,0]位置,此方法只创建对象实例,不执行渲染操作。
|
|
23
|
-
* 创建 8 个 ResizeControl
|
|
24
|
-
* 计算手柄位于父组件的哪一个象限中,有以下取值:
|
|
25
|
-
* - 1: 第1象限;
|
|
26
|
-
* - 2: 第2象限;
|
|
27
|
-
* - 3: 第3象限;
|
|
28
|
-
* - 4: 第4象限;
|
|
29
|
-
* - 5: 位于X轴上方,y值为负,不属于任何象限;
|
|
30
|
-
* - 6: 位于X轴下方,y值为正,不属于任何象限;
|
|
31
|
-
* - 7: 位于Y轴左侧,x值为负,不属于任何象限;
|
|
32
|
-
* - 8: 位于Y轴右侧,x值为正,不属于任何象限;
|
|
33
|
-
* 默认创建顺序,从左上角开始顺时针:tl:2/t:5/tr:1/r:8/rb:4/b:6/lb:3/l:7
|
|
34
|
-
* 第1和第3象限可以交换位置
|
|
35
|
-
* 第2和第4象限可以交换位置
|
|
36
|
-
* X 轴正负可以交换位置
|
|
37
|
-
* Y 轴正负可以交换位置
|
|
38
|
-
* TODO:添加斜切手柄?
|
|
39
|
-
*/
|
|
40
|
-
protected initControls(): void;
|
|
41
|
-
protected initEvents(): void;
|
|
42
|
-
enable(): void;
|
|
43
|
-
disable(): void;
|
|
44
|
-
/**
|
|
45
|
-
* @overwrite
|
|
46
|
-
* @method keyboardEvtHandler 键盘事件处理
|
|
47
|
-
* !ICEControlPanel 的 zIndex 总是大于其它组件,当 ICEControlPanel 显示时,总是会优先判定为被选中的组件,会导致对应的 _targetComponent 收不到鼠标和键盘事件,所以 ICEControlPanel 的实现类需要自己考虑是否需要进行事件转发。
|
|
48
|
-
* !如果当前的 targetComponent 不为空,转发键盘事件。
|
|
49
|
-
* @see {ICEControlPanel}
|
|
50
|
-
* @see {ICEComponent}
|
|
51
|
-
* @param evt
|
|
52
|
-
* @returns
|
|
53
|
-
*/
|
|
54
|
-
protected keyboardEvtHandler(evt: any): void;
|
|
55
|
-
private rotateEvtHandler;
|
|
56
|
-
private resizeEvtHandler;
|
|
57
|
-
/**
|
|
58
|
-
* @overwrite
|
|
59
|
-
* @method updateControlPositions 更新内部控制手柄的位置
|
|
60
|
-
*
|
|
61
|
-
* 控制面板每次重绘时,会在 doRender() 方法内部会调用 updateControlPositions() 来 更新控制手柄的位置。
|
|
62
|
-
* @see ICEConrolPanel.doRender()
|
|
63
|
-
*/
|
|
64
|
-
protected updateControlPositions(): void;
|
|
65
|
-
protected updatePanel(): void;
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
1
|
+
import ICEComponent from '../../graphic/ICEComponent';
|
|
2
|
+
import ICEControlPanel from '../ICEControlPanel';
|
|
3
|
+
/**
|
|
4
|
+
* @class TransformControlPanel
|
|
5
|
+
*
|
|
6
|
+
* 变换控制面板
|
|
7
|
+
*
|
|
8
|
+
* - TransformControlPanel 本身总是直接画在 canvas 上,不是任何组件的孩子。
|
|
9
|
+
* - TransformControlPanel 是全局单例,在任意时刻,不可能同时出现多个 TransformControlPanel 的实例,因为在图形化的用户交互模式下,用户无法同时操控多个控制面板。
|
|
10
|
+
*
|
|
11
|
+
* @author 大漠穷秋<damoqiongqiu@126.com>
|
|
12
|
+
*/
|
|
13
|
+
export default class TransformControlPanel extends ICEControlPanel {
|
|
14
|
+
private rotateControlInstance;
|
|
15
|
+
private rotateControlSize;
|
|
16
|
+
private rotateControlOffsetY;
|
|
17
|
+
private resizeControlInstanceCache;
|
|
18
|
+
private resizeControlSize;
|
|
19
|
+
constructor(props: any);
|
|
20
|
+
/**
|
|
21
|
+
* @method initControls
|
|
22
|
+
* 添加尺寸和旋转变换手柄,初始化时添加在内部的[0,0]位置,此方法只创建对象实例,不执行渲染操作。
|
|
23
|
+
* 创建 8 个 ResizeControl
|
|
24
|
+
* 计算手柄位于父组件的哪一个象限中,有以下取值:
|
|
25
|
+
* - 1: 第1象限;
|
|
26
|
+
* - 2: 第2象限;
|
|
27
|
+
* - 3: 第3象限;
|
|
28
|
+
* - 4: 第4象限;
|
|
29
|
+
* - 5: 位于X轴上方,y值为负,不属于任何象限;
|
|
30
|
+
* - 6: 位于X轴下方,y值为正,不属于任何象限;
|
|
31
|
+
* - 7: 位于Y轴左侧,x值为负,不属于任何象限;
|
|
32
|
+
* - 8: 位于Y轴右侧,x值为正,不属于任何象限;
|
|
33
|
+
* 默认创建顺序,从左上角开始顺时针:tl:2/t:5/tr:1/r:8/rb:4/b:6/lb:3/l:7
|
|
34
|
+
* 第1和第3象限可以交换位置
|
|
35
|
+
* 第2和第4象限可以交换位置
|
|
36
|
+
* X 轴正负可以交换位置
|
|
37
|
+
* Y 轴正负可以交换位置
|
|
38
|
+
* TODO:添加斜切手柄?
|
|
39
|
+
*/
|
|
40
|
+
protected initControls(): void;
|
|
41
|
+
protected initEvents(): void;
|
|
42
|
+
enable(): void;
|
|
43
|
+
disable(): void;
|
|
44
|
+
/**
|
|
45
|
+
* @overwrite
|
|
46
|
+
* @method keyboardEvtHandler 键盘事件处理
|
|
47
|
+
* !ICEControlPanel 的 zIndex 总是大于其它组件,当 ICEControlPanel 显示时,总是会优先判定为被选中的组件,会导致对应的 _targetComponent 收不到鼠标和键盘事件,所以 ICEControlPanel 的实现类需要自己考虑是否需要进行事件转发。
|
|
48
|
+
* !如果当前的 targetComponent 不为空,转发键盘事件。
|
|
49
|
+
* @see {ICEControlPanel}
|
|
50
|
+
* @see {ICEComponent}
|
|
51
|
+
* @param evt
|
|
52
|
+
* @returns
|
|
53
|
+
*/
|
|
54
|
+
protected keyboardEvtHandler(evt: any): void;
|
|
55
|
+
private rotateEvtHandler;
|
|
56
|
+
private resizeEvtHandler;
|
|
57
|
+
/**
|
|
58
|
+
* @overwrite
|
|
59
|
+
* @method updateControlPositions 更新内部控制手柄的位置
|
|
60
|
+
*
|
|
61
|
+
* 控制面板每次重绘时,会在 doRender() 方法内部会调用 updateControlPositions() 来 更新控制手柄的位置。
|
|
62
|
+
* @see ICEConrolPanel.doRender()
|
|
63
|
+
*/
|
|
64
|
+
protected updateControlPositions(): void;
|
|
65
|
+
protected updatePanel(): void;
|
|
66
|
+
/**
|
|
67
|
+
* 目标被移除时的处理。
|
|
68
|
+
*
|
|
69
|
+
* 必须是**稳定引用**:旧实现用 `once(BEFORE_REMOVE, () => {...})`,而 `once` 内部会把回调
|
|
70
|
+
* 再包一层,导致这个箭头函数永远无法被 `off` —— 反复选中组件会在每个组件上累积
|
|
71
|
+
* 无法回收的监听(内存泄漏 + 幽灵回调)。这里改为具名属性 + `on`,
|
|
72
|
+
* 由 setter 负责在切换目标时 `off` 掉(`on` 本身对 (fn, scope) 幂等,也不会重复注册)。
|
|
73
|
+
*/
|
|
74
|
+
private __onTargetRemoved;
|
|
75
|
+
set targetComponent(component: ICEComponent);
|
|
76
|
+
get targetComponent(): ICEComponent;
|
|
77
|
+
/**
|
|
78
|
+
* 交换两个 Control 的象限
|
|
79
|
+
* @param control
|
|
80
|
+
* @param quadrant
|
|
81
|
+
*/
|
|
82
|
+
toggleControlQuadrant(control: any, oldQuadrant: number, newQuadrant: number): void;
|
|
83
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 变换手柄的约束算法(纯函数,便于单测)。
|
|
3
|
+
*
|
|
4
|
+
* 这些约束由输入层透传的修饰键驱动(`evt.shiftKey` 等)——注意 DOM 事件的修饰键是原型上的
|
|
5
|
+
* 不可枚举 getter,`ICEEvent` 的 `for...in` 拷贝带不过来,必须由 `input-normalize` 显式透传。
|
|
6
|
+
*/
|
|
7
|
+
/** 旋转吸附的默认步进(度)。 */
|
|
8
|
+
export declare const ROTATE_SNAP_STEP = 15;
|
|
9
|
+
/**
|
|
10
|
+
* 等比约束:在「目标尺寸」基础上保持 `currentWidth : currentHeight` 不变。
|
|
11
|
+
*
|
|
12
|
+
* 取两个方向中**相对变化更大**的那个作为基准,另一个方向按比例跟随 —— 这样拖动角手柄时
|
|
13
|
+
* 跟随手感更贴近手指,也不会出现「一个方向已到目标、另一个方向还没动」的粘滞感。
|
|
14
|
+
* 尺寸取绝对值(翻转由调用方决定,不在这里处理)。
|
|
15
|
+
*/
|
|
16
|
+
export declare function applyAspectLock(currentWidth: number, currentHeight: number, nextWidth: number, nextHeight: number): {
|
|
17
|
+
width: number;
|
|
18
|
+
height: number;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* 角度吸附:把角度吸附到 `step` 的整数倍(默认 15°)。
|
|
22
|
+
* 吸附在**最终角度**上做(调用方已把补偿角加上),避免补偿把吸附结果带偏。
|
|
23
|
+
*/
|
|
24
|
+
export declare function snapAngle(angle: number, step?: number): number;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 变换手柄的约束算法(纯函数,便于单测)。
|
|
3
|
+
*
|
|
4
|
+
* 这些约束由输入层透传的修饰键驱动(`evt.shiftKey` 等)——注意 DOM 事件的修饰键是原型上的
|
|
5
|
+
* 不可枚举 getter,`ICEEvent` 的 `for...in` 拷贝带不过来,必须由 `input-normalize` 显式透传。
|
|
6
|
+
*/
|
|
7
|
+
/** 旋转吸附的默认步进(度)。 */
|
|
8
|
+
export declare const ROTATE_SNAP_STEP = 15;
|
|
9
|
+
/**
|
|
10
|
+
* 等比约束:在「目标尺寸」基础上保持 `currentWidth : currentHeight` 不变。
|
|
11
|
+
*
|
|
12
|
+
* 取两个方向中**相对变化更大**的那个作为基准,另一个方向按比例跟随 —— 这样拖动角手柄时
|
|
13
|
+
* 跟随手感更贴近手指,也不会出现「一个方向已到目标、另一个方向还没动」的粘滞感。
|
|
14
|
+
* 尺寸取绝对值(翻转由调用方决定,不在这里处理)。
|
|
15
|
+
*/
|
|
16
|
+
export declare function applyAspectLock(currentWidth: number, currentHeight: number, nextWidth: number, nextHeight: number): {
|
|
17
|
+
width: number;
|
|
18
|
+
height: number;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* 角度吸附:把角度吸附到 `step` 的整数倍(默认 15°)。
|
|
22
|
+
* 吸附在**最终角度**上做(调用方已把补偿角加上),避免补偿把吸附结果带偏。
|
|
23
|
+
*/
|
|
24
|
+
export declare function snapAngle(angle: number, step?: number): number;
|
|
@@ -0,0 +1,31 @@
|
|
|
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 PolyfillPath2D
|
|
10
|
+
*
|
|
11
|
+
* Path2D 的极简 polyfill:无全局 Path2D 构造函数的运行时(如小程序低版本基础库、
|
|
12
|
+
* Node 环境)中,用它记录路径命令,渲染时再重放到 ctx 当前路径。
|
|
13
|
+
*
|
|
14
|
+
* 仅实现引擎用到的 moveTo/lineTo/rect/ellipse/closePath,其余标准 Path2D 方法未实现。
|
|
15
|
+
*/
|
|
16
|
+
export default class PolyfillPath2D {
|
|
17
|
+
/** 标记这是 polyfill,用于 ICEPath.doRender 区分原生 Path2D 与命令重放 */
|
|
18
|
+
_isPolyfill: boolean;
|
|
19
|
+
/** 记录的命令序列,如 [['rect', 0, 0, 10, 10], ['moveTo', 1, 1], ...] */
|
|
20
|
+
_commands: Array<Array<any>>;
|
|
21
|
+
/** closePath 是幂等标记(doRender 每帧调用),不重复入队 */
|
|
22
|
+
_closed: boolean;
|
|
23
|
+
moveTo(x: number, y: number): void;
|
|
24
|
+
lineTo(x: number, y: number): void;
|
|
25
|
+
bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void;
|
|
26
|
+
quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): void;
|
|
27
|
+
arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void;
|
|
28
|
+
rect(x: number, y: number, width: number, height: number): void;
|
|
29
|
+
ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, counterclockwise: boolean): void;
|
|
30
|
+
closePath(): void;
|
|
31
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
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 PolyfillPath2D
|
|
10
|
+
*
|
|
11
|
+
* Path2D 的极简 polyfill:无全局 Path2D 构造函数的运行时(如小程序低版本基础库、
|
|
12
|
+
* Node 环境)中,用它记录路径命令,渲染时再重放到 ctx 当前路径。
|
|
13
|
+
*
|
|
14
|
+
* 仅实现引擎用到的 moveTo/lineTo/rect/ellipse/closePath,其余标准 Path2D 方法未实现。
|
|
15
|
+
*/
|
|
16
|
+
export default class PolyfillPath2D {
|
|
17
|
+
/** 标记这是 polyfill,用于 ICEPath.doRender 区分原生 Path2D 与命令重放 */
|
|
18
|
+
_isPolyfill: boolean;
|
|
19
|
+
/** 记录的命令序列,如 [['rect', 0, 0, 10, 10], ['moveTo', 1, 1], ...] */
|
|
20
|
+
_commands: Array<Array<any>>;
|
|
21
|
+
/** closePath 是幂等标记(doRender 每帧调用),不重复入队 */
|
|
22
|
+
_closed: boolean;
|
|
23
|
+
moveTo(x: number, y: number): void;
|
|
24
|
+
lineTo(x: number, y: number): void;
|
|
25
|
+
bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void;
|
|
26
|
+
quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): void;
|
|
27
|
+
arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void;
|
|
28
|
+
rect(x: number, y: number, width: number, height: number): void;
|
|
29
|
+
ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, counterclockwise: boolean): void;
|
|
30
|
+
closePath(): void;
|
|
31
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import ICE from '../ICE.mjs';
|
|
2
|
+
/**
|
|
3
|
+
* @class DOMEventDispatcher
|
|
4
|
+
*
|
|
5
|
+
* - DOM 事件派发器,监听事件总线上的输入事件,派发给 canvas 内指定的组件。
|
|
6
|
+
* - 鼠标 / 指针 / 触摸 / 滚轮 / 键盘事件都通过此工具类派发。
|
|
7
|
+
*
|
|
8
|
+
* 输入归一化(本类的关键职责):
|
|
9
|
+
* - 底层无论 pointer / mouse / touch,都在这里统一成 canvas 内坐标
|
|
10
|
+
* (`clientX - canvasRect.left`)与屏幕位移 movement,然后写回事件对象。
|
|
11
|
+
* 这样组件、拖拽、变换手柄、对齐吸附、命中检测都无需区分输入源。
|
|
12
|
+
* - pointer / touch 会额外以「鼠标语义名」(mousedown/mousemove/mouseup)再派发一次,
|
|
13
|
+
* 保证既有 `on('mousedown', ...)` 代码零改动即可在触摸设备上工作。
|
|
14
|
+
* - 命中检测用的 canvas 矩形在非移动类事件上刷新,页面滚动 / 布局变化后仍正确。
|
|
15
|
+
*
|
|
16
|
+
* @see {DOMEventInterceptor}
|
|
17
|
+
* @author 大漠穷秋<damoqiongqiu@126.com>
|
|
18
|
+
*/
|
|
19
|
+
declare class DOMEventDispatcher {
|
|
20
|
+
private selectionCandidates;
|
|
21
|
+
private ice;
|
|
22
|
+
private _stopped;
|
|
23
|
+
/** 上一次归一化输入,用于在原生 movement 缺失(触摸)时补算位移。 */
|
|
24
|
+
private __lastInput;
|
|
25
|
+
/**
|
|
26
|
+
* 键盘事件的焦点组件(无障碍 / 键盘导航)。
|
|
27
|
+
* 由应用层通过 `ICE.setFocusedComponent()` 设置;为 null 时维持既有行为
|
|
28
|
+
* ——键盘事件派发给「上次点击命中的组件」。
|
|
29
|
+
*/
|
|
30
|
+
focusedComponent: any;
|
|
31
|
+
constructor(ice: ICE);
|
|
32
|
+
start(): this;
|
|
33
|
+
/**
|
|
34
|
+
* 指针捕获:`pointerdown` 时把指针捕获到画布,`pointerup` / `pointercancel` 时释放。
|
|
35
|
+
*
|
|
36
|
+
* 为什么需要:拖组件、拖变换手柄、拖连线钩子时,指针很容易移出画布范围。没有捕获就会出现
|
|
37
|
+
* 「拖着拖着不跟手」甚至「松开鼠标了还在拖」—— 因为后续 `pointermove` / `pointerup`
|
|
38
|
+
* 被派发到了画布之外的元素上。捕获后这些事件会被重定向回画布。
|
|
39
|
+
*
|
|
40
|
+
* 只处理 Pointer Events 通道:mouse/touch 旧通道的 move/up 会冒泡到 window,本来就不会丢。
|
|
41
|
+
*/
|
|
42
|
+
private __handlePointerCapture;
|
|
43
|
+
/**
|
|
44
|
+
* 把事件派发给命中的组件与事件总线。
|
|
45
|
+
* 组件先收到,总线后收到(与既有语义一致:总线始终会收到一次)。
|
|
46
|
+
*/
|
|
47
|
+
private __dispatch;
|
|
48
|
+
/**
|
|
49
|
+
* 取 canvas 矩形用于坐标换算。
|
|
50
|
+
* 移动类事件频率高(每帧可能多次),复用缓存;其余事件刷新一次,
|
|
51
|
+
* 保证页面滚动 / 布局变化后命中检测不错位。
|
|
52
|
+
*/
|
|
53
|
+
private __resolveCanvasRect;
|
|
54
|
+
set stopped(flag: boolean);
|
|
55
|
+
get stopped(): boolean;
|
|
56
|
+
/**
|
|
57
|
+
* @method findTargetComponent
|
|
58
|
+
*
|
|
59
|
+
* 找到被点击的对象,用代码触发 click 事件。
|
|
60
|
+
* 在点击状态下,每次只能点击一个对象,当前不支持 DOM 冒泡特性。
|
|
61
|
+
*
|
|
62
|
+
* 坐标约定:`evt.offsetX/offsetY` 已由输入归一化保证是「canvas 内坐标」。
|
|
63
|
+
*
|
|
64
|
+
* @returns
|
|
65
|
+
*/
|
|
66
|
+
private findTargetComponent;
|
|
67
|
+
}
|
|
68
|
+
export default DOMEventDispatcher;
|
|
@@ -1,29 +1,68 @@
|
|
|
1
|
-
import ICE from '../ICE';
|
|
2
|
-
/**
|
|
3
|
-
* @class DOMEventDispatcher
|
|
4
|
-
*
|
|
5
|
-
* - DOM
|
|
6
|
-
* -
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
1
|
+
import ICE from '../ICE';
|
|
2
|
+
/**
|
|
3
|
+
* @class DOMEventDispatcher
|
|
4
|
+
*
|
|
5
|
+
* - DOM 事件派发器,监听事件总线上的输入事件,派发给 canvas 内指定的组件。
|
|
6
|
+
* - 鼠标 / 指针 / 触摸 / 滚轮 / 键盘事件都通过此工具类派发。
|
|
7
|
+
*
|
|
8
|
+
* 输入归一化(本类的关键职责):
|
|
9
|
+
* - 底层无论 pointer / mouse / touch,都在这里统一成 canvas 内坐标
|
|
10
|
+
* (`clientX - canvasRect.left`)与屏幕位移 movement,然后写回事件对象。
|
|
11
|
+
* 这样组件、拖拽、变换手柄、对齐吸附、命中检测都无需区分输入源。
|
|
12
|
+
* - pointer / touch 会额外以「鼠标语义名」(mousedown/mousemove/mouseup)再派发一次,
|
|
13
|
+
* 保证既有 `on('mousedown', ...)` 代码零改动即可在触摸设备上工作。
|
|
14
|
+
* - 命中检测用的 canvas 矩形在非移动类事件上刷新,页面滚动 / 布局变化后仍正确。
|
|
15
|
+
*
|
|
16
|
+
* @see {DOMEventInterceptor}
|
|
17
|
+
* @author 大漠穷秋<damoqiongqiu@126.com>
|
|
18
|
+
*/
|
|
19
|
+
declare class DOMEventDispatcher {
|
|
20
|
+
private selectionCandidates;
|
|
21
|
+
private ice;
|
|
22
|
+
private _stopped;
|
|
23
|
+
/** 上一次归一化输入,用于在原生 movement 缺失(触摸)时补算位移。 */
|
|
24
|
+
private __lastInput;
|
|
25
|
+
/**
|
|
26
|
+
* 键盘事件的焦点组件(无障碍 / 键盘导航)。
|
|
27
|
+
* 由应用层通过 `ICE.setFocusedComponent()` 设置;为 null 时维持既有行为
|
|
28
|
+
* ——键盘事件派发给「上次点击命中的组件」。
|
|
29
|
+
*/
|
|
30
|
+
focusedComponent: any;
|
|
31
|
+
constructor(ice: ICE);
|
|
32
|
+
start(): this;
|
|
33
|
+
/**
|
|
34
|
+
* 指针捕获:`pointerdown` 时把指针捕获到画布,`pointerup` / `pointercancel` 时释放。
|
|
35
|
+
*
|
|
36
|
+
* 为什么需要:拖组件、拖变换手柄、拖连线钩子时,指针很容易移出画布范围。没有捕获就会出现
|
|
37
|
+
* 「拖着拖着不跟手」甚至「松开鼠标了还在拖」—— 因为后续 `pointermove` / `pointerup`
|
|
38
|
+
* 被派发到了画布之外的元素上。捕获后这些事件会被重定向回画布。
|
|
39
|
+
*
|
|
40
|
+
* 只处理 Pointer Events 通道:mouse/touch 旧通道的 move/up 会冒泡到 window,本来就不会丢。
|
|
41
|
+
*/
|
|
42
|
+
private __handlePointerCapture;
|
|
43
|
+
/**
|
|
44
|
+
* 把事件派发给命中的组件与事件总线。
|
|
45
|
+
* 组件先收到,总线后收到(与既有语义一致:总线始终会收到一次)。
|
|
46
|
+
*/
|
|
47
|
+
private __dispatch;
|
|
48
|
+
/**
|
|
49
|
+
* 取 canvas 矩形用于坐标换算。
|
|
50
|
+
* 移动类事件频率高(每帧可能多次),复用缓存;其余事件刷新一次,
|
|
51
|
+
* 保证页面滚动 / 布局变化后命中检测不错位。
|
|
52
|
+
*/
|
|
53
|
+
private __resolveCanvasRect;
|
|
54
|
+
set stopped(flag: boolean);
|
|
55
|
+
get stopped(): boolean;
|
|
56
|
+
/**
|
|
57
|
+
* @method findTargetComponent
|
|
58
|
+
*
|
|
59
|
+
* 找到被点击的对象,用代码触发 click 事件。
|
|
60
|
+
* 在点击状态下,每次只能点击一个对象,当前不支持 DOM 冒泡特性。
|
|
61
|
+
*
|
|
62
|
+
* 坐标约定:`evt.offsetX/offsetY` 已由输入归一化保证是「canvas 内坐标」。
|
|
63
|
+
*
|
|
64
|
+
* @returns
|
|
65
|
+
*/
|
|
66
|
+
private findTargetComponent;
|
|
67
|
+
}
|
|
68
|
+
export default DOMEventDispatcher;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @class DOMEventInterceptor DOM 事件拦截器
|
|
3
|
+
*
|
|
4
|
+
* 拦截所有原生的输入事件(指针 / 鼠标 / 触摸 / 滚轮 / 键盘),转发到全局事件总线,
|
|
5
|
+
* ICE 内部的事件派发器再监听总线,把事件派发给 canvas 内特定的组件。
|
|
6
|
+
*
|
|
7
|
+
* - 输入通道按运行时能力选择:有 PointerEvent 则只监听 pointer*(统一鼠标/触控笔/触摸),
|
|
8
|
+
* 否则回退 mouse* + touch*;见 `buildDomEventList()`。
|
|
9
|
+
* - 全局只绑定一套 DOM 监听:事件到来时遍历当前所有事件总线转发。
|
|
10
|
+
* 这样重复 init / 多实例 / React StrictMode 双挂载都不会叠加监听,且 stop() 可以真正解绑。
|
|
11
|
+
* - wheel 以 passive:false 绑定,便于应用层阻止页面滚动;触摸的滚动抑制由 canvas 上的
|
|
12
|
+
* `touch-action: none` 声明式完成(见 ICE.init)。
|
|
13
|
+
*
|
|
14
|
+
* @see {DOMEventDispatcher}
|
|
15
|
+
* @author 大漠穷秋<damoqiongqiu@126.com>
|
|
16
|
+
*/
|
|
17
|
+
declare const DOMEventInterceptor: {
|
|
18
|
+
evtBuses: any[];
|
|
19
|
+
__handlers: null | Array<{
|
|
20
|
+
name: string;
|
|
21
|
+
handler: (evt: any) => void;
|
|
22
|
+
}>;
|
|
23
|
+
/** 当前运行时是否走 PointerEvent 通道(start 时探测并缓存,便于测试断言)。 */
|
|
24
|
+
__hasPointerEvent: boolean;
|
|
25
|
+
/**
|
|
26
|
+
* @method start 绑定全局 DOM 监听(幂等:重复调用不会重复绑定)
|
|
27
|
+
*/
|
|
28
|
+
start: () => void;
|
|
29
|
+
/**
|
|
30
|
+
* @method stop 解绑全局 DOM 监听
|
|
31
|
+
*/
|
|
32
|
+
stop: () => void;
|
|
33
|
+
registerEvtBus: (evtBus: any) => void;
|
|
34
|
+
delEvtBus: (evtBus: any) => void;
|
|
35
|
+
};
|
|
36
|
+
export default DOMEventInterceptor;
|
|
@@ -1,7 +1,36 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
/**
|
|
2
|
+
* @class DOMEventInterceptor DOM 事件拦截器
|
|
3
|
+
*
|
|
4
|
+
* 拦截所有原生的输入事件(指针 / 鼠标 / 触摸 / 滚轮 / 键盘),转发到全局事件总线,
|
|
5
|
+
* ICE 内部的事件派发器再监听总线,把事件派发给 canvas 内特定的组件。
|
|
6
|
+
*
|
|
7
|
+
* - 输入通道按运行时能力选择:有 PointerEvent 则只监听 pointer*(统一鼠标/触控笔/触摸),
|
|
8
|
+
* 否则回退 mouse* + touch*;见 `buildDomEventList()`。
|
|
9
|
+
* - 全局只绑定一套 DOM 监听:事件到来时遍历当前所有事件总线转发。
|
|
10
|
+
* 这样重复 init / 多实例 / React StrictMode 双挂载都不会叠加监听,且 stop() 可以真正解绑。
|
|
11
|
+
* - wheel 以 passive:false 绑定,便于应用层阻止页面滚动;触摸的滚动抑制由 canvas 上的
|
|
12
|
+
* `touch-action: none` 声明式完成(见 ICE.init)。
|
|
13
|
+
*
|
|
14
|
+
* @see {DOMEventDispatcher}
|
|
15
|
+
* @author 大漠穷秋<damoqiongqiu@126.com>
|
|
16
|
+
*/
|
|
17
|
+
declare const DOMEventInterceptor: {
|
|
18
|
+
evtBuses: any[];
|
|
19
|
+
__handlers: null | Array<{
|
|
20
|
+
name: string;
|
|
21
|
+
handler: (evt: any) => void;
|
|
22
|
+
}>;
|
|
23
|
+
/** 当前运行时是否走 PointerEvent 通道(start 时探测并缓存,便于测试断言)。 */
|
|
24
|
+
__hasPointerEvent: boolean;
|
|
25
|
+
/**
|
|
26
|
+
* @method start 绑定全局 DOM 监听(幂等:重复调用不会重复绑定)
|
|
27
|
+
*/
|
|
28
|
+
start: () => void;
|
|
29
|
+
/**
|
|
30
|
+
* @method stop 解绑全局 DOM 监听
|
|
31
|
+
*/
|
|
32
|
+
stop: () => void;
|
|
33
|
+
registerEvtBus: (evtBus: any) => void;
|
|
34
|
+
delEvtBus: (evtBus: any) => void;
|
|
35
|
+
};
|
|
36
|
+
export default DOMEventInterceptor;
|
|
@@ -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;
|