今のシリアルポートモーフはRectangleMorphのサブクラスなので、形はただの青い四角である。利用者がこの四角を見てシリアルポートと連想しにくいので、シリアルポートモーフにシリアルポートの画像を付けたいと考えた。画像のデータを保持する変数としてクラス変数 imageDataを追加した。 そして、画像ファイルをBase64を用いてテキストファイルに変換してimageDataに入れた。 シリアルポートモーフもスケッチモーフもモーフのサブクラスである。スケッチモーフのインスタンスは簡単に画像を持つ事が出来るので、スケッチモーフのメソッドを利用すればシリアルポートモーフに画像を付けることが出来るだろうと考えた。スケッチモーフの内容を参考した結果、 画像に関連するインスタンス変数originalForm, rotatedFormが必要であることが分かったのでSerialPortMorphにこれらを追加した。 次のクラスメソッドは SketchMorphのメソッドから利用した。
initialize
| f | f := Base64MimeConverter mimeDecodeToBytes: (ReadStream on: self imageData). Image := Form fromBinaryStream: f
初期化インスタンスメソッドは次のように作った。
initialize
super initialize. Image notNil ifFalse: [self class initialize]. portNumber := -1. receivedData := 0. originalForm := Image. rotatedForm := originalForm. self extent: originalForm extent