From 2a8d3f78e92b3f6d3f70f67927a4d03e2905cb1d Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Wed, 1 Feb 2012 00:58:07 -0500 Subject: [PATCH] Use a swatch in the editor For now, we simply make it insensitive to turn off unwanted interactivity. --- gtk/gtkcoloreditor.c | 74 ++++++++++++++++---------------------------- 1 file changed, 26 insertions(+), 48 deletions(-) diff --git a/gtk/gtkcoloreditor.c b/gtk/gtkcoloreditor.c index 084c5a2b34..99168b5fb3 100644 --- a/gtk/gtkcoloreditor.c +++ b/gtk/gtkcoloreditor.c @@ -18,7 +18,7 @@ */ /* TODO - * - custom sliders + * - move out custom sliders * - pop-up entries */ @@ -27,6 +27,7 @@ #include "gtkcolorchooserprivate.h" #include "gtkcoloreditor.h" #include "gtkcolorplane.h" +#include "gtkcolorswatch.h" #include "gtkgrid.h" #include "gtkscale.h" #include "gtkaspectframe.h" @@ -144,7 +145,7 @@ h_changed (GtkAdjustment *adj, &editor->priv->color.blue); gtk_color_plane_set_h (GTK_COLOR_PLANE (editor->priv->sv_plane), editor->priv->h); update_entry (editor); - gtk_widget_queue_draw (editor->priv->swatch); + gtk_color_swatch_set_color (GTK_COLOR_SWATCH (editor->priv->swatch), &editor->priv->color); gtk_widget_queue_draw (editor->priv->a_slider); if (editor->priv->a_surface) { @@ -165,7 +166,7 @@ sv_changed (GtkColorPlane *plane, &editor->priv->color.green, &editor->priv->color.blue); update_entry (editor); - gtk_widget_queue_draw (editor->priv->swatch); + gtk_color_swatch_set_color (GTK_COLOR_SWATCH (editor->priv->swatch), &editor->priv->color); gtk_widget_queue_draw (editor->priv->a_slider); if (editor->priv->a_surface) { @@ -180,7 +181,7 @@ a_changed (GtkAdjustment *adj, GtkColorEditor *editor) { editor->priv->color.alpha = gtk_adjustment_get_value (adj); - gtk_widget_queue_draw (editor->priv->swatch); + gtk_color_swatch_set_color (GTK_COLOR_SWATCH (editor->priv->swatch), &editor->priv->color); g_object_notify (G_OBJECT (editor), "color"); } @@ -205,32 +206,6 @@ get_checkered_pattern (void) return pattern; } -static gboolean -swatch_draw (GtkWidget *widget, - cairo_t *cr, - GtkColorEditor *editor) -{ - cairo_pattern_t *checkered; - - if (editor->priv->show_alpha) - { - cairo_set_source_rgb (cr, 0.33, 0.33, 0.33); - cairo_paint (cr); - - cairo_set_source_rgb (cr, 0.66, 0.66, 0.66); - cairo_scale (cr, 8, 8); - - checkered = get_checkered_pattern (); - cairo_mask (cr, checkered); - cairo_pattern_destroy (checkered); - } - - gdk_cairo_set_source_rgba (cr, &editor->priv->color); - cairo_paint (cr); - - return TRUE; -} - static cairo_surface_t * create_h_surface (GtkWidget *widget) { @@ -409,8 +384,10 @@ gtk_color_editor_init (GtkColorEditor *editor) gtk_grid_set_row_spacing (GTK_GRID (grid), 12); gtk_grid_set_column_spacing (GTK_GRID (grid), 12); - editor->priv->swatch = gtk_drawing_area_new (); - g_signal_connect (editor->priv->swatch, "draw", G_CALLBACK (swatch_draw), editor); + editor->priv->swatch = gtk_color_swatch_new (); + gtk_widget_set_sensitive (editor->priv->swatch, FALSE); + gtk_color_swatch_set_corner_radii (GTK_COLOR_SWATCH (editor->priv->swatch), 2, 2, 2, 2); + editor->priv->entry = gtk_entry_new (); g_signal_connect (editor->priv->entry, "activate", G_CALLBACK (entry_apply), editor); @@ -486,10 +463,9 @@ gtk_color_editor_set_show_alpha (GtkColorEditor *editor, { editor->priv->show_alpha = show_alpha; - if (show_alpha) - gtk_widget_show (editor->priv->a_slider); - else - gtk_widget_hide (editor->priv->a_slider); + gtk_widget_set_visible (editor->priv->a_slider, show_alpha); + + gtk_color_swatch_set_show_alpha (GTK_COLOR_SWATCH (editor->priv->swatch), show_alpha); } } @@ -561,29 +537,31 @@ gtk_color_editor_set_color (GtkColorChooser *chooser, const GdkRGBA *color) { GtkColorEditor *editor = GTK_COLOR_EDITOR (chooser); + gdouble h, s, v; editor->priv->color.red = color->red; editor->priv->color.green = color->green; editor->priv->color.blue = color->blue; - gtk_rgb_to_hsv (editor->priv->color.red, - editor->priv->color.green, - editor->priv->color.blue, - &editor->priv->h, &editor->priv->s, &editor->priv->v); - gtk_color_plane_set_h (GTK_COLOR_PLANE (editor->priv->sv_plane), editor->priv->h); - gtk_color_plane_set_s (GTK_COLOR_PLANE (editor->priv->sv_plane), editor->priv->s); - gtk_color_plane_set_v (GTK_COLOR_PLANE (editor->priv->sv_plane), editor->priv->v); - gtk_adjustment_set_value (editor->priv->h_adj, editor->priv->h); + editor->priv->color.alpha = color->alpha; + gtk_rgb_to_hsv (color->red, color->green, color->blue, &h, &s, &v); + editor->priv->h = h; + editor->priv->s = s; + editor->priv->v = v; + gtk_color_plane_set_h (GTK_COLOR_PLANE (editor->priv->sv_plane), h); + gtk_color_plane_set_s (GTK_COLOR_PLANE (editor->priv->sv_plane), s); + gtk_color_plane_set_v (GTK_COLOR_PLANE (editor->priv->sv_plane), v); + gtk_color_swatch_set_color (GTK_COLOR_SWATCH (editor->priv->swatch), color); + + gtk_adjustment_set_value (editor->priv->h_adj, h); + gtk_adjustment_set_value (editor->priv->a_adj, color->alpha); update_entry (editor); - editor->priv->color.alpha = color->alpha; - gtk_adjustment_set_value (editor->priv->a_adj, editor->priv->color.alpha); - - gtk_widget_queue_draw (GTK_WIDGET (editor)); if (editor->priv->a_surface) { cairo_surface_destroy (editor->priv->a_surface); editor->priv->a_surface = NULL; } + gtk_widget_queue_draw (GTK_WIDGET (editor)); g_object_notify (G_OBJECT (editor), "color"); }