https://minordaimyo.net/pencilchat/
#基本事項
描画の履歴情報は、描線1本ごとに持つ
#履歴情報の詳細
描線一つに付き、以下の履歴情報を保持する。
・描画範囲(矩形)
・undo/redo用の、描画前のbmp画像(描画範囲の領域分だけ保持)
・描画開始時刻
・描画終了時刻
・undoを実行した際の時刻
#undo実行時の処理
描画開始時刻以降に、描画範囲と重なる別の描画が存在するかどうかを調べる。
(別の描画の時刻は、描画終了時刻を比較対象とする)
存在しなければundo実行。
undo実行時刻を記録する。
#redo実行時の処理
undo実行時刻以降に、描画範囲と重なる別の描画が存在するかどうかを調べる。
(別の描画の時刻は、描画終了時刻とundo実行時刻の内、新しい方を比較対象とする)
存在しなければredo実行。
undo実行時刻をクリアする
#その他
履歴情報の数が上限に達した場合の処理も必要。
上限に達して一番古い履歴情報を削除する際には、描画範囲矩形と描画終了時刻を別途保持する必要がある。
現時点での"えんぴつチャット"では、履歴は一人当たり最大32段までにしてある。
最大参加人数は8人なので合計256段。
これくらいなら衝突チェックも総当たりで十分行ける。