+ Drawing_t *Drawing = (Drawing_t*)user_data;
+
+
+ /* First, get the new time interval of the main window */
+ /* we assume (see documentation) that the main window
+ * has updated the time interval before this configure gets
+ * executed.
+ */
+ get_time_window(Drawing->Control_Flow_Data->Parent_Window,
+ &Drawing->Control_Flow_Data->Time_Window);
+
+ /* New Pixmap, size of the configure event */
+ //GdkPixmap *Pixmap = gdk_pixmap_new(widget->window,
+ // widget->allocation.width + SAFETY,
+ // widget->allocation.height + SAFETY,
+ // -1);
+
+ g_critical("drawing configure event");
+ g_critical("New draw size : %i by %i",widget->allocation.width, widget->allocation.height);
+
+
+ if (Drawing->Pixmap)
+ gdk_pixmap_unref(Drawing->Pixmap);
+
+ /* If no old Pixmap present */
+ //if(Drawing->Pixmap == NULL)
+ {
+ Drawing->Pixmap = gdk_pixmap_new(
+ widget->window,
+ widget->allocation.width + SAFETY,
+ widget->allocation.height + SAFETY,
+ //ProcessList_get_height
+ // (GuiControlFlow_get_Process_List(Drawing->Control_Flow_Data)),
+ -1);
+ Drawing->width = widget->allocation.width;
+ Drawing->height = widget->allocation.height;
+
+
+ // Clear the image
+ gdk_draw_rectangle (Drawing->Pixmap,
+ widget->style->white_gc,
+ TRUE,
+ 0, 0,
+ widget->allocation.width+SAFETY,
+ widget->allocation.height+SAFETY);
+
+ //g_info("init data request");
+
+
+ /* Initial data request */
+ // Do not need to ask for data of 1 pixel : not synchronized with
+ // main window time at this moment.
+ drawing_data_request(Drawing, &Drawing->Pixmap, 0, 0,
+ widget->allocation.width,
+ widget->allocation.height);
+
+ Drawing->width = widget->allocation.width;
+ Drawing->height = widget->allocation.height;
+
+ return TRUE;
+
+
+
+ }
+#ifdef NOTUSE
+// /* 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);
+
+ if (Drawing->Pixmap)
+ gdk_pixmap_unref(Drawing->Pixmap);
+
+ Drawing->Pixmap = Pixmap;
+
+ // Clear the bottom part of the image (SAFETY)
+ gdk_draw_rectangle (Pixmap,
+ widget->style->white_gc,
+ TRUE,
+ 0, Drawing->height+SAFETY,
+ Drawing->width+SAFETY, // do not overlap
+ (widget->allocation.height) - Drawing->height);
+
+ // Clear the right part of the image (SAFETY)
+ gdk_draw_rectangle (Pixmap,
+ widget->style->white_gc,
+ TRUE,
+ Drawing->width+SAFETY, 0,
+ (widget->allocation.width) - Drawing->width, // do not overlap
+ Drawing->height+SAFETY);
+
+ /* Clear the backgound for data request, but not SAFETY */
+ gdk_draw_rectangle (Pixmap,
+ Drawing->Drawing_Area_V->style->white_gc,
+ TRUE,
+ Drawing->width + SAFETY, 0,
+ widget->allocation.width - Drawing->width, // do not overlap
+ widget->allocation.height+SAFETY);
+
+ /* Request data for missing space */
+ g_info("missing data request");
+ drawing_data_request(Drawing, &Pixmap, Drawing->width, 0,
+ widget->allocation.width - Drawing->width,
+ widget->allocation.height);
+
+ Drawing->width = widget->allocation.width;
+ Drawing->height = widget->allocation.height;
+
+ return TRUE;
+#endif //NOTUSE
+}
+
+
+/* Redraw the screen from the backing pixmap */
+static gboolean
+expose_event( GtkWidget *widget, GdkEventExpose *event, gpointer user_data )
+{
+ Drawing_t *Drawing = (Drawing_t*)user_data;
+ ControlFlowData *control_flow_data =
+ (ControlFlowData*)g_object_get_data(
+ G_OBJECT(widget),
+ "Control_Flow_Data");
+
+ g_critical("drawing expose event");
+
+ guint x=0;
+ LttTime* Current_Time =
+ guicontrolflow_get_current_time(control_flow_data);
+
+ LttTime window_end = ltt_time_add(control_flow_data->Time_Window.time_width,
+ control_flow_data->Time_Window.start_time);
+
+ convert_time_to_pixels(
+ control_flow_data->Time_Window.start_time,
+ window_end,
+ *Current_Time,
+ widget->allocation.width,
+ &x);
+
+ gdk_draw_pixmap(widget->window,
+ widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
+ Drawing->Pixmap,
+ event->area.x, event->area.y,
+ event->area.x, event->area.y,
+ event->area.width, event->area.height);
+
+ if(x >= event->area.x && x <= event->area.x+event->area.width)
+ {
+ GdkGC *gc = gdk_gc_new(control_flow_data->Drawing->Pixmap);
+ gdk_gc_copy(gc, widget->style->black_gc);
+
+ drawing_draw_line(NULL, widget->window,
+ x, event->area.y,
+ x, event->area.y+event->area.height,
+ gc);
+ gdk_gc_unref(gc);
+ }
+ return FALSE;
+}
+
+/* mouse click */
+static gboolean
+button_press_event( GtkWidget *widget, GdkEventButton *event, gpointer user_data )
+{
+ ControlFlowData *control_flow_data =
+ (ControlFlowData*)g_object_get_data(
+ G_OBJECT(widget),
+ "Control_Flow_Data");
+ Drawing_t *Drawing = control_flow_data->Drawing;
+
+
+ g_critical("click");
+ if(event->button == 1)
+ {
+ LttTime time;
+
+ LttTime window_end = ltt_time_add(control_flow_data->Time_Window.time_width,
+ control_flow_data->Time_Window.start_time);
+
+
+ /* left mouse button click */
+ g_critical("x click is : %f", event->x);
+
+ convert_pixels_to_time(widget->allocation.width, (guint)event->x,
+ &control_flow_data->Time_Window.start_time,
+ &window_end,
+ &time);
+
+ set_current_time(control_flow_data->Parent_Window, &time);
+
+ }
+
+ return FALSE;
+}
+
+
+