在GtkDrawingArea draw_callback之外访问开罗上下文

时间:2016-12-30 19:05:33

标签: gtk cairo

是否可以访问和更改GtkDrawingArea之外的draw_callback上下文?如果是的话,如果你提供一个简短的例子(任何语言)或者指出我应该看的地方,我会非常高兴。到目前为止我发现的所有例子都在回调中,这就是为什么我在质疑这种可能性。

2 个答案:

答案 0 :(得分:3)

在GTK + 2中,通过使用GDK和Cairo交互从GdkWindow获取Cairo上下文,这当然是可能的。在GTK + 3中,你可能会问这个问题,你仍然可以通过thisthis来实现这一目标。

这听起来像是XY问题的经典表现。通过GTK + 3的开罗互动,您现在可以just queue a draw signal for only the specific clip region you want。只需一般性地编写绘制回调并仅绘制剪切区域中的必要内容。

我希望文档足够,但如果没有,请告诉我。我现在没有时间准备一个例子。

答案 1 :(得分:2)

迟到的回应有点奇怪,但我遇到了类似的问题,所以这是我的两分钱的后验。

您通常不想在::draw回调之外向DrawingArea的上下文发出开罗命令。同时,您通常希望在::draw处理程序之外绘制内容(例如,长时间运行的绘图计算)。如果这是你的情况,那么你应该创建一个额外的开罗上下文(一个屏幕外的上下文)并绘制到那个(如果你正在做长期运行的话,可能在另一个线程中)。然后,在::draw处理程序内部使用该屏幕外上下文作为表面(希望我的术语在上下文,表面,绘画,绘图方面是正确的,但你明白了)。

这方面的好例子是custom drawing上的GTK +文档,请查看draw_cb函数。