Racket 缩放编辑器画布

Racket 缩放编辑器画布,racket,Racket,我正在玩racket并计划实现一个节点编辑器(如果已经有了,请告诉我!)。主黑板是编辑器画布%中的一个粘贴板%,现在我正在处理缩放功能。 基本上,我可以设置图形上下文的比例以使其缩放: ;;c是我的编辑器% (发送(发送c获取dc)设置刻度2) 但是,这只会缩放图形调用,但事件坐标不变,因此无法正确调度 我正在寻找一些方法来转换调度过程中所有事件的坐标,但目前还没有找到任何有用的方法。有没有办法在调度过程中放置“变压器”?或者是否有其他解决方案可以扩展整个画布并正确分配事件?在玩过之后,我想我

我正在玩racket并计划实现一个节点编辑器(如果已经有了,请告诉我!)。主黑板是编辑器画布%中的一个粘贴板%,现在我正在处理缩放功能。 基本上,我可以设置图形上下文的比例以使其缩放:

;;c是我的编辑器%
(发送(发送c获取dc)设置刻度2)

但是,这只会缩放图形调用,但事件坐标不变,因此无法正确调度


我正在寻找一些方法来转换调度过程中所有事件的坐标,但目前还没有找到任何有用的方法。有没有办法在调度过程中放置“变压器”?或者是否有其他解决方案可以扩展整个画布并正确分配事件?

在玩过之后,我想我几乎找到了一个解决方案(只是我目前最好的解决方案)

我使用
(send(send c get dc)set scale 2)
调整显示比例。然后我使用
粘贴板%
交互式调整鼠标
交互式调整移动
,以及
交互式调整大小
以覆盖坐标。Racket GUI框架没有提供在分派过程中操作事件的一般方法,但是
pasteboard%
提供了更改事件坐标的方法,并且似乎可以工作

另一方面,对于事件的任意修改,我发现重写小部件的
On event
方法并调用
(super On event modified events)
或手动将它们分派给子级(如果您想更改分派顺序等)非常有用。

您可以使用
(send dc get transformation)
以获得所需的转换。(不完全是你要求的——但可能会有帮助)