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