0

ここ数日、Vala について読んでいて、それに飛び込んで、途中で Clutter ウィジェットをいくつか作成することにしました。現在、カスタム アクター サブクラスからプライベート アクターを描画しようとしています。ここに私がこれまでに得たものの単純化されたバージョンがあります。

public class MyContainer : Clutter.Actor, Clutter.Container {
    private Clutter.Group group;

    public MyContainer() {
        group = new Clutter.Group();
        group.set_parent(this);
    }

    public void add_actor(Clutter.Actor actor) {
        group.add_actor(actor);
        actor.show();
        set_size(group.width, group.height);

        actor_added(actor);
        queue_redraw();
    }

    public void foreach(Clutter.Callback callback) {
        group.foreach(callback);
        queue_redraw();
    }

    public override void get_preferred_height(
            float for_width,
            out float min_height_p,
            out float natural_height_p) {
        group.get_preferred_height(
                for_width,
                out min_height_p,
                out natural_height_p);
    }

    public override void get_preferred_width(
            float for_height,
            out float min_width_p,
            out float natural_width_p) {
        group.get_preferred_width(
                for_height,
                out min_width_p,
                out natural_width_p);
    }

    public override void paint() {
        group.paint();
    }

    public void remove_actor(Clutter.Actor actor) {
        group.remove_actor(actor);
        set_size(group.width, group.height);

        actor_removed(actor);
        queue_redraw();
    }

    public void sort_depth_order() {
        group.sort_depth_order();
        queue_redraw();
    }
}

int main(string [] args) {
    // Start clutter.
    var result = Clutter.init(ref args);
    if (result != Clutter.InitError.SUCCESS) {
        stderr.printf("Error: %s\n", result.to_string());
        return 1;
    }
    var stage = Clutter.Stage.get_default();

    // Build a MyCollection object.
    var myc = new MyContainer();
    myc.x = 100;
    myc.y = 100;
    var r1 = new Clutter.Rectangle();
    r1.width = 50;
    r1.height = 50;
    r1.color = Clutter.Color.from_string("rgb(255, 0, 0)");
    var t1 = new Clutter.Text();
    t1.text = "The red square.";
    t1.y = r1.height;

    // Build a Group object similar to the previous.
    var group = new Clutter.Group();
    group.x = 300;
    group.y = 100;
    var r2 = new Clutter.Rectangle();
    r2.width = 50;
    r2.height = 50;
    r2.color = Clutter.Color.from_string("rgb(255, 0, 0)");
    var t2 = new Clutter.Text();
    t2.text = "The red square.";
    t2.y = r2.height;

    // Display.
    myc.add_actor(r1);
    myc.add_actor(t1);
    group.add_actor(r2);
    group.add_actor(t2);
    stage.add_actor(myc);
    stage.add_actor(group);
    stage.show_all();

    Clutter.main();
    return 0;
}

この例では、ステージに直接追加されたグループが描画されますが、ステージに追加されたカスタム コレクションによってラップされたグループは描画されません。これを機能させるにはどうすればよいですか?上記の何が問題なのですか?

でubuntu 11.10に取り組んできましたvalac --pkg clutter-1.0 above_code_example.vala

4

1 に答える 1

1

この回答は、gnome.irc の #clutter room の buz からのものです。問題は、割り当て関数のオーバーライドが欠落していることです。

于 2012-01-01T22:52:18.920 に答える