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;
}