TOP > テキスト目次 > SFML のサンプルとして、画像ビューワーを作った。



◆◆ したこと: ◆◆

        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 にダウングレードすると、全く同じ書き方なのですが、挙動が安定してくれます。
        改造の仕方がまずいのか、どうなのか。
        
        
        そういうわけで、
        どんな顔して、これを公開すればいいのか、わからない状態です。
        あと、すんごい適当に作ったので、まずいコーディングはいくらでもあるかも。
        画像ビューワーとしては、自分好みの仕様なので、使っていくつもりですよー。
        (こんなのが欲しかった! 正直、こんなのが欲しかった!)
        
        見てみます?
        ソース