X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;ds=sidebyside;f=ltt%2Fbranches%2Fpoly%2Flttv%2Fmodules%2FguiControlFlow%2FDrawing.c;h=e89c8b295b6896125f35c4eb4f4a15d00c803a54;hb=f66eba62898bf525692d55ef95935266aee56096;hp=e1eb88d9097c3f323ab997e63455d6d9360a9079;hpb=4c69e0cc2b20bbe101918f769842e31101045767;p=lttv.git diff --git a/ltt/branches/poly/lttv/modules/guiControlFlow/Drawing.c b/ltt/branches/poly/lttv/modules/guiControlFlow/Drawing.c index e1eb88d9..e89c8b29 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,15 +41,6 @@ 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. */ @@ -52,7 +52,29 @@ void drawing_data_request(Drawing_t *Drawing, { 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); + + convert_pixels_to_time(Drawing, x, + &control_flow_data->Time_Window.start_time, + &window_end, + &start); + + convert_pixels_to_time(Drawing, 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, @@ -63,10 +85,28 @@ void drawing_data_request(Drawing_t *Drawing, 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_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; + + LttvHooks *event = lttv_hooks_new(); + 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); + + lttv_hooks_destroy(event); } /* Callbacks */ @@ -147,7 +187,6 @@ g_critical("missing data"); // widget->allocation.height - // Drawing->height); - if (Drawing->Pixmap) @@ -190,7 +229,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, @@ -242,9 +281,9 @@ 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, @@ -288,6 +327,7 @@ 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( @@ -444,3 +484,5 @@ void drawing_remove_square(Drawing_t *Drawing, update_rect.height = Drawing->height - y ; gtk_widget_draw( Drawing->Drawing_Area_V, &update_rect); } + +