[aisleriot] Use GdkRGBA colours
- From: Christian Persch <chpe src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [aisleriot] Use GdkRGBA colours
- Date: Tue, 12 Apr 2011 16:47:19 +0000 (UTC)
commit 12c765ee7cb6ede3b9d9452fb02241da3f7df17d
Author: Christian Persch <chpe gnome org>
Date: Tue Apr 12 18:38:20 2011 +0200
Use GdkRGBA colours
src/ar-style-gtk.c | 51 ++++++----------------------
src/ar-style-private.h | 18 ++--------
src/ar-style.c | 85 +++--------------------------------------------
src/ar-style.h | 16 +--------
src/board-noclutter.c | 19 ++--------
src/prop-editor.c | 60 +++++++++++++++++++++++++++++++++-
src/slot-renderer.c | 19 +++++++++--
7 files changed, 102 insertions(+), 166 deletions(-)
---
diff --git a/src/ar-style-gtk.c b/src/ar-style-gtk.c
index 5cdd945..f0dd2bf 100644
--- a/src/ar-style-gtk.c
+++ b/src/ar-style-gtk.c
@@ -198,13 +198,13 @@ screen_changed_cb (GtkWidget *widget,
}
static void
-style_set_cb (GtkWidget *widget,
- GtkStyle *previous_style,
- ArStyle *style)
+style_updated_cb (GtkWidget *widget,
+ ArStyle *style)
{
ArStylePrivate *style_priv = style->priv;
GObject *style_object = G_OBJECT (style);
- GdkColor *color = NULL;
+ GdkRGBA selection_color;
+ GdkRGBA *color = NULL;
int focus_line_width, focus_padding;
gboolean interior_focus;
double card_slot_ratio, card_overhang, card_step;
@@ -261,41 +261,18 @@ style_set_cb (GtkWidget *widget,
g_object_notify (style_object, AR_STYLE_PROP_CARD_STEP);
}
-#ifdef HAVE_CLUTTER
-{
- ClutterColor selection_color;
-
- if (color != NULL) {
- _ar_clutter_color_from_gdk_color (&selection_color, color);
- gdk_color_free (color);
- } else {
- _ar_clutter_color_from_gdk_color (&selection_color, &default_selection_color);
- }
-
- if (!clutter_color_equal (&style_priv->selection_color, &selection_color)) {
- style_priv->selection_color = selection_color;
-
- g_object_notify (style_object, AR_STYLE_PROP_SELECTION_COLOR);
- }
-}
-#else
-{
- GdkColor selection_color;
-
if (color != NULL) {
selection_color = *color;
- gdk_color_free (color);
+ gdk_rgba_free (color);
} else {
selection_color = default_selection_color;
}
- if (!gdk_color_equal (&style_priv->selection_color, &selection_color)) {
+ if (!gdk_rgba_equal (&style_priv->selection_color, &selection_color)) {
style_priv->selection_color = selection_color;
g_object_notify (style_object, AR_STYLE_PROP_SELECTION_COLOR);
}
-}
-#endif /* HAVE_CLUTTER */
g_object_thaw_notify (style_object);
}
@@ -319,7 +296,7 @@ _ar_style_gtk_class_install_style_properties (GtkWidgetClass *widget_class)
gtk_widget_class_install_style_property
(widget_class,
g_param_spec_boxed ("selection-color", NULL, NULL,
- GDK_TYPE_COLOR,
+ GDK_TYPE_RGBA,
G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS));
@@ -385,18 +362,12 @@ _ar_style_gtk_attach (ArStyle *style,
g_assert (g_object_get_data (G_OBJECT (widget), "Ar::Style") == NULL);
g_object_set_data (G_OBJECT (widget), "Ar::Style", style);
-#if 0
- if (gtk_widget_get_style (widget))
- style_set_cb (widget, NULL, style);
- if (gtk_widget_has_screen (widget))
- screen_changed_cb (widget, NULL, style);
-#endif
-
/* This is necessary since we don't get an initial change notification! */
direction_changed_cb (widget, GTK_TEXT_DIR_LTR, style);
+ style_updated_cb (widget, style);
- g_signal_connect (widget, "style-set",
- G_CALLBACK (style_set_cb), style);
+ g_signal_connect (widget, "style-updated",
+ G_CALLBACK (style_updated_cb), style);
g_signal_connect (widget, "screen-changed",
G_CALLBACK (screen_changed_cb), style);
g_signal_connect (widget, "direction-changed",
@@ -423,7 +394,7 @@ _ar_style_gtk_detach (ArStyle *style,
g_assert (g_object_get_data (G_OBJECT (widget), "Ar::Style") == style);
g_object_set_data (G_OBJECT (widget), "Ar::Style", NULL);
- g_signal_handlers_disconnect_by_func (widget, G_CALLBACK (style_set_cb), style);
+ g_signal_handlers_disconnect_by_func (widget, G_CALLBACK (style_updated_cb), style);
g_signal_handlers_disconnect_by_func (widget, G_CALLBACK (screen_changed_cb), style);
g_signal_handlers_disconnect_by_func (widget, G_CALLBACK (direction_changed_cb), style);
diff --git a/src/ar-style-private.h b/src/ar-style-private.h
index 356fd3b..55c45d4 100644
--- a/src/ar-style-private.h
+++ b/src/ar-style-private.h
@@ -20,8 +20,8 @@
G_BEGIN_DECLS
-static const GdkColor default_selection_color = { 0, 0 /* red */, 0 /* green */, 0xaa00 /* blue */ };
-static const GdkColor default_baize_color = { 0, 0 /* red */, 0x5000 /* green */, 0x1000 /* blue */ };
+static const GdkRGBA default_selection_color = { 0. /* red */, 0. /* green */, 0.6666 /* blue */, 0.5 /* alpha */ };
+static const GdkRGBA default_baize_color = { 0. /* red */, 0.3125 /* green */, 0.0625 /* blue */, 1.0 /* alpha */ };
/* The proportion of a slot dedicated to the card (horiz or vert). */
#define DEFAULT_CARD_OVERHANG (0.0)
@@ -39,13 +39,8 @@ struct _ArStylePrivate
{
ArCardTheme* card_theme;
-#ifdef HAVE_CLUTTER
- ClutterColor selection_color;
- ClutterColor baize_color;
-#else
- GdkColor selection_color;
- GdkColor baize_color;
-#endif
+ GdkRGBA selection_color;
+ GdkRGBA baize_color;
double card_slot_ratio;
double card_overhang;
@@ -75,11 +70,6 @@ struct _ArStylePrivate
guint show_seleccion : 1;
};
-#ifdef HAVE_CLUTTER
-void _ar_clutter_color_from_gdk_color (ClutterColor *clutter_color,
- const GdkColor *gdk_color);
-#endif
-
G_END_DECLS
#endif /* __AR_STYLE_PRIVATE_H__ */
diff --git a/src/ar-style.c b/src/ar-style.c
index 696879c..1b78c47 100644
--- a/src/ar-style.c
+++ b/src/ar-style.c
@@ -59,14 +59,8 @@ ar_style_init (ArStyle *style)
priv = style->priv = G_TYPE_INSTANCE_GET_PRIVATE (style, AR_TYPE_STYLE, ArStylePrivate);
-#ifdef HAVE_CLUTTER
- _ar_clutter_color_from_gdk_color (&priv->selection_color, &default_selection_color);
- _ar_clutter_color_from_gdk_color (&priv->baize_color, &default_baize_color);
-#else
priv->selection_color = default_selection_color;
priv->baize_color = default_baize_color;
-#endif
-
priv->card_slot_ratio = DEFAULT_CARD_SLOT_RATIO;
priv->card_overhang = DEFAULT_CARD_OVERHANG;
priv->card_step = DEFAULT_CARD_STEP;
@@ -197,23 +191,13 @@ ar_style_set_property (GObject *object,
switch (property_id) {
case PROP_BAIZE_COLOR: {
-#ifdef HAVE_CLUTTER
- ClutterColor *color;
-
- if ((color = g_value_get_boxed (value)) != NULL) {
- priv->baize_color = *color;
- } else {
- _ar_clutter_color_from_gdk_color (&priv->baize_color, &default_baize_color);
- }
-#else
- GdkColor *color;
+ const GdkRGBA *color;
if ((color = g_value_get_boxed (value)) != NULL) {
priv->baize_color = *color;
} else {
priv->baize_color = default_baize_color;
}
-#endif
break;
}
@@ -266,23 +250,13 @@ ar_style_set_property (GObject *object,
break;
case PROP_SELECTION_COLOR: {
-#ifdef HAVE_CLUTTER
- ClutterColor *color;
-
- if ((color = g_value_get_boxed (value)) != NULL) {
- priv->selection_color = *color;
- } else {
- _ar_clutter_color_from_gdk_color (&priv->selection_color, &default_selection_color);
- }
-#else
- GdkColor *color;
+ const GdkRGBA *color;
if ((color = g_value_get_boxed (value)) != NULL) {
priv->selection_color = *color;
} else {
priv->selection_color = default_selection_color;
}
-#endif
break;
}
@@ -311,9 +285,6 @@ static void
ar_style_class_init (ArStyleClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
-#ifdef HAVE_CLUTTER
- ClutterColor color;
-#endif
g_type_class_add_private (klass, sizeof (ArStylePrivate));
@@ -326,24 +297,13 @@ ar_style_class_init (ArStyleClass *klass)
*
* The board baize color.
*/
-#ifdef HAVE_CLUTTER
- _ar_clutter_color_from_gdk_color (&color, &default_baize_color);
- g_object_class_install_property
- (object_class,
- PROP_BAIZE_COLOR,
- clutter_param_spec_color (AR_STYLE_PROP_BAIZE_COLOR, NULL, NULL,
- &color,
- G_PARAM_READWRITE |
- G_PARAM_STATIC_STRINGS));
-#else
g_object_class_install_property
(object_class,
PROP_BAIZE_COLOR,
g_param_spec_boxed (AR_STYLE_PROP_BAIZE_COLOR, NULL, NULL,
- GDK_TYPE_COLOR,
+ GDK_TYPE_RGBA,
G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS));
-#endif /* HAVE_CLUTTER */
g_object_class_install_property
(object_class,
@@ -461,24 +421,13 @@ ar_style_class_init (ArStyleClass *klass)
G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS));
-#ifdef HAVE_CLUTTER
- _ar_clutter_color_from_gdk_color (&color, &default_selection_color);
- g_object_class_install_property
- (object_class,
- PROP_SELECTION_COLOR,
- clutter_param_spec_color (AR_STYLE_PROP_SELECTION_COLOR, NULL, NULL,
- &color,
- G_PARAM_READWRITE |
- G_PARAM_STATIC_STRINGS));
-#else
g_object_class_install_property
(object_class,
PROP_SELECTION_COLOR,
g_param_spec_boxed (AR_STYLE_PROP_SELECTION_COLOR, NULL, NULL,
- GDK_TYPE_COLOR,
+ GDK_TYPE_RGBA,
G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS));
-#endif /* HAVE_CLUTTER */
/**
* ArStyle:show-tooltips:
@@ -517,20 +466,6 @@ ar_style_class_init (ArStyleClass *klass)
/* private API */
-#ifdef HAVE_CLUTTER
-
-void
-_ar_clutter_color_from_gdk_color (ClutterColor *clutter_color,
- const GdkColor *gdk_color)
-{
- clutter_color->red = gdk_color->red >> 8;
- clutter_color->green = gdk_color->green >> 8;
- clutter_color->blue = gdk_color->blue >> 8;
- clutter_color->alpha = 0xff;
-}
-
-#endif /* HAVE_CLUTTER */
-
/* public API */
/**
@@ -852,11 +787,7 @@ ar_style_get_card_step (ArStyle *style)
*/
void
ar_style_get_selection_color (ArStyle *style,
-#ifdef HAVE_CLUTTER
- ClutterColor * const color)
-#else
- GdkColor * const color)
-#endif
+ GdkRGBA * const color)
{
ArStylePrivate *priv = style->priv;
@@ -871,11 +802,7 @@ ar_style_get_selection_color (ArStyle *style,
*/
void
ar_style_get_baize_color (ArStyle *style,
-#ifdef HAVE_CLUTTER
- ClutterColor * const color)
-#else
- GdkColor * const color)
-#endif
+ GdkRGBA * const color)
{
ArStylePrivate *priv = style->priv;
diff --git a/src/ar-style.h b/src/ar-style.h
index f2c98a4..d29b582 100644
--- a/src/ar-style.h
+++ b/src/ar-style.h
@@ -19,12 +19,7 @@
#define __AR_STYLE_H__
#include <glib-object.h>
-
-#ifdef HAVE_CLUTTER
-#include <clutter/clutter.h>
-#else
#include <gdk/gdk.h>
-#endif
#include "ar-card-theme.h"
@@ -108,17 +103,10 @@ double ar_style_get_card_slot_ratio (ArStyle *style);
double ar_style_get_card_overhang (ArStyle *style);
double ar_style_get_card_step (ArStyle *style);
-#ifdef HAVE_CLUTTER
-void ar_style_get_selection_color (ArStyle *style,
- ClutterColor * const color);
-void ar_style_get_baize_color (ArStyle *style,
- ClutterColor * const color);
-#else
void ar_style_get_selection_color (ArStyle *style,
- GdkColor * const color);
+ GdkRGBA * const color);
void ar_style_get_baize_color (ArStyle *style,
- GdkColor * const color);
-#endif
+ GdkRGBA * const color);
gboolean ar_style_check_dnd_drag_threshold (ArStyle *style,
float x1,
diff --git a/src/board-noclutter.c b/src/board-noclutter.c
index d7861a1..580dfcb 100644
--- a/src/board-noclutter.c
+++ b/src/board-noclutter.c
@@ -63,9 +63,6 @@
#define DOUBLE_TO_INT_CEIL(d) ((int) (d + 0.5))
-/* FIXMEchpe */
-#define HIGHLIGHT_ALPHA (0.5)
-
#define I_(string) g_intern_static_string (string)
typedef enum {
@@ -2910,7 +2907,7 @@ aisleriot_board_draw (GtkWidget *widget,
ArSlot **exposed_slots;
ArSlot *highlight_slot;
guint n_exposed_slots;
- GdkColor color;
+ GdkRGBA color;
cairo_surface_t *surface;
cairo_pattern_t *pattern;
cairo_matrix_t matrix;
@@ -2959,7 +2956,7 @@ aisleriot_board_draw (GtkWidget *widget,
/* First paint the background */
ar_style_get_baize_color (priv->style, &color);
- gdk_cairo_set_source_color (cr, &color);
+ gdk_cairo_set_source_rgba (cr, &color);
#ifdef OPTIMISED_EXPOSE
gdk_cairo_region (cr, region);
@@ -3029,11 +3026,7 @@ aisleriot_board_draw (GtkWidget *widget,
if (G_UNLIKELY (hslot == highlight_slot)) {
cairo_save (cr);
ar_style_get_selection_color (priv->style, &color);
- cairo_set_source_rgba (cr,
- color.red / 65535.,
- color.green / 65535.,
- color.blue / 65535.,
- HIGHLIGHT_ALPHA);
+ gdk_cairo_set_source_rgba (cr, &color);
cairo_mask (cr, pattern);
cairo_restore (cr);
}
@@ -3101,11 +3094,7 @@ draw_cards:
if (G_UNLIKELY (j >= highlight_start_card_id)) {
cairo_save (cr);
ar_style_get_selection_color (priv->style, &color);
- cairo_set_source_rgba (cr,
- color.red / 65535.,
- color.green / 65535.,
- color.blue / 65535.,
- HIGHLIGHT_ALPHA);
+ gdk_cairo_set_source_rgba (cr, &color);
cairo_mask (cr, pattern);
cairo_restore (cr);
}
diff --git a/src/prop-editor.c b/src/prop-editor.c
index 41c61f8..87edd37 100644
--- a/src/prop-editor.c
+++ b/src/prop-editor.c
@@ -659,7 +659,7 @@ object_properties (GtkWidget *button,
if (G_IS_OBJECT (obj))
create_prop_editor (obj, 0);
}
-
+
static void
color_modified (GtkColorButton *cb, gpointer data)
{
@@ -704,6 +704,50 @@ color_changed (GObject *object, GParamSpec *pspec, gpointer data)
g_value_unset (&val);
}
+static void
+rgba_modified (GtkColorButton *cb, gpointer data)
+{
+ ObjectProperty *p = data;
+ GdkRGBA color;
+
+ gtk_color_button_get_rgba (cb, &color);
+
+ if (is_child_property (p->spec))
+ {
+ GtkWidget *widget = GTK_WIDGET (p->obj);
+ GtkWidget *parent = gtk_widget_get_parent (widget);
+
+ gtk_container_child_set (GTK_CONTAINER (parent),
+ widget, p->spec->name, &color, NULL);
+ }
+ else
+ g_object_set (p->obj, p->spec->name, &color, NULL);
+}
+
+static void
+rgba_changed (GObject *object, GParamSpec *pspec, gpointer data)
+{
+ GtkColorButton *cb = GTK_COLOR_BUTTON (data);
+ GValue val = { 0, };
+ GdkRGBA *color;
+ GdkRGBA cb_color;
+
+ g_value_init (&val, GDK_TYPE_RGBA);
+ get_property_value (object, pspec, &val);
+
+ color = g_value_get_boxed (&val);
+ gtk_color_button_get_rgba (cb, &cb_color);
+
+ if (color != NULL && !gdk_rgba_equal (color, &cb_color))
+ {
+ block_controller (G_OBJECT (cb));
+ gtk_color_button_set_rgba (cb, color);
+ unblock_controller (G_OBJECT (cb));
+ }
+
+ g_value_unset (&val);
+}
+
static GtkWidget *
property_widget (GObject *object,
GParamSpec *spec,
@@ -930,6 +974,20 @@ property_widget (GObject *object,
connect_controller (G_OBJECT (prop_edit), "color-set",
object, spec, G_CALLBACK (color_modified));
}
+ else if (type == G_TYPE_PARAM_BOXED &&
+ G_PARAM_SPEC_VALUE_TYPE (spec) == GDK_TYPE_RGBA)
+ {
+ prop_edit = gtk_color_button_new ();
+ gtk_color_button_set_use_alpha (GTK_COLOR_BUTTON (prop_edit), TRUE);
+
+ g_object_connect_property (object, spec,
+ G_CALLBACK (rgba_changed),
+ prop_edit, G_OBJECT (prop_edit));
+
+ if (can_modify)
+ connect_controller (G_OBJECT (prop_edit), "color-set",
+ object, spec, G_CALLBACK (rgba_modified));
+ }
else
{
msg = g_strdup_printf ("uneditable property type: %s",
diff --git a/src/slot-renderer.c b/src/slot-renderer.c
index ca2ae45..c31d3bb 100644
--- a/src/slot-renderer.c
+++ b/src/slot-renderer.c
@@ -100,18 +100,31 @@ enum
};
static void
+clutter_color_from_gdk_rgba (ClutterColor *clutter_color,
+ const GdkRGBA *rgba)
+{
+ clutter_color->red = rgba->red * 255.;
+ clutter_color->green = rgba->green * 255.;
+ clutter_color->blue = rgba->blue * 255.;
+ clutter_color->alpha = rgba->alpha * 255.;
+}
+
+static void
sync_style_selection_color (ArStyle *style,
GParamSpec *pspec,
AisleriotSlotRenderer *srend)
{
AisleriotSlotRendererPrivate *priv = srend->priv;
- ClutterColor color;
+ GdkRGBA color;
+ ClutterColor clutter_color;
ar_style_get_selection_color (style, &color);
- if (clutter_color_equal (&color, &priv->highlight_color))
+ clutter_color_from_gdk_rgba (&clutter_color, &color);
+
+ if (clutter_color_equal (&clutter_color, &priv->highlight_color))
return;
- priv->highlight_color = color;
+ priv->highlight_color = clutter_color;
if (priv->show_highlight)
clutter_actor_queue_redraw (CLUTTER_ACTOR (srend));
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]