CanvasPointer 路由指针输入。由它决定一次按下会成为点击、双击还是拖拽,并运行你为该次按下指定的回调。绘制在画布上的控件通过 onPointerDown 使用它。
默认行为
- 拖动多个已选择的项目时不再需要按住 Shift。在已选择多个项目的情况下点击其中一个项目,仍会取消选择其他项目。
- 点击输入上的已连接连线时,不再断开并重新连接该连线。
- 指针按下与抬起之间的少量移动仍算作一次点击。一旦指针移动超过点击漂移上限,这次按下就变为拖动。时间不影响该判定。
- 双击需要在双击时间内完成两次按下,且两次按下的间距最多为点击漂移的三倍。只有分配了
onDoubleClick的按下才能完成双击。
Comfy.Pointer.ClickDrift 和 Comfy.Pointer.DoubleClickTime)。
选择多个项目
Ctrl+ 拖动:开始多选Ctrl+Shift+ 拖动:添加到选择Ctrl+ 拖动,然后按Shift:添加到选择Ctrl+ 拖动,然后按Alt:从选择中移除
在控件上处理指针输入
在控件上设置onPointerDown。它在指针按下时运行,并接收指针、节点和画布。在指针对象上设置你需要的回调,按下操作判定完成后画布会运行对应的回调:
onClick与onDoubleClick不会与onDragStart、onDragEnd或onDragCancel在同一次按下中运行。onDrag可以在最终判定为点击的按下中运行,因为它也会接收到点击漂移范围内的移动。onDragStart每次拖拽只运行一次,即指针首次越过点击漂移范围时。如果指针在没有任何移动事件上报之前就越界释放,onDragStart会在释放时运行,onDragEnd紧随其后运行,而onDrag不运行。- 当一次按下同时设置了
onClick和onDoubleClick时,双击的第一下释放会运行onClick。第二次按下改为运行onDoubleClick而不是onClick,因此请保证onClick可以先安全运行。第一次点击也可能落在附近的其它项目而不是你的控件上,所以onDoubleClick可能在你的onClick尚未运行的情况下运行。 onDragEnd接收拖拽的指针抬起事件。拖拽被中断时(例如丢失指针捕获)改为运行onDragCancel。finally在按下结束时运行一次。设置pointer.finally会立即运行它替换掉的那个回调。如果onPointerDown没有返回true,画布会设置它自己的finally,于是你的回调会在指针按下期间运行。当你依赖finally做清理时请返回true。pointer.eDown、pointer.eMove和pointer.eUp让每个回调都能访问完整的事件序列。- 返回
true可以阻止画布自行处理这次按下。 - 添加
onPointerDown时,请移除遗留的widget.mouse处理器。如果onPointerDown返回true,画布会在释放后继续跟踪该控件,并在每次指针移动时继续调用widget.mouse。
控制画布光标
canvas.state.hoveringOver 保存指针下方项目类型的位标志,例如节点、组、重新路由或连线。将 canvas.state.shouldSetCursor 设置为 false 以阻止画布设置光标样式,然后自行设置光标:
shouldSetCursor 为 false 时,开始调整节点大小仍会设置调整大小光标。请在调整大小结束后重新设置你的光标。