首页 > 解决方案 > 缩放编辑器画布

问题描述

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

;; c is my editor-canvas% (send (send c get-dc) set-scale 2 2)

然而,这只会缩放绘图调用,但事件坐标未更改,因此无法正确调度它们。

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

标签: racket

解决方案


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

(send (send c get-dc) set-scale 2 2)用来调整显示比例。然后我使用pasteboard%'s interactive-adjust-mouse, interactive-adjust-move, and interactive-adjust-resize来覆盖坐标。Racket GUI 框架没有提供在调度过程中操作事件的通用方法,但pasteboard%提供了更改事件坐标的那些方法,并且它似乎可以工作。

另一方面,对于事件的任意修改,如果您想更改调度顺序等,我发现覆盖小部件的on-event方法并调用或手动将它们调度给子级很有用。(super on-event modified-events)


推荐阅读