forked from AuroraMiddleware/gtk
Use a swatch in the editor
For now, we simply make it insensitive to turn off unwanted interactivity.
This commit is contained in:
parent
ff1f5de62f
commit
2a8d3f78e9
@ -18,7 +18,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* TODO
|
/* TODO
|
||||||
* - custom sliders
|
* - move out custom sliders
|
||||||
* - pop-up entries
|
* - pop-up entries
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -27,6 +27,7 @@
|
|||||||
#include "gtkcolorchooserprivate.h"
|
#include "gtkcolorchooserprivate.h"
|
||||||
#include "gtkcoloreditor.h"
|
#include "gtkcoloreditor.h"
|
||||||
#include "gtkcolorplane.h"
|
#include "gtkcolorplane.h"
|
||||||
|
#include "gtkcolorswatch.h"
|
||||||
#include "gtkgrid.h"
|
#include "gtkgrid.h"
|
||||||
#include "gtkscale.h"
|
#include "gtkscale.h"
|
||||||
#include "gtkaspectframe.h"
|
#include "gtkaspectframe.h"
|
||||||
@ -144,7 +145,7 @@ h_changed (GtkAdjustment *adj,
|
|||||||
&editor->priv->color.blue);
|
&editor->priv->color.blue);
|
||||||
gtk_color_plane_set_h (GTK_COLOR_PLANE (editor->priv->sv_plane), editor->priv->h);
|
gtk_color_plane_set_h (GTK_COLOR_PLANE (editor->priv->sv_plane), editor->priv->h);
|
||||||
update_entry (editor);
|
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);
|
gtk_widget_queue_draw (editor->priv->a_slider);
|
||||||
if (editor->priv->a_surface)
|
if (editor->priv->a_surface)
|
||||||
{
|
{
|
||||||
@ -165,7 +166,7 @@ sv_changed (GtkColorPlane *plane,
|
|||||||
&editor->priv->color.green,
|
&editor->priv->color.green,
|
||||||
&editor->priv->color.blue);
|
&editor->priv->color.blue);
|
||||||
update_entry (editor);
|
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);
|
gtk_widget_queue_draw (editor->priv->a_slider);
|
||||||
if (editor->priv->a_surface)
|
if (editor->priv->a_surface)
|
||||||
{
|
{
|
||||||
@ -180,7 +181,7 @@ a_changed (GtkAdjustment *adj,
|
|||||||
GtkColorEditor *editor)
|
GtkColorEditor *editor)
|
||||||
{
|
{
|
||||||
editor->priv->color.alpha = gtk_adjustment_get_value (adj);
|
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");
|
g_object_notify (G_OBJECT (editor), "color");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -205,32 +206,6 @@ get_checkered_pattern (void)
|
|||||||
return pattern;
|
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 *
|
static cairo_surface_t *
|
||||||
create_h_surface (GtkWidget *widget)
|
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_row_spacing (GTK_GRID (grid), 12);
|
||||||
gtk_grid_set_column_spacing (GTK_GRID (grid), 12);
|
gtk_grid_set_column_spacing (GTK_GRID (grid), 12);
|
||||||
|
|
||||||
editor->priv->swatch = gtk_drawing_area_new ();
|
editor->priv->swatch = gtk_color_swatch_new ();
|
||||||
g_signal_connect (editor->priv->swatch, "draw", G_CALLBACK (swatch_draw), editor);
|
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 ();
|
editor->priv->entry = gtk_entry_new ();
|
||||||
g_signal_connect (editor->priv->entry, "activate",
|
g_signal_connect (editor->priv->entry, "activate",
|
||||||
G_CALLBACK (entry_apply), editor);
|
G_CALLBACK (entry_apply), editor);
|
||||||
@ -486,10 +463,9 @@ gtk_color_editor_set_show_alpha (GtkColorEditor *editor,
|
|||||||
{
|
{
|
||||||
editor->priv->show_alpha = show_alpha;
|
editor->priv->show_alpha = show_alpha;
|
||||||
|
|
||||||
if (show_alpha)
|
gtk_widget_set_visible (editor->priv->a_slider, show_alpha);
|
||||||
gtk_widget_show (editor->priv->a_slider);
|
|
||||||
else
|
gtk_color_swatch_set_show_alpha (GTK_COLOR_SWATCH (editor->priv->swatch), show_alpha);
|
||||||
gtk_widget_hide (editor->priv->a_slider);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -561,29 +537,31 @@ gtk_color_editor_set_color (GtkColorChooser *chooser,
|
|||||||
const GdkRGBA *color)
|
const GdkRGBA *color)
|
||||||
{
|
{
|
||||||
GtkColorEditor *editor = GTK_COLOR_EDITOR (chooser);
|
GtkColorEditor *editor = GTK_COLOR_EDITOR (chooser);
|
||||||
|
gdouble h, s, v;
|
||||||
|
|
||||||
editor->priv->color.red = color->red;
|
editor->priv->color.red = color->red;
|
||||||
editor->priv->color.green = color->green;
|
editor->priv->color.green = color->green;
|
||||||
editor->priv->color.blue = color->blue;
|
editor->priv->color.blue = color->blue;
|
||||||
gtk_rgb_to_hsv (editor->priv->color.red,
|
editor->priv->color.alpha = color->alpha;
|
||||||
editor->priv->color.green,
|
gtk_rgb_to_hsv (color->red, color->green, color->blue, &h, &s, &v);
|
||||||
editor->priv->color.blue,
|
editor->priv->h = h;
|
||||||
&editor->priv->h, &editor->priv->s, &editor->priv->v);
|
editor->priv->s = s;
|
||||||
gtk_color_plane_set_h (GTK_COLOR_PLANE (editor->priv->sv_plane), editor->priv->h);
|
editor->priv->v = v;
|
||||||
gtk_color_plane_set_s (GTK_COLOR_PLANE (editor->priv->sv_plane), editor->priv->s);
|
gtk_color_plane_set_h (GTK_COLOR_PLANE (editor->priv->sv_plane), h);
|
||||||
gtk_color_plane_set_v (GTK_COLOR_PLANE (editor->priv->sv_plane), editor->priv->v);
|
gtk_color_plane_set_s (GTK_COLOR_PLANE (editor->priv->sv_plane), s);
|
||||||
gtk_adjustment_set_value (editor->priv->h_adj, editor->priv->h);
|
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);
|
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)
|
if (editor->priv->a_surface)
|
||||||
{
|
{
|
||||||
cairo_surface_destroy (editor->priv->a_surface);
|
cairo_surface_destroy (editor->priv->a_surface);
|
||||||
editor->priv->a_surface = NULL;
|
editor->priv->a_surface = NULL;
|
||||||
}
|
}
|
||||||
|
gtk_widget_queue_draw (GTK_WIDGET (editor));
|
||||||
|
|
||||||
g_object_notify (G_OBJECT (editor), "color");
|
g_object_notify (G_OBJECT (editor), "color");
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user