Smalltalk 当容器发生变化时,如何重新缩放子变形?
我正在探索MacOS中5.2版的Squeak 我正在矩形变形“r”内绘制线(多边形)。当我转换“r”时,线条会转换,但当我重新缩放“r”时,线条不会重新缩放 运行下面被剪断的按钮。然后使用光环平移并调整矩形“r”的大小。您将看到行“p”被转换,但没有重新缩放Smalltalk 当容器发生变化时,如何重新缩放子变形?,smalltalk,pharo,squeak,morphic,Smalltalk,Pharo,Squeak,Morphic,我正在探索MacOS中5.2版的Squeak 我正在矩形变形“r”内绘制线(多边形)。当我转换“r”时,线条会转换,但当我重新缩放“r”时,线条不会重新缩放 运行下面被剪断的按钮。然后使用光环平移并调整矩形“r”的大小。您将看到行“p”被转换,但没有重新缩放 r := RectangleMorph new. "[Pharo] r:= Morph.new." r extent: 500@500. r openInWindow. p := PolygonMorph vertic
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”重新缩放
再见这可能不是您想要的完整答案,但分享我所做的,可能会帮助您在解决您感兴趣的问题方面取得一些进展
“添加光环”
,然后右键单击以将所有具有该文字的方法显示出来#addHalo:
作为菜单项的关联消息halt
来调试#addHalo:
addGrow:with:
添加到变形addGrow:with:
发送setextntfromhalo:
,而这发送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]
请尝试一下(我没有),并让我们知道它是如何进行的。我可以建议您自己进行更多的探索吗?调试
p scale:1.2
以查看它为什么会缩放。然后调试r scale:1.2
,看看它为什么不缩放。这应该会给你一些启示。在你的消息之后,我发现了CMD+D:/这将花费我很多时间来解释这一切。如果你能帮我一把,告诉我情况如何,如果我能得到我所要求的一切,我将不胜感激。无论如何,如果我有机会,我会下载Squeak并亲自尝试一下。但是没有承诺,所以继续调试。这是最有效的学习方法。好的,我会尽量从调试器中获取我能得到的,我对SmallTalk非常陌生。我也在Pharo(7.0.3 MacOS)中测试了脚本,类似的问题。当您移动调整光环时,矩形将接收doGrow:with:
,它依次发送setextfromHalo:
,它只发送范围:
。因此,如果您创建了RectangleMorph
的子类,该子类除了更改其范围
之外,还更改了其所有子变形的范围
(按比例),您应该会得到您想要的效果(通过使用新的子类而不是RectangleMorph
)。非常感谢@Leandro解释您是如何分析问题的!明天早上我会试试!再见。为其子变形设置一个新的LayoutPolicy就足够了