よく考えたらファイルを読み込む時の処理をアンドゥのログに入れてなかった。アンドゥで読み込み自体がなかったことになって、前の画像の上からそのまま筆跡が再生されてしまった。アップデートする前に気づいて良かった。
読み込んだ、という事をログに残しておけばいいんだけど、ファイル名だけってのはちょっとまずい。アンドゥする前に画像を上書きしたら結果が変わるし、削除してたら読み込みエラーになる。
しょうがないのでここだけ鳳雛の時と同じ、ビットマップデータ自体をログに埋め込む方式にした。ちょっと使用メモリは増えるけどしょうがない。
保存のアンドゥは”今開いてるファイル名”が保存前の戻るけど、保存したファイル自体は元に戻らない。これも鳳雛と同じ。原理的には戻すことも出来るんだけど、他のソフトの感覚と違うし、他のアプリからアクセスされると結局完全な制御はできないので。
変なところでめんどくさかったのが、保存や読み込みで名前が変更された後、それをタイトルバーに反映させる処理。アンドゥ対応にともないってファイルアクセスも描画用スレッドにうつしたら、そこからタイトルの変更が出来なくなった。AndroidのGUIはシングルスレッド用だから、別スレッドからのアクセスが無条件に弾かれる。
色々調べて回った結果、android.os.Handlerというのを使って、描画用スレッドからさらに別のスレッド(メインスレッド)呼び出す感じで書けば大丈夫だった。
これを除けばマルチスレッド処理はわりとうまくいっている。鳳雛の時は太いブラシだと線がカクカクしたけど、うなペイントだとそれは起きない。線が遅れて引かれる感じにはなるだけで筆跡に影響が出にくい。元々1コアしかないCPUだとスレッド切り替え処理の分遅くなるかもしれないけど。
鳳雛作った時はシングルコアのPCだった気がする。だからマルチスレッド対応という選択肢がそもそも頭になかった。あれは一体何年前になるんだろう。今では携帯電話までマルチコアが標準になってきてる。
あの頃からするとずいぶんプログラムの環境が進化した。ジェネリクスのリストとかキューとか、今では特に珍しくもないものだけど、あの頃を思い出すと拝んでしまうレベル。

