basic drawing of elementary objects and lines working
authorcompudj <compudj@04897980-b3bd-0310-b5e0-8ef037075253>
Mon, 29 Sep 2003 01:22:15 +0000 (01:22 +0000)
committercompudj <compudj@04897980-b3bd-0310-b5e0-8ef037075253>
Mon, 29 Sep 2003 01:22:15 +0000 (01:22 +0000)
git-svn-id: http://ltt.polymtl.ca/svn@274 04897980-b3bd-0310-b5e0-8ef037075253

ltt/branches/poly/lttv/modules/guiControlFlow/Drawing.c
ltt/branches/poly/lttv/modules/guiControlFlow/Drawing.h
ltt/branches/poly/lttv/modules/guiControlFlow/Process_List.c
ltt/branches/poly/lttv/modules/guiControlFlow/Widget_Callbacks.c [deleted file]
ltt/branches/poly/lttv/modules/guiControlFlow/Widget_Callbacks.c.old [new file with mode: 0644]
ltt/branches/poly/lttv/modules/guiControlFlow/guiControlFlow.c [deleted file]
ltt/branches/poly/lttv/modules/guiControlFlow/guiControlFlow.c.old [new file with mode: 0644]

index 0210b7136160d3fbfaf297d81e80172b57d677b5..8224030669a0f2a69cd8394bdc39a68576d0f85e 100644 (file)
@@ -36,36 +36,204 @@ struct _Drawing_t {
 
 };
 
