Ah, I just found out the solution is trivial.

GdkPixmap *pixmap;

/* Create a new backing pixmap of the appropriate size */
static gint
configure_event (GtkWidget *widget, GdkEventConfigure *event)
{
  cairo_t *cr;

 if (pixmap)
    gdk_pixmap_unref(pixmap);

  pixmap = gdk_pixmap_new(widget->window,
                          widget->allocation.width,
                          widget->allocation.height,
                          -1);

  cr = gdk_cairo_create (pixmap);
  /* do your drawing here */
  cairo_destroy (cr);

  return TRUE;
}


static gint
expose_event_cb (GtkWidget *widget, GdkEventExpose *event)
{
  /* copy relevant part of pixmap back to screen */
  gdk_draw_pixmap(widget->window,
                  widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
                  pixmap,
                  event->area.x, event->area.y,
                  event->area.x, event->area.y,
                  event->area.width, event->area.height);

  return FALSE;
}
_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list

Reply via email to