Clutter/cairo をいじっていて、四角形を描こうとしています。ただし、set_source_rgb
長方形を描画するように指示するかどうかに関係なく、キャンバス全体をソースで自動的にペイントしているように見えます (つまり、ctx.rectangle()
線を削除してもctx.fill()
、長方形は引き続き描画されます)。どうしてこれなの?そして、set_source_rgb ではなく四角形でペイントするにはどうすればよいでしょうか?
public class AnActor : Clutter.Actor {
public Clutter.Canvas canvas;
public AnActor() {
canvas = new Clutter.Canvas();
canvas.set_size(300,300);
this.set_content( canvas );
this.set_size(300,300);
//Connect to the draw signal.
canvas.draw.connect(drawme);
}
private bool drawme( Cairo.Context ctx, int w, int h) {
stdout.printf("Just to test this ran at all: %d\n", w);
ctx.scale(w,h);
ctx.set_source_rgb(0,0,0);
//Why is this rectangle drawn even when I remove these lines?
ctx.rectangle(0,0,200,200);
ctx.fill();
ctx.paint();
return true;
}
}
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();
stage.destroy.connect(Clutter.main_quit);
//Make my custom Actor:
var a = new AnActor();
stage.add_child(a);
a.canvas.invalidate();
stage.show_all();
Clutter.main();
return 0;
}