- Use cairo_surface_t

- rename variables refering to the surface.

svn path=/trunk/; revision=38497
This commit is contained in:
Anders Broman 2011-08-12 13:30:10 +00:00
parent bfc2da178b
commit 91861a302e
2 changed files with 118 additions and 34 deletions

View File

@ -150,7 +150,7 @@ typedef struct _dialog_graph_t {
GtkWidget *window;
GtkWidget *draw_area;
#if GTK_CHECK_VERSION(2,22,0)
cairo_surface_t *surface;
cairo_surface_t *surface;
#else
GdkPixmap *pixmap;
#endif

View File

@ -160,11 +160,15 @@ typedef struct _dialog_graph_t {
struct _dialog_graph_graph_t graph[MAX_GRAPHS];
GtkWidget *window;
GtkWidget *draw_area;
#if GTK_CHECK_VERSION(2,22,0)
cairo_surface_t *surface;
#else
GdkPixmap *pixmap;
#endif
GtkAdjustment *scrollbar_adjustment;
GtkWidget *scrollbar;
int pixmap_width;
int pixmap_height;
int surface_width;
int surface_height;
int pixels_per_tick_index; /* index into pixels_per_tick array */
int pixels_per_tick;
int max_y_units_index; /* index into yscale_max array */
@ -989,7 +993,11 @@ static void dialog_graph_draw(user_data_t* user_data)
/*
* Clear out old plot
*/
#if GTK_CHECK_VERSION(2,22,0)
cr = cairo_create (user_data->dlg.dialog_graph.surface);
#else
cr = gdk_cairo_create (user_data->dlg.dialog_graph.pixmap);
#endif
cairo_set_source_rgb (cr, 1, 1, 1);
gtk_widget_get_allocation(user_data->dlg.dialog_graph.draw_area, &widget_alloc);
cairo_rectangle (cr,
@ -1040,18 +1048,22 @@ static void dialog_graph_draw(user_data_t* user_data)
/*
* Calculate the size of the drawing area for the actual plot
*/
draw_width=user_data->dlg.dialog_graph.pixmap_width-right_x_border-left_x_border;
draw_height=user_data->dlg.dialog_graph.pixmap_height-top_y_border-bottom_y_border;
draw_width=user_data->dlg.dialog_graph.surface_width-right_x_border-left_x_border;
draw_height=user_data->dlg.dialog_graph.surface_height-top_y_border-bottom_y_border;
/*
* Draw the y axis and labels
* (we always draw the y scale with 11 ticks along the axis)
*/
#if GTK_CHECK_VERSION(2,22,0)
cr = cairo_create (user_data->dlg.dialog_graph.surface);
#else
cr = gdk_cairo_create (user_data->dlg.dialog_graph.pixmap);
#endif
cairo_set_line_width (cr, 1.0);
cairo_move_to(cr, user_data->dlg.dialog_graph.pixmap_width-right_x_border+1.5, top_y_border+0.5);
cairo_line_to(cr, user_data->dlg.dialog_graph.pixmap_width-right_x_border+1.5, user_data->dlg.dialog_graph.pixmap_height-bottom_y_border+0.5);
cairo_move_to(cr, user_data->dlg.dialog_graph.surface_width-right_x_border+1.5, top_y_border+0.5);
cairo_line_to(cr, user_data->dlg.dialog_graph.surface_width-right_x_border+1.5, user_data->dlg.dialog_graph.surface_height-bottom_y_border+0.5);
cairo_stroke(cr);
cairo_destroy(cr);
@ -1064,15 +1076,19 @@ static void dialog_graph_draw(user_data_t* user_data)
xwidth=10;
}
/* draw the tick */
#if GTK_CHECK_VERSION(2,22,0)
cr = cairo_create (user_data->dlg.dialog_graph.surface);
#else
cr = gdk_cairo_create (user_data->dlg.dialog_graph.pixmap);
#endif
cairo_set_line_width (cr, 1.0);
cairo_move_to(cr,
user_data->dlg.dialog_graph.pixmap_width-right_x_border+1.5,
user_data->dlg.dialog_graph.pixmap_height-bottom_y_border-draw_height*i/10+0.5);
user_data->dlg.dialog_graph.surface_width-right_x_border+1.5,
user_data->dlg.dialog_graph.surface_height-bottom_y_border-draw_height*i/10+0.5);
cairo_line_to(cr,
user_data->dlg.dialog_graph.pixmap_width-right_x_border+1.5+xwidth,
user_data->dlg.dialog_graph.pixmap_height-bottom_y_border-draw_height*i/10+0.5);
user_data->dlg.dialog_graph.surface_width-right_x_border+1.5+xwidth,
user_data->dlg.dialog_graph.surface_height-bottom_y_border-draw_height*i/10+0.5);
cairo_stroke(cr);
cairo_destroy(cr);
/* draw the labels */
@ -1080,10 +1096,14 @@ static void dialog_graph_draw(user_data_t* user_data)
print_time_scale_string(label_string, sizeof(label_string), (max_y*i/10));
pango_layout_set_text(layout, label_string, -1);
pango_layout_get_pixel_size(layout, &lwidth, NULL);
#if GTK_CHECK_VERSION(2,22,0)
cr = cairo_create (user_data->dlg.dialog_graph.surface);
#else
cr = gdk_cairo_create (user_data->dlg.dialog_graph.pixmap);
#endif
cairo_move_to (cr,
user_data->dlg.dialog_graph.pixmap_width-right_x_border+15+label_width-lwidth,
user_data->dlg.dialog_graph.pixmap_height-bottom_y_border-draw_height*i/10-label_height/2);
user_data->dlg.dialog_graph.surface_width-right_x_border+15+label_width-lwidth,
user_data->dlg.dialog_graph.surface_height-bottom_y_border-draw_height*i/10-label_height/2);
pango_cairo_show_layout (cr, layout);
cairo_destroy (cr);
cr = NULL;
@ -1092,10 +1112,14 @@ static void dialog_graph_draw(user_data_t* user_data)
print_time_scale_string(label_string, sizeof(label_string), (max_y*i/10));
pango_layout_set_text(layout, label_string, -1);
pango_layout_get_pixel_size(layout, &lwidth, NULL);
#if GTK_CHECK_VERSION(2,22,0)
cr = cairo_create (user_data->dlg.dialog_graph.surface);
#else
cr = gdk_cairo_create (user_data->dlg.dialog_graph.pixmap);
#endif
cairo_move_to (cr,
user_data->dlg.dialog_graph.pixmap_width-right_x_border+15+label_width-lwidth,
user_data->dlg.dialog_graph.pixmap_height-bottom_y_border-draw_height*i/10-label_height/2);
user_data->dlg.dialog_graph.surface_width-right_x_border+15+label_width-lwidth,
user_data->dlg.dialog_graph.surface_height-bottom_y_border-draw_height*i/10-label_height/2);
pango_cairo_show_layout (cr, layout);
cairo_destroy (cr);
cr = NULL;
@ -1104,10 +1128,14 @@ static void dialog_graph_draw(user_data_t* user_data)
print_time_scale_string(label_string, sizeof(label_string), (max_y*i/10));
pango_layout_set_text(layout, label_string, -1);
pango_layout_get_pixel_size(layout, &lwidth, NULL);
#if GTK_CHECK_VERSION(2,22,0)
cr = cairo_create (user_data->dlg.dialog_graph.surface);
#else
cr = gdk_cairo_create (user_data->dlg.dialog_graph.pixmap);
#endif
cairo_move_to (cr,
user_data->dlg.dialog_graph.pixmap_width-right_x_border+15+label_width-lwidth,
user_data->dlg.dialog_graph.pixmap_height-bottom_y_border-draw_height*i/10-label_height/2);
user_data->dlg.dialog_graph.surface_width-right_x_border+15+label_width-lwidth,
user_data->dlg.dialog_graph.surface_height-bottom_y_border-draw_height*i/10-label_height/2);
pango_cairo_show_layout (cr, layout);
cairo_destroy (cr);
cr = NULL;
@ -1132,10 +1160,14 @@ static void dialog_graph_draw(user_data_t* user_data)
/*XXX*/
/* plot the x-scale */
#if GTK_CHECK_VERSION(2,22,0)
cr = cairo_create (user_data->dlg.dialog_graph.surface);
#else
cr = gdk_cairo_create (user_data->dlg.dialog_graph.pixmap);
#endif
cairo_set_line_width (cr, 1.0);
cairo_move_to(cr, left_x_border+0.5, user_data->dlg.dialog_graph.pixmap_height-bottom_y_border+1.5);
cairo_line_to(cr, user_data->dlg.dialog_graph.pixmap_width-right_x_border+1.5,user_data->dlg.dialog_graph.pixmap_height-bottom_y_border+1.5);
cairo_move_to(cr, left_x_border+0.5, user_data->dlg.dialog_graph.surface_height-bottom_y_border+1.5);
cairo_line_to(cr, user_data->dlg.dialog_graph.surface_width-right_x_border+1.5,user_data->dlg.dialog_graph.surface_height-bottom_y_border+1.5);
cairo_stroke(cr);
cairo_destroy(cr);
@ -1172,10 +1204,14 @@ static void dialog_graph_draw(user_data_t* user_data)
}
x=draw_width+left_x_border-((last_interval-current_interval)/user_data->dlg.dialog_graph.interval)*user_data->dlg.dialog_graph.pixels_per_tick;
#if GTK_CHECK_VERSION(2,22,0)
cr = cairo_create (user_data->dlg.dialog_graph.surface);
#else
cr = gdk_cairo_create (user_data->dlg.dialog_graph.pixmap);
#endif
cairo_set_line_width (cr, 1.0);
cairo_move_to(cr, x-1-user_data->dlg.dialog_graph.pixels_per_tick/2+0.5, user_data->dlg.dialog_graph.pixmap_height-bottom_y_border+1.5);
cairo_line_to(cr, x-1-user_data->dlg.dialog_graph.pixels_per_tick/2+0.5, user_data->dlg.dialog_graph.pixmap_height-bottom_y_border+xlen+1.5);
cairo_move_to(cr, x-1-user_data->dlg.dialog_graph.pixels_per_tick/2+0.5, user_data->dlg.dialog_graph.surface_height-bottom_y_border+1.5);
cairo_line_to(cr, x-1-user_data->dlg.dialog_graph.pixels_per_tick/2+0.5, user_data->dlg.dialog_graph.surface_height-bottom_y_border+xlen+1.5);
cairo_stroke(cr);
cairo_destroy(cr);
@ -1191,10 +1227,14 @@ static void dialog_graph_draw(user_data_t* user_data)
}
pango_layout_set_text(layout, label_string, -1);
pango_layout_get_pixel_size(layout, &lwidth, NULL);
#if GTK_CHECK_VERSION(2,22,0)
cr = cairo_create (user_data->dlg.dialog_graph.surface);
#else
cr = gdk_cairo_create (user_data->dlg.dialog_graph.pixmap);
#endif
cairo_move_to (cr,
x-1-user_data->dlg.dialog_graph.pixels_per_tick/2-lwidth/2,
user_data->dlg.dialog_graph.pixmap_height-bottom_y_border+20);
user_data->dlg.dialog_graph.surface_height-bottom_y_border+20);
pango_cairo_show_layout (cr, layout);
cairo_destroy (cr);
cr = NULL;
@ -1214,10 +1254,14 @@ static void dialog_graph_draw(user_data_t* user_data)
g_strlcpy(label_string, UTF8_LEFTWARDS_ARROW "Fwd",sizeof(label_string));
pango_layout_set_text(layout, label_string, -1);
pango_layout_get_pixel_size(layout, &lwidth, NULL);
#if GTK_CHECK_VERSION(2,22,0)
cr = cairo_create (user_data->dlg.dialog_graph.surface);
#else
cr = gdk_cairo_create (user_data->dlg.dialog_graph.pixmap);
#endif
cairo_move_to (cr,
user_data->dlg.dialog_graph.pixmap_width-right_x_border+33-lwidth,
user_data->dlg.dialog_graph.pixmap_height-bottom_y_border+3);
user_data->dlg.dialog_graph.surface_width-right_x_border+33-lwidth,
user_data->dlg.dialog_graph.surface_height-bottom_y_border+3);
pango_cairo_show_layout (cr, layout);
cairo_destroy (cr);
cr = NULL;
@ -1225,10 +1269,14 @@ static void dialog_graph_draw(user_data_t* user_data)
g_strlcpy(label_string, UTF8_LEFTWARDS_ARROW "Rev",sizeof(label_string));
pango_layout_set_text(layout, label_string, -1);
pango_layout_get_pixel_size(layout, &lwidth, NULL);
#if GTK_CHECK_VERSION(2,22,0)
cr = cairo_create (user_data->dlg.dialog_graph.surface);
#else
cr = gdk_cairo_create (user_data->dlg.dialog_graph.pixmap);
#endif
cairo_move_to (cr,
user_data->dlg.dialog_graph.pixmap_width-right_x_border+33-lwidth,
user_data->dlg.dialog_graph.pixmap_height-bottom_y_border+3+9);
user_data->dlg.dialog_graph.surface_width-right_x_border+33-lwidth,
user_data->dlg.dialog_graph.surface_height-bottom_y_border+3+9);
pango_cairo_show_layout (cr, layout);
cairo_destroy (cr);
cr = NULL;
@ -1257,10 +1305,14 @@ static void dialog_graph_draw(user_data_t* user_data)
pango_layout_set_text(layout, label_string, -1);
pango_layout_get_pixel_size(layout, &lwidth, NULL);
#if GTK_CHECK_VERSION(2,22,0)
cr = cairo_create (user_data->dlg.dialog_graph.surface);
#else
cr = gdk_cairo_create (user_data->dlg.dialog_graph.pixmap);
#endif
cairo_move_to (cr,
x_pos-1-lwidth/2,
user_data->dlg.dialog_graph.pixmap_height-bottom_y_border+3+7*(i/2));
user_data->dlg.dialog_graph.surface_height-bottom_y_border+3+7*(i/2));
pango_cairo_show_layout (cr, layout);
cairo_destroy (cr);
cr = NULL;
@ -1306,7 +1358,11 @@ static void dialog_graph_draw(user_data_t* user_data)
}
if(val){
#if GTK_CHECK_VERSION(2,22,0)
cr = cairo_create (user_data->dlg.dialog_graph.surface);
#else
cr = gdk_cairo_create (user_data->dlg.dialog_graph.pixmap);
#endif
gdk_cairo_set_source_color (cr, &user_data->dlg.dialog_graph.graph[i].color);
cairo_set_line_width (cr, 1.0);
cairo_move_to(cr, x_pos+0.5, draw_height-1+top_y_border+0.5);
@ -1322,8 +1378,12 @@ static void dialog_graph_draw(user_data_t* user_data)
cr = gdk_cairo_create (gtk_widget_get_window(user_data->dlg.dialog_graph.draw_area));
#if GTK_CHECK_VERSION(2,22,0)
cairo_set_source_surface (cr, user_data->dlg.dialog_graph.surface, 0, 0);
#else
gdk_cairo_set_source_pixmap (cr, user_data->dlg.dialog_graph.pixmap, 0, 0);
cairo_rectangle (cr, 0, 0, user_data->dlg.dialog_graph.pixmap_width, user_data->dlg.dialog_graph.pixmap_height);
#endif
cairo_rectangle (cr, 0, 0, user_data->dlg.dialog_graph.surface_width, user_data->dlg.dialog_graph.surface_height);
cairo_fill (cr);
cairo_destroy (cr);
@ -1367,7 +1427,11 @@ static gint expose_event(GtkWidget *widget, GdkEventExpose *event)
exit(10);
}
#if GTK_CHECK_VERSION(2,22,0)
cairo_set_source_surface (cr, user_data->dlg.dialog_graph.surface, 0, 0);
#else
gdk_cairo_set_source_pixmap (cr, user_data->dlg.dialog_graph.pixmap, 0, 0);
#endif
cairo_rectangle (cr, event->area.x, event->area.y, event->area.width, event->area.height);
cairo_fill (cr);
@ -1390,6 +1454,17 @@ static gint configure_event(GtkWidget *widget, GdkEventConfigure *event _U_)
exit(10);
}
#if GTK_CHECK_VERSION(2,22,0)
if(user_data->dlg.dialog_graph.surface){
g_object_unref(user_data->dlg.dialog_graph.surface);
user_data->dlg.dialog_graph.surface=NULL;
}
gtk_widget_get_allocation(widget, &widget_alloc);
user_data->dlg.dialog_graph.surface = gdk_window_create_similar_surface (gtk_widget_get_window(widget),
CAIRO_CONTENT_COLOR,
widget_alloc.width,
widget_alloc.height);
#else
if(user_data->dlg.dialog_graph.pixmap){
g_object_unref(user_data->dlg.dialog_graph.pixmap);
user_data->dlg.dialog_graph.pixmap=NULL;
@ -1400,14 +1475,19 @@ static gint configure_event(GtkWidget *widget, GdkEventConfigure *event _U_)
widget_alloc.width,
widget_alloc.height,
-1);
user_data->dlg.dialog_graph.pixmap_width=widget_alloc.width;
user_data->dlg.dialog_graph.pixmap_height=widget_alloc.height;
#endif
user_data->dlg.dialog_graph.surface_width=widget_alloc.width;
user_data->dlg.dialog_graph.surface_height=widget_alloc.height;
bt_save = g_object_get_data(G_OBJECT(user_data->dlg.dialog_graph.window), "bt_save");
g_object_set_data(G_OBJECT(bt_save), "pixmap", user_data->dlg.dialog_graph.pixmap);
/*g_object_set_data(G_OBJECT(bt_save), "pixmap", user_data->dlg.dialog_graph.pixmap); Not used ?*/
gtk_widget_set_sensitive(bt_save, TRUE);
#if GTK_CHECK_VERSION(2,22,0)
cr = cairo_create (user_data->dlg.dialog_graph.surface);
#else
cr = gdk_cairo_create (user_data->dlg.dialog_graph.pixmap);
#endif
cairo_rectangle (cr, 0, 0, widget_alloc.width, widget_alloc.height);
cairo_set_source_rgb (cr, 1, 1, 1);
cairo_fill (cr);
@ -1445,7 +1525,7 @@ static void create_draw_area(user_data_t* user_data, GtkWidget *box)
g_signal_connect(user_data->dlg.dialog_graph.draw_area, "destroy", G_CALLBACK(quit), user_data);
g_object_set_data(G_OBJECT(user_data->dlg.dialog_graph.draw_area), "user_data_t", user_data);
gtk_widget_set_size_request(user_data->dlg.dialog_graph.draw_area, user_data->dlg.dialog_graph.pixmap_width, user_data->dlg.dialog_graph.pixmap_height);
gtk_widget_set_size_request(user_data->dlg.dialog_graph.draw_area, user_data->dlg.dialog_graph.surface_width, user_data->dlg.dialog_graph.surface_height);
/* signals needed to handle backing pixmap */
g_signal_connect(user_data->dlg.dialog_graph.draw_area, "expose_event", G_CALLBACK(expose_event), NULL);
@ -3592,11 +3672,15 @@ void rtp_analysis(
user_data->dlg.dialog_graph.interval_index=DEFAULT_TICK_INTERVAL_VALUES_INDEX;
user_data->dlg.dialog_graph.interval=tick_interval_values[DEFAULT_TICK_INTERVAL_VALUES_INDEX];
user_data->dlg.dialog_graph.draw_area=NULL;
#if GTK_CHECK_VERSION(2,22,0)
user_data->dlg.dialog_graph.surface=NULL;
#else
user_data->dlg.dialog_graph.pixmap=NULL;
#endif
user_data->dlg.dialog_graph.scrollbar=NULL;
user_data->dlg.dialog_graph.scrollbar_adjustment=NULL;
user_data->dlg.dialog_graph.pixmap_width=500;
user_data->dlg.dialog_graph.pixmap_height=200;
user_data->dlg.dialog_graph.surface_width=500;
user_data->dlg.dialog_graph.surface_height=200;
user_data->dlg.dialog_graph.pixels_per_tick_index=DEFAULT_PIXELS_PER_TICK_INDEX;
user_data->dlg.dialog_graph.pixels_per_tick=pixels_per_tick[DEFAULT_PIXELS_PER_TICK_INDEX];
user_data->dlg.dialog_graph.max_y_units_index=AUTO_MAX_YSCALE_INDEX;