"Fossies" - the Fresh Open Source Software Archive

Member "gtkdatabox-1.0.0/examples/colors.c" (31 Mar 2021, 6054 Bytes) of package /linux/privat/gtkdatabox-1.0.0.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file.

    1 /* $Id: colors.c 4 2008-06-22 09:19:11Z rbock $ */
    2 /* GtkDatabox - An extension to the gtk+ library
    3  * Copyright (C) 1998-2008  Dr. Roland Bock
    4  *
    5  * This library is free software; you can redistribute it and/or
    6  * modify it under the terms of the GNU Library General Public
    7  * License as published by the Free Software Foundation; either
    8  * version 2 of the License, or (at your option) any later version.
    9  *
   10  * This library is distributed in the hope that it will be useful,
   11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
   12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   13  * Library General Public License for more details.
   14  *
   15  * You should have received a copy of the GNU Library General Public
   16  * License along with this library; if not, write to the
   17  * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 
   18  * Boston, MA 02110-1301 USA.
   19  */
   20 #include <stdio.h>
   21 #include <gtk/gtk.h>
   22 #include <gtkdatabox.h>
   23 #include <gtkdatabox_points.h>
   24 #include <math.h>
   25 
   26 #define POINTS 2000
   27 #define NO_OF_DATASETS 5
   28 
   29 typedef struct
   30 {
   31    GtkWidget *selector;
   32    GtkWidget *box;
   33    GtkDataboxGraph *graph;
   34    gint index;
   35 }
   36 col_sel;
   37 
   38 static void
   39 get_color_cb(GtkDialog *dialog, gint response_id, gpointer user_data)
   40 {
   41     GdkRGBA rgba;
   42     col_sel *sel = (col_sel *)user_data;
   43 
   44     g_return_if_fail (GTK_IS_DATABOX (sel->box));
   45 
   46     if (response_id == GTK_RESPONSE_OK)
   47     {
   48         gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(dialog), &rgba);
   49         gtk_databox_graph_set_color (sel->graph, &rgba);
   50         gtk_widget_queue_draw (GTK_WIDGET (sel->box));
   51     }
   52     gtk_widget_destroy(GTK_WIDGET(dialog));
   53 }
   54 
   55 static void
   56 menu_color_change_cb (col_sel * sel)
   57 {
   58    GtkWidget *selector;
   59    gchar title[20];
   60    GdkRGBA rgba;
   61 
   62    sprintf (title, "Choose color #%d", sel->index);
   63    selector = gtk_color_chooser_dialog_new(title, NULL);
   64    sel->selector = selector;
   65 
   66    rgba = *gtk_databox_graph_get_color (sel->graph);
   67    gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(sel->selector), &rgba);
   68    gtk_color_chooser_set_use_alpha(GTK_COLOR_CHOOSER(sel->selector), FALSE);
   69    g_signal_connect(G_OBJECT(sel->selector), "response", G_CALLBACK(get_color_cb), (gpointer)sel);
   70    gtk_widget_show (GTK_WIDGET (sel->selector));
   71 
   72    return;
   73 }
   74 
   75 static void
   76 create_menu_entry (GtkWidget * menu, int index,
   77            GtkWidget * box, GtkDataboxGraph * graph)
   78 {
   79    GtkWidget *menu_items;
   80    char buf[128];
   81    col_sel *sel = g_new0 (col_sel, 1);
   82 
   83    sel->index = index;
   84    sel->box = box;
   85    sel->graph = graph;
   86    sprintf (buf, "Change Color #%d", index);
   87    menu_items = gtk_menu_item_new_with_label (buf);
   88    gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
   89 
   90    g_signal_connect_swapped (G_OBJECT (menu_items), "activate",
   91                  G_CALLBACK (menu_color_change_cb),
   92                  (gpointer) sel);
   93 
   94    gtk_widget_show (menu_items);
   95 }
   96 
   97 static void
   98 create_colors (void)
   99 {
  100    static GtkWidget *window = NULL;
  101    GtkWidget *box1 = NULL;
  102    GtkWidget *box2 = NULL;
  103    GtkWidget *close_button = NULL;
  104    GtkWidget *box = NULL;
  105    GtkWidget *separator;
  106    GtkWidget *label;
  107    GtkWidget *menu;
  108    GtkWidget *root_menu;
  109    GtkWidget *menu_bar;
  110    gfloat *X = NULL;
  111    gfloat *Y = NULL;
  112    gint i, j;
  113    GtkDataboxGraph *graph;
  114    GdkRGBA color;
  115 
  116    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  117    gtk_widget_set_size_request (window, 500, 300);
  118 
  119    g_signal_connect (G_OBJECT (window), "destroy",
  120              G_CALLBACK (gtk_main_quit), NULL);
  121 
  122    gtk_window_set_title (GTK_WINDOW (window), "GtkDatabox: Colors");
  123    gtk_container_set_border_width (GTK_CONTAINER (window), 0);
  124 
  125    box1 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
  126    gtk_container_add (GTK_CONTAINER (window), box1);
  127 
  128    box = gtk_databox_new ();
  129    gtk_databox_set_enable_selection (GTK_DATABOX (box), FALSE);
  130    gtk_databox_set_enable_zoom (GTK_DATABOX (box), FALSE);
  131 
  132    gtk_databox_set_bg_color (GTK_DATABOX (box), "black");
  133 
  134    menu = gtk_menu_new ();
  135    root_menu = gtk_menu_item_new_with_label ("Color Menu");
  136    gtk_menu_item_set_submenu (GTK_MENU_ITEM (root_menu), menu);
  137    menu_bar = gtk_menu_bar_new ();
  138    gtk_menu_shell_append (GTK_MENU_SHELL (menu_bar), root_menu);
  139    gtk_box_pack_start (GTK_BOX (box1), menu_bar, FALSE, TRUE, 0);
  140 
  141 
  142    label =
  143       gtk_label_new
  144       ("You can change the colors of the shown datasets via the menu.\n\n");
  145    gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 0);
  146    separator = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
  147    gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, FALSE, 0);
  148 
  149    g_signal_connect (G_OBJECT (box), "destroy",
  150              G_CALLBACK (gtk_main_quit), NULL);
  151 
  152    color.alpha = 1.0;
  153    for (i = 0; i < NO_OF_DATASETS; i++)
  154    {
  155       if (!i)
  156      X = g_new0 (gfloat, POINTS);
  157       Y = g_new0 (gfloat, POINTS);
  158       for (j = 0; j < POINTS; j++)
  159       {
  160      X[j] = j;
  161      Y[j] = 100. * sin ((i + 1) * 2 * j * G_PI / POINTS);
  162       }
  163       color.red = 1 * ((i + 1) % 2);
  164       color.green = (1 / 2) * ((i + 1) % 3);
  165       color.blue = (1 / 3) * ((i + 1) % 4);
  166       graph = gtk_databox_points_new (POINTS, X, Y, &color, 1);
  167       gtk_databox_graph_add (GTK_DATABOX (box), graph);
  168       create_menu_entry (menu, i, box, graph);
  169    }
  170 
  171    gtk_databox_auto_rescale (GTK_DATABOX (box), 0.05);
  172 
  173    gtk_box_pack_start (GTK_BOX (box1), box, TRUE, TRUE, 0);
  174 
  175    separator = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
  176    gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
  177 
  178    box2 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 10);
  179    gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
  180    gtk_box_pack_end (GTK_BOX (box1), box2, FALSE, TRUE, 0);
  181    close_button = gtk_button_new_with_label ("close");
  182    g_signal_connect (G_OBJECT (close_button), "clicked",
  183              G_CALLBACK (gtk_main_quit), (gpointer) NULL);
  184    gtk_box_pack_start (GTK_BOX (box2), close_button, TRUE, TRUE, 0);
  185    gtk_widget_set_can_default(close_button, TRUE);
  186    gtk_widget_grab_default (close_button);
  187 
  188 
  189 
  190 
  191 
  192    gtk_widget_show_all (window);
  193 
  194 }
  195 
  196 gint
  197 main (gint argc, char *argv[])
  198 {
  199    gtk_init (&argc, &argv);
  200 
  201    create_colors ();
  202    gtk_main ();
  203 
  204    return 0;
  205 }