我正在研究球拍,并计划实施一个节点编辑器(如果已经有一个,请告诉我!)。主黑板是编辑器画布%中的粘贴板%,现在我正在处理缩放功能。 基本上,我可以设置绘图上下文的比例以使其缩放:
;; c is my editor-canvas%
(send (send c get-dc) set-scale 2 2)
但是,这只会缩放绘图调用,但事件坐标未更改,因此无法正确调度。
我正在寻找某种方法来转换调度过程中所有事件的坐标,但是目前没有发现任何有用的方法。有什么方法可以在调度过程中放置“变压器”?还是有其他解决方案来缩放整个画布并正确分配事件?
答案 0 :(得分:0)
玩转之后,我想我几乎想出了一个解决方案(只是我目前的最佳解决方案)。
我使用(send (send c get-dc) set-scale 2 2)
来调整显示比例。然后我使用pasteboard%
的{{1}},
interactive-adjust-mouse
,以及
interactive-adjust-move
覆盖坐标。 Racket GUI框架没有提供在分发过程中操纵事件的通用方法,但是interactive-adjust-resize
提供了用于更改事件坐标的方法,并且似乎可以正常工作。
另一方面,对于事件的任意修改,我发现重写小部件的pasteboard%
方法并调用on-event
或在您要更改调度顺序的情况下手动将其分发给子级很有用。等