[gtk+] Use a swatch in the editor
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] Use a swatch in the editor
- Date: Tue, 14 Feb 2012 22:18:25 +0000 (UTC)
commit 2a8d3f78e92b3f6d3f70f67927a4d03e2905cb1d
Author: Matthias Clasen <mclasen redhat com>
Date: Wed Feb 1 00:58:07 2012 -0500
Use a swatch in the editor
For now, we simply make it insensitive to turn off unwanted
interactivity.
gtk/gtkcoloreditor.c | 74 +++++++++++++++++--------------------------------
1 files changed, 26 insertions(+), 48 deletions(-)
---
diff --git a/gtk/gtkcoloreditor.c b/gtk/gtkcoloreditor.c
index 084c5a2..99168b5 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);
- update_entry (editor);
-
editor->priv->color.alpha = color->alpha;
- gtk_adjustment_set_value (editor->priv->a_adj, editor->priv->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);
- 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");
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]