static gboolean
lissajous_idle_func (GtkDatabox * box)
{
   gfloat freq;
   gfloat off;
   gchar label[10];
   gint i;

   if (!GTK_IS_DATABOX (box))
      return FALSE;

   lissajous_frequency += 0.001;
   off = lissajous_counter * 4 * G_PI / POINTS;

   freq = 14 + 10 * sin (lissajous_frequency);
   for (i = 0; i < POINTS; i++)
   {
      lissajousX[i] = 100. * sin (i * 4 * G_PI / POINTS + off);
      lissajousY[i] = 100. * cos (i * freq * G_PI / POINTS + off);
   }


   gtk_widget_queue_draw (GTK_WIDGET (box));

   sprintf (label, "%d", lissajous_counter++);
   gtk_entry_set_text (GTK_ENTRY (lissajous_label), label);

   return TRUE;
}
Exemple #2
0
static void
get_color_cb (col_sel * sel /*, GtkWidget *widget */ )
{
   GdkColor color;

   g_return_if_fail (GTK_IS_COLOR_SELECTION_DIALOG (sel->selector));
   g_return_if_fail (GTK_IS_DATABOX (sel->box));

   gtk_color_selection_get_current_color (GTK_COLOR_SELECTION
					  (sel->selector->colorsel), &color);

   gtk_databox_graph_set_color (sel->graph, &color);
   gtk_widget_queue_draw (GTK_WIDGET (sel->box));
}
static void
get_color_cb(GtkDialog *dialog, gint response_id, gpointer user_data)
{
	GdkRGBA rgba;
	col_sel *sel = (col_sel *)user_data;

	g_return_if_fail (GTK_IS_DATABOX (sel->box));

	if (response_id == GTK_RESPONSE_OK)
	{
		gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(dialog), &rgba);
		gtk_databox_graph_set_color (sel->graph, &rgba);
		gtk_widget_queue_draw (GTK_WIDGET (sel->box));
	}
	gtk_widget_destroy(GTK_WIDGET(dialog));
}
static void
gtk_databox_grid_real_draw (GtkDataboxGraph * graph,
			    GtkDatabox* box)
{
   GtkWidget *widget;
   GtkDataboxGrid *grid = GTK_DATABOX_GRID (graph);
   GtkDataboxGridPrivate *priv = GTK_DATABOX_GRID_GET_PRIVATE(grid);   gint i = 0;
   gfloat x;
   gfloat y;
   gint16 width;
   gint16 height;
   gfloat offset_x;
   gfloat offset_y;
   gfloat factor_x;
   gfloat factor_y;
   gint16 pixel_x;
   gint16 pixel_y;
   gfloat left, right, top, bottom;
   cairo_t *cr;
   GtkAllocation allocation;

   g_return_if_fail (GTK_DATABOX_IS_GRID (grid));
   g_return_if_fail (GTK_IS_DATABOX (box));

   widget = GTK_WIDGET(box);
   gtk_widget_get_allocation(widget, &allocation);

   gtk_databox_get_total_limits (box, &left, &right, &top, &bottom);

   cr = gtk_databox_graph_create_gc (graph, box);

   width = allocation.width;
   height = allocation.height;

   offset_x = left;
   factor_x =
      (right - left) / (priv->vlines + 1);

   offset_y = top;
   factor_y =
      (bottom - top) / (priv->hlines + 1);

   if (priv->hline_vals == NULL)
      for (i = 0; i < priv->hlines; i++)
      {
         y = offset_y + (i + 1) * factor_y;
         pixel_y = gtk_databox_value_to_pixel_y (box, y);
         cairo_move_to (cr, 0.0, pixel_y + 0.5);
         cairo_line_to (cr, width, pixel_y + 0.5);
      }
   else
      for (i = 0; i < priv->hlines; i++)
      {
         y = priv->hline_vals[i];
         pixel_y = gtk_databox_value_to_pixel_y (box, y);
         cairo_move_to (cr, 0.0, pixel_y + 0.5);
         cairo_line_to (cr, width, pixel_y + 0.5);
      }

   if (priv->vline_vals == NULL)
      for (i = 0; i < priv->vlines; i++)
      {
         x = offset_x + (i + 1) * factor_x;
         pixel_x = gtk_databox_value_to_pixel_x (box, x);
         cairo_move_to (cr, pixel_x + 0.5, 0.0);
         cairo_line_to (cr, pixel_x + 0.5, height);
      }
   else
      for (i = 0; i < priv->vlines; i++)
      {
         x = priv->vline_vals[i];
         pixel_x = gtk_databox_value_to_pixel_x (box, x);
         cairo_move_to (cr, pixel_x + 0.5, 0);
         cairo_line_to (cr, pixel_x + 0.5, height);
      }
   cairo_stroke(cr);
   cairo_destroy(cr);

   return;
}
static void
gtk_databox_bars_real_draw (GtkDataboxGraph * graph,
			    GtkDatabox* box)
{
   GtkDataboxBars *bars = GTK_DATABOX_BARS (graph);
   GtkDataboxBarsPrivate *priv=GTK_DATABOX_BARS_GET_PRIVATE(bars);
   guint i = 0;
   void *X;
   void *Y;
   guint len, maxlen;
   gint16 zero = 0;
   gfloat fzero = 0.0;
   cairo_t *cr;
   gint16 *xpixels, *ypixels;
   guint xstart, xstride, ystart, ystride;
   GType xtype, ytype;

   g_return_if_fail (GTK_DATABOX_IS_BARS (bars));
   g_return_if_fail (GTK_IS_DATABOX (box));

   if (gtk_databox_get_scale_type_y (box) == GTK_DATABOX_SCALE_LOG)
      g_warning
	 ("gtk_databox_bars do not work well with logarithmic scale in Y axis");

   cr = gtk_databox_graph_create_gc (graph, box);

   len = gtk_databox_xyc_graph_get_length (GTK_DATABOX_XYC_GRAPH (graph));
   maxlen = gtk_databox_xyc_graph_get_maxlen (GTK_DATABOX_XYC_GRAPH (graph));

   if (priv->pixelsalloc < len)
   {
   	priv->pixelsalloc = len;
	priv->xpixels = (gint16 *)g_realloc(priv->xpixels, len * sizeof(gint16));
	priv->ypixels = (gint16 *)g_realloc(priv->ypixels, len * sizeof(gint16));
   }

   xpixels = priv->xpixels;
   ypixels = priv->ypixels;

   X = gtk_databox_xyc_graph_get_X (GTK_DATABOX_XYC_GRAPH (graph));
   xstart = gtk_databox_xyc_graph_get_xstart (GTK_DATABOX_XYC_GRAPH (graph));
   xstride = gtk_databox_xyc_graph_get_xstride (GTK_DATABOX_XYC_GRAPH (graph));
   xtype = gtk_databox_xyc_graph_get_xtype (GTK_DATABOX_XYC_GRAPH (graph));
   gtk_databox_values_to_xpixels(box, xpixels, X, xtype, maxlen, xstart, xstride, len);

   Y = gtk_databox_xyc_graph_get_Y (GTK_DATABOX_XYC_GRAPH (graph));
   ystart = gtk_databox_xyc_graph_get_ystart (GTK_DATABOX_XYC_GRAPH (graph));
   ystride = gtk_databox_xyc_graph_get_ystride (GTK_DATABOX_XYC_GRAPH (graph));
   ytype = gtk_databox_xyc_graph_get_ytype (GTK_DATABOX_XYC_GRAPH (graph));
   gtk_databox_values_to_ypixels(box, ypixels, Y, ytype, maxlen, ystart, ystride, len);

   gtk_databox_values_to_ypixels(box, &zero, &fzero, G_TYPE_FLOAT, 1, 0, 1, 1);

   for (i = 0; i < len; i++, xpixels++, ypixels++)
   {
      cairo_move_to (cr, *xpixels + 0.5, zero + 0.5);
      cairo_line_to (cr, *xpixels + 0.5, *ypixels + 0.5);
   }
   cairo_stroke(cr);
   cairo_destroy(cr);

   return;
}