CrystFEL 付属の HDF 画像ビューア hdfsee の使い勝手がイマイチなので、いろいろ改造している。素直な GTK アプリケーションなので、触るべきところは自明だが、一応メモ:
ソースコード
ソースコードは hdfsee.c, hdfsee-render.c, dw-hdfsee.c と同名のヘッダファイル。hdfsee.c にエントリポイントがあり、コマンドライン引数の解釈など。dw-hdfsee.c が GUI やロジックの本体。hdfsee-render.c は回折画像のレンダラ。スポットや解像度リングは dw-hdfsee.c の担当。
デバッグ
デフォルトで作られる Makefile は初めから -g フラグを立てているので、そのままデバッグできる。src/hdfsee はスクリプトであり、本体は src/.lib/hdfsee である。gdb でデバッグするときは、これを指定しよう。
全体の構造
MDI で複数の画像を開ける。DisplayWindow構造体が1つのビュー・ウィンドウに対応。データと表示設定を保持している。
例えば Intensity Boost の値は boostint に保存されている。これらの値をいじったあと、displaywindow_update(dw) とすれば画面が更新される。
描画の流れ
cairo_surface_t *surf バッファが repaint イベントで、画面に bitblt される。このバッファを更新するのが、draw_stuff 関数。 回折画像はパネルごとに GdkPixbuf **pixbufs (n_pixbufs (=検出器のタイル数)分の配列へのポインタ)に入っていて、draw_panel_recangle で .geom ファイルの情報に基づいて適切な位置にレンダリングされる。 draw_stuff では、他にも解像度リング(draw_ring) やスポットなども描かれる。