removed the "last_visited" field from GimpGradient. Instead added the new

2005-02-27  Sven Neumann  <sven@gimp.org>

	* app/core/gimpgradient.[ch]: removed the "last_visited" field
	from GimpGradient. Instead added the new function
	gimp_gradient_get_color_at_segment() that allows the caller to do
	the same optimization.

	* app/actions/gradient-editor-commands.c
	* app/core/gimpdrawable-blend.c
	* app/core/gimppalette-import.c
	* app/paint/gimppaintoptions.c
	* app/widgets/gimpgradienteditor.c
	* app/widgets/gimpgradientselect.c
	* app/widgets/gimpviewrenderergradient.c: changed accordingly.

	* app/pdb/gradient_cmds.c
	* app/pdb/gradients_cmds.c: regenerated.
This commit is contained in:
Sven Neumann
2005-02-26 23:55:50 +00:00
committed by Sven Neumann
parent 5f4cec76da
commit 8de1e94bb7
14 changed files with 174 additions and 131 deletions

View File

@ -1,3 +1,21 @@
2005-02-27 Sven Neumann <sven@gimp.org>
* app/core/gimpgradient.[ch]: removed the "last_visited" field
from GimpGradient. Instead added the new function
gimp_gradient_get_color_at_segment() that allows the caller to do
the same optimization.
* app/actions/gradient-editor-commands.c
* app/core/gimpdrawable-blend.c
* app/core/gimppalette-import.c
* app/paint/gimppaintoptions.c
* app/widgets/gimpgradienteditor.c
* app/widgets/gimpgradientselect.c
* app/widgets/gimpviewrenderergradient.c: changed accordingly.
* app/pdb/gradient_cmds.c
* app/pdb/gradients_cmds.c: regenerated.
2005-02-26 Manish Singh <yosh@gimp.org> 2005-02-26 Manish Singh <yosh@gimp.org>
* plug-ins/common/png.c: revert change to read images one row at a * plug-ins/common/png.c: revert change to read images one row at a

View File

@ -775,8 +775,6 @@ gradient_editor_replace_selection (GimpGradientEditor *editor,
editor->control_sel_l = replace_seg; editor->control_sel_l = replace_seg;
editor->control_sel_r = replace_last; editor->control_sel_r = replace_last;
gradient->last_visited = NULL; /* Force re-search */
} }
static void static void

View File

