1

这已经困扰了我至少几天(不幸的是,还有几个晚上)。我想在 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();
    }
}

所以我认为这会给树视图中的每个条目在左上角一个黑框,但实际上它只绘制了一次框。这个例子并没有说清楚,但是盒子也不可能在同一位置绘制三次(我已经用一些不同的代码尝试过)。

那么,有谁知道如何在这里达到预期的效果?

4

0 回答 0