首页 > 解决方案 > 容器执行时如何重新缩放 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'重新调整?

再见

标签: smalltalkpharosqueakmorphic

解决方案


这可能不是您正在寻找的完整答案,但分享我所做的可能会帮助您在解决您感兴趣的问题方面取得一些进展。

  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]

试试这个(我没有),让我们知道它是怎么回事。


推荐阅读