home *** CD-ROM | disk | FTP | other *** search
/ Freelog 65 / Freelog065.iso / BAS / Bureautique / Gnumeric / gnumeric-1.3.92-rc1.exe / colorsel.c < prev    next >
C/C++ Source or Header  |  2004-10-15  |  4KB  |  139 lines

  1. /* Color Selector
  2.  *
  3.  * GtkColorSelection lets the user choose a color. GtkColorSelectionDialog is
  4.  * a prebuilt dialog containing a GtkColorSelection.
  5.  *
  6.  */
  7.  
  8. #include <config.h>
  9. #include <gtk/gtk.h>
  10.  
  11. static GtkWidget *window = NULL;
  12. static GtkWidget *da;
  13. static GdkColor color;
  14. static GtkWidget *frame;
  15.  
  16. /* Expose callback for the drawing area
  17.  */
  18. static gboolean
  19. expose_event_callback (GtkWidget *widget, GdkEventExpose *event, gpointer data)
  20. {
  21.   if (widget->window)
  22.     {
  23.       GtkStyle *style;
  24.  
  25.       style = gtk_widget_get_style (widget);
  26.  
  27.       gdk_draw_rectangle (widget->window,
  28.                           style->bg_gc[GTK_STATE_NORMAL],
  29.                           TRUE,
  30.                           event->area.x, event->area.y,
  31.                           event->area.width, event->area.height);
  32.     }
  33.  
  34.   return TRUE;
  35. }
  36.  
  37. static void
  38. change_color_callback (GtkWidget *button,
  39.                gpointer      data)
  40. {
  41.   GtkWidget *dialog;
  42.   GtkColorSelection *colorsel;
  43.   gint response;
  44.   
  45.   dialog = gtk_color_selection_dialog_new ("Changing color");
  46.  
  47.   gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (window));
  48.   
  49.   colorsel = GTK_COLOR_SELECTION (GTK_COLOR_SELECTION_DIALOG (dialog)->colorsel);
  50.  
  51.   gtk_color_selection_set_previous_color (colorsel, &color);
  52.   gtk_color_selection_set_current_color (colorsel, &color);
  53.   gtk_color_selection_set_has_palette (colorsel, TRUE);
  54.   
  55.   response = gtk_dialog_run (GTK_DIALOG (dialog));
  56.  
  57.   if (response == GTK_RESPONSE_OK)
  58.     {
  59.       gtk_color_selection_get_current_color (colorsel,
  60.                          &color);
  61.       
  62.       gtk_widget_modify_bg (da, GTK_STATE_NORMAL, &color);
  63.     }
  64.   
  65.   gtk_widget_destroy (dialog);
  66. }
  67.  
  68. GtkWidget *
  69. do_colorsel (GtkWidget *do_widget)
  70. {
  71.   GtkWidget *vbox;
  72.   GtkWidget *button;
  73.   GtkWidget *alignment;
  74.   
  75.   if (!window)
  76.     {
  77.       color.red = 0;
  78.       color.blue = 65535;
  79.       color.green = 0;
  80.       
  81.       window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  82.       gtk_window_set_screen (GTK_WINDOW (window),
  83.                  gtk_widget_get_screen (do_widget));
  84.       gtk_window_set_title (GTK_WINDOW (window), "Color Selection");
  85.  
  86.       g_signal_connect (window, "destroy",
  87.             G_CALLBACK (gtk_widget_destroyed), &window);
  88.  
  89.       gtk_container_set_border_width (GTK_CONTAINER (window), 8);
  90.  
  91.       vbox = gtk_vbox_new (FALSE, 8);
  92.       gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
  93.       gtk_container_add (GTK_CONTAINER (window), vbox);
  94.  
  95.       /*
  96.        * Create the color swatch area
  97.        */
  98.       
  99.       
  100.       frame = gtk_frame_new (NULL);
  101.       gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
  102.       gtk_box_pack_start (GTK_BOX (vbox), frame, TRUE, TRUE, 0);
  103.  
  104.       da = gtk_drawing_area_new ();
  105.  
  106.       g_signal_connect (da, "expose_event",
  107.             G_CALLBACK (expose_event_callback), NULL);
  108.  
  109.       /* set a minimum size */
  110.       gtk_widget_set_size_request (da, 200, 200);
  111.       /* set the color */
  112.       gtk_widget_modify_bg (da, GTK_STATE_NORMAL, &color);
  113.       
  114.       gtk_container_add (GTK_CONTAINER (frame), da);
  115.  
  116.       alignment = gtk_alignment_new (1.0, 0.5, 0.0, 0.0);
  117.       
  118.       button = gtk_button_new_with_mnemonic ("_Change the above color");
  119.       gtk_container_add (GTK_CONTAINER (alignment), button);
  120.       
  121.       gtk_box_pack_start (GTK_BOX (vbox), alignment, FALSE, FALSE, 0);
  122.       
  123.       g_signal_connect (button, "clicked",
  124.             G_CALLBACK (change_color_callback), NULL);
  125.     }
  126.  
  127.   if (!GTK_WIDGET_VISIBLE (window))
  128.     {
  129.       gtk_widget_show_all (window);
  130.     }
  131.   else
  132.     {
  133.       gtk_widget_destroy (window);
  134.       window = NULL;
  135.     }
  136.  
  137.   return window;
  138. }
  139.