static gboolean gimp_curve_config_copy (GimpConfig *src, GimpConfig *dest, GParamFlags flags) { GimpCurve *src_curve = GIMP_CURVE (src); GimpCurve *dest_curve = GIMP_CURVE (dest); gimp_config_sync (G_OBJECT (src), G_OBJECT (dest), flags); dest_curve->identity = src_curve->identity; gimp_data_dirty (GIMP_DATA (dest)); return TRUE; }
static gchar * gimp_curve_get_description (GimpViewable *viewable, gchar **tooltip) { GimpCurve *curve = GIMP_CURVE (viewable); return g_strdup_printf ("%s", gimp_object_get_name (curve)); }
static gboolean gimp_curve_equal (GimpConfig *a, GimpConfig *b) { GimpCurve *a_curve = GIMP_CURVE (a); GimpCurve *b_curve = GIMP_CURVE (b); if (a_curve->curve_type != b_curve->curve_type) return FALSE; if (memcmp (a_curve->points, b_curve->points, sizeof (GimpVector2) * b_curve->n_points) || memcmp (a_curve->samples, b_curve->samples, sizeof (gdouble) * b_curve->n_samples)) return FALSE; return TRUE; }
static void gimp_curve_dirty (GimpData *data) { GimpCurve *curve = GIMP_CURVE (data); curve->identity = FALSE; gimp_curve_calculate (curve); GIMP_DATA_CLASS (parent_class)->dirty (data); }
static gint64 gimp_curve_get_memsize (GimpObject *object, gint64 *gui_size) { GimpCurve *curve = GIMP_CURVE (object); gint64 memsize = 0; memsize += curve->n_points * sizeof (GimpVector2); memsize += curve->n_samples * sizeof (gdouble); return memsize + GIMP_OBJECT_CLASS (parent_class)->get_memsize (object, gui_size); }
static gboolean gimp_curve_deserialize (GimpConfig *config, GScanner *scanner, gint nest_level, gpointer data) { gboolean success; success = gimp_config_deserialize_properties (config, scanner, nest_level); GIMP_CURVE (config)->identity = FALSE; return success; }
static void gimp_device_info_init (GimpDeviceInfo *info) { info->device = NULL; info->display = NULL; info->mode = GDK_MODE_DISABLED; info->n_axes = 0; info->axes = NULL; info->n_keys = 0; info->keys = NULL; info->pressure_curve = GIMP_CURVE (gimp_curve_new ("pressure curve")); g_signal_connect (info, "notify::name", G_CALLBACK (gimp_device_info_guess_icon), NULL); }
static void gimp_curves_config_init (GimpCurvesConfig *self) { GimpHistogramChannel channel; for (channel = GIMP_HISTOGRAM_VALUE; channel <= GIMP_HISTOGRAM_ALPHA; channel++) { self->curve[channel] = GIMP_CURVE (gimp_curve_new ("curves config")); g_signal_connect_object (self->curve[channel], "dirty", G_CALLBACK (gimp_curves_config_curve_dirty), self, 0); } gimp_config_reset (GIMP_CONFIG (self)); }
static void gimp_curve_finalize (GObject *object) { GimpCurve *curve = GIMP_CURVE (object); if (curve->points) { g_free (curve->points); curve->points = NULL; } if (curve->samples) { g_free (curve->samples); curve->samples = NULL; } G_OBJECT_CLASS (parent_class)->finalize (object); }
static void gimp_curve_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { GimpCurve *curve = GIMP_CURVE (object); switch (property_id) { case PROP_CURVE_TYPE: g_value_set_enum (value, curve->curve_type); break; case PROP_N_POINTS: g_value_set_int (value, curve->n_points); break; case PROP_POINTS: { GimpValueArray *array = gimp_value_array_new (curve->n_points * 2); GValue v = { 0, }; gint i; g_value_init (&v, G_TYPE_DOUBLE); for (i = 0; i < curve->n_points; i++) { g_value_set_double (&v, curve->points[i].x); gimp_value_array_append (array, &v); g_value_set_double (&v, curve->points[i].y); gimp_value_array_append (array, &v); } g_value_unset (&v); g_value_take_boxed (value, array); } break; case PROP_N_SAMPLES: g_value_set_int (value, curve->n_samples); break; case PROP_SAMPLES: { GimpValueArray *array = gimp_value_array_new (curve->n_samples); GValue v = { 0, }; gint i; g_value_init (&v, G_TYPE_DOUBLE); for (i = 0; i < curve->n_samples; i++) { g_value_set_double (&v, curve->samples[i]); gimp_value_array_append (array, &v); } g_value_unset (&v); g_value_take_boxed (value, array); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } }
static void gimp_curve_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { GimpCurve *curve = GIMP_CURVE (object); switch (property_id) { case PROP_CURVE_TYPE: gimp_curve_set_curve_type (curve, g_value_get_enum (value)); break; case PROP_N_POINTS: gimp_curve_set_n_points (curve, g_value_get_int (value)); break; case PROP_POINTS: { GimpValueArray *array = g_value_get_boxed (value); gint length; gint i; if (! array) break; length = gimp_value_array_length (array); for (i = 0; i < curve->n_points && i * 2 < length; i++) { GValue *x = gimp_value_array_index (array, i * 2); GValue *y = gimp_value_array_index (array, i * 2 + 1); curve->points[i].x = g_value_get_double (x); curve->points[i].y = g_value_get_double (y); } } break; case PROP_N_SAMPLES: gimp_curve_set_n_samples (curve, g_value_get_int (value)); break; case PROP_SAMPLES: { GimpValueArray *array = g_value_get_boxed (value); gint length; gint i; if (! array) break; length = gimp_value_array_length (array); for (i = 0; i < curve->n_samples && i < length; i++) { GValue *v = gimp_value_array_index (array, i); curve->samples[i] = g_value_get_double (v); } } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } }
static void _gimp_curve_reset (GimpConfig *config) { gimp_curve_reset (GIMP_CURVE (config), TRUE); }