普通に Morph を継承しただけのモルフでは、マウスイベントはモルフの周りの矩形全体に反応してしまう。複雑な形状や中抜きを持つモルフの場合、描画していない場所ではマウスイベントを無視したい。
Morph>>containsPoint: aPoint
を上書きして範囲外では false を返せばよい。(分かってしまえば単純だが、探すの難しかった)。
PolygonMorph のような複雑なモルフの時はどうしてるのだろうか?
Point クラスには、ある線上に位置しているかどうかを調べるメソッドがあり、それを使うと簡単。
self lineSegmentsDo: [:p1 :p2 | (aPoint onLineFrom: p1 to: p2 within: 3) ifTrue: [^ true]].
のように使う