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