smalltalk - 容器执行时如何重新缩放 subMorph?
问题描述
我正在探索 Squeak,在 MacOS 中发布 5.2。
我在 RectangleMorph 'r' 内画线(PolygonMorph)。当我翻译“r”时,线条会翻译,但当我重新缩放“r”时,线条不会重新缩放。
运行下面的截图。然后使用 Halo 平移并调整矩形“r”的大小。您将看到“p”行被翻译但没有重新缩放。
r := RectangleMorph new.
"[Pharo] r:= Morph.new."
r extent: 500@500.
r openInWindow.
p := PolygonMorph
vertices: {(r left)@(r top). (r right)@(r bottom)}
color: Color white borderWidth: 2 borderColor: Color white.
r addMorph: p.
我怎样才能让'p'重新调整?
再见
解决方案
这可能不是您正在寻找的完整答案,但分享我所做的可能会帮助您在解决您感兴趣的问题方面取得一些进展。
- 我不是 Squeak(或 Pharo)用户,所以我从网上下载了 Squeak。
- 将您的代码粘贴到工作区并执行它。
- 重现了您观察到的行为:调整矩形大小对其多边形子变形没有影响。
- 弹出矩形菜单并看到“添加光环”项。
- 写
'add halo'
在某处并右键单击以使用该文字带来所有方法。 - 找到
#addHalo:
作为菜单项的关联消息。 - 插入一个
halt
调试#addHalo:
。 - Cmd +单击以带来光环并进行调试,直到我发现调整大小手柄会发送
addGrow:with:
到变形。 - 然后我看到了
addGrow:with:
发送setExtentFromHalo:
和发送extent:
。
我的结论是,你需要一个新的子类RectangleMorph
,当它接收到setExtentFromHalo:
. 有点意思
ScalableRectangleMorph >> #setExtentFromHalo: aPoint
current := self extent.
super setExtentFromHalo: aPoint.
scale := self extent - current / current.
self submorphsDo: [:m | m extent: (m extent * scale) rounded]
试试这个(我没有),让我们知道它是怎么回事。
推荐阅读
- javascript - 如何将数组数组拆分为更小的部分
- database - 我如何在自己的数据库中使用 firebase 验证
- c++ - C++中的类系统架构
- visual-studio-2017 - 加载或创建应用程序时 Visual Studio 2017 崩溃
- python - 如何从 1 数到 10 并在结束时删除线?( Python )
- azure - 为什么在 Python 中记录的自定义事件不会显示在 API Explorer 中?
- orchestration - 使用具有不同后端的 Netflix Conductor
- swift - Realm Swift Crash:已经在后台线程上以不同的模式模式打开
- javascript - 检查变量是否大于或等于一个数字并且小于或等于一个数字jquery
- php - 为什么使用公共 ip 连接到谷歌云 mysql 实例的 php pdo 失败,getaddrinfo failed: Name or service not known?