首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Howto子类a Clutter.Actor (涉及Cairo/Clutter.Canvas)

Howto子类a Clutter.Actor (涉及Cairo/Clutter.Canvas)
EN

Stack Overflow用户
提问于 2013-04-10 16:34:45
回答 1查看 615关注 0票数 2

有没有人能帮我让它运行起来?我的目标是成为一个定制的演员。(我最近几天才开始使用Vala,而Clutter也是个谜。)

drawme方法正在运行(当invalidate被调用时),但似乎没有发生任何绘制(通过Cairo上下文)。

ETA:我在构造函数中添加了一行来显示fix - this.set_size。

代码语言:javascript
复制
/*

Working from the sample code at:
https://developer.gnome.org/clutter/stable/ClutterCanvas.html

*/

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

        //Rect doesn't draw.
        //ctx.rectangle(0,0,200,200);
        //ctx.fill();

        //paint doesn't draw.
        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();

    //This is dodgy:
    stage.add_child(a);


    //This works:
    var r1 = new Clutter.Rectangle();
    r1.width = 50;
    r1.height = 50;
    r1.color = Clutter.Color.from_string("rgb(255, 0, 0)");
    stage.add_child(r1);

    a.canvas.invalidate();

    stage.show_all();

    Clutter.main();
    return 0;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-10 18:19:44

您还需要为Actor分配一个大小,而不仅仅是画布。

画布的大小与画布分配到的执行元的大小无关,因为您可以将同一画布实例分配给多个执行元。

如果你打电话给:

代码语言:javascript
复制
a.set_size(300, 300)

您将看到参与者和绘图结果。

https://git.gnome.org/browse/clutter/tree/examples/canvas.c还附带了各种示例,例如如何使用Cairo:https://git.gnome.org/browse/clutter/tree/examples/rounded-rectangle.c制作圆角矩形,或者如何制作一个简单的时钟: Clutter

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15920816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档