[gimp/gtk3-port: 168/224] libgimpwidgets: move all GimpColorScale members to a private struct
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp/gtk3-port: 168/224] libgimpwidgets: move all GimpColorScale members to a private struct
- Date: Sat, 10 Dec 2011 21:32:12 +0000 (UTC)
commit 15e2cddb46e2c0fecfc1b41795ed0ec25f570b58
Author: Michael Natterer <mitch gimp org>
Date: Sun Jan 2 02:39:12 2011 +0100
libgimpwidgets: move all GimpColorScale members to a private struct
libgimpwidgets/gimpcolorscale.c | 258 ++++++++++++++++++++++-----------------
libgimpwidgets/gimpcolorscale.h | 16 +--
2 files changed, 150 insertions(+), 124 deletions(-)
---
diff --git a/libgimpwidgets/gimpcolorscale.c b/libgimpwidgets/gimpcolorscale.c
index e9fb898..a077c06 100644
--- a/libgimpwidgets/gimpcolorscale.c
+++ b/libgimpwidgets/gimpcolorscale.c
@@ -51,6 +51,27 @@ enum
};
+typedef struct _GimpColorScalePrivate GimpColorScalePrivate;
+
+struct _GimpColorScalePrivate
+{
+ GimpColorSelectorChannel channel;
+ GimpRGB rgb;
+ GimpHSV hsv;
+
+ guchar *buf;
+ guint width;
+ guint height;
+ guint rowstride;
+
+ gboolean needs_render;
+};
+
+#define GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), \
+ GIMP_TYPE_COLOR_SCALE, \
+ GimpColorScalePrivate))
+
+
static void gimp_color_scale_finalize (GObject *object);
static void gimp_color_scale_get_property (GObject *object,
guint property_id,
@@ -111,40 +132,43 @@ gimp_color_scale_class_init (GimpColorScaleClass *klass)
GIMP_COLOR_SELECTOR_VALUE,
GIMP_PARAM_READWRITE |
G_PARAM_CONSTRUCT));
+
+ g_type_class_add_private (object_class, sizeof (GimpColorScalePrivate));
}
static void
gimp_color_scale_init (GimpColorScale *scale)
{
- GtkRange *range = GTK_RANGE (scale);
+ GimpColorScalePrivate *private = GET_PRIVATE (scale);
+ GtkRange *range = GTK_RANGE (scale);
gtk_range_set_slider_size_fixed (range, TRUE);
gtk_range_set_flippable (GTK_RANGE (scale), TRUE);
gtk_scale_set_draw_value (GTK_SCALE (scale), FALSE);
- scale->channel = GIMP_COLOR_SELECTOR_VALUE;
- scale->needs_render = TRUE;
+ private->channel = GIMP_COLOR_SELECTOR_VALUE;
+ private->needs_render = TRUE;
gtk_orientable_set_orientation (GTK_ORIENTABLE (range),
GTK_ORIENTATION_HORIZONTAL);
- gimp_rgba_set (&scale->rgb, 0.0, 0.0, 0.0, 1.0);
- gimp_rgb_to_hsv (&scale->rgb, &scale->hsv);
+ gimp_rgba_set (&private->rgb, 0.0, 0.0, 0.0, 1.0);
+ gimp_rgb_to_hsv (&private->rgb, &private->hsv);
}
static void
gimp_color_scale_finalize (GObject *object)
{
- GimpColorScale *scale = GIMP_COLOR_SCALE (object);
+ GimpColorScalePrivate *private = GET_PRIVATE (object);
- if (scale->buf)
+ if (private->buf)
{
- g_free (scale->buf);
- scale->buf = NULL;
- scale->width = 0;
- scale->height = 0;
- scale->rowstride = 0;
+ g_free (private->buf);
+ private->buf = NULL;
+ private->width = 0;
+ private->height = 0;
+ private->rowstride = 0;
}
G_OBJECT_CLASS (parent_class)->finalize (object);
@@ -156,12 +180,12 @@ gimp_color_scale_get_property (GObject *object,
GValue *value,
GParamSpec *pspec)
{
- GimpColorScale *scale = GIMP_COLOR_SCALE (object);
+ GimpColorScalePrivate *private = GET_PRIVATE (object);
switch (property_id)
{
case PROP_CHANNEL:
- g_value_set_enum (value, scale->channel);
+ g_value_set_enum (value, private->channel);
break;
default:
@@ -194,13 +218,13 @@ static void
gimp_color_scale_size_allocate (GtkWidget *widget,
GtkAllocation *allocation)
{
- GimpColorScale *scale = GIMP_COLOR_SCALE (widget);
- GtkRange *range = GTK_RANGE (widget);
- GdkRectangle range_rect;
- gint focus = 0;
- gint trough_border;
- gint scale_width;
- gint scale_height;
+ GimpColorScalePrivate *private = GET_PRIVATE (widget);
+ GtkRange *range = GTK_RANGE (widget);
+ GdkRectangle range_rect;
+ gint focus = 0;
+ gint trough_border;
+ gint scale_width;
+ gint scale_height;
gtk_widget_style_get (widget,
"trough-border", &trough_border,
@@ -242,17 +266,17 @@ gimp_color_scale_size_allocate (GtkWidget *widget,
break;
}
- if (scale_width != scale->width || scale_height != scale->height)
+ if (scale_width != private->width || scale_height != private->height)
{
- scale->width = scale_width;
- scale->height = scale_height;
+ private->width = scale_width;
+ private->height = scale_height;
- scale->rowstride = scale->width * 4;
+ private->rowstride = private->width * 4;
- g_free (scale->buf);
- scale->buf = g_new (guchar, scale->rowstride * scale->height);
+ g_free (private->buf);
+ private->buf = g_new (guchar, private->rowstride * private->height);
- scale->needs_render = TRUE;
+ private->needs_render = TRUE;
}
}
@@ -263,7 +287,7 @@ gimp_color_scale_state_flags_changed (GtkWidget *widget,
if ((gtk_widget_get_state_flags (widget) & GTK_STATE_FLAG_INSENSITIVE) !=
(previous_state & GTK_STATE_FLAG_INSENSITIVE))
{
- GIMP_COLOR_SCALE (widget)->needs_render = TRUE;
+ GET_PRIVATE (widget)->needs_render = TRUE;
}
if (GTK_WIDGET_CLASS (parent_class)->state_flags_changed)
@@ -321,21 +345,22 @@ static gboolean
gimp_color_scale_draw (GtkWidget *widget,
cairo_t *cr)
{
- GimpColorScale *scale = GIMP_COLOR_SCALE (widget);
- GtkRange *range = GTK_RANGE (widget);
- GtkStyleContext *context = gtk_widget_get_style_context (widget);
- gboolean sensitive = gtk_widget_is_sensitive (widget);
- GdkRectangle range_rect;
- GdkRectangle area = { 0, };
- cairo_surface_t *buffer;
- gint focus = 0;
- gint trough_border;
- gint slider_start;
- gint slider_size;
- gint x, y;
- gint w, h;
-
- if (! scale->buf || ! gtk_widget_is_drawable (widget))
+ GimpColorScale *scale = GIMP_COLOR_SCALE (widget);
+ GimpColorScalePrivate *private = GET_PRIVATE (widget);
+ GtkRange *range = GTK_RANGE (widget);
+ GtkStyleContext *context = gtk_widget_get_style_context (widget);
+ gboolean sensitive = gtk_widget_is_sensitive (widget);
+ GdkRectangle range_rect;
+ GdkRectangle area = { 0, };
+ cairo_surface_t *buffer;
+ gint focus = 0;
+ gint trough_border;
+ gint slider_start;
+ gint slider_size;
+ gint x, y;
+ gint w, h;
+
+ if (! private->buf || ! gtk_widget_is_drawable (widget))
return FALSE;
gtk_style_context_save (context);
@@ -367,14 +392,14 @@ gimp_color_scale_draw (GtkWidget *widget,
slider_size = gtk_range_get_min_slider_size (range) / 2;
- if (scale->needs_render)
+ if (private->needs_render)
{
gimp_color_scale_render (scale);
if (! sensitive)
gimp_color_scale_render_stipple (scale);
- scale->needs_render = FALSE;
+ private->needs_render = FALSE;
}
gtk_style_context_set_state (context, gtk_widget_get_state_flags (widget));
@@ -382,11 +407,11 @@ gimp_color_scale_draw (GtkWidget *widget,
gtk_render_background (context, cr, x, y, w, h);
gtk_render_frame (context, cr, x, y, w, h);
- buffer = cairo_image_surface_create_for_data (scale->buf,
+ buffer = cairo_image_surface_create_for_data (private->buf,
CAIRO_FORMAT_RGB24,
- scale->width,
- scale->height,
- scale->rowstride);
+ private->width,
+ private->height,
+ private->rowstride);
switch (gtk_orientable_get_orientation (GTK_ORIENTABLE (range)))
{
@@ -524,13 +549,17 @@ void
gimp_color_scale_set_channel (GimpColorScale *scale,
GimpColorSelectorChannel channel)
{
+ GimpColorScalePrivate *private;
+
g_return_if_fail (GIMP_IS_COLOR_SCALE (scale));
- if (channel != scale->channel)
+ private = GET_PRIVATE (scale);
+
+ if (channel != private->channel)
{
- scale->channel = channel;
+ private->channel = channel;
- scale->needs_render = TRUE;
+ private->needs_render = TRUE;
gtk_widget_queue_draw (GTK_WIDGET (scale));
g_object_notify (G_OBJECT (scale), "channel");
@@ -550,14 +579,18 @@ gimp_color_scale_set_color (GimpColorScale *scale,
const GimpRGB *rgb,
const GimpHSV *hsv)
{
+ GimpColorScalePrivate *private;
+
g_return_if_fail (GIMP_IS_COLOR_SCALE (scale));
g_return_if_fail (rgb != NULL);
g_return_if_fail (hsv != NULL);
- scale->rgb = *rgb;
- scale->hsv = *hsv;
+ private = GET_PRIVATE (scale);
- scale->needs_render = TRUE;
+ private->rgb = *rgb;
+ private->hsv = *hsv;
+
+ private->needs_render = TRUE;
gtk_widget_queue_draw (GTK_WIDGET (scale));
}
@@ -587,29 +620,30 @@ should_invert (GtkRange *range)
static void
gimp_color_scale_render (GimpColorScale *scale)
{
- GtkRange *range = GTK_RANGE (scale);
- GimpRGB rgb;
- GimpHSV hsv;
- guint x, y;
- gdouble *channel_value = NULL; /* shut up compiler */
- gboolean to_rgb = FALSE;
- gboolean invert;
- guchar *buf;
- guchar *d;
-
- if ((buf = scale->buf) == NULL)
+ GimpColorScalePrivate *private = GET_PRIVATE (scale);
+ GtkRange *range = GTK_RANGE (scale);
+ GimpRGB rgb;
+ GimpHSV hsv;
+ guint x, y;
+ gdouble *channel_value = NULL; /* shut up compiler */
+ gboolean to_rgb = FALSE;
+ gboolean invert;
+ guchar *buf;
+ guchar *d;
+
+ if ((buf = private->buf) == NULL)
return;
- if (scale->channel == GIMP_COLOR_SELECTOR_ALPHA)
+ if (private->channel == GIMP_COLOR_SELECTOR_ALPHA)
{
gimp_color_scale_render_alpha (scale);
return;
}
- rgb = scale->rgb;
- hsv = scale->hsv;
+ rgb = private->rgb;
+ hsv = private->hsv;
- switch (scale->channel)
+ switch (private->channel)
{
case GIMP_COLOR_SELECTOR_HUE: channel_value = &hsv.h; break;
case GIMP_COLOR_SELECTOR_SATURATION: channel_value = &hsv.s; break;
@@ -620,7 +654,7 @@ gimp_color_scale_render (GimpColorScale *scale)
case GIMP_COLOR_SELECTOR_ALPHA: channel_value = &rgb.a; break;
}
- switch (scale->channel)
+ switch (private->channel)
{
case GIMP_COLOR_SELECTOR_HUE:
case GIMP_COLOR_SELECTOR_SATURATION:
@@ -637,9 +671,9 @@ gimp_color_scale_render (GimpColorScale *scale)
switch (gtk_orientable_get_orientation (GTK_ORIENTABLE (range)))
{
case GTK_ORIENTATION_HORIZONTAL:
- for (x = 0, d = buf; x < scale->width; x++, d += 4)
+ for (x = 0, d = buf; x < private->width; x++, d += 4)
{
- gdouble value = (gdouble) x / (gdouble) (scale->width - 1);
+ gdouble value = (gdouble) x / (gdouble) (private->width - 1);
guchar r, g, b;
if (invert)
@@ -655,18 +689,18 @@ gimp_color_scale_render (GimpColorScale *scale)
GIMP_CAIRO_RGB24_SET_PIXEL (d, r, g, b);
}
- d = buf + scale->rowstride;
- for (y = 1; y < scale->height; y++)
+ d = buf + private->rowstride;
+ for (y = 1; y < private->height; y++)
{
- memcpy (d, buf, scale->rowstride);
- d += scale->rowstride;
+ memcpy (d, buf, private->rowstride);
+ d += private->rowstride;
}
break;
case GTK_ORIENTATION_VERTICAL:
- for (y = 0; y < scale->height; y++)
+ for (y = 0; y < private->height; y++)
{
- gdouble value = (gdouble) y / (gdouble) (scale->height - 1);
+ gdouble value = (gdouble) y / (gdouble) (private->height - 1);
guchar r, g, b;
if (invert)
@@ -679,12 +713,12 @@ gimp_color_scale_render (GimpColorScale *scale)
gimp_rgb_get_uchar (&rgb, &r, &g, &b);
- for (x = 0, d = buf; x < scale->width; x++, d += 4)
+ for (x = 0, d = buf; x < private->width; x++, d += 4)
{
GIMP_CAIRO_RGB24_SET_PIXEL (d, r, g, b);
}
- buf += scale->rowstride;
+ buf += private->rowstride;
}
break;
}
@@ -693,18 +727,19 @@ gimp_color_scale_render (GimpColorScale *scale)
static void
gimp_color_scale_render_alpha (GimpColorScale *scale)
{
- GtkRange *range = GTK_RANGE (scale);
- GimpRGB rgb;
- gboolean invert;
- gdouble a;
- guint x, y;
- guchar *buf;
- guchar *d, *l;
+ GimpColorScalePrivate *private = GET_PRIVATE (scale);
+ GtkRange *range = GTK_RANGE (scale);
+ GimpRGB rgb;
+ gboolean invert;
+ gdouble a;
+ guint x, y;
+ guchar *buf;
+ guchar *d, *l;
invert = should_invert (range);
- buf = scale->buf;
- rgb = scale->rgb;
+ buf = private->buf;
+ rgb = private->rgb;
switch (gtk_orientable_get_orientation (GTK_ORIENTABLE (range)))
{
@@ -715,10 +750,10 @@ gimp_color_scale_render_alpha (GimpColorScale *scale)
light = buf;
/* this won't work correctly for very thin scales */
- dark = (scale->height > GIMP_CHECK_SIZE_SM ?
- buf + GIMP_CHECK_SIZE_SM * scale->rowstride : light);
+ dark = (private->height > GIMP_CHECK_SIZE_SM ?
+ buf + GIMP_CHECK_SIZE_SM * private->rowstride : light);
- for (x = 0, d = light, l = dark; x < scale->width; x++)
+ for (x = 0, d = light, l = dark; x < private->width; x++)
{
if ((x % GIMP_CHECK_SIZE_SM) == 0)
{
@@ -729,7 +764,7 @@ gimp_color_scale_render_alpha (GimpColorScale *scale)
l = t;
}
- a = (gdouble) x / (gdouble) (scale->width - 1);
+ a = (gdouble) x / (gdouble) (private->width - 1);
if (invert)
a = 1.0 - a;
@@ -753,15 +788,15 @@ gimp_color_scale_render_alpha (GimpColorScale *scale)
d += 4;
}
- for (y = 0, d = buf; y < scale->height; y++, d += scale->rowstride)
+ for (y = 0, d = buf; y < private->height; y++, d += private->rowstride)
{
if (y == 0 || y == GIMP_CHECK_SIZE_SM)
continue;
if ((y / GIMP_CHECK_SIZE_SM) & 1)
- memcpy (d, dark, scale->rowstride);
+ memcpy (d, dark, private->rowstride);
else
- memcpy (d, light, scale->rowstride);
+ memcpy (d, light, private->rowstride);
}
}
break;
@@ -771,9 +806,9 @@ gimp_color_scale_render_alpha (GimpColorScale *scale)
guchar light[4] = {0xff, 0xff, 0xff, 0xff};
guchar dark[4] = {0xff, 0xff, 0xff, 0xff};
- for (y = 0, d = buf; y < scale->height; y++, d += scale->rowstride)
+ for (y = 0, d = buf; y < private->height; y++, d += private->rowstride)
{
- a = (gdouble) y / (gdouble) (scale->height - 1);
+ a = (gdouble) y / (gdouble) (private->height - 1);
if (invert)
a = 1.0 - a;
@@ -794,7 +829,7 @@ gimp_color_scale_render_alpha (GimpColorScale *scale)
(GIMP_CHECK_DARK +
(rgb.b - GIMP_CHECK_DARK) * a) * 255.999);
- for (x = 0, l = d; x < scale->width; x++, l += 4)
+ for (x = 0, l = d; x < private->width; x++, l += 4)
{
if (((x / GIMP_CHECK_SIZE_SM) ^ (y / GIMP_CHECK_SIZE_SM)) & 1)
{
@@ -824,13 +859,16 @@ gimp_color_scale_render_alpha (GimpColorScale *scale)
static void
gimp_color_scale_render_stipple (GimpColorScale *scale)
{
- GtkWidget *widget = GTK_WIDGET (scale);
- GtkStyle *style = gtk_widget_get_style (widget);
- guchar *buf;
- guchar insensitive[4] = {0xff, 0xff, 0xff, 0xff};
- guint x, y;
-
- if ((buf = scale->buf) == NULL)
+ GimpColorScalePrivate *private = GET_PRIVATE (scale);
+ GtkWidget *widget = GTK_WIDGET (scale);
+ GtkStyleContext *context = gtk_widget_get_style_context (widget);
+ GdkRGBA color;
+ guchar r, g, b;
+ guchar *buf;
+ guchar insensitive[4];
+ guint x, y;
+
+ if ((buf = private->buf) == NULL)
return;
gtk_style_context_get_background_color (context,
@@ -840,11 +878,11 @@ gimp_color_scale_render_stipple (GimpColorScale *scale)
GIMP_CAIRO_RGB24_SET_PIXEL (insensitive, r, g, b);
- for (y = 0; y < scale->height; y++, buf += scale->rowstride)
+ for (y = 0; y < private->height; y++, buf += private->rowstride)
{
guchar *d = buf + 4 * (y % 2);
- for (x = 0; x < scale->width - (y % 2); x += 2, d += 8)
+ for (x = 0; x < private->width - (y % 2); x += 2, d += 8)
{
d[0] = insensitive[0];
d[1] = insensitive[1];
diff --git a/libgimpwidgets/gimpcolorscale.h b/libgimpwidgets/gimpcolorscale.h
index 7c85dc5..df38f13 100644
--- a/libgimpwidgets/gimpcolorscale.h
+++ b/libgimpwidgets/gimpcolorscale.h
@@ -42,24 +42,12 @@ typedef struct _GimpColorScaleClass GimpColorScaleClass;
struct _GimpColorScale
{
- GtkScale parent_instance;
-
- /*< private >*/
- GimpColorSelectorChannel channel;
- GimpRGB rgb;
- GimpHSV hsv;
-
- guchar *buf;
- guint width;
- guint height;
- guint rowstride;
-
- gboolean needs_render;
+ GtkScale parent_instance;
};
struct _GimpColorScaleClass
{
- GtkScaleClass parent_class;
+ GtkScaleClass parent_class;
/* Padding for future expansion */
void (* _gimp_reserved1) (void);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]