アンドゥ/リドゥ(元に戻す/やり直し)の実装
テキストエディタ然りペイントツール然り、何かしらのデータや作品の編集ソフトを利用するならそこに「Ctrl+Z」の存在を期待してしまうのは現代人の性である。 その手のツールを実用的に開発するならば、やはり「元に戻す」を真面目に実装することを迫られよう。
最近実際にそういう実装をやってみたことがあったので、そこで得られたアンドゥ・リドゥ実装の知見を書き留めておく。
テキストエディタ然りペイントツール然り、何かしらのデータや作品の編集ソフトを利用するならそこに「Ctrl+Z」の存在を期待してしまうのは現代人の性である。 その手のツールを実用的に開発するならば、やはり「元に戻す」を真面目に実装することを迫られよう。
最近実際にそういう実装をやってみたことがあったので、そこで得られたアンドゥ・リドゥ実装の知見を書き留めておく。
諸用により、スマホのようなタッチデバイスの画像表示UIなどで使われるスワイプ/ピンチ操作を自力で実装することがあったためその時に分かったことを書く。
技術的にどうこうというよりは、「既存のソフトウェアに実装されている多くのUIコンポーネントはこのように動作するよう作られているし我々もそれを気持ちいいと感じる」という話にあたる。なので特に実装言語には依存しない話になるはずだ。
Windows でペンタブ・液タブの筆圧情報などを取ろうとした場合、「WinTab」という API と「Tablet PC API」という主に 2 つの API がある。
2 つのうち WinTab の方はMicroSoftでなくWacom社が出しているものであるため、他の会社のペンタブとの互換性をあまり期待できない。なので Wacom と生涯を共にし永遠の愛を誓うつもりが無いなら、基本的には Tablet PC API の方を使うべきだと思う。
その一方で Tablet PC API の方を用いた筆圧取得については日本語圏にあまり分かりやすい解説記事が無いため、他の人にも役立つようここにまとめてみる。
先日Twitterで「Lapce」というエディタが少し話題に上っていた。VSCodeっぽいUIになっており、Rust製で高速らしい。 試しに軽く使ってみたので使用感をメモ。
公式サイトはここ: https://lapce.dev/
以前LaravelというWebフレームワークを扱っていたとき、データベース関係で 「マイグレーション」 なる概念が出てきて、とりあえず入門通りにやればデータベースを扱えはするものの「マイグレーション」という言葉自体をどう解すればいいのかよく分からなかったという思い出がある。そんなことをふと思い出したので、似たような人の参考になればいいなという記録。
実際のところこの言葉はLaravel開発でなくても任意のシステム開発で出てくる。が、この記事ではいわゆるデータベースの構造のマイグレーションについて書く。
std::function
は、指定の引数リスト・戻り値型を持つ任意の関数オブジェクトを格納できる……これは実は真ではない。
C++ではstd::function
に入れられない関数オブジェクトというものが存在する。
具体的にはコピー不可能な関数オブジェクトは格納できない。 std::function
は格納する関数オブジェクトにコピーコンストラクト可能であることを要請する。
C++でこういうコードを書いたとする。
int a = 10, b = a * 2;
初期化がa→bの順で行われるなら問題は起きないが、仮に逆の順だと問題が起きるように思われる。その辺は規格上どうなっているのか調べてみた。