X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Flttv%2Fmodules%2FguiControlFlow%2FDrawing.c;h=c92d4607cf07666d649b682929bebd11239fcef4;hb=4ba421555910380b407cdf58380bb0182c93d191;hp=e2225a118ab56c6c8c53e6c62c060dd1f57dd982;hpb=308711e5772586ce8ecc22ce04e571b175309b8e;p=lttv.git diff --git a/ltt/branches/poly/lttv/modules/guiControlFlow/Drawing.c b/ltt/branches/poly/lttv/modules/guiControlFlow/Drawing.c index e2225a11..c92d4607 100644 --- a/ltt/branches/poly/lttv/modules/guiControlFlow/Drawing.c +++ b/ltt/branches/poly/lttv/modules/guiControlFlow/Drawing.c @@ -1,10 +1,19 @@ -#include "Drawing.h" -#include "CFV.h" #include #include #include +#include +#include + +#include "Drawing.h" +#include "CFV.h" +#include "CFV-private.h" +#include "Event_Hooks.h" + +#define g_info(format...) g_log (G_LOG_DOMAIN, G_LOG_LEVEL_INFO, format) +#define g_debug(format...) g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, format) + /***************************************************************************** * Drawing functions * @@ -32,27 +41,48 @@ static GdkColor CF_Colors [] = }; -//struct _Drawing_t { -// GtkWidget *Drawing_Area_V; -// GdkPixmap *Pixmap; -// ControlFlowData *Control_Flow_Data; - -// 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, +void drawing_data_request(Drawing_t *Drawing, GdkPixmap **Pixmap, gint x, gint y, - gint width, + gint width, gint height) { if(width < 0) return ; if(height < 0) return ; + ControlFlowData *control_flow_data = + (ControlFlowData*)g_object_get_data( + G_OBJECT( + Drawing->Drawing_Area_V), + "Control_Flow_Data"); + + LttTime start, end; + LttTime window_end = ltt_time_add(control_flow_data->Time_Window.time_width, + control_flow_data->Time_Window.start_time); + + g_critical("req : window_end : %u, %u", window_end.tv_sec, + window_end.tv_nsec); + g_critical("req : time width : %u, %u", control_flow_data->Time_Window.time_width.tv_sec, + control_flow_data->Time_Window.time_width.tv_nsec); + + g_critical("x is : %i, x+width is : %i", x, x+width); + + convert_pixels_to_time(Drawing->Drawing_Area_V->allocation.width, x, + &control_flow_data->Time_Window.start_time, + &window_end, + &start); + + convert_pixels_to_time(Drawing->Drawing_Area_V->allocation.width, x + width, + &control_flow_data->Time_Window.start_time, + &window_end, + &end); + + LttvTracesetContext * tsc = + get_traceset_context(control_flow_data->Parent_Window); + gdk_draw_rectangle (*Pixmap, Drawing->Drawing_Area_V->style->white_gc, TRUE, @@ -60,13 +90,39 @@ void Drawing_Data_Request(Drawing_t *Drawing, width, // do not overlap height); - send_test_process( - GuiControlFlow_get_Process_List(Drawing->Control_Flow_Data), - Drawing); - send_test_drawing( - GuiControlFlow_get_Process_List(Drawing->Control_Flow_Data), - Drawing, *Pixmap, x, y, width, height); + //send_test_process( + //guicontrolflow_get_process_list(Drawing->Control_Flow_Data), + //Drawing); + //send_test_drawing( + //guicontrolflow_get_process_list(Drawing->Control_Flow_Data), + //Drawing, *Pixmap, x, y, width, height); + // Let's call processTrace() !! + EventRequest event_request; // Variable freed at the end of the function. + event_request.Control_Flow_Data = control_flow_data; + event_request.time_begin = start; + event_request.time_end = end; + + g_critical("req : start : %u, %u", event_request.time_begin.tv_sec, + event_request.time_begin.tv_nsec); + + g_critical("req : end : %u, %u", event_request.time_end.tv_sec, + event_request.time_end.tv_nsec); + + LttvHooks *event = lttv_hooks_new(); + state_add_event_hooks_api(control_flow_data->Parent_Window); + lttv_hooks_add(event, draw_event_hook, &event_request); + + lttv_process_traceset_seek_time(tsc, start); + lttv_traceset_context_add_hooks(tsc, + NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, event, NULL); + lttv_process_traceset(tsc, end, G_MAXULONG); + lttv_traceset_context_remove_hooks(tsc, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, event, NULL); + + state_remove_event_hooks_api(control_flow_data->Parent_Window); + lttv_hooks_destroy(event); } /* Callbacks */ @@ -101,7 +157,7 @@ configure_event( GtkWidget *widget, GdkEventConfigure *event, Drawing->height = widget->allocation.height; g_critical("init data"); /* Initial data request */ - Drawing_Data_Request(Drawing, &Drawing->Pixmap, 0, 0, + drawing_data_request(Drawing, &Drawing->Pixmap, 0, 0, widget->allocation.width, widget->allocation.height); @@ -122,12 +178,17 @@ g_critical("init data"); 0, 0, -1, -1); + if (Drawing->Pixmap) + gdk_pixmap_unref(Drawing->Pixmap); + + Drawing->Pixmap = Pixmap; + /* Request data for missing space */ g_critical("missing data"); - Drawing_Data_Request(Drawing, &Pixmap, Drawing->width, 0, + 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_data_request(Drawing, &Pixmap, 0, Drawing->height, Drawing->width, widget->allocation.height - Drawing->height); @@ -147,13 +208,8 @@ g_critical("missing data"); // widget->allocation.height - // Drawing->height); - - if (Drawing->Pixmap) - gdk_pixmap_unref(Drawing->Pixmap); - - Drawing->Pixmap = Pixmap; Drawing->width = widget->allocation.width; Drawing->height = widget->allocation.height; @@ -178,7 +234,7 @@ expose_event( GtkWidget *widget, GdkEventExpose *event, gpointer user_data ) return FALSE; } -Drawing_t *Drawing_construct(ControlFlowData *Control_Flow_Data) +Drawing_t *drawing_construct(ControlFlowData *Control_Flow_Data) { Drawing_t *Drawing = g_new(Drawing_t, 1); @@ -190,7 +246,7 @@ Drawing_t *Drawing_construct(ControlFlowData *Control_Flow_Data) G_OBJECT(Drawing->Drawing_Area_V), "Link_Drawing_Data", Drawing, - (GDestroyNotify)Drawing_destroy); + (GDestroyNotify)drawing_destroy); //gtk_widget_modify_bg( Drawing->Drawing_Area_V, // GTK_STATE_NORMAL, @@ -228,7 +284,7 @@ Drawing_t *Drawing_construct(ControlFlowData *Control_Flow_Data) return Drawing; } -void Drawing_destroy(Drawing_t *Drawing) +void drawing_destroy(Drawing_t *Drawing) { // Do not unref here, Drawing_t destroyed by it's widget. @@ -237,17 +293,17 @@ void Drawing_destroy(Drawing_t *Drawing) g_free(Drawing); } -GtkWidget *Drawing_getWidget(Drawing_t *Drawing) +GtkWidget *drawing_get_widget(Drawing_t *Drawing) { return Drawing->Drawing_Area_V; } -/* get_time_from_pixels +/* convert_pixels_to_time * - * Get the time interval from window time and pixels, and pixels requested. + * Convert from window pixel and time interval to an absolute time. */ void convert_pixels_to_time( - Drawing_t *Drawing, + gint width, guint x, LttTime *window_time_begin, LttTime *window_time_end, @@ -257,7 +313,7 @@ void convert_pixels_to_time( window_time_interval = ltt_time_sub(*window_time_end, *window_time_begin); - *time = ltt_time_mul(window_time_interval, (x/(float)Drawing->width)); + *time = ltt_time_mul(window_time_interval, (x/(float)width)); *time = ltt_time_add(*window_time_begin, *time); } @@ -267,7 +323,7 @@ void convert_time_to_pixels( LttTime window_time_begin, LttTime window_time_end, LttTime time, - Drawing_t *Drawing, + int width, guint *x) { LttTime window_time_interval; @@ -280,14 +336,15 @@ void convert_time_to_pixels( interval_float = ltt_time_to_double(window_time_interval); time_float = ltt_time_to_double(time); - *x = (guint)(time_float/interval_float * Drawing->width); + *x = (guint)(time_float/interval_float * width); } -void Drawing_Refresh ( Drawing_t *Drawing, +void drawing_refresh ( Drawing_t *Drawing, guint x, guint y, guint width, guint height) { + g_info("Drawing.c : drawing_refresh %u, %u, %u, %u", x, y, width, height); GdkRectangle update_rect; gdk_draw_drawable( @@ -308,7 +365,7 @@ void Drawing_Refresh ( Drawing_t *Drawing, } -void Drawing_draw_line( Drawing_t *Drawing, +void drawing_draw_line( Drawing_t *Drawing, GdkPixmap *Pixmap, guint x1, guint y1, guint x2, guint y2, @@ -322,7 +379,7 @@ void Drawing_draw_line( Drawing_t *Drawing, -void Drawing_Resize(Drawing_t *Drawing, guint h, guint w) +void drawing_resize(Drawing_t *Drawing, guint h, guint w) { Drawing->height = h ; Drawing->width = w ; @@ -337,7 +394,7 @@ void Drawing_Resize(Drawing_t *Drawing, guint h, guint w) /* Insert a square corresponding to a new process in the list */ /* Applies to whole Drawing->width */ -void Drawing_Insert_Square(Drawing_t *Drawing, +void drawing_insert_square(Drawing_t *Drawing, guint y, guint height) { @@ -398,7 +455,7 @@ void Drawing_Insert_Square(Drawing_t *Drawing, /* Remove a square corresponding to a removed process in the list */ -void Drawing_Remove_Square(Drawing_t *Drawing, +void drawing_remove_square(Drawing_t *Drawing, guint y, guint height) { @@ -444,3 +501,5 @@ void Drawing_Remove_Square(Drawing_t *Drawing, update_rect.height = Drawing->height - y ; gtk_widget_draw( Drawing->Drawing_Area_V, &update_rect); } + +