3 * A GtkColorChooser lets the user choose a color. There are several
4 * implementations of the GtkColorChooser interface in GTK+. The
5 * GtkColorChooserDialog is a prebuilt dialog containing a
6 * GtkColorChooserWidget.
11 static GtkWidget *window = NULL;
14 static GtkWidget *frame;
16 /* draw callback for the drawing area
19 draw_callback (GtkWidget *widget,
23 GtkStyleContext *context;
26 context = gtk_widget_get_style_context (widget);
27 gtk_style_context_get_background_color (context, GTK_STATE_FLAG_NORMAL, &rgba);
28 gdk_cairo_set_source_rgba (cr, &rgba);
35 response_cb (GtkDialog *dialog,
39 if (response_id == GTK_RESPONSE_OK)
41 gtk_color_chooser_get_rgba (GTK_COLOR_CHOOSER (dialog), &color);
42 gtk_widget_override_background_color (da, 0, &color);
45 gtk_widget_hide (GTK_WIDGET (dialog));
49 change_color_callback (GtkWidget *button,
54 dialog = gtk_color_chooser_dialog_new ("Changing color", GTK_WINDOW (window));
55 gtk_color_chooser_set_rgba (GTK_COLOR_CHOOSER (dialog), &color);
57 g_signal_connect (dialog,
59 G_CALLBACK (response_cb),
62 gtk_widget_show_all (dialog);
66 do_colorsel (GtkWidget *do_widget)
78 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
79 gtk_window_set_screen (GTK_WINDOW (window),
80 gtk_widget_get_screen (do_widget));
81 gtk_window_set_title (GTK_WINDOW (window), "Color Chooser");
83 g_signal_connect (window, "destroy",
84 G_CALLBACK (gtk_widget_destroyed), &window);
86 gtk_container_set_border_width (GTK_CONTAINER (window), 8);
88 vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 8);
89 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
90 gtk_container_add (GTK_CONTAINER (window), vbox);
93 * Create the color swatch area
97 frame = gtk_frame_new (NULL);
98 gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
99 gtk_box_pack_start (GTK_BOX (vbox), frame, TRUE, TRUE, 0);
101 da = gtk_drawing_area_new ();
103 g_signal_connect (da, "draw", G_CALLBACK (draw_callback), NULL);
105 /* set a minimum size */
106 gtk_widget_set_size_request (da, 200, 200);
108 gtk_widget_override_background_color (da, 0, &color);
110 gtk_container_add (GTK_CONTAINER (frame), da);
112 button = gtk_button_new_with_mnemonic ("_Change the above color");
113 gtk_widget_set_halign (button, GTK_ALIGN_END);
114 gtk_widget_set_valign (button, GTK_ALIGN_CENTER);
116 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
118 g_signal_connect (button, "clicked",
119 G_CALLBACK (change_color_callback), NULL);
122 if (!gtk_widget_get_visible (window))
124 gtk_widget_show_all (window);
128 gtk_widget_destroy (window);