[戻る]

GtkIconViewの文字表示色を変更する

アイコンの文字表示色を変更します。
GTK+ 2.12以降が必要です。

文字表示色変更の概要とサンプルコード

文字表示色を変更するにはレンダラに対して表示色を指定します。
GtkTreeViewではgtk_tree_view_column_set_cell_data_func()で表示データ加工用の関数を登録し、その関数内でデータ加工や表示色変更を行います。
これと同じことをGtkIconView用の方法で行います。

まずレンダラを取得します。GtkIconViewGtkCellLayoutインターフェイスを実装しているので、そのインターフェイス関数を使用します。
gtk_cell_layout_get_cells()を呼び出すとレンダラのリストを返すので、その中から目的のレンダラ、今回はGtkCellRendererTextを探しだします。
GtkCellRendererTextが見つかったらgtk_cell_layout_set_cell_data_func()で表示データ加工用の関数を登録します。
ここまでできたら後は登録した関数で表示色の設定を行えば文字表示色を変更することができます。

サンプルです。gtkiconview_color.c
文字コードはUTF-8です。
[TOP]

gtk_cell_layout_get_cells()

サンプルではcreate_icon_view()という関数内でgtk_cell_layout_get_cells()を呼び出しています。
GList* gtk_cell_layout_get_cells ( GtkCellLayout *cell_layout );
この関数にGtkIconViewを渡すとレンダラのリストが返されます。
リストからGtkCellRendererText型のレンダラを見つけるには、GTK_OBJECT_TYPEでリストデータのオプジェクト型を求め、この値がGTK_TYPE_CELL_RENDERER_TEXTと同じかどうかをチェックします。
GtkCellRendererTextが見つかったらgtk_cell_layout_set_cell_data_func()でデータ加工用関数を登録します。
[TOP]

gtk_cell_layout_set_cell_data_func()

void gtk_cell_layout_set_cell_data_func ( GtkCellLayout         *cell_layout,
                                          GtkCellRenderer       *cell,
                                          GtkCellLayoutDataFunc  func,
                                          gpointer               func_data,
                                          GDestroyNotify         destroy );
cell_layoutGtkIconViewを、cellに見付けたレンダラをセットします。
funcが表示データ加工用関数です。
サンプルでは他に必要なデータはないのでfunc_dataNULLdestroyNULLにして呼び出しています。
[TOP]

GtkCellLayoutDataFunc

void (*GtkCellLayoutDataFunc) ( GtkCellLayout   *cell_layout,
                                GtkCellRenderer *cell
                                GtkTreeModel    *tree_model,
                                GtkTreeIter     *iter,
                                gpointer         data );
ここまできたら後はレンダラに表示色を指定するだけです。
サンプルではカラフルになるように表示順で色が変るようにしています。
g_object_set()でレンダラのプロパティforeground-gdkbackground-gdkに変更する色をGdkColorで指定します。
また、xalignを指定してセンタリングするようにしています。

typedef struct {
    guint32  pixel;
    guint16  red;
    guint16  green;
    guint16  blue;
} GdkColor;
[TOP]
[戻る]