gtk_widget_show_all() is not enough to show data plots
[email protected] Fri, 09 Sep 2005 11:13:01 -0300
| Newsgroups | gmane.comp.scigraphica.gtkextra |
|---|---|
| Message-ID | <[email protected]> |
Hello. I am learning gtk+extra-2, and came to the following issue: If I use gtk_show_all(window), where window is the top level window of the application, to enable showing the window and all its components, a dataset is not drawn. To test this I used the attached C program. The dataset is not plot if lines 53 and 68 are commented out. Is this a bug? Romildo --------------------- WEBMAIL UBER INTERNET
testgtkplot-simple.c
(text/x-csrc, 2.2 KB)
/* plot.c */
#include <gtk/gtk.h>
#include <gtkextra/gtkplot.h>
#include <gtkextra/gtkplotcanvas.h>
#include <gtkextra/gtkplotcanvasplot.h>
#include <gtkextra/gtkplotdata.h>
#include <math.h>
#define NPOINTS 20
int main(int argc, char *argv[])
{
GtkWidget *window;
GtkWidget *canvas;
GtkPlot *plot;
GtkPlotData *dataset;
GtkPlotCanvasChild *child;
gdouble px[NPOINTS];
gdouble py[NPOINTS];
gint i;
gtk_init(&argc, &argv);
/* main window */
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "Plot");
gtk_container_border_width(GTK_CONTAINER(window), 8);
g_signal_connect(GTK_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
/* canvas */
canvas = gtk_plot_canvas_new(400, 300, 1.0);
GTK_PLOT_CANVAS_UNSET_FLAGS(GTK_PLOT_CANVAS(canvas), GTK_PLOT_CANVAS_DND_FLAGS);
gtk_container_add(GTK_CONTAINER(window), canvas);
/* plot */
plot = GTK_PLOT(gtk_plot_new(NULL));
gtk_plot_set_range(plot, 0, 2*M_PI, -10, 10);
gtk_plot_set_ticks(plot, GTK_PLOT_AXIS_X, 1, 4);
gtk_plot_set_ticks(plot, GTK_PLOT_AXIS_Y, 5, 4);
gtk_plot_axis_hide_title(gtk_plot_get_axis(plot, GTK_PLOT_AXIS_TOP));
gtk_plot_axis_hide_title(gtk_plot_get_axis(plot, GTK_PLOT_AXIS_RIGHT));
gtk_plot_axis_set_title(gtk_plot_get_axis(plot, GTK_PLOT_AXIS_BOTTOM), "x");
gtk_plot_axis_set_title(gtk_plot_get_axis(plot, GTK_PLOT_AXIS_LEFT), "sin(x)");
gtk_plot_hide_legends(plot);
/* canvas plot */
child = gtk_plot_canvas_plot_new(plot);
gtk_plot_canvas_put_child(GTK_PLOT_CANVAS(canvas), child, 0.15, 0.15, 0.85, 0.85);
gtk_widget_show(GTK_WIDGET(plot));
/* plot dataset */
for (i = 0; i < NPOINTS; i++)
{
const gdouble x = i * (2*M_PI) / NPOINTS;
px[i] = x;
py[i] = 10.0 * sin(x);
/* g_printf("%i x = %f y = %f\n", i, px[i], py[i]); */
}
dataset = GTK_PLOT_DATA(gtk_plot_data_new());
gtk_plot_add_data(plot, dataset);
gtk_plot_data_set_points(dataset, px, py, NULL, NULL, NPOINTS);
gtk_plot_data_draw_points(dataset, NPOINTS);
gtk_widget_show(GTK_WIDGET(dataset));
gtk_plot_canvas_paint(GTK_PLOT_CANVAS(canvas));
gtk_plot_canvas_refresh(GTK_PLOT_CANVAS(canvas));
gtk_widget_show_all(window);
gtk_main();
return 0;
}