racket - 缩放编辑器画布
问题描述
我正在玩球拍并计划实现一个节点编辑器(如果已经有一个请告诉我!)。主黑板是编辑器画布%中的粘贴板%,现在我正在处理缩放功能。基本上我可以设置绘图上下文的比例来缩放:
;; c is my editor-canvas%
(send (send c get-dc) set-scale 2 2)
然而,这只会缩放绘图调用,但事件坐标未更改,因此无法正确调度它们。
我正在寻找一些方法来转换调度过程中所有事件的坐标,但目前还没有发现任何有用的东西。有没有办法在调度过程中放置一个“变压器”?或者是否有其他解决方案来缩放整个画布并正确分配事件?
解决方案
在玩了之后,我想我几乎想出了一个解决方案(只是我目前最好的解决方案)。
我(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)
推荐阅读
- node.js - 在 NodeJs 中更改流以进行弹性搜索
- python - 请求 gmail-api 时出现 HttpError 429:超出用户速率限制
- python - 从 pyspark 的列中删除非英语单词
- ios - 视觉框架 (iOS):VNDetectFaceLandmarksRequest 和 VNDetectFaceRectanglesRequest 有何不同?
- javascript - 从没有 URL.createObjectURL() 的 blob 创建文件的替代方法
- python-3.x - 用函数python替换nan值
- apache-kafka - Kafka Connect - json 路径 - 正则表达式条件不起作用
- azure-synapse - 如何创建从 azure 分析服务到 azure synapse SQL 池的链接服务
- kubernetes - Kubernetes 入口防火墙规则
- mysql - 从子查询mysql获取最大值列