+void test_draw(Drawing_t *Drawing)
+{
+       GdkRectangle update_rect;
+//     GdkColor color = { 0, 65535, 65535, 65535 };
 
-Drawing_t *Drawing_construct(void)
+//     gdk_colormap_alloc_color(gdk_rgb_get_cmap(), &color, 0, 1);
+       
+//     GdkGC *gc = 
+//             Drawing->Drawing_Area_V->
+//             style->fg_gc[GTK_WIDGET_STATE (Drawing->Drawing_Area_V)];
+//     gdk_gc_set_foreground(gc, &color);
+       update_rect.x = 50;
+       update_rect.y = 50;
+       update_rect.width = 1000;
+       update_rect.height = 1000;
+       gdk_draw_rectangle (Drawing->Pixmap,
+                     Drawing->Drawing_Area_V->style->black_gc,
+                     TRUE,
+                     50, 50,
+                     1000,
+                     1000);
+
+
+       //Drawing_draw_line(Drawing, 10, 10, 50, 10,
+       //              Drawing->Drawing_Area_V->style->black_gc);
+       gtk_widget_draw (Drawing->Drawing_Area_V, &update_rect);
+       
+//     Drawing_Refresh( Drawing, 0, 0, 30, 30);
+}
+
+void Drawing_Data_Request(Drawing_t *Drawing,
+                       GdkPixmap *Pixmap,
+                       gint x, gint y,
+                       gint width,
+                       gint height)
+{
+  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);
+
+   /* Request data for missing space */
+   Drawing_Data_Request(Drawing, Pixmap, Drawing->width, 0,
+                       widget->allocation.width - Drawing->width,
+                       widget->allocation.height);
+   Drawing_Data_Request(Drawing, Pixmap, 0, Drawing->height,
+                  Drawing->width,
+                  widget->allocation.height - Drawing->height);
+                                             
+//   gdk_draw_rectangle (Pixmap,
+//                   widget->style->white_gc,
+//                   TRUE,
+//                   Drawing->width, 0,
+//                   widget->allocation.width -
+//                                     Drawing->width,
+//                   widget->allocation.height);
+
+//    gdk_draw_rectangle (Pixmap,
+//                   widget->style->white_gc,
+//                   TRUE,
+//                   0, Drawing->height,
+//                   Drawing->width,   // do not overlap
+//                   widget->allocation.height -
+//                                     Drawing->height);
+
+  
+  g_critical("drawing configure event");
+
+  
+  if (Drawing->Pixmap)
+    gdk_pixmap_unref(Drawing->Pixmap);
+
+  Drawing->Pixmap = Pixmap;
+  Drawing->width = widget->allocation.width;
+  Drawing->height = widget->allocation.height;
+
+  return TRUE;
+}
+
+
+/* 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;
+  g_critical("drawing expose event");
+
+  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);
+
+  return FALSE;
+}
+
+Drawing_t *Drawing_construct(void)
+{
        Drawing_t *Drawing = g_new(Drawing_t, 1);
                
        Drawing->Drawing_Area_V = gtk_drawing_area_new ();
-
+       
+       //gtk_widget_set_size_request(Drawing->Drawing_Area_V->window, 50, 50);
        g_object_set_data_full(
                        G_OBJECT(Drawing->Drawing_Area_V),
                        "Link_Drawing_Data",
                        Drawing,
                        (GDestroyNotify)Drawing_destroy);
 
-       gtk_widget_modify_bg(   Drawing->Drawing_Area_V,
-                               GTK_STATE_NORMAL,
-                               &CF_Colors[BLACK]);
-       
-       gdk_window_get_geometry(Drawing->Drawing_Area_V->window,
-                       NULL, NULL,
-                       &(Drawing->width),
-                       &(Drawing->height),
-                       &(Drawing->depth));
-       
-       Drawing->Pixmap = gdk_pixmap_new(
-                       Drawing->Drawing_Area_V->window,
-                       Drawing->width,
-                       Drawing->height,
-                       Drawing->depth);
-                       
+       //gtk_widget_modify_bg( Drawing->Drawing_Area_V,
+       //                      GTK_STATE_NORMAL,
+       //                      &CF_Colors[BLACK]);
+       
+       //gdk_window_get_geometry(Drawing->Drawing_Area_V->window,
+       //              NULL, NULL,
+       //              &(Drawing->width),
+       //              &(Drawing->height),
+       //              -1);
+       
+       //Drawing->Pixmap = gdk_pixmap_new(
+       //              Drawing->Drawing_Area_V->window,
+       //              Drawing->width,
+       //              Drawing->height,
+       //              Drawing->depth);
+       
+       Drawing->Pixmap = NULL;
+
+//     Drawing->Pixmap = gdk_pixmap_new(Drawing->Drawing_Area_V->window,
+//                       Drawing->Drawing_Area_V->allocation.width,
+//                       Drawing->Drawing_Area_V->allocation.height,
+//                       -1);
+
+
+       g_signal_connect (G_OBJECT(Drawing->Drawing_Area_V),
+                               "configure_event",
+                               G_CALLBACK (configure_event),
+                               (gpointer)Drawing);
+       
+       g_signal_connect (G_OBJECT(Drawing->Drawing_Area_V),
+                               "expose_event",
+                               G_CALLBACK (expose_event),
+                               (gpointer)Drawing);
+
        return Drawing;
 }
 
@@ -132,6 +300,33 @@ void convert_time_to_pixels(
        
 }
 
+void Drawing_Refresh ( Drawing_t *Drawing,
+                       guint x, guint y,
+                       guint width, guint height)
+{
+       gdk_draw_drawable(
+               Drawing->Drawing_Area_V->window,
+               Drawing->Drawing_Area_V->
+                style->fg_gc[GTK_WIDGET_STATE (Drawing->Drawing_Area_V)],
+               GDK_DRAWABLE(Drawing->Pixmap),
+               x, y,
+               x, y,
+               width, height);
+}
+
+
+void Drawing_draw_line(        Drawing_t *Drawing,
+                       GdkPixmap *Pixmap,
+                       guint x1, guint y1,
+                       guint x2, guint y2,
+                       GdkGC *GC)
+{
+       gdk_draw_line (Pixmap,
+                       GC,
+                       x1, y1, x2, y2);
+}
+
+
 
 
 void Drawing_Resize(Drawing_t *Drawing, guint h, guint w)
@@ -145,3 +340,5 @@ void Drawing_Resize(Drawing_t *Drawing, guint h, guint w)
        
        
 }
+
+
index 8fb20c20cc599d4999f419afb63a627f57a9b023..22d2224b82c91cf8741c858f14940e5d0a8a53f1 100644 (file)
@@ -10,7 +10,7 @@
  * Draw horizontal lines, getting graphic context as arg.
  * Copy region of the screen into another.
  * Modify the boundaries to reflect a scale change. (resize)
- *
+ * Refresh the physical screen with the pixmap
  * A helper function is provided here to convert from time and process
  * identifier to pixels and the contrary (will be useful for mouse selection).
  */
