modules/cdisplay_gamma.c added object properties for configurable values.

2004-07-04  Sven Neumann  <sven@gimp.org>

	* modules/cdisplay_gamma.c
	* modules/cdisplay_highcontrast.c: added object properties for
	configurable values.

	* app/widgets/gimpcolordisplayeditor.c
	* libgimpwidgets/gimpcolordisplaystack.c
	* modules/cdisplay_colorblind.c
	* modules/cdisplay_proof.c: cosmetic changes.
This commit is contained in:
Sven Neumann
2004-07-04 00:21:03 +00:00
committed by Sven Neumann
parent 23f6a194ac
commit 21fea37da7
7 changed files with 252 additions and 164 deletions

View File

@ -97,7 +97,7 @@ static GType cdisplay_colorblind_get_type (GTypeModule *module);
static void cdisplay_colorblind_class_init (CdisplayColorblindClass *klass);
static void cdisplay_colorblind_init (CdisplayColorblind *colorblind);
static void cdisplay_colorblind_finalize (GObject *object);
static void cdisplay_colorblind_dispose (GObject *object);
static GimpColorDisplay * cdisplay_colorblind_clone (GimpColorDisplay *display);
static void cdisplay_colorblind_convert (GimpColorDisplay *display,
@ -177,15 +177,12 @@ cdisplay_colorblind_get_type (GTypeModule *module)
static void
cdisplay_colorblind_class_init (CdisplayColorblindClass *klass)
{
GObjectClass *object_class;
GimpColorDisplayClass *display_class;
object_class = G_OBJECT_CLASS (klass);
display_class = GIMP_COLOR_DISPLAY_CLASS (klass);
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GimpColorDisplayClass *display_class = GIMP_COLOR_DISPLAY_CLASS (klass);
parent_class = g_type_class_peek_parent (klass);
object_class->finalize = cdisplay_colorblind_finalize;
object_class->dispose = cdisplay_colorblind_dispose;
display_class->name = _("Color Deficient Vision");
display_class->help_id = "gimp-colordisplay-colorblind";
@ -255,14 +252,14 @@ cdisplay_colorblind_init (CdisplayColorblind *colorblind)
}
static void
cdisplay_colorblind_finalize (GObject *object)
cdisplay_colorblind_dispose (GObject *object)
{
CdisplayColorblind *colorblind = CDISPLAY_COLORBLIND (object);
if (colorblind->hbox)
gtk_widget_destroy (colorblind->hbox);
G_OBJECT_CLASS (parent_class)->finalize (object);
G_OBJECT_CLASS (parent_class)->dispose (object);
}
@ -287,7 +284,7 @@ cdisplay_colorblind_convert (GimpColorDisplay *display,
gint bpp,
gint bpl)
{
CdisplayColorblind *colorblind;
CdisplayColorblind *colorblind = CDISPLAY_COLORBLIND (display);
guchar *b;
gfloat rgb2lms[9],lms2rgb[9];
gfloat a1, b1, c1, a2, b2, c2;
@ -299,8 +296,6 @@ cdisplay_colorblind_convert (GimpColorDisplay *display,
if (bpp != 3)
return;
colorblind = CDISPLAY_COLORBLIND (display);
/* to improve readability, copy the parameters into local variables */
memcpy (rgb2lms, colorblind->rgb2lms, sizeof (rgb2lms));
memcpy (lms2rgb, colorblind->lms2rgb, sizeof (lms2rgb));

View File

@ -48,7 +48,7 @@ struct _CdisplayGamma
GimpColorDisplay parent_instance;
gdouble gamma;
guchar *lookup;
guchar lookup[256];
GtkWidget *hbox;
GtkObject *adjustment;
@ -60,11 +60,25 @@ struct _CdisplayGammaClass
};
static GType cdisplay_gamma_get_type (GTypeModule *module);
static void cdisplay_gamma_class_init (CdisplayGammaClass *klass);
static void cdisplay_gamma_init (CdisplayGamma *gamma);
enum
{
PROP_0,
PROP_GAMMA
};
static void cdisplay_gamma_finalize (GObject *object);
static GType cdisplay_gamma_get_type (GTypeModule *module);
static void cdisplay_gamma_class_init (CdisplayGammaClass *klass);
static void cdisplay_gamma_dispose (GObject *object);
static void cdisplay_gamma_set_property (GObject *object,
guint property_id,
const GValue *value,
GParamSpec *pspec);
static void cdisplay_gamma_get_property (GObject *object,
guint property_id,
GValue *value,
GParamSpec *pspec);
static GimpColorDisplay * cdisplay_gamma_clone (GimpColorDisplay *display);
static void cdisplay_gamma_convert (GimpColorDisplay *display,
@ -79,8 +93,9 @@ static GimpParasite * cdisplay_gamma_save_state (GimpColorDisplay *display);
static GtkWidget * cdisplay_gamma_configure (GimpColorDisplay *display);
static void cdisplay_gamma_configure_reset (GimpColorDisplay *display);
static void gamma_create_lookup_table (CdisplayGamma *gamma);
static void gamma_configure_adj_callback (GtkAdjustment *adj,
static void cdisplay_gamma_set_gamma (CdisplayGamma *gamma,
gdouble value);
static void cdisplay_gamma_adj_callback (GtkAdjustment *adj,
CdisplayGamma *gamma);
@ -120,14 +135,14 @@ cdisplay_gamma_get_type (GTypeModule *module)
static const GTypeInfo display_info =
{
sizeof (CdisplayGammaClass),
(GBaseInitFunc) NULL,
(GBaseInitFunc) NULL,
(GBaseFinalizeFunc) NULL,
(GClassInitFunc) cdisplay_gamma_class_init,
(GClassInitFunc) cdisplay_gamma_class_init,
NULL, /* class_finalize */
NULL, /* class_data */
sizeof (CdisplayGamma),
0, /* n_preallocs */
(GInstanceInitFunc) cdisplay_gamma_init,
NULL /* instance_init */
};
cdisplay_gamma_type =
@ -143,15 +158,21 @@ cdisplay_gamma_get_type (GTypeModule *module)
static void
cdisplay_gamma_class_init (CdisplayGammaClass *klass)
{
GObjectClass *object_class;
GimpColorDisplayClass *display_class;
object_class = G_OBJECT_CLASS (klass);
display_class = GIMP_COLOR_DISPLAY_CLASS (klass);
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GimpColorDisplayClass *display_class = GIMP_COLOR_DISPLAY_CLASS (klass);
parent_class = g_type_class_peek_parent (klass);
object_class->finalize = cdisplay_gamma_finalize;
object_class->dispose = cdisplay_gamma_dispose;
object_class->get_property = cdisplay_gamma_get_property;
object_class->set_property = cdisplay_gamma_set_property;
g_object_class_install_property (object_class, PROP_GAMMA,
g_param_spec_double ("gamma", NULL, NULL,
0.01, 10.0,
DEFAULT_GAMMA,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT));
display_class->name = _("Gamma");
display_class->help_id = "gimp-colordisplay-gamma";
@ -164,34 +185,53 @@ cdisplay_gamma_class_init (CdisplayGammaClass *klass)
}
static void
cdisplay_gamma_init (CdisplayGamma *gamma)
{
gint i;
gamma->gamma = DEFAULT_GAMMA;
gamma->lookup = g_new (guchar, 256);
for (i = 0; i < 256; i++)
gamma->lookup[i] = i;
}
static void
cdisplay_gamma_finalize (GObject *object)
cdisplay_gamma_dispose (GObject *object)
{
CdisplayGamma *gamma = CDISPLAY_GAMMA (object);
if (gamma->hbox)
gtk_widget_destroy (gamma->hbox);
if (gamma->lookup)
{
g_free (gamma->lookup);
gamma->lookup = NULL;
}
G_OBJECT_CLASS (parent_class)->finalize (object);
G_OBJECT_CLASS (parent_class)->dispose (object);
}
static void
cdisplay_gamma_get_property (GObject *object,
guint property_id,
GValue *value,
GParamSpec *pspec)
{
CdisplayGamma *gamma = CDISPLAY_GAMMA (object);
switch (property_id)
{
case PROP_GAMMA:
g_value_set_double (value, gamma->gamma);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
}
}
static void
cdisplay_gamma_set_property (GObject *object,
guint property_id,
const GValue *value,
GParamSpec *pspec)
{
CdisplayGamma *gamma = CDISPLAY_GAMMA (object);
switch (property_id)
{
case PROP_GAMMA:
cdisplay_gamma_set_gamma (gamma, g_value_get_double (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
}
}
static GimpColorDisplay *
cdisplay_gamma_clone (GimpColorDisplay *display)
@ -249,10 +289,10 @@ static void
cdisplay_gamma_load_state (GimpColorDisplay *display,
GimpParasite *state)
{
CdisplayGamma *gamma = CDISPLAY_GAMMA (display);
gdouble value;
#if G_BYTE_ORDER == G_BIG_ENDIAN
memcpy (&gamma->gamma, gimp_parasite_data (state), sizeof (gdouble));
memcpy (&value, gimp_parasite_data (state), sizeof (gdouble));
#else
{
guint32 buf[2];
@ -263,11 +303,11 @@ cdisplay_gamma_load_state (GimpColorDisplay *display,
buf[0] = g_ntohl (data[1]);
buf[1] = g_ntohl (data[0]);
memcpy (&gamma->gamma, buf, sizeof (gdouble));
memcpy (&value, buf, sizeof (gdouble));
}
#endif
gamma_create_lookup_table (gamma);
cdisplay_gamma_set_gamma (CDISPLAY_GAMMA (display), value);
}
static GimpParasite *
@ -321,7 +361,7 @@ cdisplay_gamma_configure (GimpColorDisplay *display)
gtk_label_set_mnemonic_widget (GTK_LABEL (label), spinbutton);
g_signal_connect (gamma->adjustment, "value_changed",
G_CALLBACK (gamma_configure_adj_callback),
G_CALLBACK (cdisplay_gamma_adj_callback),
gamma);
return gamma->hbox;
@ -333,35 +373,39 @@ cdisplay_gamma_configure_reset (GimpColorDisplay *display)
CdisplayGamma *gamma = CDISPLAY_GAMMA (display);
if (gamma->adjustment)
gtk_adjustment_set_value (GTK_ADJUSTMENT (gamma->adjustment), DEFAULT_GAMMA);
gtk_adjustment_set_value (GTK_ADJUSTMENT (gamma->adjustment),
DEFAULT_GAMMA);
}
static void
gamma_create_lookup_table (CdisplayGamma *gamma)
cdisplay_gamma_set_gamma (CdisplayGamma *gamma,
gdouble value)
{
gdouble one_over_gamma;
gdouble ind;
gint i;
if (value <= 0.0)
value = 1.0;
if (gamma->gamma == 0.0)
gamma->gamma = 1.0;
one_over_gamma = 1.0 / gamma->gamma;
for (i = 0; i < 256; i++)
if (value != gamma->gamma)
{
ind = (gdouble) i / 255.0;
gamma->lookup[i] = (guchar) (gint) (255 * pow (ind, one_over_gamma));
gdouble one_over_gamma = 1.0 / value;
gint i;
gamma->gamma = value;
for (i = 0; i < 256; i++)
{
gdouble ind = (gdouble) i / 255.0;
gamma->lookup[i] = (guchar) (gint) (255 * pow (ind, one_over_gamma));
}
g_object_notify (G_OBJECT (gamma), "gamma");
gimp_color_display_changed (GIMP_COLOR_DISPLAY (gamma));
}
}
static void
gamma_configure_adj_callback (GtkAdjustment *adj,
CdisplayGamma *gamma)
cdisplay_gamma_adj_callback (GtkAdjustment *adj,
CdisplayGamma *gamma)
{
gamma->gamma = adj->value;
gamma_create_lookup_table (gamma);
gimp_color_display_changed (GIMP_COLOR_DISPLAY (gamma));
cdisplay_gamma_set_gamma (gamma, adj->value);
}

View File

@ -30,7 +30,7 @@
#include "libgimp/libgimp-intl.h"
#define DEFAULT_CONTRAST 4.0
#define DEFAULT_CONTRAST 1.0
#define CDISPLAY_TYPE_CONTRAST (cdisplay_contrast_type)
@ -48,7 +48,7 @@ struct _CdisplayContrast
GimpColorDisplay parent_instance;
gdouble contrast;
guchar *lookup;
guchar lookup[256];
GtkWidget *hbox;
GtkObject *adjustment;
@ -60,28 +60,43 @@ struct _CdisplayContrastClass
};
static GType cdisplay_contrast_get_type (GTypeModule *module);
static void cdisplay_contrast_class_init (CdisplayContrastClass *klass);
static void cdisplay_contrast_init (CdisplayContrast *contrast);
enum
{
PROP_0,
PROP_CONTRAST
};
static void cdisplay_contrast_finalize (GObject *object);
static GType cdisplay_contrast_get_type (GTypeModule *module);
static void cdisplay_contrast_class_init (CdisplayContrastClass *klass);
static void cdisplay_contrast_dispose (GObject *object);
static void cdisplay_contrast_set_property (GObject *object,
guint property_id,
const GValue *value,
GParamSpec *pspec);
static void cdisplay_contrast_get_property (GObject *object,
guint property_id,
GValue *value,
GParamSpec *pspec);
static GimpColorDisplay * cdisplay_contrast_clone (GimpColorDisplay *display);
static void cdisplay_contrast_convert (GimpColorDisplay *display,
guchar *buf,
gint w,
gint h,
gint bpp,
gint bpl);
guchar *buf,
gint w,
gint h,
gint bpp,
gint bpl);
static void cdisplay_contrast_load_state (GimpColorDisplay *display,
GimpParasite *state);
GimpParasite *state);
static GimpParasite * cdisplay_contrast_save_state (GimpColorDisplay *display);
static GtkWidget * cdisplay_contrast_configure (GimpColorDisplay *display);
static void cdisplay_contrast_configure_reset (GimpColorDisplay *display);
static void contrast_create_lookup_table (CdisplayContrast *contrast);
static void contrast_configure_adj_callback (GtkAdjustment *adj,
CdisplayContrast *contrast);
static void cdisplay_contrast_set_contrast (CdisplayContrast *contrast,
gdouble value);
static void cdisplay_contrast_adj_callback (GtkAdjustment *adj,
CdisplayContrast *contrast);
static const GimpModuleInfo cdisplay_contrast_info =
@ -127,7 +142,7 @@ cdisplay_contrast_get_type (GTypeModule *module)
NULL, /* class_data */
sizeof (CdisplayContrast),
0, /* n_preallocs */
(GInstanceInitFunc) cdisplay_contrast_init,
NULL /* instance_init */
};
cdisplay_contrast_type =
@ -143,15 +158,21 @@ cdisplay_contrast_get_type (GTypeModule *module)
static void
cdisplay_contrast_class_init (CdisplayContrastClass *klass)
{
GObjectClass *object_class;
GimpColorDisplayClass *display_class;
object_class = G_OBJECT_CLASS (klass);
display_class = GIMP_COLOR_DISPLAY_CLASS (klass);
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GimpColorDisplayClass *display_class = GIMP_COLOR_DISPLAY_CLASS (klass);
parent_class = g_type_class_peek_parent (klass);
object_class->finalize = cdisplay_contrast_finalize;
object_class->dispose = cdisplay_contrast_dispose;
object_class->get_property = cdisplay_contrast_get_property;
object_class->set_property = cdisplay_contrast_set_property;
g_object_class_install_property (object_class, PROP_CONTRAST,
g_param_spec_double ("contrast", NULL, NULL,
0.01, 10.0,
DEFAULT_CONTRAST,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT));
display_class->name = _("Contrast");
display_class->help_id = "gimp-colordisplay-contrast";
@ -164,31 +185,53 @@ cdisplay_contrast_class_init (CdisplayContrastClass *klass)
}
static void
cdisplay_contrast_init (CdisplayContrast *contrast)
{
contrast->contrast = DEFAULT_CONTRAST;
contrast->lookup = g_new (guchar, 256);
contrast_create_lookup_table (contrast);
}
static void
cdisplay_contrast_finalize (GObject *object)
cdisplay_contrast_dispose (GObject *object)
{
CdisplayContrast *contrast = CDISPLAY_CONTRAST (object);
if (contrast->hbox)
gtk_widget_destroy (contrast->hbox);
if (contrast->lookup)
{
g_free (contrast->lookup);
contrast->lookup = NULL;
}
G_OBJECT_CLASS (parent_class)->finalize (object);
G_OBJECT_CLASS (parent_class)->dispose (object);
}
static void
cdisplay_contrast_get_property (GObject *object,
guint property_id,
GValue *value,
GParamSpec *pspec)
{
CdisplayContrast *contrast = CDISPLAY_CONTRAST (object);
switch (property_id)
{
case PROP_CONTRAST:
g_value_set_double (value, contrast->contrast);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
}
}
static void
cdisplay_contrast_set_property (GObject *object,
guint property_id,
const GValue *value,
GParamSpec *pspec)
{
CdisplayContrast *contrast = CDISPLAY_CONTRAST (object);
switch (property_id)
{
case PROP_CONTRAST:
cdisplay_contrast_set_contrast (contrast, g_value_get_double (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
}
}
static GimpColorDisplay *
cdisplay_contrast_clone (GimpColorDisplay *display)
@ -246,10 +289,10 @@ static void
cdisplay_contrast_load_state (GimpColorDisplay *display,
GimpParasite *state)
{
CdisplayContrast *contrast = CDISPLAY_CONTRAST (display);
gdouble value;
#if G_BYTE_ORDER == G_BIG_ENDIAN
memcpy (&contrast->contrast, gimp_parasite_data (state), sizeof (gdouble));
memcpy (&value, gimp_parasite_data (state), sizeof (gdouble));
#else
{
guint32 buf[2];
@ -260,11 +303,11 @@ cdisplay_contrast_load_state (GimpColorDisplay *display,
buf[0] = g_ntohl (data[1]);
buf[1] = g_ntohl (data[0]);
memcpy (&contrast->contrast, buf, sizeof (gdouble));
memcpy (&value, buf, sizeof (gdouble));
}
#endif
contrast_create_lookup_table (contrast);
cdisplay_contrast_set_contrast (CDISPLAY_CONTRAST (display), value);
}
static GimpParasite *
@ -319,7 +362,7 @@ cdisplay_contrast_configure (GimpColorDisplay *display)
gtk_label_set_mnemonic_widget (GTK_LABEL (label), spinbutton);
g_signal_connect (contrast->adjustment, "value_changed",
G_CALLBACK (contrast_configure_adj_callback),
G_CALLBACK (cdisplay_contrast_adj_callback),
contrast);
return contrast->hbox;
@ -328,9 +371,7 @@ cdisplay_contrast_configure (GimpColorDisplay *display)
static void
cdisplay_contrast_configure_reset (GimpColorDisplay *display)
{
CdisplayContrast *contrast;
contrast = CDISPLAY_CONTRAST (display);
CdisplayContrast *contrast = CDISPLAY_CONTRAST (display);
if (contrast->adjustment)
gtk_adjustment_set_value (GTK_ADJUSTMENT (contrast->adjustment),
@ -338,27 +379,32 @@ cdisplay_contrast_configure_reset (GimpColorDisplay *display)
}
static void
contrast_create_lookup_table (CdisplayContrast *contrast)
cdisplay_contrast_set_contrast (CdisplayContrast *contrast,
gdouble value)
{
gint i;
if (value <= 0.0)
value = 1.0;
if (contrast->contrast == 0.0)
contrast->contrast = 1.0;
for (i = 0; i < 256; i++)
if (value != contrast->contrast)
{
contrast->lookup[i] = (guchar) (gint)
(255 * .5 * (1 + sin (contrast->contrast * 2 * G_PI * i / 255.0)));
gint i;
contrast->contrast = value;
for (i = 0; i < 256; i++)
{
contrast->lookup[i] = (guchar) (gint)
(255 * .5 * (1 + sin (value * 2 * G_PI * i / 255.0)));
}
g_object_notify (G_OBJECT (contrast), "contrast");
gimp_color_display_changed (GIMP_COLOR_DISPLAY (contrast));
}
}
static void
contrast_configure_adj_callback (GtkAdjustment *adj,
CdisplayContrast *contrast)
cdisplay_contrast_adj_callback (GtkAdjustment *adj,
CdisplayContrast *contrast)
{
contrast->contrast = adj->value;
contrast_create_lookup_table (contrast);
gimp_color_display_changed (GIMP_COLOR_DISPLAY (contrast));
cdisplay_contrast_set_contrast (contrast, adj->value);
}

View File

@ -71,6 +71,7 @@ static GType cdisplay_proof_get_type (GTypeModule *module);
static void cdisplay_proof_class_init (CdisplayProofClass *klass);
static void cdisplay_proof_init (CdisplayProof *proof);
static void cdisplay_proof_dispose (GObject *object);
static void cdisplay_proof_finalize (GObject *object);
static GimpColorDisplay * cdisplay_proof_clone (GimpColorDisplay *display);
@ -153,15 +154,13 @@ cdisplay_proof_get_type (GTypeModule *module)
static void
cdisplay_proof_class_init (CdisplayProofClass *klass)
{
GObjectClass *object_class;
GimpColorDisplayClass *display_class;
object_class = G_OBJECT_CLASS (klass);
display_class = GIMP_COLOR_DISPLAY_CLASS (klass);
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GimpColorDisplayClass *display_class = GIMP_COLOR_DISPLAY_CLASS (klass);
parent_class = g_type_class_peek_parent (klass);
object_class->finalize = cdisplay_proof_finalize;
object_class->dispose = cdisplay_proof_dispose;
object_class->finalize = cdisplay_proof_finalize;
display_class->name = _("Color Proof");
display_class->help_id = "gimp-colordisplay-proof";
@ -189,13 +188,21 @@ cdisplay_proof_init (CdisplayProof *proof)
}
static void
cdisplay_proof_finalize (GObject *object)
cdisplay_proof_dispose (GObject *object)
{
CdisplayProof *proof = CDISPLAY_PROOF (object);
if (proof->table)
gtk_widget_destroy (proof->table);
G_OBJECT_CLASS (parent_class)->dispose (object);
}
static void
cdisplay_proof_finalize (GObject *object)
{
CdisplayProof *proof = CDISPLAY_PROOF (object);
if (proof->filename)
{
g_free (proof->filename);