inline the repeat functions.

2004-06-13  Sven Neumann  <sven@gimp.org>

	* app/core/gimpdrawable-blend.c (gradient_render_pixel): inline
	the repeat functions.

	* app/core/gimpgradient.c: inline the curve functions.
This commit is contained in:
Sven Neumann 2004-06-13 01:17:57 +00:00 committed by Sven Neumann
parent 4e235080ce
commit c28d70ce00
3 changed files with 59 additions and 88 deletions

View file

@ -1,3 +1,10 @@
2004-06-13 Sven Neumann <sven@gimp.org>
* app/core/gimpdrawable-blend.c (gradient_render_pixel): inline
the repeat functions.
* app/core/gimpgradient.c: inline the curve functions.
2004-06-13 Jakub Steiner <jimmac@ximian.com>
* cursors/gimp-tool-cursors.xcf

View file

@ -44,9 +44,6 @@
#include "gimp-intl.h"
typedef gdouble (* BlendRepeatFunc) (gdouble val);
typedef struct
{
GimpGradient *gradient;
@ -58,7 +55,7 @@ typedef struct
GimpRGB fg, bg;
gdouble dist;
gdouble vec[2];
BlendRepeatFunc repeat_func;
GimpRepeatMode repeat
} RenderBlendData;
typedef struct
@ -116,10 +113,6 @@ static gdouble gradient_calc_shapeburst_spherical_factor (gdouble x,
static gdouble gradient_calc_shapeburst_dimpled_factor (gdouble x,
gdouble y);
static gdouble gradient_repeat_none (gdouble val);
static gdouble gradient_repeat_sawtooth (gdouble val);
static gdouble gradient_repeat_triangular (gdouble val);
static void gradient_precalc_shapeburst (GimpImage *gimage,
GimpDrawable *drawable,
PixelRegion *PR,
@ -143,7 +136,7 @@ static void gradient_fill_region (GimpImage *gimage,
GimpBlendMode blend_mode,
GimpGradientType gradient_type,
gdouble offset,
GimpRepeatMode repeat,
GimpRepeatMode repeat,
gboolean reverse,
gboolean supersample,
gint max_depth,
@ -576,37 +569,6 @@ gradient_calc_shapeburst_dimpled_factor (gdouble x,
return value;
}
static gdouble
gradient_repeat_none (gdouble val)
{
return CLAMP (val, 0.0, 1.0);
}
static gdouble
gradient_repeat_sawtooth (gdouble val)
{
return val - floor (val);
}
static gdouble
gradient_repeat_triangular (gdouble val)
{
guint ival;
if (val < 0.0)
val = -val;
ival = (guint) val;
val = val - floor (val);
if (ival & 1)
return 1.0 - val;
else
return val;
}
static void
gradient_precalc_shapeburst (GimpImage *gimage,
GimpDrawable *drawable,
@ -699,11 +661,9 @@ gradient_render_pixel (double x,
GimpRGB *color,
gpointer render_data)
{
RenderBlendData *rbd;
RenderBlendData *rbd = render_data;
gdouble factor;
rbd = render_data;
/* Calculate blending factor */
switch (rbd->gradient_type)
@ -767,7 +727,31 @@ gradient_render_pixel (double x,
/* Adjust for repeat */
factor = rbd->repeat_func (factor);
switch (rbd->repeat)
{
case GIMP_REPEAT_NONE:
factor = CLAMP (factor, 0.0, 1.0);
break;
case GIMP_REPEAT_SAWTOOTH:
factor = factor - floor (factor);
break;
case GIMP_REPEAT_TRIANGULAR:
{
guint ifactor;
if (factor < 0.0)
factor = -factor;
ifactor = (guint) factor;
factor = factor - floor (factor);
if (ifactor & 1)
factor = 1.0 - factor;
}
break;
}
/* Blend the colors */
@ -802,11 +786,9 @@ gradient_put_pixel (gint x,
GimpRGB *color,
gpointer put_pixel_data)
{
PutPixelData *ppd;
PutPixelData *ppd = put_pixel_data;
guchar *data;
ppd = put_pixel_data;
/* Paint */
data = ppd->row_data + ppd->bytes * x;
@ -1008,27 +990,6 @@ gradient_fill_region (GimpImage *gimage,
break;
}
/* Set repeat function */
switch (repeat)
{
case GIMP_REPEAT_NONE:
rbd.repeat_func = gradient_repeat_none;
break;
case GIMP_REPEAT_SAWTOOTH:
rbd.repeat_func = gradient_repeat_sawtooth;
break;
case GIMP_REPEAT_TRIANGULAR:
rbd.repeat_func = gradient_repeat_triangular;
break;
default:
g_assert_not_reached ();
break;
}
/* Initialize render data */
rbd.offset = offset;
@ -1036,6 +997,7 @@ gradient_fill_region (GimpImage *gimage,
rbd.sy = sy;
rbd.blend_mode = blend_mode;
rbd.gradient_type = gradient_type;
rbd.repeat = repeat;
if (dither)
dither_rand = g_rand_new ();
@ -1162,10 +1124,12 @@ gradient_fill_region (GimpImage *gimage,
}
}
progress += PR->w * PR->h;
if (progress_callback)
(* progress_callback) (0, max_progress, progress, progress_data);
}
if (progress_callback)
{
progress += PR->w * PR->h;
(* progress_callback) (0, max_progress, progress, progress_data);
}
}
}
if (dither)

View file

@ -72,16 +72,16 @@ static gchar * gimp_gradient_get_extension (GimpData *data);
static GimpData * gimp_gradient_duplicate (GimpData *data,
gboolean stingy_memory_use);
static gdouble gimp_gradient_calc_linear_factor (gdouble middle,
gdouble pos);
static gdouble gimp_gradient_calc_curved_factor (gdouble middle,
gdouble pos);
static gdouble gimp_gradient_calc_sine_factor (gdouble middle,
gdouble pos);
static gdouble gimp_gradient_calc_sphere_increasing_factor (gdouble middle,
gdouble pos);
static gdouble gimp_gradient_calc_sphere_decreasing_factor (gdouble middle,
gdouble pos);
static inline gdouble gimp_gradient_calc_linear_factor (gdouble middle,
gdouble pos);
static inline gdouble gimp_gradient_calc_curved_factor (gdouble middle,
gdouble pos);
static inline gdouble gimp_gradient_calc_sine_factor (gdouble middle,
gdouble pos);
static inline gdouble gimp_gradient_calc_sphere_increasing_factor (gdouble middle,
gdouble pos);
static inline gdouble gimp_gradient_calc_sphere_decreasing_factor (gdouble middle,
gdouble pos);
static GimpDataClass *parent_class = NULL;
@ -822,7 +822,7 @@ gimp_gradient_get_segment_at (GimpGradient *gradient,
return NULL;
}
static gdouble
static inline gdouble
gimp_gradient_calc_linear_factor (gdouble middle,
gdouble pos)
{
@ -845,17 +845,17 @@ gimp_gradient_calc_linear_factor (gdouble middle,
}
}
static gdouble
static inline gdouble
gimp_gradient_calc_curved_factor (gdouble middle,
gdouble pos)
{
if (middle < EPSILON)
middle = EPSILON;
return pow(pos, log (0.5) / log (middle));
return pow (pos, log (0.5) / log (middle));
}
static gdouble
static inline gdouble
gimp_gradient_calc_sine_factor (gdouble middle,
gdouble pos)
{
@ -864,7 +864,7 @@ gimp_gradient_calc_sine_factor (gdouble middle,
return (sin ((-G_PI / 2.0) + G_PI * pos) + 1.0) / 2.0;
}
static gdouble
static inline gdouble
gimp_gradient_calc_sphere_increasing_factor (gdouble middle,
gdouble pos)
{
@ -873,7 +873,7 @@ gimp_gradient_calc_sphere_increasing_factor (gdouble middle,
return sqrt (1.0 - pos * pos); /* Works for convex increasing and concave decreasing */
}
static gdouble
static inline gdouble
gimp_gradient_calc_sphere_decreasing_factor (gdouble middle,
gdouble pos)
{