from Regroupでカンバン マウスイベントの扱いの変更
- マウスイベントの扱い、TSの型を活用できてない
- targetがnullの場合の処理は先に済ませてることが分からなくてヌルチェック要求とか
- targetがグループであることは明らかなのにすべての種類だと思ったりとか
- この状況は僕自身も型の支援を受けられてない
- 状態と必要な変数を組みにして型で保護する
- 「状態」があり「イベント」によって状態遷移する
- マウスイベントの扱いを明示的に状態遷移図として捉える
- いま、状態に名前がついてないので混乱してると思う
- 現在選択されているツールが何かによって、呼ばれる関数が変わる
- 今のマウス関連コードは、まずツールで分かれてる
- 投げ縄は新しく囲おうとしてる状態と、囲んだものを動かす状態がある
- マウスダウン時のコードを見て、そこでハンドラーをセットしてるかどうか見ないとわからない
- 空欄をマウスダウンの時だな
- これは「どういう時に何が呼び出されるのか」がわかりにくい
- 違う、ハンドラーが指定されてる場合にはそちらを呼び出すコードになってる
- マウスダウン時の状況でドラッグスタートタイプという値を持ってるが、ドラッグでの位置更新は大体共通コード
- スタイラスかどうかで分岐してる
- マルチタッチかどうかで分岐してる
- マウスダウン位置でヒットテストしてる
- ヒットアイテムがない時に、シフトを押してるかどうかで分岐してる
- グループは、それが開いてるかどうかで分岐してる
- ドラッグエンドでドラッグスタートタイプによって処理の切り分け
- 理想の設定、しばしば現実の細部を見落としてる
- 現状のカオスなコードを整理できるか?
- enumを使ったのは筋悪であった
- しかし現実にはツールをまたいで共通の処理がある
- ツールオブジェクトのメソッドの形で実装されてたイベントハンドラをモジュールスコープの関数として解き放つ
- しかしそれはニーズに合わない
- マウスイベントの扱いにも変更が必要かも?
- この辺で、やはりマウスイベントの扱いの変更が必要かも