这已经困扰了我至少几天(不幸的是,还有几个晚上)。我想在 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();
}
}
所以我认为这会给树视图中的每个条目在左上角一个黑框,但实际上它只绘制了一次框。这个例子并没有说清楚,但是盒子也不可能在同一位置绘制三次(我已经用一些不同的代码尝试过)。
那么,有谁知道如何在这里达到预期的效果?