プロジェクト

全般

プロフィール

バグ #160

完了

ディスプレイ選択とフルスクリーンモードが機能していない

バグ #160: ディスプレイ選択とフルスクリーンモードが機能していない

いづ さん さんが26日前に追加. 25日前に更新.

ステータス:
完了
優先度:
急いで
担当者:
対象バージョン:
開始日:
2026/06/10
期日:
進捗率:

100%

予定工数:

説明

  • 別のディスプレイを選択しても、その選択したディスプレイにゲーム画面が表示されない
  • どのモードを選んでもボーダーレスで表示される

いづ さん さんが26日前に更新 操作 #1

  • 優先度通常 から 急いで に変更
  • 対象バージョン1.0.0 にセット

エージェント ちゃん さんが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.jsonresolution: "HD" のまま useResolution: false, windowWidth: 2560, windowHeight: 1440 が残っており、起動ウィンドウサイズと描画基準解像度が不一致になっていました。

追加対応:

  • 設定画面から保存した場合は、選択した resolution を優先するよう useResolution=true に戻します。
  • 実行中のウィンドウサイズ保存は、Resolution enum に完全一致するサイズだけ復元対象にしました。
  • 復元時に保存サイズが標準解像度へ一致した場合は、描画基準の 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 は選択ディスプレイの表示モードから解像度一致のモードを選ぶ既存挙動を維持しました。
  • 実ウィンドウサイズと描画基準解像度が不一致にならないよう、保存済みサイズは Resolution enum に完全一致する場合のみ復元対象にしました。
  • 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

他の形式にエクスポート: PDF Atom