2011-12-30 2 views
5

最近、BitfighterをGLUTからSDLに移植しました。これを行うことには多くのメリットがありましたが、特にウィンドウ管理の分野ではいくつかの欠点もありました。SDLを使用して最大化されたウィンドウを処理する

Bitfighterは、固定アスペクト比のウィンドウ(800x600ピクセル)で動作します。ユーザーは自分の望む任意のサイズのウィンドウを作成できますが、サイズ変更イベントをキャプチャして、要求されたサイズを調整してウィンドウが正しい比率を維持できるようにします(SDL_SetVideoModeを使用)。

(次の問題は、Windowsに適用されますが、まだ他のプラットフォーム上でテストされていません。私は、以下の記述私は、プラットフォームに依存しないソリューションを探していますが、Windowsに特に言及。)

通常、このタイトルバーをダブルクリックするか、最大化ボタンを使用してウィンドウを最大化する場合を除き、素晴らしい結果が得られます。その場合、ウィンドウのサイズは、ウィンドウのサイズ(ウィンドウの装飾のためにいくつかのピクセルを引いたもの)に近似したウィンドウサイズで呼び出されます。残念ながら、ウィンドウが最大化されると、SDL_SetVideoModeは効果がありません(最大化されたウィンドウのサイズを変更できるGLUTとは異なります)。さらに、その後のSDL_GetVideoInfoの呼び出しでは、ウィンドウの実際の現在のサイズではなく、要求されたサイズがレポートされるため、サイズ変更が試行されたかどうかを確認することは困難です。

私は(好みの降順で)次のいずれかを実行するためのプラットフォームに依存しない方法を探しています:

  1. それは
  2. 最大化されています後に窓がとても最大化されたときを検出ウィンドウのサイズを変更サイズを変更できないことを知っていれば、少なくともビデオを中心に調整することができます
  3. ウィンドウが最大化されないようにします(ウィンドウタイトルバーのダブルクリック、最大化ボタンの使用、ウィンドウを画面上部)

BitfighterはC++で書かれており、最新の正式リリースのSDLを使用しています。

+0

SDL 1.3 HEADを試してみませんか? – genpfault

+0

かもしれません。それはどれほど安定しているかによって異なります。私たちは数週間でリリースしたいと考えています。 – Watusimoto

+1

コードを調べると、SDL 2.0に移行したようです。これで問題は解決しましたか? – faffy

答えて

0

以前はGLUTを使用していたので、OpenGLをSDLと併用すると仮定します。私はあなたがビデオは、特定のサイズを持つようにしたい場合は、ポイント2 exept、その問題のいずれかの解決策を知っていることがあるようにちょうどSDL-ウィンドウを残し、そして右のサイズで

glViewport(0, 0, width, height); 

を呼び出すことはありません。適切な比率。 このソリューションでは、ウィンドウに黒い境界線が残っていますが、必要なだけ多く表示されます。

SDL 2.0は、ウィンドウ管理に優れたAPIを提供します)あなたが既に持っているようであるSDL 2.0(へ)

1

移行を、(最初の2つの引数で、あなたはまた、ウィンドウ内のビューポートの位置を設定することができます) (それは実際に1つを提供します)。 SDL 2.0(特にLinux側)のWindows管理にはまだ多くのバグがありますが、1.2日以来大幅に改善されています。

関連する問題