操作
バグ #160
完了ディスプレイ選択とフルスクリーンモードが機能していない
バグ #160:
ディスプレイ選択とフルスクリーンモードが機能していない
説明
- 別のディスプレイを選択しても、その選択したディスプレイにゲーム画面が表示されない
- どのモードを選んでもボーダーレスで表示される
エージェント ちゃん さんが25日前に更新
操作
#2
- ステータス を 未着手 から 実装中 に変更
- 進捗率 を 0 から 10 に変更
作業を開始します。
エージェント ちゃん さんが25日前に更新
操作
#3
実装を進めました。
- 通常ウィンドウの保存済み位置・サイズを、ボーダーレス表示へ流用しないように変更しました。
- ボーダーレス表示は選択ディスプレイの原点へ、選択解像度で配置するようにしました。
- ランチャーで表示先ディスプレイを変更した場合、古い保存済みウィンドウ座標をクリアするようにしました。
- 保存済みウィンドウ座標クリア処理の単体テストを追加しました。
検証:
-
./gradlew.bat test --tests bms.player.beatoraja.ConfigFileCompatibilityTest成功 -
./gradlew.bat clean build成功 -
claude --print --permission-mode dontAsk "Review the current git diff for bugs, regressions, and missing tests. Do not edit files. Return findings with file/line references."実行済み。指摘を確認し、ボーダーレスと通常ウィンドウの処理を別メソッドへ分離して再検証しました。
実機確認では、設定画面で別ディスプレイを選択したうえで Windowed / Borderless / Exclusive Fullscreen をそれぞれ起動確認してください。曲を選ぶ必要がある場合は、選曲画面で任意の短い曲を1曲選んで開始し、表示先とウィンドウ枠の有無を確認してください。
エージェント ちゃん さんが25日前に更新
操作
#4
追加確認のスクリーンショットを確認しました。
症状:
-
Windowモードで解像度を1280 x 720にしているにもかかわらず、実ウィンドウ/スクリーンショットが2560 x 1440になり、スキン描画が左下1280 x 720にだけ表示されていました。
原因:
-
config_sys.jsonでresolution: "HD"のままuseResolution: false,windowWidth: 2560,windowHeight: 1440が残っており、起動ウィンドウサイズと描画基準解像度が不一致になっていました。
追加対応:
- 設定画面から保存した場合は、選択した
resolutionを優先するようuseResolution=trueに戻します。 - 実行中のウィンドウサイズ保存は、
Resolutionenum に完全一致するサイズだけ復元対象にしました。 - 復元時に保存サイズが標準解像度へ一致した場合は、描画基準の
Config.resolutionも同じ値へ合わせます。 -
Resolution.find(width, height)を追加し、標準解像度の完全一致判定をテストしました。
検証:
-
./gradlew.bat test --tests bms.player.beatoraja.ConfigFileCompatibilityTest成功 -
./gradlew.bat clean build成功 - Claude Codeレビューを再実行し、非標準の任意ウィンドウサイズ復元について指摘を確認しました。任意サイズ復元は描画基準との不一致を再発させるため、今回の修正では標準解像度のみ復元対象としています。
エージェント ちゃん さんが25日前に更新
操作
#5
追加指摘の Window モード初期座標問題に対応しました。
症状:
-
Windowモードで初期座標が(0, 0)になると、装飾付きウィンドウのタイトルバーが画面外に出て、ウィンドウ移動ができなくなる場合がありました。
対応:
-
Windowモードでは選択ディスプレイの原点ではなく、装飾付きウィンドウ用に内側へ32pxオフセットした位置へ配置するようにしました。 - 保存済み座標がある場合も、選択ディスプレイの表示範囲内へクランプします。
-
Borderlessは従来どおりディスプレイ原点へ配置します。 -
Borderless時のresolution == nullガードと、モニター情報が取得できない場合の保存済み位置フォールバックも追加しました。 - 非標準ウィンドウサイズは描画基準との不一致を避けるため復元対象にせず、ただし実寸情報自体は
windowWidth/windowHeightに保持します。
検証:
-
./gradlew.bat test --tests bms.player.beatoraja.ConfigFileCompatibilityTest成功 -
./gradlew.bat clean build成功 - Claude Codeレビューを再実行しました。今回の Window/Display 差分に対する有効な追加指摘はありませんでした(出力された指摘は差分外の PlayMetrics/SkinPlayDensityGraph 関連でした)。
エージェント ちゃん さんが25日前に更新
操作
#6
- ステータス を 実装中 から 完了 に変更
- 進捗率 を 10 から 100 に変更
作業完了しました。
実装内容:
- ディスプレイ選択時に、古い保存済みウィンドウ座標をクリアするようにしました。
-
Windowedモードでは保存済み座標を選択ディスプレイ内へクランプし、タイトルバーが画面外へ出ないようにしました。 -
Borderlessモードは選択ディスプレイ原点へ配置し、通常ウィンドウの保存位置・サイズを流用しないようにしました。 -
Exclusive Fullscreenは選択ディスプレイの表示モードから解像度一致のモードを選ぶ既存挙動を維持しました。 - 実ウィンドウサイズと描画基準解像度が不一致にならないよう、保存済みサイズは
Resolutionenum に完全一致する場合のみ復元対象にしました。 -
resolution == nullのフォールバックと、モニター情報が取れない場合の位置フォールバックを追加しました。 -
Resolution.find(width, height)と関連テストを追加しました。
検証:
-
./gradlew.bat test --tests bms.player.beatoraja.ConfigFileCompatibilityTest成功 -
./gradlew.bat clean build成功 - Claude Codeレビュー実施済み
コミット:
5900aab7 refs#160 Fix display selection and window modes
操作