SFML のサンプルとして、画像ビューワーを作った。
のですが、サンプルとしては、いいのかな、これは。
問題点が2つほど。
・SFML2.0 を使っている。チュートリアルは 2.1 なのに。
・元の SFML を改造して使っている。
2.1 だと、なんだかウィンドウの挙動が変なような気がするのです。
ウィンドウとしての、期待通りの振る舞いは、こうですよね:
他のウィンドウが部分的に上に被さっている状態で、
下のウィンドウのクライアント領域をクリックすると、
フォーカスが下のウィンドウに移り、最前面に出てくる。
ところが、SFML製ウィンドウの場合は、こうなります:
他のウィンドウが部分的に上に被さっている状態で、
下のウィンドウ(SFML製)のクライアント領域をクリックすると、
上のウィンドウのフォーカスが失われるだけ。
下のウィンドウ(SFML製)の Z位置は変わらない(最前面に出てこない)。
コードの書き方がおかしいのかと、何度も見直したのですが、
公式サイトのチュートリアルのサンプルをコピペして、上記の挙動になるのです。
全く同じコードが、SFML2.0 を使ってビルドすると、問題がおきない。
「期待通りの」ウィンドウの挙動になってくれる。
ということは、こういう仕様なのかな?
公式の掲示板などを探してみたのですが、それらしい話は見つかりませんでした。
誰も気にしてないのか、うちの環境がおかしいだけなのか? (Win7 + VC++2010)
ちなみに「マインドル」は、ずっと 2.0 で作ってる(た)ので、この問題とは縁がありませんでした。
一応、イベントループの中に、こんなふうに書いておけば誤魔化せるのですけれど、
---------------------------------------------------------------------
// マウス押下
if (event.type == sf::Event::MouseButtonPressed) {
// ウィンドウが裏のままだったら表に出す。
if ( window.getSystemHandle() != GetForegroundWindow() ) {
SetForegroundWindow( window.getSystemHandle() );
}
}
---------------------------------------------------------------------
いかにも、絆創膏を貼りました、という感じですね。
それと、画像のビューワーなので、ウィンドウに画像ファイルをドロップできるようになってます。
SFML にはドロップを検知するイベントがないので、
ソースを改変して、ファイルドロップのイベントを追加したのです。
その改造箇所も、2.1 だと、動作が不安定。
2.0 にダウングレードすると、全く同じ書き方なのですが、挙動が安定してくれます。
改造の仕方がまずいのか、どうなのか。
そういうわけで、
どんな顔して、これを公開すればいいのか、わからない状態です。
あと、すんごい適当に作ったので、まずいコーディングはいくらでもあるかも。
画像ビューワーとしては、自分好みの仕様なので、使っていくつもりですよー。
(こんなのが欲しかった! 正直、こんなのが欲しかった!)
見てみます?
ソース
|