2011-12-31 53 views
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; 
} 

該示例描繪了直接添加到舞臺上的組,但不是由添加到舞臺的自定義集合包裝的組。我怎樣才能使這個工作和上述有什麼不對?

我一直在使用valac --pkg clutter-1.0 above_code_example.vala在Ubuntu 11.10上工作。

回答

1

這個答案來自gnome.irc的#clutter room的buz。 問題是分配函數丟失覆蓋。