static gboolean canvas_expose_event (GtkWidget *widget, GdkEventExpose *event) { cairo_t *cr; GList *iter; GtkAllocation allocation; cr = gdk_cairo_create (gtk_widget_get_window (widget)); gdk_cairo_region (cr, event->region); cairo_clip (cr); gtk_widget_get_allocation (widget, &allocation); cairo_set_source_rgb (cr, 1, 1, 1); cairo_rectangle (cr, 0, 0, allocation.width, allocation.height); cairo_fill (cr); for (iter = canvas_items; iter; iter = iter->next) canvas_item_draw (iter->data, cr, FALSE); if (drop_item) canvas_item_draw (drop_item, cr, TRUE); cairo_destroy (cr); return TRUE; }
static gboolean canvas_draw (GtkWidget *widget, cairo_t *cr) { GList *iter; cairo_set_source_rgb (cr, 1, 1, 1); cairo_paint (cr); for (iter = canvas_items; iter; iter = iter->next) canvas_item_draw (iter->data, cr, FALSE); if (drop_item) canvas_item_draw (drop_item, cr, TRUE); return TRUE; }