最近、BitfighterをGLUTからSDLに移植しました。これを行うことには多くのメリットがありましたが、特にウィンドウ管理の分野ではいくつかの欠点もありました。SDLを使用して最大化されたウィンドウを処理する
Bitfighterは、固定アスペクト比のウィンドウ(800x600ピクセル)で動作します。ユーザーは自分の望む任意のサイズのウィンドウを作成できますが、サイズ変更イベントをキャプチャして、要求されたサイズを調整してウィンドウが正しい比率を維持できるようにします(SDL_SetVideoModeを使用)。
(次の問題は、Windowsに適用されますが、まだ他のプラットフォーム上でテストされていません。私は、以下の記述私は、プラットフォームに依存しないソリューションを探していますが、Windowsに特に言及。)
通常、このタイトルバーをダブルクリックするか、最大化ボタンを使用してウィンドウを最大化する場合を除き、素晴らしい結果が得られます。その場合、ウィンドウのサイズは、ウィンドウのサイズ(ウィンドウの装飾のためにいくつかのピクセルを引いたもの)に近似したウィンドウサイズで呼び出されます。残念ながら、ウィンドウが最大化されると、SDL_SetVideoModeは効果がありません(最大化されたウィンドウのサイズを変更できるGLUTとは異なります)。さらに、その後のSDL_GetVideoInfoの呼び出しでは、ウィンドウの実際の現在のサイズではなく、要求されたサイズがレポートされるため、サイズ変更が試行されたかどうかを確認することは困難です。
私は(好みの降順で)次のいずれかを実行するためのプラットフォームに依存しない方法を探しています:
- それは
- 最大化されています後に窓がとても最大化されたときを検出ウィンドウのサイズを変更サイズを変更できないことを知っていれば、少なくともビデオを中心に調整することができます
- ウィンドウが最大化されないようにします(ウィンドウタイトルバーのダブルクリック、最大化ボタンの使用、ウィンドウを画面上部)
BitfighterはC++で書かれており、最新の正式リリースのSDLを使用しています。
SDL 1.3 HEADを試してみませんか? – genpfault
かもしれません。それはどれほど安定しているかによって異なります。私たちは数週間でリリースしたいと考えています。 – Watusimoto
コードを調べると、SDL 2.0に移行したようです。これで問題は解決しましたか? – faffy