Squeak-Smalltalk の Morphic で円の 4 分の 1 を描こうとしています。それはどのように機能しますか?
前もって感謝します!
最良の教師はイメージそのものです。CircleMorph でブラウザーを開くと、そのスーパークラスである EllipseMorph が #drawOn: を定義していることがわかります。これは、モーフが自身を描画する方法です。そこから、カスタム モーフを作成するためのすべての情報とインスピレーションを得ることができます。
更新:最初に考えたのは、手で描画することでした (#drawOn: を完全にオーバーライドします) が、Canvas には明らかな候補がありませんでした。クリッピング四角形を 4 分の 1 に設定して円自体を描画させることで、ほぼワンライナーになりました。
更新 2: 1/4 円のトリックは、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 のサブクラスです。実際の境界を超えて描画することはできないため、すべてがうまくいきます。nb実際のコードでは、コメントはやり過ぎです(おそらく4xのものを除いて、それはおそらくリファクタリングの兆候です:))