[goocanvas] Add GdkRGBA properties. #651125.
- From: Damon Chaplin <damon src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [goocanvas] Add GdkRGBA properties. #651125.
- Date: Sat, 24 Sep 2011 11:17:25 +0000 (UTC)
commit 36746309d3ebd51655bfe4a363e27f966b60003e
Author: Damon Chaplin <damon gnome org>
Date: Sat Sep 24 12:17:20 2011 +0100
Add GdkRGBA properties. #651125.
2011-09-24 Krzesimir Nowak <qdlacz gmail com>
Add GdkRGBA properties. #651125.
* src/goocanvasutils.c: Added helper functions for GdkRGBA.
* src/goocanvasprivate: Ditto.
* src/goocanvas.c: Added GdkRGBA version color properties.
* src/goocanvasgrid.c: Ditto.
* src/goocanvasitemsimple.c: Ditto.
(committed by Damon with a few minor changes)
ChangeLog | 12 +++++++++++
src/goocanvas.c | 24 +++++++++++++++++----
src/goocanvasgrid.c | 45 ++++++++++++++++++++++++++++++++++++++++++
src/goocanvasitemsimple.c | 36 +++++++++++++++++++++++++++++++++
src/goocanvasprivate.h | 10 ++++++--
src/goocanvasutils.c | 48 ++++++++++++++++++++++++++++++++++++++------
6 files changed, 160 insertions(+), 15 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index f1046fb..b227667 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2011-09-24 Krzesimir Nowak <qdlacz gmail com>
+
+ Add GdkRGBA properties. #651125.
+
+ * src/goocanvasutils.c: Added helper functions for GdkRGBA.
+ * src/goocanvasprivate: Ditto.
+ * src/goocanvas.c: Added GdkRGBA version color properties.
+ * src/goocanvasgrid.c: Ditto.
+ * src/goocanvasitemsimple.c: Ditto.
+
+ (committed by Damon with a few minor changes)
+
2011-09-07 Murray Cumming <murrayc murrayc com>
GooCanvasImage: Correct the size when using units other than pixels.
diff --git a/src/goocanvas.c b/src/goocanvas.c
index 61eb635..2f7569c 100644
--- a/src/goocanvas.c
+++ b/src/goocanvas.c
@@ -135,6 +135,7 @@ enum {
PROP_RESOLUTION_Y,
PROP_BACKGROUND_COLOR,
PROP_BACKGROUND_COLOR_RGB,
+ PROP_BACKGROUND_COLOR_GDK_RGBA,
PROP_INTEGER_LAYOUT,
PROP_CLEAR_BACKGROUND,
PROP_REDRAW_WHEN_SCROLLED,
@@ -418,6 +419,13 @@ goo_canvas_class_init (GooCanvasClass *klass)
0, G_MAXUINT, 0,
G_PARAM_WRITABLE));
+ g_object_class_install_property (gobject_class, PROP_BACKGROUND_COLOR_GDK_RGBA,
+ g_param_spec_boxed ("background-color-gdk-rgba",
+ _("Background Color GdkRGBA"),
+ _("The color to use for the canvas background, specified as a GdkRGBA"),
+ GDK_TYPE_RGBA,
+ G_PARAM_WRITABLE));
+
g_object_class_install_property (gobject_class, PROP_INTEGER_LAYOUT,
g_param_spec_boolean ("integer-layout",
_("Integer Layout"),
@@ -799,6 +807,8 @@ goo_canvas_set_property (GObject *object,
gboolean need_reconfigure = FALSE;
gboolean need_update_automatic_bounds = FALSE;
guint rgb;
+ GdkRGBA rgba = { 0, 0, 0, 0 };
+ const char *color_string;
switch (prop_id)
{
@@ -861,12 +871,13 @@ goo_canvas_set_property (GObject *object,
need_reconfigure = TRUE;
break;
case PROP_BACKGROUND_COLOR:
- if (!g_value_get_string (value))
- gtk_widget_modify_bg ((GtkWidget*) canvas, GTK_STATE_NORMAL, NULL);
- else if (gdk_color_parse (g_value_get_string (value), &color))
- gtk_widget_modify_bg ((GtkWidget*) canvas, GTK_STATE_NORMAL, &color);
+ color_string = g_value_get_string (value);
+ if (!color_string)
+ gtk_widget_override_background_color ((GtkWidget*) canvas, GTK_STATE_FLAG_NORMAL, NULL);
+ else if (gdk_rgba_parse (&rgba, color_string))
+ gtk_widget_override_background_color ((GtkWidget*) canvas, GTK_STATE_FLAG_NORMAL, &rgba);
else
- g_warning ("Unknown color: %s", g_value_get_string (value));
+ g_warning ("Unknown color: %s", color_string);
break;
case PROP_BACKGROUND_COLOR_RGB:
rgb = g_value_get_uint (value);
@@ -875,6 +886,9 @@ goo_canvas_set_property (GObject *object,
color.blue = ((rgb) & 0xFF) * 257;
gtk_widget_modify_bg ((GtkWidget*) canvas, GTK_STATE_NORMAL, &color);
break;
+ case PROP_BACKGROUND_COLOR_GDK_RGBA:
+ gtk_widget_override_background_color ((GtkWidget*) canvas, GTK_STATE_FLAG_NORMAL, g_value_get_boxed (value));
+ break;
case PROP_INTEGER_LAYOUT:
canvas->integer_layout = g_value_get_boolean (value);
canvas->need_entire_subtree_update = TRUE;
diff --git a/src/goocanvasgrid.c b/src/goocanvasgrid.c
index 80190dd..f3c0e99 100644
--- a/src/goocanvasgrid.c
+++ b/src/goocanvasgrid.c
@@ -80,12 +80,15 @@ enum {
/* Convenience properties. */
PROP_HORZ_GRID_LINE_COLOR,
PROP_HORZ_GRID_LINE_COLOR_RGBA,
+ PROP_HORZ_GRID_LINE_COLOR_GDK_RGBA,
PROP_HORZ_GRID_LINE_PIXBUF,
PROP_VERT_GRID_LINE_COLOR,
PROP_VERT_GRID_LINE_COLOR_RGBA,
+ PROP_VERT_GRID_LINE_COLOR_GDK_RGBA,
PROP_VERT_GRID_LINE_PIXBUF,
PROP_BORDER_COLOR,
PROP_BORDER_COLOR_RGBA,
+ PROP_BORDER_COLOR_GDK_RGBA,
PROP_BORDER_PIXBUF
};
@@ -243,6 +246,13 @@ goo_canvas_grid_install_common_properties (GObjectClass *gobject_class)
0, G_MAXUINT, 0,
G_PARAM_READWRITE));
+ g_object_class_install_property (gobject_class, PROP_HORZ_GRID_LINE_COLOR_GDK_RGBA,
+ g_param_spec_boxed ("horz-grid-line-color-gdk-rgba",
+ _("Horizontal Grid Line Color GdkRGBA"),
+ _("The color to use for the horizontal grid lines, specified as a GdkRGBA"),
+ GDK_TYPE_RGBA,
+ G_PARAM_READWRITE));
+
g_object_class_install_property (gobject_class, PROP_HORZ_GRID_LINE_PIXBUF,
g_param_spec_object ("horz-grid-line-pixbuf",
_("Horizontal Grid Line Pixbuf"),
@@ -264,6 +274,13 @@ goo_canvas_grid_install_common_properties (GObjectClass *gobject_class)
0, G_MAXUINT, 0,
G_PARAM_READWRITE));
+ g_object_class_install_property (gobject_class, PROP_VERT_GRID_LINE_COLOR_GDK_RGBA,
+ g_param_spec_boxed ("vert-grid-line-color-gdk-rgba",
+ _("Vertical Grid Line Color GdkRGBA"),
+ _("The color to use for the vertical grid lines, specified as a GdkRGBA"),
+ GDK_TYPE_RGBA,
+ G_PARAM_READWRITE));
+
g_object_class_install_property (gobject_class, PROP_VERT_GRID_LINE_PIXBUF,
g_param_spec_object ("vert-grid-line-pixbuf",
_("Vertical Grid Line Pixbuf"),
@@ -285,6 +302,13 @@ goo_canvas_grid_install_common_properties (GObjectClass *gobject_class)
0, G_MAXUINT, 0,
G_PARAM_READWRITE));
+ g_object_class_install_property (gobject_class, PROP_BORDER_COLOR_GDK_RGBA,
+ g_param_spec_boxed ("border-color-gdk-rgba",
+ _("Border Color GdkRGBA"),
+ _("The color to use for the border, specified as a GdkRGBA"),
+ GDK_TYPE_RGBA,
+ G_PARAM_READWRITE));
+
g_object_class_install_property (gobject_class, PROP_BORDER_PIXBUF,
g_param_spec_object ("border-pixbuf",
_("Border Pixbuf"),
@@ -501,12 +525,21 @@ goo_canvas_grid_get_common_property (GObject *object,
case PROP_HORZ_GRID_LINE_COLOR_RGBA:
goo_canvas_get_rgba_value_from_pattern (grid_data->horz_grid_line_pattern, value);
break;
+ case PROP_HORZ_GRID_LINE_COLOR_GDK_RGBA:
+ goo_canvas_get_gdk_rgba_value_from_pattern (grid_data->horz_grid_line_pattern, value);
+ break;
case PROP_VERT_GRID_LINE_COLOR_RGBA:
goo_canvas_get_rgba_value_from_pattern (grid_data->vert_grid_line_pattern, value);
break;
+ case PROP_VERT_GRID_LINE_COLOR_GDK_RGBA:
+ goo_canvas_get_gdk_rgba_value_from_pattern (grid_data->vert_grid_line_pattern, value);
+ break;
case PROP_BORDER_COLOR_RGBA:
goo_canvas_get_rgba_value_from_pattern (grid_data->border_pattern, value);
break;
+ case PROP_BORDER_COLOR_GDK_RGBA:
+ goo_canvas_get_gdk_rgba_value_from_pattern (grid_data->border_pattern, value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -603,6 +636,10 @@ goo_canvas_grid_set_common_property (GObject *object,
cairo_pattern_destroy (grid_data->horz_grid_line_pattern);
grid_data->horz_grid_line_pattern = goo_canvas_create_pattern_from_rgba_value (value);
break;
+ case PROP_HORZ_GRID_LINE_COLOR_GDK_RGBA:
+ cairo_pattern_destroy (grid_data->horz_grid_line_pattern);
+ grid_data->horz_grid_line_pattern = goo_canvas_create_pattern_from_gdk_rgba_value (value);
+ break;
case PROP_HORZ_GRID_LINE_PIXBUF:
cairo_pattern_destroy (grid_data->horz_grid_line_pattern);
grid_data->horz_grid_line_pattern = goo_canvas_create_pattern_from_pixbuf_value (value);
@@ -616,6 +653,10 @@ goo_canvas_grid_set_common_property (GObject *object,
cairo_pattern_destroy (grid_data->vert_grid_line_pattern);
grid_data->vert_grid_line_pattern = goo_canvas_create_pattern_from_rgba_value (value);
break;
+ case PROP_VERT_GRID_LINE_COLOR_GDK_RGBA:
+ cairo_pattern_destroy (grid_data->vert_grid_line_pattern);
+ grid_data->vert_grid_line_pattern = goo_canvas_create_pattern_from_gdk_rgba_value (value);
+ break;
case PROP_VERT_GRID_LINE_PIXBUF:
cairo_pattern_destroy (grid_data->vert_grid_line_pattern);
grid_data->vert_grid_line_pattern = goo_canvas_create_pattern_from_pixbuf_value (value);
@@ -629,6 +670,10 @@ goo_canvas_grid_set_common_property (GObject *object,
cairo_pattern_destroy (grid_data->border_pattern);
grid_data->border_pattern = goo_canvas_create_pattern_from_rgba_value (value);
break;
+ case PROP_BORDER_COLOR_GDK_RGBA:
+ cairo_pattern_destroy (grid_data->border_pattern);
+ grid_data->border_pattern = goo_canvas_create_pattern_from_gdk_rgba_value (value);
+ break;
case PROP_BORDER_PIXBUF:
cairo_pattern_destroy (grid_data->border_pattern);
grid_data->border_pattern = goo_canvas_create_pattern_from_pixbuf_value (value);
diff --git a/src/goocanvasitemsimple.c b/src/goocanvasitemsimple.c
index e5e8941..d46c552 100644
--- a/src/goocanvasitemsimple.c
+++ b/src/goocanvasitemsimple.c
@@ -63,9 +63,11 @@ enum {
/* Convenience properties. */
PROP_STROKE_COLOR,
PROP_STROKE_COLOR_RGBA,
+ PROP_STROKE_COLOR_GDK_RGBA,
PROP_STROKE_PIXBUF,
PROP_FILL_COLOR,
PROP_FILL_COLOR_RGBA,
+ PROP_FILL_COLOR_GDK_RGBA,
PROP_FILL_PIXBUF,
/* Other properties. Note that the order here is important PROP_TRANSFORM
@@ -235,6 +237,13 @@ goo_canvas_item_simple_install_common_properties (GObjectClass *gobject_class)
0, G_MAXUINT, 0,
G_PARAM_READWRITE));
+ g_object_class_install_property (gobject_class, PROP_STROKE_COLOR_GDK_RGBA,
+ g_param_spec_boxed ("stroke-color-gdk-rgba",
+ _("Stroke Color GdkRGBA"),
+ _("The color to use for the item's perimeter, specified as a GdkRGBA. To disable painting set the 'stroke-pattern' property to NULL"),
+ GDK_TYPE_RGBA,
+ G_PARAM_READWRITE));
+
g_object_class_install_property (gobject_class, PROP_STROKE_PIXBUF,
g_param_spec_object ("stroke-pixbuf",
_("Stroke Pixbuf"),
@@ -256,6 +265,13 @@ goo_canvas_item_simple_install_common_properties (GObjectClass *gobject_class)
0, G_MAXUINT, 0,
G_PARAM_READWRITE));
+ g_object_class_install_property (gobject_class, PROP_FILL_COLOR_GDK_RGBA,
+ g_param_spec_boxed ("fill-color-gdk-rgba",
+ _("Fill Color GdkRGBA"),
+ _("The color to use to paint the interior of the item, specified as a GdkRGBA. To disable painting set the 'fill-pattern' property to NULL"),
+ GDK_TYPE_RGBA,
+ G_PARAM_READWRITE));
+
g_object_class_install_property (gobject_class, PROP_FILL_PIXBUF,
g_param_spec_object ("fill-pixbuf",
_("Fill Pixbuf"),
@@ -523,12 +539,24 @@ goo_canvas_item_simple_get_common_property (GObject *object,
goo_canvas_get_rgba_value_from_pattern (svalue->data[0].v_pointer,
value);
break;
+ case PROP_STROKE_COLOR_GDK_RGBA:
+ svalue = goo_canvas_style_get_property (style, goo_canvas_style_stroke_pattern_id);
+ if (svalue)
+ goo_canvas_get_gdk_rgba_value_from_pattern (svalue->data[0].v_pointer,
+ value);
+ break;
case PROP_FILL_COLOR_RGBA:
svalue = goo_canvas_style_get_property (style, goo_canvas_style_fill_pattern_id);
if (svalue)
goo_canvas_get_rgba_value_from_pattern (svalue->data[0].v_pointer,
value);
break;
+ case PROP_FILL_COLOR_GDK_RGBA:
+ svalue = goo_canvas_style_get_property (style, goo_canvas_style_fill_pattern_id);
+ if (svalue)
+ goo_canvas_get_gdk_rgba_value_from_pattern (svalue->data[0].v_pointer,
+ value);
+ break;
/* Other properties. */
case PROP_TRANSFORM:
@@ -694,6 +722,10 @@ goo_canvas_item_simple_set_common_property (GObject *object,
pattern = goo_canvas_create_pattern_from_rgba_value (value);
goo_canvas_set_style_property_from_pattern (style, goo_canvas_style_stroke_pattern_id, pattern);
break;
+ case PROP_STROKE_COLOR_GDK_RGBA:
+ pattern = goo_canvas_create_pattern_from_gdk_rgba_value (value);
+ goo_canvas_set_style_property_from_pattern (style, goo_canvas_style_stroke_pattern_id, pattern);
+ break;
case PROP_STROKE_PIXBUF:
pattern = goo_canvas_create_pattern_from_pixbuf_value (value);
goo_canvas_set_style_property_from_pattern (style, goo_canvas_style_stroke_pattern_id, pattern);
@@ -707,6 +739,10 @@ goo_canvas_item_simple_set_common_property (GObject *object,
pattern = goo_canvas_create_pattern_from_rgba_value (value);
goo_canvas_set_style_property_from_pattern (style, goo_canvas_style_fill_pattern_id, pattern);
break;
+ case PROP_FILL_COLOR_GDK_RGBA:
+ pattern = goo_canvas_create_pattern_from_gdk_rgba_value (value);
+ goo_canvas_set_style_property_from_pattern (style, goo_canvas_style_fill_pattern_id, pattern);
+ break;
case PROP_FILL_PIXBUF:
pattern = goo_canvas_create_pattern_from_pixbuf_value (value);
goo_canvas_set_style_property_from_pattern (style, goo_canvas_style_fill_pattern_id, pattern);
diff --git a/src/goocanvasprivate.h b/src/goocanvasprivate.h
index 423f37e..b62c54a 100644
--- a/src/goocanvasprivate.h
+++ b/src/goocanvasprivate.h
@@ -39,13 +39,17 @@ guint goo_canvas_convert_colors_to_rgba (double red,
void goo_canvas_get_rgba_value_from_pattern (cairo_pattern_t *pattern,
GValue *value);
+void goo_canvas_get_gdk_rgba_value_from_pattern (cairo_pattern_t *pattern,
+ GValue *value);
+
void goo_canvas_set_style_property_from_pattern (GooCanvasStyle *style,
GQuark property_id,
cairo_pattern_t *pattern);
-cairo_pattern_t* goo_canvas_create_pattern_from_color_value (const GValue *value);
-cairo_pattern_t* goo_canvas_create_pattern_from_rgba_value (const GValue *value);
-cairo_pattern_t* goo_canvas_create_pattern_from_pixbuf_value (const GValue *value);
+cairo_pattern_t* goo_canvas_create_pattern_from_color_value (const GValue *value);
+cairo_pattern_t* goo_canvas_create_pattern_from_rgba_value (const GValue *value);
+cairo_pattern_t* goo_canvas_create_pattern_from_gdk_rgba_value (const GValue *value);
+cairo_pattern_t* goo_canvas_create_pattern_from_pixbuf_value (const GValue *value);
gboolean goo_canvas_boolean_handled_accumulator (GSignalInvocationHint *ihint,
diff --git a/src/goocanvasutils.c b/src/goocanvasutils.c
index ca07559..983d911 100644
--- a/src/goocanvasutils.c
+++ b/src/goocanvasutils.c
@@ -14,6 +14,7 @@
*/
#include <config.h>
#include <math.h>
+#include <gdk/gdk.h>
#include <gtk/gtk.h>
#include "goocanvas.h"
@@ -1233,6 +1234,20 @@ goo_canvas_get_rgba_value_from_pattern (cairo_pattern_t *pattern,
}
+void
+goo_canvas_get_gdk_rgba_value_from_pattern (cairo_pattern_t *pattern,
+ GValue *value)
+{
+ GdkRGBA rgba = {0, 0, 0, 0};
+
+ if (pattern && cairo_pattern_get_type (pattern) == CAIRO_PATTERN_TYPE_SOLID)
+ {
+ cairo_pattern_get_rgba (pattern, &rgba.red, &rgba.green, &rgba.blue, &rgba.alpha);
+ }
+ g_value_set_boxed (value, &rgba);
+}
+
+
/* Sets a style property to the given pattern, taking ownership of it. */
void
goo_canvas_set_style_property_from_pattern (GooCanvasStyle *style,
@@ -1251,16 +1266,20 @@ goo_canvas_set_style_property_from_pattern (GooCanvasStyle *style,
cairo_pattern_t*
goo_canvas_create_pattern_from_color_value (const GValue *value)
{
- GdkColor color = { 0, 0, 0, 0, };
+ GdkRGBA rgba = { 0, 0, 0, 0 };
+ const char *color_string;
- if (g_value_get_string (value))
- gdk_color_parse (g_value_get_string (value), &color);
+ color_string = g_value_get_string (value);
+
+ if (color_string)
+ {
+ gdk_rgba_parse (&rgba, color_string);
+ }
- return cairo_pattern_create_rgb (color.red / 65535.0,
- color.green / 65535.0,
- color.blue / 65535.0);
+ return cairo_pattern_create_rgba (rgba.red, rgba.green, rgba.blue,
+ rgba.alpha);
}
-
+
cairo_pattern_t*
goo_canvas_create_pattern_from_rgba_value (const GValue *value)
@@ -1279,6 +1298,21 @@ goo_canvas_create_pattern_from_rgba_value (const GValue *value)
cairo_pattern_t*
+goo_canvas_create_pattern_from_gdk_rgba_value (const GValue *value)
+{
+ GdkRGBA* rgba;
+
+ rgba = g_value_get_boxed (value);
+
+ if (rgba)
+ return cairo_pattern_create_rgba (rgba->red, rgba->green, rgba->blue,
+ rgba->alpha);
+ else
+ return cairo_pattern_create_rgba (0, 0, 0, 0);
+}
+
+
+cairo_pattern_t*
goo_canvas_create_pattern_from_pixbuf_value (const GValue *value)
{
GdkPixbuf *pixbuf;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]