Лучшим учителем является само изображение. Если вы откроете браузер в CircleMorph, вы увидите, что его суперкласс, EllipseMorph, определяет #drawOn:, то есть, как морфы рисуют сами. Оттуда вы можете получить всю информацию и вдохновение, чтобы сделать свой собственный морф.
Обновление: Моей первой мыслью было нарисовать его вручную (полностью переопределить #drawOn :), но в Canvas не было никаких очевидных кандидатов. Позволяя окружности нарисоваться при установке прямоугольника отсечения на четверть, он стал почти однострочным.
Обновление 2: Уловка с четвертью кругом заключается в том, что CircleMorph выполняет большую часть работы за вас! Лучшее, что я придумал, это:
QuarterCircleMorph>>drawOn: aCanvas
| realBounds |
"Save the actual bounds of the morph"
realBounds := bounds.
"Pretend the bounds are 4x as big"
bounds := bounds bottom: bounds bottom + bounds height.
bounds := bounds right: bounds right + bounds width.
"Let CircleMorph handle the drawing"
super drawOn: aCanvas.
"Restore the actual bounds"
bounds := realBounds.
Где QuarterCircleMorph является подклассом CircleMorph. Потому что вы не можете выйти за его реальные границы, все работает. нотабене в реальном коде комментарии были бы излишними (за исключением, может быть, 4х, но это знак для рефакторинга:))