OpenSiv3D icon indicating copy to clipboard operation
OpenSiv3D copied to clipboard

s3d::Window:: 及び s3d::WindowState 名前空間内の諸機能に対する要望・提案

Open shigshigrain opened this issue 2 years ago • 1 comments

追加する機能の内容 | Describe the solution you'd like ①s3d::WindowState.sizeMoveを分解した以下のステータスの追加(メンバ変数名は仮称) s3d::WindowState.sizeChange // ウィンドウのサイズのみが変化したかどうか s3d::WindowState.isMoved // ウィンドウの位置のみが変化したかどうか

②s3d::Window::Resize(int, int, s3d::Centering)について、リサイズ後に画面の中央に配置るするかどうかに加えて、画面上の任意のポイントに移動できるようにs3d::Pointを引数として渡せるようにする s3d::Window::Resize(int, int, s3d::Point) // リサイズとウィンドウ位置変更を同時に行うことで、ちらつきを防止 // ResizeVirtual() 及び ResizeActual()についても同様 // 画面中央に配置する際の左上座標をs3d::Pointとして返す機能を用意することで、s3d::Centering付きのオーバーロードと共通化できるか?

③s3d::Window::Resize()とWidowsOSの標準機能であるウィンドウスナップとの相性の改善 ウィンドウスナップによるウィンドウの座標・サイズ変更に反応する形でWindow::Resize()を使用すると、目的通りの挙動にならない場合がある。Window::Resize()を同じ文言で2回書くと改善されるケースがあった。 ウィンドウスナップされたウィンドウのサイズを手動もしくはWindow::Resize()で変更すると、その処理の後にWindowsOS側(WinAPI?)で"記憶されていたウィンドウスナップされる直前のウィンドウサイズ"に勝手にリサイズされているように挙動を見て感じる(が確証がありません)。そのため、1回のみResize()すると目的のウィンドウサイズにならないが、2回連続で行うと目的のサイズになる。ただし、余計なリサイズを挟むためウィンドウが一瞬ちらついてしまう。

その機能の追加によって解決する問題 | Is your feature request related to a problem? Please describe. ①ウィンドウのリサイズのみをトリガーとして処理を行いたい、あるいはウィンドウの移動のみをトリガーとしたい場合に楽に記述できる、処理が安定する。 現状のs3d::WindowState.sizeMoveのみだと上記の区別ができないため、ウィンドウのリサイズが行われたときのみ処理したいのに、ウィンドウを動かしただけで処理が走ってしまって困る場合がある。現在は1フレーム前のウィンドウサイズをメモしておいて比較しているが、スマートではない(と感じる)。

②ウィンドウスナップでウィンドウの位置・サイズを変えようとしたときに、これも相性の問題でウィンドウのサイズのみ変化して位置がもともとの位置にとどまるような処理になってしまうケースが生じる。③のウィンドウスナップ機能との相性改善が全般的に行われた場合にはこの機能は不必要になる(包括される)と思われる。 また、所感としてs3d::Window::Resize()のデフォルトがbool Resize(Size size, s3d::Centering centering = Centering::Yes); なのは違和感を感じました。ここについては用途によると思われますが、centering = Centering::Noが標準状態である方が自然に感じます(このオーバーロードに気づくまでかなり時間がかかってしまった)

③ウィンドウスナップへの自然な対応により、ユーティリティツールへの開発に用いやすくなる。 おそらくこうした用途の場合、今後は標準ウェブブラウザを用いたフレームワークを用いていくことが推奨されると思われます。しかしながら、ゲーム開発を自然かつ簡単に記述していけるsiv3dの魅力をそのまま生かせるため、機能として存在・対応していると個人的には助かります(ニッチな要望には変わりないですが…)

備考 | Additional context 素晴らしいフレームワークを開発・拡張してくださり、ありがとうございます。ありがたく使わせていただいております。 現在私がsiv3dで開発しているアプリケーションが、ゲームのエミュレータのように機能しつつ、ユーティリティツールとしても振舞うようなものであり、ブラウザを片側に開きながらウィンドウスナップでゲーム画面を動かしつつ、ウィンドウサイズの比率は一定(16:9など)に維持するといった運用を考えています。このような使用法はおそらくマイナーなので汎用性のある提案にはなりませんが、検討していただけると幸いです。

shigshigrain avatar Jun 03 '23 16:06 shigshigrain

ご提案ありがとうございます。 ウィンドウスナップとの相性については未調査でした。 改善できないか調べてみます。

Reputeless avatar Jun 04 '23 05:06 Reputeless