缩放编辑器画布

时间:2019-02-28 07:48:05

标签: racket

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

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

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

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

1 个答案:

答案 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或在您要更改调度顺序的情况下手动将其分发给子级很有用。等