为什么Cairo.set_source_rgb绘制整个画布?

时间:2013-04-15 03:53:13

标签: cairo vala clutter

我正在玩Clutter / cairo,我正在尝试绘制一个矩形;然而,看起来set_source_rgb会自动使用其源绘制整个画布,无论我是否告诉它绘制一个矩形(即使我删除了ctx.rectangle()和{{ 1}}行,仍然绘制矩形)。为什么是这样?我需要做些什么来让矩形进行绘画而不是set_source_rgb?

ctx.fill()

1 个答案:

答案 0 :(得分:3)

在我看来,在drawme方法中实际上存在一些误解:

ctx.scale(w,h);

根据你以后的做法判断,看起来你认为这意味着你想要扩展你正在做的事情,这样你就可以画出0到300,300之间的东西。你实际在做的是向另一个方向走......如果你在这里保留这一行,你需要在0,0和1,1之间绘制。

ctx.rectangle(0,0,200,200);
ctx.fill();

在这里,您需要一个从原点到200 *画布宽度和高度的矩形。如果将其更改为ctx.rectangle (0, 0, 0.67, 0.67),结果应该更接近您想要的结果。或者,正如我之前提到的,你可以摆脱ctx.scale(w,h);电话。

ctx.paint();

查看cairo_paint的文档:“绘图操作符,用于在当前剪辑区域内的任何位置绘制当前源。”你想要的是填充当前的路径,这是cairo_fill所做的。由于您尚未定义剪辑区域,因此整个上下文都会被填充。

或者,您可以使用cairo_clip创建剪辑区域;只需在ctx.clip ();之前添加ctx.paint ();即可。你可能想要使用cairo_save和cairo_restore - cairo_clip的文档解释了它。