これは、少なくとも数日間(そして悲しいことに、夜)私を悩ませています。Gtk+ でかなり簡単な cellrenderer を書きたいです。私はテキストを描画しているだけなので(さらにcairoで追加)、Gtk.CellRendererText(Vala + Gtk3 btwです)からサブクラス化しています。ここで最小限の例を作成しました:
class CellRendererTest : CellRendererText{
public override void render (Cairo.Context ctx, Widget tree,
Gdk.Rectangle background_area, Gdk.Rectangle cell_area,
CellRendererState flags) {
base.render (ctx, tree, background_area, cell_area, flags);
ctx.rectangle(0, 0, 20, 20);
ctx.fill();
}
}
class Test : Window{
public Test(){
TreeStore store = new TreeStore(1, typeof(string));
TreeView tv = new TreeView.with_model(store);
tv.insert_column_with_attributes (-1, "Foo",
new CellRendererTest(), "text", 0);
TreeIter iter;
store.append (out iter, null);
store.set (iter, 0, "first", -1);
store.append(out iter, null);
store.set (iter, 0, "second", -1);
store.append (out iter, null);
store.set (iter, 0, "third", -1);
add(tv);
this.show_all();
}
static void main(string[] args){
Gtk.init(ref args);
new Test();
Gtk.main();
}
}
したがって、これにより、ツリービューのすべてのエントリが左上隅に黒いボックスになると思いましたが、実際には、ボックスは一度しか描画されません。この例ではこれが明確ではありませんが、ボックスが同じ位置に 3 回描画されることもありません (別のコードで試しました)。
それで、ここで望ましい効果を達成する方法を知っている人はいますか?