@@ -22,16 +22,23 @@ void Drawing_destroy(Drawing_t *Drawing);
 
 GtkWidget *Drawing_getWidget(Drawing_t *Drawing);
        
-
-void Drawing_draw_line(        guint x1, guint y1, guint x2, guint y2,
+//void Drawing_Refresh (       Drawing_t *Drawing,
+//                     guint x, guint y,
+//                     guint width, guint height);
+
+void Drawing_draw_line(        Drawing_t *Drawing,
+                       GdkPixmap *Pixmap,
+                       guint x1, guint y1,
+                       guint x2, guint y2,
                        GdkGC *GC);
 
-void Drawing_copy(guint xsrc, guint ysrc,
-               guint xdest, guint ydest,
-               guint width, guint height);
+//void Drawing_copy( Drawing_t *Drawing,
+//             guint xsrc, guint ysrc,
+//             guint xdest, guint ydest,
+//             guint width, guint height);
 
 
-void Drawing_Resize(Drawing_t *Drawing, guint h, guint w);
+//void Drawing_Resize(Drawing_t *Drawing, guint h, guint w);
 
 void convert_pixels_to_time(
                Drawing_t *Drawing,
index 84c66ecaf779ee7bd769cc59dc86cd03ff169028..2e416d078352334274cd5d59a426b33746d9ef38 100644 (file)
@@ -190,7 +190,7 @@ void send_test_data(ProcessList *Process_List)
                        &birth,
                        &height);
 
-       for(i=0; i<150; i++)
+       for(i=0; i<10; i++)
        {
                birth.tv_sec = i*12000;
                birth.tv_nsec = i*55700;
diff --git a/ltt/branches/poly/lttv/modules/guiControlFlow/Widget_Callbacks.c b/ltt/branches/poly/lttv/modules/guiControlFlow/Widget_Callbacks.c
deleted file mode 100644 (file)
index 11250b2..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/*****************************************************************************
- *                       Callbacks used for the viewer                       *
- *****************************************************************************/
-void expose_event_cb (GtkWidget *widget, GdkEventExpose *expose, gpointer data)
-{
-       ControlFlowData *Control_Flow_Data = (ControlFlowData*)data;
-
-       EventRequest *Event_Request = g_new(sizeof(EventRequest));
-       
-       Event_Request->Control_Flow_Data = Control_Flow_Data;
-       
-       /* Calculate, from pixels in expose, the time interval to get data */
-       
-       get_time_from_pixels(expose->area.x, expose->area.width,
-                                                                                                       Control_Flow_Data->Drawing_Area_Info.width,
-                                                                                                       &Control_Flow_Data->Begin_Time, &Control_Flow_Data->End_Time,
-                                                                                                       &Event_Request->time_begin, &Event_Request->time_end)
-       
-       /* Look in statistics of the trace the processes present during the
-        * whole time interval _shown on the screen_. Modify the list of 
-        * processes to match it. NOTE : modify, not recreate. If recreation is
-        * needed,keep a pointer to the currently selected event in the list.
-        */
-       
-       /* Call the reading API to have events sent to drawing hooks */
-       lttv_trace_set_process( Control_Flow_Data->Trace_Set,
-                                                                                                       Draw_Before_Hooks,
-                                                                                                       Draw_Event_Hooks,
-                                                                                                       Draw_After_Hooks,
-                                                                                                       NULL, //FIXME : filter here
-                                                                                                       Event_Request->time_begin,
-                                                                                                       Event_Request->time_end);
-
-}
-
-
-void v_scroll_cb (GtkAdjustment *adjustment, gpointer data)
-{
-       ControlFlowData *Control_Flow_Data = (ControlFlowData*)data;
-       GtkTreePath *Tree_Path;
-
-       g_critical("DEBUG : scroll signal, value : %f", adjustment->value);
-       
-       //get_test_data((int)adjustment->value, Control_Flow_Data->Num_Visible_Events, 
-       //                                                               Control_Flow_Data);
-       
-       
-
-}
-
-
diff --git a/ltt/branches/poly/lttv/modules/guiControlFlow/Widget_Callbacks.c.old b/ltt/branches/poly/lttv/modules/guiControlFlow/Widget_Callbacks.c.old
new file mode 100644 (file)
index 0000000..11250b2
--- /dev/null
@@ -0,0 +1,51 @@
+/*****************************************************************************
+ *                       Callbacks used for the viewer                       *
+ *****************************************************************************/
+void expose_event_cb (GtkWidget *widget, GdkEventExpose *expose, gpointer data)
+{
+       ControlFlowData *Control_Flow_Data = (ControlFlowData*)data;
+
+       EventRequest *Event_Request = g_new(sizeof(EventRequest));
+       
+       Event_Request->Control_Flow_Data = Control_Flow_Data;
+       
+       /* Calculate, from pixels in expose, the time interval to get data */
+       
+       get_time_from_pixels(expose->area.x, expose->area.width,
+                                                                                                       Control_Flow_Data->Drawing_Area_Info.width,
+                                                                                                       &Control_Flow_Data->Begin_Time, &Control_Flow_Data->End_Time,
+                                                                                                       &Event_Request->time_begin, &Event_Request->time_end)
+       
+       /* Look in statistics of the trace the processes present during the
+        * whole time interval _shown on the screen_. Modify the list of 
+        * processes to match it. NOTE : modify, not recreate. If recreation is
+        * needed,keep a pointer to the currently selected event in the list.
+        */
+       
+       /* Call the reading API to have events sent to drawing hooks */
+       lttv_trace_set_process( Control_Flow_Data->Trace_Set,
+                                                                                                       Draw_Before_Hooks,
+                                                                                                       Draw_Event_Hooks,
+                                                                                                       Draw_After_Hooks,
+                                                                                                       NULL, //FIXME : filter here
+                                                                                                       Event_Request->time_begin,
+                                                                                                       Event_Request->time_end);
+
+}
+
+
+void v_scroll_cb (GtkAdjustment *adjustment, gpointer data)
+{
+       ControlFlowData *Control_Flow_Data = (ControlFlowData*)data;
+       GtkTreePath *Tree_Path;
+
+       g_critical("DEBUG : scroll signal, value : %f", adjustment->value);
+       
+       //get_test_data((int)adjustment->value, Control_Flow_Data->Num_Visible_Events, 
+       //                                                               Control_Flow_Data);
+       
+       
+
+}
+
+
diff --git a/ltt/branches/poly/lttv/modules/guiControlFlow/guiControlFlow.c b/ltt/branches/poly/lttv/modules/guiControlFlow/guiControlFlow.c
deleted file mode 100644 (file)
index 6bdb953..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-//FIXME by including ltt.h
-#include <time.h>
-typedef time_t ltt_time;
-
-typedef struct _ltt_time_interval
-{
-       ltt_time time_begin, time_end;
-} ltt_time_interval;
-
-// ???
-
-
-       /* Setup the hooks */
-       Draw_Before_Hooks = lttv_hooks_new();
-       Draw_Event_Hooks = lttv_hooks_new();
-       Draw_After_Hooks = lttv_hooks_new();
-       
-       lttv_hooks_add(Draw_Before_Hooks, Draw_Before_Hook, NULL);
-       lttv_hooks_add(Draw_Event_Hooks, Draw_Event_Hook, NULL);
-       lttv_hooks_add(Draw_After_Hooks, Draw_After_Hook, NULL);
-       
-       /* Destroy the hooks */
-       
-       lttv_hooks_destroy(Draw_Before_Hooks);
-       lttv_hooks_destroy(Draw_Event_Hooks);
-       lttv_hooks_destroy(Draw_After_Hooks);
-       
-
-
-
-/*****************************************************************************
- *                         Definition of structures                          *
- *****************************************************************************/
-
-/* Structure used to store and use information relative to one events refresh
- * request. Typically filled in by the expose event callback, then passed to the
- * library call, then used by the drawing hooks. Then, once all the events are
- * sent, it is freed by the hook called after the reading.
- */
-typedef struct _EventRequest
-{
-       ControlFlowData *Control_Flow_Data;
-       ltt_time time_begin, time_end;
-       /* Fill the Events_Context during the initial expose, before calling for
-        * events.
-        */
-       GArray Events_Context; //FIXME
-} EventRequest ;
-
-
-
-/*****************************************************************************
- *                         Function prototypes                               *
- *****************************************************************************/
-//! Control Flow Viewer's constructor hook
-GtkWidget *hGuiControlFlow(GtkWidget *pmParentWindow);
-//! Control Flow Viewer's constructor
-ControlFlowData *GuiControlFlow(void);
-//! Control Flow Viewer's destructor
-void GuiControlFlow_Destructor(ControlFlowData *Control_Flow_Data);
-
-
-static int Event_Selected_Hook(void *hook_data, void *call_data);
-
-static lttv_hooks
-       *Draw_Before_Hooks,
-       *Draw_Event_Hooks,
-       *Draw_After_Hooks;
-
-Draw_Before_Hook(void *hook_data, void *call_data)
-Draw_Event_Hook(void *hook_data, void *call_data)
-Draw_After_Hook(void *hook_data, void *call_data)
-
-
-//void Tree_V_set_cursor(ControlFlowData *Control_Flow_Data);
-//void Tree_V_get_cursor(ControlFlowData *Control_Flow_Data);
-
-/* Prototype for selection handler callback */
-//static void tree_selection_changed_cb (GtkTreeSelection *selection, gpointer data);
-static void v_scroll_cb (GtkAdjustment *adjustment, gpointer data);
-//static void Tree_V_size_allocate_cb (GtkWidget *widget, GtkAllocation *alloc, gpointer data);
-//static void Tree_V_size_request_cb (GtkWidget *widget, GtkRequisition *requisition, gpointer data);
-//static void Tree_V_cursor_changed_cb (GtkWidget *widget, gpointer data);
-//static void Tree_V_move_cursor_cb (GtkWidget *widget, GtkMovementStep arg1, gint arg2, gpointer data);
-
-static void expose_event_cb (GtkWidget *widget, GdkEventExpose *expose, gpointer data);
-
-void add_test_process(ControlFlowData *Control_Flow_Data);
-
-static void get_test_data(guint Event_Number, guint List_Height, 
-                                                                        ControlFlowData *Control_Flow_Data);
-
-void add_test_data(ControlFlowData *Control_Flow_Data);
-void test_draw(ControlFlowData *Control_Flow_Data);
-
-void Drawing_Area_Init(ControlFlowData *Control_Flow_Data);
-
-
-/*\@}*/
diff --git a/ltt/branches/poly/lttv/modules/guiControlFlow/guiControlFlow.c.old b/ltt/branches/poly/lttv/modules/guiControlFlow/guiControlFlow.c.old
new file mode 100644 (file)
index 0000000..6bdb953
--- /dev/null
@@ -0,0 +1,99 @@
+//FIXME by including ltt.h
+#include <time.h>
+typedef time_t ltt_time;
+
+typedef struct _ltt_time_interval
+{
+       ltt_time time_begin, time_end;
+} ltt_time_interval;
+
+// ???
+
+
+       /* Setup the hooks */
+       Draw_Before_Hooks = lttv_hooks_new();
+       Draw_Event_Hooks = lttv_hooks_new();
+       Draw_After_Hooks = lttv_hooks_new();
+       
+       lttv_hooks_add(Draw_Before_Hooks, Draw_Before_Hook, NULL);
+       lttv_hooks_add(Draw_Event_Hooks, Draw_Event_Hook, NULL);
+       lttv_hooks_add(Draw_After_Hooks, Draw_After_Hook, NULL);
+       
+       /* Destroy the hooks */
+       
+       lttv_hooks_destroy(Draw_Before_Hooks);
+       lttv_hooks_destroy(Draw_Event_Hooks);
+       lttv_hooks_destroy(Draw_After_Hooks);
+       
+
+
+
+/*****************************************************************************
+ *                         Definition of structures                          *
+ *****************************************************************************/
+
+/* Structure used to store and use information relative to one events refresh
+ * request. Typically filled in by the expose event callback, then passed to the
+ * library call, then used by the drawing hooks. Then, once all the events are
+ * sent, it is freed by the hook called after the reading.
+ */
+typedef struct _EventRequest
+{
+       ControlFlowData *Control_Flow_Data;
+       ltt_time time_begin, time_end;
+       /* Fill the Events_Context during the initial expose, before calling for
+        * events.
+        */
+       GArray Events_Context; //FIXME
+} EventRequest ;
+
+
+
+/*****************************************************************************
+ *                         Function prototypes                               *
+ *****************************************************************************/
+//! Control Flow Viewer's constructor hook
+GtkWidget *hGuiControlFlow(GtkWidget *pmParentWindow);
+//! Control Flow Viewer's constructor
+ControlFlowData *GuiControlFlow(void);
+//! Control Flow Viewer's destructor
+void GuiControlFlow_Destructor(ControlFlowData *Control_Flow_Data);
+
+
+static int Event_Selected_Hook(void *hook_data, void *call_data);
+
+static lttv_hooks
+       *Draw_Before_Hooks,
+       *Draw_Event_Hooks,
+       *Draw_After_Hooks;
+
+Draw_Before_Hook(void *hook_data, void *call_data)
+Draw_Event_Hook(void *hook_data, void *call_data)
+Draw_After_Hook(void *hook_data, void *call_data)
+
+
+//void Tree_V_set_cursor(ControlFlowData *Control_Flow_Data);
+//void Tree_V_get_cursor(ControlFlowData *Control_Flow_Data);
+
+/* Prototype for selection handler callback */
+//static void tree_selection_changed_cb (GtkTreeSelection *selection, gpointer data);
+static void v_scroll_cb (GtkAdjustment *adjustment, gpointer data);
+//static void Tree_V_size_allocate_cb (GtkWidget *widget, GtkAllocation *alloc, gpointer data);
+//static void Tree_V_size_request_cb (GtkWidget *widget, GtkRequisition *requisition, gpointer data);
+//static void Tree_V_cursor_changed_cb (GtkWidget *widget, gpointer data);
+//static void Tree_V_move_cursor_cb (GtkWidget *widget, GtkMovementStep arg1, gint arg2, gpointer data);
+
+static void expose_event_cb (GtkWidget *widget, GdkEventExpose *expose, gpointer data);
+
+void add_test_process(ControlFlowData *Control_Flow_Data);
+
+static void get_test_data(guint Event_Number, guint List_Height, 
+                                                                        ControlFlowData *Control_Flow_Data);
+
+void add_test_data(ControlFlowData *Control_Flow_Data);
+void test_draw(ControlFlowData *Control_Flow_Data);
+
+void Drawing_Area_Init(ControlFlowData *Control_Flow_Data);
+
+
+/*\@}*/
This page took 0.031839 seconds and 4 git commands to generate.