容器工作时如何重新缩放subMorph?

Nic*_*tti 5 smalltalk squeak pharo morphic

我正在探索Mac OS 5.2中的Squeak。

我在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.
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到'p'重新缩放?

再见

Lea*_*lia 4

这可能不是您正在寻找的完整答案,但分享我所做的事情可能会帮助您在有趣的问题上取得一些进展。

  1. 我不是 Squeak(或 Pharo)用户,所以我从网上下载了 Squeak。
  2. 将代码粘贴到工作区中并执行它。
  3. 重现了您观察到的行为:调整矩形大小对其多边形子变形没有影响。
  4. 弹出矩形菜单,看到“添加光环”项。
  5. 'add halo'在某处并右键单击以将所有方法都带有该文字。
  6. 被发现#addHalo:为菜单项的关联消息。
  7. 插入一个halt进行调试#addHalo:
  8. Cmd+单击带来光环并进行调试,直到我发现调整大小手柄会发送 addGrow:with:到变形。
  9. 然后我看到那个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]
Run Code Online (Sandbox Code Playgroud)

尝试一下(我没有),然后让我们知道效果如何。