+struct _Drawing_t {
+ GtkWidget *Drawing_Area_V;
+ GdkPixmap *Pixmap;
+
+ gint height, width, depth;
+
+};
+
+/* Function responsible for updating the exposed area.
+ * It must call processTrace() to ask for this update.
+ */
+void Drawing_Data_Request(Drawing_t *Drawing,
+ GdkPixmap *Pixmap,
+ gint x, gint y,
+ gint width,
+ gint height)
+{
+ if(width < 0) return ;
+ if(height < 0) return ;
+
+ gdk_draw_rectangle (Pixmap,
+ Drawing->Drawing_Area_V->style->white_gc,
+ TRUE,
+ x, y,
+ width, // do not overlap
+ height);
+
+ Drawing_draw_line(Drawing, Pixmap, 10, 10, 50, 10,
+ Drawing->Drawing_Area_V->style->black_gc);
+
+
+}
+
+/* Callbacks */
+
+
+/* Create a new backing pixmap of the appropriate size */
+static gboolean
+configure_event( GtkWidget *widget, GdkEventConfigure *event,
+ gpointer user_data)
+{
+ Drawing_t *Drawing = (Drawing_t*)user_data;
+
+ GdkPixmap *Pixmap = gdk_pixmap_new(widget->window,
+ widget->allocation.width,
+ widget->allocation.height,
+ -1);
+
+ if(Drawing->Pixmap == NULL)
+ {
+ Drawing->Pixmap = gdk_pixmap_new(widget->window,
+ widget->allocation.width,
+ widget->allocation.height,
+ -1);
+ Drawing->width = widget->allocation.width;
+ Drawing->height = widget->allocation.height;
+
+ /* Initial data request */
+ Drawing_Data_Request(Drawing, Drawing->Pixmap, 0, 0,
+ widget->allocation.width,
+ widget->allocation.height);
+
+ }
+// /* Draw empty background */
+// gdk_draw_rectangle (Pixmap,
+// widget->style->black_gc,
+// TRUE,
+// 0, 0,
+// widget->allocation.width,
+// widget->allocation.height);
+
+ /* Copy old data to new pixmap */
+ gdk_draw_drawable (Pixmap,
+ widget->style->white_gc,
+ Drawing->Pixmap,
+ 0, 0,
+ 0, 0,
+ -1, -1);