next up previous contents
Next: 結果 Up: クラスSerialPortMorphの作成 Previous: プレイヤー内のメソッドとインタフェース用メソッド

モーフに画像を付ける

今のシリアルポートモーフは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


Deguchi Lab.