/* This file is part of GEGL
*
* GEGL is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* GEGL is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with GEGL; if not, see .
*
* Copyright 2007 Mark Probst
*/
#ifndef __GEGL_CURVE_H__
#define __GEGL_CURVE_H__
/***
* GeglCurve:
*
* #GeglCurve is a curve describing a unique mapping of values.
*
* Used for things like the curves widget in gimp it is a form of doodle
* alpha.
*/
#include
G_BEGIN_DECLS
#define GEGL_TYPE_CURVE (gegl_curve_get_type ())
#define GEGL_CURVE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEGL_TYPE_CURVE, GeglCurve))
#define GEGL_CURVE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEGL_TYPE_CURVE, GeglCurveClass))
#define GEGL_IS_CURVE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEGL_TYPE_CURVE))
#define GEGL_IS_CURVE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEGL_TYPE_CURVE))
#define GEGL_CURVE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEGL_TYPE_CURVE, GeglCurveClass))
typedef struct _GeglCurveClass GeglCurveClass;
struct _GeglCurve
{
GObject parent_instance;
};
struct _GeglCurveClass
{
GObjectClass parent_class;
};
GType gegl_curve_get_type (void) G_GNUC_CONST;
/**
* gegl_curve_new:
* @y_min: minimum y value for curve.
* @y_max: maximum y value for curve.
*
* Create a #GeglCurve that can store a curve with values between @y_min and
* @y_max.
*
* Returns the newly created #GeglCurve.
*/
GeglCurve * gegl_curve_new (gdouble y_min,
gdouble y_max);
/**
* gegl_curve_new_default:
*
* Create a default #GeglCurve with an identify mapping of
* (0.0..1.0) -> (0.0..1.0).
*
* Returns the newly created default #GeglCurve.
*/
GeglCurve * gegl_curve_new_default (void);
/**
* gegl_curve_duplicate:
* @curve: the curve to duplicate.
*
* Create a copy of @curve.
*
* Return value: (transfer full): A new copy of @curve.
*/
GeglCurve * gegl_curve_duplicate (GeglCurve *curve);
/**
* gegl_curve_get_y_bounds:
* @curve: a #GeglCurve.
* @min_y: (out): return location for minimal value.
* @max_y: (out): return location for maximal value.
*
* Get the bounds on the values of the curve and store the values in
* the return locaitons provided in @min_y and @max_y.
*/
void gegl_curve_get_y_bounds (GeglCurve *curve,
gdouble *min_y,
gdouble *max_y);
/**
* gegl_curve_add_point:
* @curve: a #GeglCurve.
* @x: x coordinate
* @y: y coordinate
*
* Add a point to the curve at @x @y (replacing the value exactly for @x if it
* already exists.
*/
guint gegl_curve_add_point (GeglCurve *curve,
gdouble x,
gdouble y);
/**
* gegl_curve_get_point:
* @curve: a #GeglCurve.
* @index: the position of the value number to retrieve.
* @x: (out): x coordinate return location.
* @y: (out): y coordinate return location.
*
* Retrive the coordinates for an index.
*/
void gegl_curve_get_point (GeglCurve *curve,
guint index,
gdouble *x,
gdouble *y);
/**
* gegl_curve_set_point:
* @curve: a #GeglCurve.
* @index: the position of the value number to retrieve.
* @x: x coordinate
* @y: y coordinate
*
* Replace an existing point in a curve.
*/
void gegl_curve_set_point (GeglCurve *curve,
guint index,
gdouble x,
gdouble y);
/**
* gegl_curve_num_points:
* @curve: a #GeglCurve.
*
* Retrieve the number of points in the curve.
*
* Returns the number of points for the coordinates in the curve.
*/
guint gegl_curve_num_points (GeglCurve *curve);
/**
* gegl_curve_calc_value:
* @curve: a #GeglCurve.
*
* Retrieve the number of points in the curve.
*
* Returns the number of points for the coordinates in the curve.
*/
gdouble gegl_curve_calc_value (GeglCurve *curve,
gdouble x);
/**
* gegl_curve_calc_values: (skip)
* @curve: a #GeglCurve.
* @x_min: the minimum value to compute for
* @x_max: the maximum value to compute for
* @num_samples: number of samples to calculate
* @xs: return location for the x coordinates
* @ys: return location for the y coordinates
*
* Compute a set (lookup table) of coordinates.
*/
void gegl_curve_calc_values (GeglCurve *curve,
gdouble x_min,
gdouble x_max,
guint num_samples,
gdouble *xs,
gdouble *ys);
/***
*/
#define GEGL_TYPE_PARAM_CURVE (gegl_param_curve_get_type ())
#define GEGL_IS_PARAM_SPEC_CURVE(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), GEGL_TYPE_PARAM_CURVE))
GType gegl_param_curve_get_type (void) G_GNUC_CONST;
/**
* gegl_param_spec_curve:
* @name: canonical name of the property specified
* @nick: nick name for the property specified
* @blurb: description of the property specified
* @default_curve: the default value for the property specified
* @flags: flags for the property specified
*
* Creates a new #GParamSpec instance specifying a #GeglCurve property.
*
* Returns: (transfer full): a newly created parameter specification
*/
GParamSpec * gegl_param_spec_curve (const gchar *name,
const gchar *nick,
const gchar *blurb,
GeglCurve *default_curve,
GParamFlags flags);
G_END_DECLS
#endif /* __GEGL_CURVE_H__ */