@ -653,8 +653,8 @@ gradient_precalc_shapeburst (GimpImage *gimage,
static void static void
gradient_render_pixel (double x, gradient_render_pixel (gdouble x,
double y, gdouble y,
GimpRGB *color, GimpRGB *color,
gpointer render_data) gpointer render_data)
{ {
@ -715,13 +715,13 @@ gradient_render_pixel (double x,
case GIMP_GRADIENT_SPIRAL_CLOCKWISE: case GIMP_GRADIENT_SPIRAL_CLOCKWISE:
factor = gradient_calc_spiral_factor (rbd->dist, factor = gradient_calc_spiral_factor (rbd->dist,
rbd->vec, rbd->offset, rbd->vec, rbd->offset,
x - rbd->sx, y - rbd->sy,TRUE); x - rbd->sx, y - rbd->sy, TRUE);
break; break;
case GIMP_GRADIENT_SPIRAL_ANTICLOCKWISE: case GIMP_GRADIENT_SPIRAL_ANTICLOCKWISE:
factor = gradient_calc_spiral_factor (rbd->dist, factor = gradient_calc_spiral_factor (rbd->dist,
rbd->vec, rbd->offset, rbd->vec, rbd->offset,
x - rbd->sx, y - rbd->sy,FALSE); x - rbd->sx, y - rbd->sy, FALSE);
break; break;
default: default:
@ -761,7 +761,8 @@ gradient_render_pixel (double x,
if (rbd->blend_mode == GIMP_CUSTOM_MODE) if (rbd->blend_mode == GIMP_CUSTOM_MODE)
{ {
gimp_gradient_get_color_at (rbd->gradient, factor, rbd->reverse, color); gimp_gradient_get_color_at (rbd->gradient, NULL,
factor, rbd->reverse, color);
} }
else else
{ {

View File

@ -60,11 +60,16 @@ static gboolean gimp_gradient_get_popup_size (GimpViewable *viewable,
static TempBuf * gimp_gradient_get_new_preview (GimpViewable *viewable, static TempBuf * gimp_gradient_get_new_preview (GimpViewable *viewable,
gint width, gint width,
gint height); gint height);
static void gimp_gradient_dirty (GimpData *data);
static gchar * gimp_gradient_get_extension (GimpData *data); static gchar * gimp_gradient_get_extension (GimpData *data);
static GimpData * gimp_gradient_duplicate (GimpData *data, static GimpData * gimp_gradient_duplicate (GimpData *data,
gboolean stingy_memory_use); gboolean stingy_memory_use);
static GimpGradientSegment *
gimp_gradient_get_segment_at_internal (GimpGradient *gradient,
GimpGradientSegment *seg,
gdouble pos);
static inline gdouble gimp_gradient_calc_linear_factor (gdouble middle, static inline gdouble gimp_gradient_calc_linear_factor (gdouble middle,
gdouble pos); gdouble pos);
static inline gdouble gimp_gradient_calc_curved_factor (gdouble middle, static inline gdouble gimp_gradient_calc_curved_factor (gdouble middle,
@ -127,7 +132,8 @@ gimp_gradient_calc_sphere_increasing_factor (gdouble middle,
{ {
pos = gimp_gradient_calc_linear_factor (middle, pos) - 1.0; pos = gimp_gradient_calc_linear_factor (middle, pos) - 1.0;
return sqrt (1.0 - pos * pos); /* Works for convex increasing and concave decreasing */ /* Works for convex increasing and concave decreasing */
return sqrt (1.0 - pos * pos);
} }
static inline gdouble static inline gdouble
@ -136,7 +142,8 @@ gimp_gradient_calc_sphere_decreasing_factor (gdouble middle,
{ {
pos = gimp_gradient_calc_linear_factor (middle, pos); pos = gimp_gradient_calc_linear_factor (middle, pos);
return 1.0 - sqrt(1.0 - pos * pos); /* Works for convex decreasing and concave increasing */ /* Works for convex decreasing and concave increasing */
return 1.0 - sqrt(1.0 - pos * pos);
} }
@ -188,7 +195,6 @@ gimp_gradient_class_init (GimpGradientClass *klass)
viewable_class->get_popup_size = gimp_gradient_get_popup_size; viewable_class->get_popup_size = gimp_gradient_get_popup_size;
viewable_class->get_new_preview = gimp_gradient_get_new_preview; viewable_class->get_new_preview = gimp_gradient_get_new_preview;
data_class->dirty = gimp_gradient_dirty;
data_class->save = gimp_gradient_save; data_class->save = gimp_gradient_save;
data_class->get_extension = gimp_gradient_get_extension; data_class->get_extension = gimp_gradient_get_extension;
data_class->duplicate = gimp_gradient_duplicate; data_class->duplicate = gimp_gradient_duplicate;
@ -198,7 +204,6 @@ static void
gimp_gradient_init (GimpGradient *gradient) gimp_gradient_init (GimpGradient *gradient)
{ {
gradient->segments = NULL; gradient->segments = NULL;
gradient->last_visited = NULL;
} }
static void static void
@ -267,6 +272,7 @@ gimp_gradient_get_new_preview (GimpViewable *viewable,
gint height) gint height)
{ {
GimpGradient *gradient = GIMP_GRADIENT (viewable); GimpGradient *gradient = GIMP_GRADIENT (viewable);
GimpGradientSegment *seg = NULL;
TempBuf *temp_buf; TempBuf *temp_buf;
guchar *buf; guchar *buf;
guchar *p; guchar *p;
@ -283,7 +289,7 @@ gimp_gradient_get_new_preview (GimpViewable *viewable,
for (x = 0; x < width; x++) for (x = 0; x < width; x++)
{ {
gimp_gradient_get_color_at (gradient, cur_x, FALSE, &color); seg = gimp_gradient_get_color_at (gradient, seg, cur_x, FALSE, &color);
*p++ = color.r * 255.0; *p++ = color.r * 255.0;
*p++ = color.g * 255.0; *p++ = color.g * 255.0;
@ -377,44 +383,46 @@ gimp_gradient_get_standard (void)
return standard_gradient; return standard_gradient;
} }
static void
gimp_gradient_dirty (GimpData *data)
{
GimpGradient *gradient = GIMP_GRADIENT (data);
gradient->last_visited = NULL;
if (GIMP_DATA_CLASS (parent_class)->dirty)
GIMP_DATA_CLASS (parent_class)->dirty (data);
}
static gchar * static gchar *
gimp_gradient_get_extension (GimpData *data) gimp_gradient_get_extension (GimpData *data)
{ {
return GIMP_GRADIENT_FILE_EXTENSION; return GIMP_GRADIENT_FILE_EXTENSION;
} }
void /**
* gimp_gradient_get_color_at:
* @gradient: a gradient
* @seg: a segment to seed the search with (or %NULL)
* @pos: position in the gradient (between 0.0 and 1.0)
* @reverse:
* @color: returns the color
*
* If you are iterating over an gradient, you should pass the the
* return value from the last call for @seg.
*
* Return value: the gradient segment the color is from
**/
GimpGradientSegment *
gimp_gradient_get_color_at (GimpGradient *gradient, gimp_gradient_get_color_at (GimpGradient *gradient,
GimpGradientSegment *seg,
gdouble pos, gdouble pos,
gboolean reverse, gboolean reverse,
GimpRGB *color) GimpRGB *color)
{ {
gdouble factor = 0.0; gdouble factor = 0.0;
GimpGradientSegment *seg;
gdouble seg_len; gdouble seg_len;
gdouble middle; gdouble middle;
GimpRGB rgb; GimpRGB rgb;
g_return_if_fail (GIMP_IS_GRADIENT (gradient)); g_return_val_if_fail (GIMP_IS_GRADIENT (gradient), NULL);
g_return_if_fail (color != NULL); g_return_val_if_fail (color != NULL, NULL);
pos = CLAMP (pos, 0.0, 1.0); pos = CLAMP (pos, 0.0, 1.0);
if (reverse) if (reverse)
pos = 1.0 - pos; pos = 1.0 - pos;
seg = gimp_gradient_get_segment_at (gradient, pos); seg = gimp_gradient_get_segment_at_internal (gradient, seg, pos);
seg_len = seg->right - seg->left; seg_len = seg->right - seg->left;
@ -526,22 +534,19 @@ gimp_gradient_get_color_at (GimpGradient *gradient,
seg->left_color.a + (seg->right_color.a - seg->left_color.a) * factor; seg->left_color.a + (seg->right_color.a - seg->left_color.a) * factor;
*color = rgb; *color = rgb;
return seg;
} }
GimpGradientSegment * static GimpGradientSegment *
gimp_gradient_get_segment_at (GimpGradient *gradient, gimp_gradient_get_segment_at_internal (GimpGradient *gradient,
GimpGradientSegment *seg,
gdouble pos) gdouble pos)
{ {
GimpGradientSegment *seg;
g_return_val_if_fail (GIMP_IS_GRADIENT (gradient), NULL);
/* handle FP imprecision at the edges of the gradient */ /* handle FP imprecision at the edges of the gradient */
pos = CLAMP (pos, 0.0, 1.0); pos = CLAMP (pos, 0.0, 1.0);
if (gradient->last_visited) if (! seg)
seg = gradient->last_visited;
else
seg = gradient->segments; seg = gradient->segments;
while (seg) while (seg)
@ -550,7 +555,6 @@ gimp_gradient_get_segment_at (GimpGradient *gradient,
{ {
if (pos <= seg->right) if (pos <= seg->right)
{ {
gradient->last_visited = seg; /* for speed */
return seg; return seg;
} }
else else
@ -565,12 +569,20 @@ gimp_gradient_get_segment_at (GimpGradient *gradient,
} }
/* Oops: we should have found a segment, but we didn't */ /* Oops: we should have found a segment, but we didn't */
g_warning ("%s: no matching segment for position %0.15f", g_warning ("%s: no matching segment for position %0.15f", G_STRFUNC, pos);
G_STRFUNC, pos);
return NULL; return NULL;
} }
GimpGradientSegment *
gimp_gradient_get_segment_at (GimpGradient *gradient,
gdouble pos)
{
g_return_val_if_fail (GIMP_IS_GRADIENT (gradient), NULL);
return gimp_gradient_get_segment_at_internal (gradient, NULL, pos);
}
/* gradient segment functions */ /* gradient segment functions */
GimpGradientSegment * GimpGradientSegment *
@ -683,7 +695,7 @@ gimp_gradient_segment_split_midpoint (GimpGradient *gradient,
gimp_data_freeze (GIMP_DATA (gradient)); gimp_data_freeze (GIMP_DATA (gradient));
/* Get color at original segment's midpoint */ /* Get color at original segment's midpoint */
gimp_gradient_get_color_at (gradient, lseg->middle, FALSE, &color); gimp_gradient_get_color_at (gradient, lseg, lseg->middle, FALSE, &color);
/* Create a new segment and insert it in the list */ /* Create a new segment and insert it in the list */
@ -765,8 +777,10 @@ gimp_gradient_segment_split_uniform (GimpGradient *gradient,
seg->right = lseg->left + (i + 1) * seg_len; seg->right = lseg->left + (i + 1) * seg_len;
seg->middle = (seg->left + seg->right) / 2.0; seg->middle = (seg->left + seg->right) / 2.0;
gimp_gradient_get_color_at (gradient, seg->left, FALSE, &seg->left_color); gimp_gradient_get_color_at (gradient, seg,
gimp_gradient_get_color_at (gradient, seg->right, FALSE, &seg->right_color); seg->left, FALSE, &seg->left_color);
gimp_gradient_get_color_at (gradient, seg,
seg->right, FALSE, &seg->right_color);
seg->type = lseg->type; seg->type = lseg->type;
seg->color = lseg->color; seg->color = lseg->color;
@ -802,15 +816,11 @@ gimp_gradient_segment_split_uniform (GimpGradient *gradient,
if (lseg->next) if (lseg->next)
lseg->next->prev = seg; lseg->next->prev = seg;
gradient->last_visited = NULL; /* Force re-search */
/* Done */ /* Done */
*newl = tmp; *newl = tmp;
*newr = seg; *newr = seg;
/* Delete old segment */ /* Delete old segment */
gimp_gradient_segment_free (lseg); gimp_gradient_segment_free (lseg);
gimp_data_thaw (GIMP_DATA (gradient)); gimp_data_thaw (GIMP_DATA (gradient));

View File

@ -57,9 +57,6 @@ struct _GimpGradient
GimpData parent_instance; GimpData parent_instance;
GimpGradientSegment *segments; GimpGradientSegment *segments;
/*< private >*/
GimpGradientSegment *last_visited;
}; };
struct _GimpGradientClass struct _GimpGradientClass
@ -74,7 +71,8 @@ GimpData * gimp_gradient_new (const gchar *name,
gboolean stingy_memory_use); gboolean stingy_memory_use);
GimpData * gimp_gradient_get_standard (void); GimpData * gimp_gradient_get_standard (void);
void gimp_gradient_get_color_at (GimpGradient *gradient, GimpGradientSegment * gimp_gradient_get_color_at (GimpGradient *gradient,
GimpGradientSegment *seg,
gdouble pos, gdouble pos,
gboolean reverse, gboolean reverse,
GimpRGB *color); GimpRGB *color);

View File

@ -63,9 +63,10 @@ gimp_palette_import_from_gradient (GimpGradient *gradient,
gint n_colors) gint n_colors)
{ {
GimpPalette *palette; GimpPalette *palette;
GimpGradientSegment *seg = NULL;
gdouble dx, cur_x; gdouble dx, cur_x;
GimpRGB color; GimpRGB color;
gint loop; gint i;
g_return_val_if_fail (GIMP_IS_GRADIENT (gradient), NULL); g_return_val_if_fail (GIMP_IS_GRADIENT (gradient), NULL);
g_return_val_if_fail (palette_name != NULL, NULL); g_return_val_if_fail (palette_name != NULL, NULL);
@ -75,9 +76,9 @@ gimp_palette_import_from_gradient (GimpGradient *gradient,
dx = 1.0 / (n_colors - 1); dx = 1.0 / (n_colors - 1);
for (loop = 0, cur_x = 0; loop < n_colors; loop++, cur_x += dx) for (i = 0, cur_x = 0; i < n_colors; i++, cur_x += dx)
{ {
gimp_gradient_get_color_at (gradient, cur_x, reverse, &color); seg = gimp_gradient_get_color_at (gradient, seg, cur_x, reverse, &color);
gimp_palette_add_entry (palette, -1, NULL, &color); gimp_palette_add_entry (palette, -1, NULL, &color);
} }

View File

@ -521,7 +521,7 @@ gimp_paint_options_get_gradient_color (GimpPaintOptions *paint_options,
if (pressure_options->color) if (pressure_options->color)
{ {
gimp_gradient_get_color_at (gradient, pressure, gimp_gradient_get_color_at (gradient, NULL, pressure,
gradient_options->gradient_reverse, gradient_options->gradient_reverse,
color); color);
@ -565,7 +565,7 @@ gimp_paint_options_get_gradient_color (GimpPaintOptions *paint_options,
else else
pos = pos - (gint) pos; pos = pos - (gint) pos;
gimp_gradient_get_color_at (gradient, pos, gimp_gradient_get_color_at (gradient, NULL, pos,
gradient_options->gradient_reverse, gradient_options->gradient_reverse,
color); color);

View File

@ -490,6 +490,7 @@ gradient_get_uniform_samples_invoker (Gimp *gimp,
if (gradient) if (gradient)
{ {
GimpGradientSegment *seg = NULL;
gdouble pos = 0.0; gdouble pos = 0.0;
gdouble delta = 1.0 / (num_samples - 1); gdouble delta = 1.0 / (num_samples - 1);
gdouble *sample; gdouble *sample;
@ -502,7 +503,7 @@ gradient_get_uniform_samples_invoker (Gimp *gimp,
{ {
GimpRGB color; GimpRGB color;
gimp_gradient_get_color_at (gradient, pos, reverse, &color); seg = gimp_gradient_get_color_at (gradient, seg, pos, reverse, &color);
*sample++ = color.r; *sample++ = color.r;
*sample++ = color.g; *sample++ = color.g;
@ -612,6 +613,7 @@ gradient_get_custom_samples_invoker (Gimp *gimp,
if (gradient) if (gradient)
{ {
GimpGradientSegment *seg = NULL;
gdouble *sample; gdouble *sample;
num_color_samples = num_samples * 4; num_color_samples = num_samples * 4;
@ -622,7 +624,7 @@ gradient_get_custom_samples_invoker (Gimp *gimp,
{ {
GimpRGB color; GimpRGB color;
gimp_gradient_get_color_at (gradient, *pos, reverse, &color); seg = gimp_gradient_get_color_at (gradient, seg, *pos, reverse, &color);
*sample++ = color.r; *sample++ = color.r;
*sample++ = color.g; *sample++ = color.g;

View File

@ -173,6 +173,8 @@ gradients_sample_uniform_invoker (Gimp *gimp,
if (success) if (success)
{ {
GimpGradientSegment *seg = NULL;
pos = 0.0; pos = 0.0;
delta = 1.0 / (i - 1); delta = 1.0 / (i - 1);
@ -184,7 +186,7 @@ gradients_sample_uniform_invoker (Gimp *gimp,
while (i--) while (i--)
{ {
gimp_gradient_get_color_at (gradient, pos, reverse, &color); seg = gimp_gradient_get_color_at (gradient, seg, pos, reverse, &color);
*pv++ = color.r; *pv++ = color.r;
*pv++ = color.g; *pv++ = color.g;
@ -278,6 +280,8 @@ gradients_sample_custom_invoker (Gimp *gimp,
if (success) if (success)
{ {
GimpGradientSegment *seg = NULL;
array_length = i * 4; array_length = i * 4;
pv = color_samples = g_new (gdouble, array_length); pv = color_samples = g_new (gdouble, array_length);
@ -286,7 +290,7 @@ gradients_sample_custom_invoker (Gimp *gimp,
while (i--) while (i--)
{ {
gimp_gradient_get_color_at (gradient, *pos, reverse, &color); seg = gimp_gradient_get_color_at (gradient, seg, *pos, reverse, &color);
*pv++ = color.r; *pv++ = color.r;
*pv++ = color.g; *pv++ = color.g;
@ -397,6 +401,7 @@ gradients_get_gradient_data_invoker (Gimp *gimp,
if (gradient) if (gradient)
{ {
GimpGradientSegment *seg = NULL;
gdouble *pv; gdouble *pv;
gdouble pos, delta; gdouble pos, delta;
GimpRGB color; GimpRGB color;
@ -410,7 +415,7 @@ gradients_get_gradient_data_invoker (Gimp *gimp,
while (i--) while (i--)
{ {
gimp_gradient_get_color_at (gradient, pos, reverse, &color); seg = gimp_gradient_get_color_at (gradient, seg, pos, reverse, &color);
*pv++ = color.r; *pv++ = color.r;
*pv++ = color.g; *pv++ = color.g;

View File

@ -797,7 +797,7 @@ view_set_hint (GimpGradientEditor *editor,
xpos = control_calc_g_pos (editor, x); xpos = control_calc_g_pos (editor, x);
gimp_gradient_get_color_at (GIMP_GRADIENT (data_editor->data), gimp_gradient_get_color_at (GIMP_GRADIENT (data_editor->data), NULL,
xpos, FALSE, &rgb); xpos, FALSE, &rgb);
gimp_rgb_to_hsv (&rgb, &hsv); gimp_rgb_to_hsv (&rgb, &hsv);
@ -838,7 +838,7 @@ view_set_foreground (GimpGradientEditor *editor,
xpos = control_calc_g_pos (editor, x); xpos = control_calc_g_pos (editor, x);
gimp_gradient_get_color_at (gradient, xpos, FALSE, &color); gimp_gradient_get_color_at (gradient, NULL, xpos, FALSE, &color);
gimp_context_set_foreground (user_context, &color); gimp_context_set_foreground (user_context, &color);
@ -873,7 +873,7 @@ view_set_background (GimpGradientEditor *editor,
xpos = control_calc_g_pos (editor, x); xpos = control_calc_g_pos (editor, x);
gimp_gradient_get_color_at (gradient, xpos, FALSE, &color); gimp_gradient_get_color_at (gradient, NULL, xpos, FALSE, &color);
gimp_context_set_background (user_context, &color); gimp_context_set_background (user_context, &color);

View File

@ -151,6 +151,7 @@ gimp_gradient_select_run_callback (GimpPdbDialog *dialog,
gint *n_return_vals) gint *n_return_vals)
{ {
GimpGradient *gradient = GIMP_GRADIENT (object); GimpGradient *gradient = GIMP_GRADIENT (object);
GimpGradientSegment *seg = NULL;
gdouble *values, *pv; gdouble *values, *pv;
gdouble pos, delta; gdouble pos, delta;
GimpRGB color; GimpRGB color;
@ -165,7 +166,7 @@ gimp_gradient_select_run_callback (GimpPdbDialog *dialog,
while (i--) while (i--)
{ {
gimp_gradient_get_color_at (gradient, pos, FALSE, &color); seg = gimp_gradient_get_color_at (gradient, seg, pos, FALSE, &color);
*pv++ = color.r; *pv++ = color.r;
*pv++ = color.g; *pv++ = color.g;

View File

@ -132,6 +132,7 @@ gimp_view_renderer_gradient_render (GimpViewRenderer *renderer,
{ {
GimpViewRendererGradient *rendergrad; GimpViewRendererGradient *rendergrad;
GimpGradient *gradient; GimpGradient *gradient;
GimpGradientSegment *seg = NULL;
guchar *even; guchar *even;
guchar *odd; guchar *odd;
guchar *buf; guchar *buf;
@ -168,7 +169,8 @@ gimp_view_renderer_gradient_render (GimpViewRenderer *renderer,
{ {
guchar r, g, b, a; guchar r, g, b, a;
gimp_gradient_get_color_at (gradient, cur_x, rendergrad->reverse, &color); seg = gimp_gradient_get_color_at (gradient, seg,
cur_x, rendergrad->reverse, &color);
cur_x += dx; cur_x += dx;
gimp_rgba_get_uchar (&color, &r, &g, &b, &a); gimp_rgba_get_uchar (&color, &r, &g, &b, &a);

View File

@ -481,6 +481,7 @@ HELP
if (gradient) if (gradient)
{ {
GimpGradientSegment *seg = NULL;
gdouble pos = 0.0; gdouble pos = 0.0;
gdouble delta = 1.0 / (num_samples - 1); gdouble delta = 1.0 / (num_samples - 1);
gdouble *sample; gdouble *sample;
@ -493,7 +494,7 @@ HELP
{ {
GimpRGB color; GimpRGB color;
gimp_gradient_get_color_at (gradient, pos, reverse, &color); seg = gimp_gradient_get_color_at (gradient, seg, pos, reverse, &color);
*sample++ = color.r; *sample++ = color.r;
*sample++ = color.g; *sample++ = color.g;
@ -545,6 +546,7 @@ HELP
if (gradient) if (gradient)
{ {
GimpGradientSegment *seg = NULL;
gdouble *sample; gdouble *sample;
num_color_samples = num_samples * 4; num_color_samples = num_samples * 4;
@ -555,7 +557,7 @@ HELP
{ {
GimpRGB color; GimpRGB color;
gimp_gradient_get_color_at (gradient, *pos, reverse, &color); seg = gimp_gradient_get_color_at (gradient, seg, *pos, reverse, &color);
*sample++ = color.r; *sample++ = color.r;
*sample++ = color.g; *sample++ = color.g;

View File

@ -110,6 +110,8 @@ sub gradients_sample_uniform {
'GimpRGB color', 'gdouble *pv' ], 'GimpRGB color', 'gdouble *pv' ],
code => <<'CODE' code => <<'CODE'
{ {
GimpGradientSegment *seg = NULL;
pos = 0.0; pos = 0.0;
delta = 1.0 / (i - 1); delta = 1.0 / (i - 1);
@ -121,7 +123,7 @@ sub gradients_sample_uniform {
while (i--) while (i--)
{ {
gimp_gradient_get_color_at (gradient, pos, reverse, &color); seg = gimp_gradient_get_color_at (gradient, seg, pos, reverse, &color);
*pv++ = color.r; *pv++ = color.r;
*pv++ = color.g; *pv++ = color.g;
@ -153,6 +155,8 @@ sub gradients_sample_custom {
vars => [ 'GimpGradient *gradient', 'GimpRGB color', 'gdouble *pv' ], vars => [ 'GimpGradient *gradient', 'GimpRGB color', 'gdouble *pv' ],
code => <<'CODE' code => <<'CODE'
{ {
GimpGradientSegment *seg = NULL;
array_length = i * 4; array_length = i * 4;
pv = color_samples = g_new (gdouble, array_length); pv = color_samples = g_new (gdouble, array_length);
@ -161,7 +165,7 @@ sub gradients_sample_custom {
while (i--) while (i--)
{ {
gimp_gradient_get_color_at (gradient, *pos, reverse, &color); seg = gimp_gradient_get_color_at (gradient, seg, *pos, reverse, &color);
*pv++ = color.r; *pv++ = color.r;
*pv++ = color.g; *pv++ = color.g;
@ -223,6 +227,7 @@ sub gradients_get_gradient_data {
if (gradient) if (gradient)
{ {
GimpGradientSegment *seg = NULL;
gdouble *pv; gdouble *pv;
gdouble pos, delta; gdouble pos, delta;
GimpRGB color; GimpRGB color;
@ -236,7 +241,7 @@ sub gradients_get_gradient_data {
while (i--) while (i--)
{ {
gimp_gradient_get_color_at (gradient, pos, reverse, &color); seg = gimp_gradient_get_color_at (gradient, seg, pos, reverse, &color);
*pv++ = color.r; *pv++ = color.r;
*pv++ = color.g; *pv++ = color.g;