我们在gtk中,利用cairo实现动画,往往是这样实现的。
cairo_surface_t *image;
gboolean timer = TRUE;
static gboolean
on_expose_event(GtkWidget *widget,
GdkEventExpose *event,
gpointer data)
{
cairo_t *cr;
cr = gdk_cairo_create(widget->window);
.....
cairo_destroy(cr);
return FALSE;
}
static gboolean
time_handler (GtkWidget *widget)
{
if (widget->window == NULL) return FALSE;
if (!timer) return FALSE;
gtk_widget_queue_draw(widget);
return TRUE;
}
根据我的测试发现,这种方法实现动画,会导致gtk窗口自身的刷新,从而更新了很多不必要的地方,造成性能低下。
这里,我推荐采用另外一种方法,在gtk窗口中使用cairo实现动画。
其先用cairo写到pixmap上,然后使用gdk_draw_drawable更新窗口,可以借鉴。
阅读(5368) | 评论(0) | 转发(0) |