クラス構成を現時点のものに。
特にプラグインのためのクラスを追加した。
ペイントツール プロトタイプ12。
WindowsApplication1.zip
起動はここからClickOnceで。ClickOnceはIE系で。
WindowsApplication1
操作
- 左ドラッグ(右でも可)
- 線を描く。
クラス構成
呼び出され順は…
- Canvasが持つPanel
Windowsからのイベント(Event)を受ける。
コンポジション集約なので、はっきり言ってCanvas。 - Queue
独立したスレッドで動作する入力バッファ。 - InternalEvent
.NET FrameworkのEventに独自のデータを付け加えたもの。
アプリが利用するEventそれぞれに対応。拡張点。 - Tablet
CommandパターンでのInvoker。 - Command
CommandパターンでのCommand。
サブクラス多数。拡張点。プラグイン。 - Brush
描画処理の中枢。
サブクラス多数。拡張点。プラグイン。 - Canvas
絵を保持している。
イベント(Event)を受けるクラスと同一。
MVCで表せば…
※Canvasは元々M(モデル)にあたるクラスだけど、画面上に表示するのも「キャンバス」なわけで、「ユーザーコントロール」として実装した。V(ビュー)としても使う。このクラス内だけでVからMを直接呼び出してはいない。
Canvasから始まりCanvasで終わっているので、Canvasクラス内だけで完結するような処理を複雑にやっていることになる。
この複雑さはプラグインのため。
後はプラグインのためのUIを担うPaletteクラスと、プラグインの探索と読み込みを行う何らかのクラスを実装すれば、プラグインのための仕組みができあがる。
プラグインの読み込みはBrushなどのクラスとPaletteクラスの両方に依存するので、コントロールクラスであるAppクラスだろうか。