用cairo创建一个GTK + Cellrenderer

时间:2012-06-25 19:50:57

标签: gtk vala

现在这已经让我至少困扰了几天(可悲的是,晚上)。我想在Gtk +中写一个相当容易的cellrenderer。由于我只是绘制文本(加上cairo的添加),我从Gtk.CellRendererText(它是Vala + Gtk3顺便说一句)继承。 我在这里做了一个小例子:

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();
    }
}

所以我认为这会给树视图中的每个条目在左上角一个黑盒子,但事实上它只画了一次盒子。这个例子并没有说明这一点,但也不可能将盒子在同一位置抽出三次(我用不同的代码试过了)。

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

0 个答案:

没有答案