From 432a7065f37c2e37192925c938216a8ceb152dc1 Mon Sep 17 00:00:00 2001 From: compudj Date: Sat, 10 Jan 2004 17:05:15 +0000 Subject: [PATCH] fixed some drawing details git-svn-id: http://ltt.polymtl.ca/svn@369 04897980-b3bd-0310-b5e0-8ef037075253 --- .../lttv/modules/guiControlFlow/Drawing.c | 100 +++++++++++------- .../lttv/modules/guiControlFlow/Drawing.h | 3 + .../lttv/modules/guiControlFlow/Event_Hooks.c | 43 +++++++- .../modules/guiControlFlow/Process_List.c | 3 +- .../modules/guiControlFlow/Process_List.h | 1 + 5 files changed, 107 insertions(+), 43 deletions(-) diff --git a/ltt/branches/poly/lttv/modules/guiControlFlow/Drawing.c b/ltt/branches/poly/lttv/modules/guiControlFlow/Drawing.c index 97444fc0..bb551dc1 100644 --- a/ltt/branches/poly/lttv/modules/guiControlFlow/Drawing.c +++ b/ltt/branches/poly/lttv/modules/guiControlFlow/Drawing.c @@ -14,7 +14,6 @@ #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 * *****************************************************************************/ @@ -43,6 +42,8 @@ static GdkColor CF_Colors [] = /* Function responsible for updating the exposed area. * It must call processTrace() to ask for this update. + * Note : this function cannot clear the background, because it may + * erase drawing already present (SAFETY). */ void drawing_data_request(Drawing_t *Drawing, GdkPixmap **Pixmap, @@ -83,14 +84,7 @@ void drawing_data_request(Drawing_t *Drawing, LttvTracesetContext * tsc = get_traceset_context(control_flow_data->Parent_Window); - gdk_draw_rectangle (*Pixmap, - Drawing->Drawing_Area_V->style->white_gc, - TRUE, - x, y, - width, // do not overlap - height); - - //send_test_process( + //send_test_process( //guicontrolflow_get_process_list(Drawing->Control_Flow_Data), //Drawing); //send_test_drawing( @@ -146,8 +140,8 @@ configure_event( GtkWidget *widget, GdkEventConfigure *event, /* New Pixmap, size of the configure event */ GdkPixmap *Pixmap = gdk_pixmap_new(widget->window, - widget->allocation.width, - widget->allocation.height, + widget->allocation.width + SAFETY, + widget->allocation.height + SAFETY, -1); g_critical("drawing configure event"); @@ -157,18 +151,29 @@ configure_event( GtkWidget *widget, GdkEventConfigure *event, { Drawing->Pixmap = gdk_pixmap_new( widget->window, - widget->allocation.width, - widget->allocation.height, + 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; -g_critical("init data"); - /* Initial data request */ - drawing_data_request(Drawing, &Drawing->Pixmap, 0, 0, + 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 */ + drawing_data_request(Drawing, &Drawing->Pixmap, 0, 0, widget->allocation.width, - widget->allocation.height); + widget->allocation.height); } // /* Draw empty background */ @@ -191,11 +196,33 @@ g_critical("init data"); 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); - /* Request data for missing space */ -g_critical("missing data"); - drawing_data_request(Drawing, &Pixmap, Drawing->width, 0, - widget->allocation.width - Drawing->width, + /* 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); // we do not request data vertically! // drawing_data_request(Drawing, &Pixmap, 0, Drawing->height, @@ -209,15 +236,6 @@ g_critical("missing data"); // widget->allocation.width - // Drawing->width, // widget->allocation.height); - - // Clear the bottom part of the image - gdk_draw_rectangle (Pixmap, - widget->style->white_gc, - TRUE, - 0, Drawing->height, - Drawing->width, // do not overlap - widget->allocation.height - Drawing->height); - Drawing->width = widget->allocation.width; Drawing->height = widget->allocation.height; @@ -410,8 +428,8 @@ void drawing_insert_square(Drawing_t *Drawing, /* Allocate a new pixmap with new height */ GdkPixmap *Pixmap = gdk_pixmap_new(Drawing->Drawing_Area_V->window, - Drawing->width, - Drawing->height + height, + Drawing->width + SAFETY, + Drawing->height + height + SAFETY, -1); /* Copy the high region */ @@ -420,7 +438,7 @@ void drawing_insert_square(Drawing_t *Drawing, Drawing->Pixmap, 0, 0, 0, 0, - Drawing->width, y); + Drawing->width + SAFETY, y); @@ -430,7 +448,7 @@ void drawing_insert_square(Drawing_t *Drawing, Drawing->Drawing_Area_V->style->black_gc, TRUE, 0, y, - Drawing->width, // do not overlap + Drawing->width + SAFETY, // do not overlap height); @@ -441,7 +459,7 @@ void drawing_insert_square(Drawing_t *Drawing, Drawing->Pixmap, 0, y, 0, y + height, - Drawing->width, Drawing->height - y); + Drawing->width, Drawing->height - y + SAFETY); @@ -472,8 +490,8 @@ void drawing_remove_square(Drawing_t *Drawing, /* Allocate a new pixmap with new height */ GdkPixmap *Pixmap = gdk_pixmap_new( Drawing->Drawing_Area_V->window, - Drawing->width, - Drawing->height - height, + Drawing->width + SAFETY, + Drawing->height - height + SAFETY, -1); /* Copy the high region */ @@ -482,7 +500,7 @@ void drawing_remove_square(Drawing_t *Drawing, Drawing->Pixmap, 0, 0, 0, 0, - Drawing->width, y); + Drawing->width + SAFETY, y); @@ -492,7 +510,7 @@ void drawing_remove_square(Drawing_t *Drawing, Drawing->Pixmap, 0, y + height, 0, y, - Drawing->width, Drawing->height - y - height); + Drawing->width, Drawing->height - y - height + SAFETY); if (Drawing->Pixmap) diff --git a/ltt/branches/poly/lttv/modules/guiControlFlow/Drawing.h b/ltt/branches/poly/lttv/modules/guiControlFlow/Drawing.h index 279c402f..f225e225 100644 --- a/ltt/branches/poly/lttv/modules/guiControlFlow/Drawing.h +++ b/ltt/branches/poly/lttv/modules/guiControlFlow/Drawing.h @@ -8,6 +8,9 @@ #include "CFV.h" #include "Draw_Item.h" + +#define SAFETY 50 // safety pixels at right and bottom of pixmap buffer + /* This part of the viewer does : * Draw horizontal lines, getting graphic context as arg. * Copy region of the screen into another. diff --git a/ltt/branches/poly/lttv/modules/guiControlFlow/Event_Hooks.c b/ltt/branches/poly/lttv/modules/guiControlFlow/Event_Hooks.c index 6167639c..adc6d8a0 100644 --- a/ltt/branches/poly/lttv/modules/guiControlFlow/Event_Hooks.c +++ b/ltt/branches/poly/lttv/modules/guiControlFlow/Event_Hooks.c @@ -532,6 +532,7 @@ int draw_event_hook(void *hook_data, void *call_data) * process position */ guint pid = tfs->process->pid; LttTime birth = tfs->process->creation_time; + gchar *name = strdup("name"); guint y = 0, height = 0, pl_height = 0; HashedProcessData *Hashed_Process_Data = NULL; @@ -549,8 +550,10 @@ int draw_event_hook(void *hook_data, void *call_data) processlist_add(process_list, pid, &birth, + name, &pl_height, &Hashed_Process_Data); + g_free(name); drawing_insert_square( Event_Request->Control_Flow_Data->Drawing, y, height); } @@ -668,8 +671,22 @@ void update_time_window_hook(void *hook_data, void *call_data) x, 0, 0, 0, -1, -1); + + convert_time_to_pixels( + *ns, + new_end, + old_end, + width, + &x); *Old_Time_Window = *New_Time_Window; + /* Clear the data request background, but not SAFETY */ + gdk_draw_rectangle (control_flow_data->Drawing->Pixmap, + control_flow_data->Drawing->Drawing_Area_V->style->white_gc, + TRUE, + x+SAFETY, 0, + control_flow_data->Drawing->width - x, // do not overlap + control_flow_data->Drawing->height+SAFETY); /* Get new data for the rest. */ drawing_data_request(control_flow_data->Drawing, &control_flow_data->Drawing->Pixmap, @@ -710,6 +727,14 @@ void update_time_window_hook(void *hook_data, void *call_data) -1, -1); *Old_Time_Window = *New_Time_Window; + + /* Clean the data request background */ + gdk_draw_rectangle (control_flow_data->Drawing->Pixmap, + control_flow_data->Drawing->Drawing_Area_V->style->white_gc, + TRUE, + 0, 0, + x, // do not overlap + control_flow_data->Drawing->height+SAFETY); /* Get new data for the rest. */ drawing_data_request(control_flow_data->Drawing, &control_flow_data->Drawing->Pixmap, @@ -726,6 +751,14 @@ void update_time_window_hook(void *hook_data, void *call_data) g_info("scrolling far"); /* Cannot reuse any part of the screen : far jump */ *Old_Time_Window = *New_Time_Window; + + + gdk_draw_rectangle (control_flow_data->Drawing->Pixmap, + control_flow_data->Drawing->Drawing_Area_V->style->white_gc, + TRUE, + 0, 0, + control_flow_data->Drawing->width+SAFETY, // do not overlap + control_flow_data->Drawing->height+SAFETY); drawing_data_request(control_flow_data->Drawing, &control_flow_data->Drawing->Pixmap, @@ -744,7 +777,15 @@ void update_time_window_hook(void *hook_data, void *call_data) g_info("zoom"); *Old_Time_Window = *New_Time_Window; - + + gdk_draw_rectangle (control_flow_data->Drawing->Pixmap, + control_flow_data->Drawing->Drawing_Area_V->style->white_gc, + TRUE, + 0, 0, + control_flow_data->Drawing->width+SAFETY, // do not overlap + control_flow_data->Drawing->height+SAFETY); + + drawing_data_request(control_flow_data->Drawing, &control_flow_data->Drawing->Pixmap, 0, 0, diff --git a/ltt/branches/poly/lttv/modules/guiControlFlow/Process_List.c b/ltt/branches/poly/lttv/modules/guiControlFlow/Process_List.c index 40e189f6..37069b1a 100644 --- a/ltt/branches/poly/lttv/modules/guiControlFlow/Process_List.c +++ b/ltt/branches/poly/lttv/modules/guiControlFlow/Process_List.c @@ -299,6 +299,7 @@ void destroy_hash_data(gpointer data) int processlist_add( ProcessList *Process_List, guint pid, LttTime *birth, + gchar *name, guint *height, HashedProcessData **pmHashed_Process_Data) { @@ -363,7 +364,7 @@ int processlist_add( ProcessList *Process_List, // GTK_TREE_MODEL(Process_List->Store_M), // &iter))); gtk_list_store_set ( Process_List->Store_M, &iter, - PROCESS_COLUMN, "name", + PROCESS_COLUMN, name, PID_COLUMN, pid, BIRTH_S_COLUMN, birth->tv_sec, BIRTH_NS_COLUMN, birth->tv_nsec, diff --git a/ltt/branches/poly/lttv/modules/guiControlFlow/Process_List.h b/ltt/branches/poly/lttv/modules/guiControlFlow/Process_List.h index c119fa33..a02e7ab2 100644 --- a/ltt/branches/poly/lttv/modules/guiControlFlow/Process_List.h +++ b/ltt/branches/poly/lttv/modules/guiControlFlow/Process_List.h @@ -56,6 +56,7 @@ GtkWidget *processlist_get_widget(ProcessList *Process_List); // out : success (0) and height int processlist_add(ProcessList *Process_List, guint pid, LttTime *birth, + gchar *name, guint *height, HashedProcessData **Hashed_Process_Data); // out : success (0) and height int processlist_remove(ProcessList *Process_List, guint pid, LttTime *birth); -- 2.34.1