Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3131569
  • 博文数量: 117
  • 博客积分: 10003
  • 博客等级: 上将
  • 技术积分: 5405
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-23 09:34
文章分类

全部博文(117)

文章存档

2011年(1)

2010年(10)

2009年(69)

2008年(37)

分类: LINUX

2009-06-08 17:02:03

我们在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更新窗口,可以借鉴。
阅读(5280) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~