Computing Junk RSSフィード

2007-03-16 このエントリーを含むブックマーク

ナナオのカラーユニバーサルデザイン対応ワイドモニターが欲しい!

「カラーユニバーサル」という言葉は初めて聞きましたが、不特定多数の人向けにウェブサイトを作るなら覚えておかなければいけませんね…

2006-11-15

[]expose-eventハンドラを書くときに知っておくべきこと

GtkDrawingArea等を使ってカスタムwidgetを作る場合、expose-eventハンドラを実装しなければならない。expose-eventハンドラの仕事は当然、露出する領域に描画することだが、最初の処理として思いつくのは領域全体を背景色で塗りつぶすことだろう。また、少し知識があればダブルバッファ*1を確保したくなる。

GTK+にはそのための関数gdk_window_begin_paint_regionがあるが、実はexpose-eventハンドラが呼ばれた時点でこのgdk_window_begin_paint_regionは呼び出し済みとなっている。つまりハンドラ内で描画領域を塗りつぶしたりgdk_window_begin_paint_regionを呼び出したりする必要はない。

また、ダブルバッファを表示するための関数gdk_window_end_paintもexpose-eventハンドラ終了後に自動的に呼ばれる。

*1:画面のちらつきを抑えるため、メモリ上に仮の描画領域を確保し、描画が終了した時点で表示を切り替えること

2006-10-20

[]GtkTreeViewの行の属性を変えるには

GtkTreeViewにおいて、行単位で属性(フォントや背景色など)を変えたい場合は、まずGtkListStoreなどの結び付けられたモデルの方にフィールドを追加し、属性となる値を格納する。そしてそのフィールドを各GtkTreeViewColumnのGtkCellRendererに接続してやる。

例(背景色を設定する):

enum {
	TREE_TEXT,
	TREE_BG,
	TREE_BG_SET,
	TREE_N_FIELD
};
GtkCellRenderer *renderer;
GtkTreeViewColumn *column;
renderer = gtk_cell_renderer_text_new();
column = gtk_tree_view_column_new_with_attributes(title, renderer, "text", TREE_TEXT, "background", TREE_BG, "background-set", TREE_BG_SET, NULL);
gtk_tree_view_append_column(view, column);

2006-09-29

[]GTK+マウスポインタ(マウスカーソル)を消すには

マウスポインタを消すという明示的なAPIはないので、透明なカスタムマウスポインタを指定する。

例:

GdkCursor *transparent_cursor;
gchar blank_bits[32] = {[0 ... 31] = 0};
GdkPixmap *blank_bitmap;
GdkColor color_black = {0, 0, 0, 0};

blank_bitmap = gdk_bitmap_create_from_data(NULL, blank_bits, 16, 16);
transparent_cursor = gdk_cursor_new_from_pixmap(blank_bitmap, blank_bitmap, &color_black, &color_black, 8, 8);
gdk_pixmap_unref(blank_bitmap);
gdk_window_set_cursor(window, transparent_cursor);

[]GtkTextView上でのマウスポインタ(マウスカーソル)の形を変えるには

一般にマウスポインタ(マウスカーソル)の形を変えるには、『GTK+でマウスポインタ(マウスカーソル)を消すには』で示したようにgdk_window_set_cursorを使用する。gdk_window_set_cursor引数にウィンドウ(GtkWindowへのポインタ)を取るが、ここで渡すべき値は、一般的にはGtkWidgetのメンバのwindowである。

例:

gdk_window_set_cursor(GTK_WIDGET(some_dialog)->window, cursor);

しかしGtkTextViewは例外で、gtk_text_view_get_windowという特別な関数を使って適切なGtkWindowを取得しなければならない。下に例を示す。

window = gtk_text_view_get_window(text_view, GTK_TEXT_WINDOW_TEXT);
gdk_window_set_cursor(window, cursor);