初ウインドウ

fltk でダブルバッファリング & 線を引くってのをやってみました。

#include 
#include 
#include 
#include 
#include 

class TestWindow : public Fl_Double_Window {
    void draw() {
        fl_color( FL_WHITE );
        fl_line( 0, 0, w(), h() );
    }
public:
    TestWindow( int x, int y, int w,int h, const char *l )
        : Fl_Double_Window( x, y, w, h, l ) {
        resizable( this );
    }
};

int main(int argc, const char* argv[]) {
    if ( !Fl::visual( FL_DOUBLE | FL_INDEX ) ) {
        printf( "Xdbe not supported, faking double buffer with pixmaps.\n" );
    }
    TestWindow win( 0, 0, 640, 480, "fltk Canvas" );
    win.end();
    win.show();
    return Fl::run();
}

fltk というのは、OpenGL の思想を GUI に発展させたものという印象を受けました。「カレント」や「スタック」が沢山あるのです。例えば、あるウインドウのコンストラクタを呼んだら、そのウインドウがカレントになり、以降のWidgetは全てそのウインドウの子になります。これは、GUI プログラムで煩雑になりがちな親子関係の接続を楽にしています。ただ、もちろんその弊害もありますが...。そして、そのウインドウをカレントではなくするのであれば、end() を呼び出します。この時、カレントがなくなるというよりも、カレントスタックからそのウインドウがポップされるといったほうが正しいです。ウインドウの中にウインドウがある場合は、end() を2回呼ぶわけです。
同様のことが基本的な描画関数にも言えます。2D 描画関数を見れば明らかですが、まんま GL です。こういったライブラリによくありがちなGDIがありません。全くもって 3D プログラマーと親和性の高い GUI であるといえます。個人的には、notus までのつなぎと考えていたのですが、手抜きでさくさく GUI を作るには、確かに最高かも。もそっと遊んで見ます。