made gradient_get_color_at() use GimpRGB.

2001-01-20  Michael Natterer  <mitch@gimp.org>

	* app/gradient.[ch]: made gradient_get_color_at() use GimpRGB.

	* app/airbrush.c
	* app/blend.c
	* app/gimpcontextpreview.c
	* app/gradient_select.c
	* app/paint_core.[ch]
	* app/paintbrush.c
	* app/palette.c
	* app/pencil.c

	* app/gradients_cmds.c
	* app/gradient_select_cmds.c
	* tools/pdbgen/pdb/gradient_select.pdb
	* tools/pdbgen/pdb/gradients.pdb: changed accordingly.
This commit is contained in:
Michael Natterer 2001-01-20 16:28:05 +00:00 committed by Michael Natterer
parent 8571f45c77
commit c31d2639e3
37 changed files with 499 additions and 476 deletions

View file

@ -1,3 +1,21 @@
2001-01-20 Michael Natterer <mitch@gimp.org>
* app/gradient.[ch]: made gradient_get_color_at() use GimpRGB.
* app/airbrush.c
* app/blend.c
* app/gimpcontextpreview.c
* app/gradient_select.c
* app/paint_core.[ch]
* app/paintbrush.c
* app/palette.c
* app/pencil.c
* app/gradients_cmds.c
* app/gradient_select_cmds.c
* tools/pdbgen/pdb/gradient_select.pdb
* tools/pdbgen/pdb/gradients.pdb: changed accordingly.
2001-01-20 Michael Natterer <mitch@gimp.org>
* app/color_notebook.[ch]

View file

@ -330,14 +330,17 @@ airbrush_motion (PaintCore *paint_core,
/* color the pixels */
if (pressure_options->color)
{
gdouble r, g, b, a;
GimpRGB color;
gradient_get_color_at (gimp_context_get_gradient (NULL),
paint_core->curpressure, &r, &g, &b, &a);
col[0] = r * 255.0;
col[1] = g * 255.0;
col[2] = b * 255.0;
col[3] = a * 255.0;
paint_core->curpressure, &color);
gimp_rgba_get_uchar (&color,
&col[RED_PIX],
&col[GREEN_PIX],
&col[BLUE_PIX],
&col[ALPHA_PIX]);
mode = INCREMENTAL;
color_pixels (temp_buf_data (area), col,
area->width * area->height, area->bytes);

View file

@ -1383,8 +1383,9 @@ gradient_render_pixel (double x,
/* Blend the colors */
if (rbd->blend_mode == CUSTOM_MODE)
gradient_get_color_at (gimp_context_get_gradient (NULL),
factor, &color->r, &color->g, &color->b, &color->a);
{
gradient_get_color_at (gimp_context_get_gradient (NULL), factor, color);
}
else
{
/* Blend values */

View file

@ -1383,8 +1383,9 @@ gradient_render_pixel (double x,
/* Blend the colors */
if (rbd->blend_mode == CUSTOM_MODE)
gradient_get_color_at (gimp_context_get_gradient (NULL),
factor, &color->r, &color->g, &color->b, &color->a);
{
gradient_get_color_at (gimp_context_get_gradient (NULL), factor, color);
}
else
{
/* Blend values */

View file

@ -904,11 +904,11 @@ draw_gradient (GtkPreview *preview,
gint width,
gint height)
{
guchar *p0, *p1, *even, *odd;
gint x, y;
gdouble dx, cur_x;
gdouble r, g, b, a;
gdouble c0, c1;
guchar *p0, *p1, *even, *odd;
gint x, y;
gdouble dx, cur_x;
GimpRGB color;
gdouble c0, c1;
dx = 1.0 / (width - 1);
cur_x = 0.0;
@ -917,7 +917,7 @@ draw_gradient (GtkPreview *preview,
for (x = 0; x < width; x++)
{
gradient_get_color_at (gradient, cur_x, &r, &g, &b, &a);
gradient_get_color_at (gradient, cur_x, &color);
if ((x / GIMP_CHECK_SIZE_SM) & 1)
{
@ -930,13 +930,13 @@ draw_gradient (GtkPreview *preview,
c1 = GIMP_CHECK_LIGHT;
}
*p0++ = (c0 + (r - c0) * a) * 255.0;
*p0++ = (c0 + (g - c0) * a) * 255.0;
*p0++ = (c0 + (b - c0) * a) * 255.0;
*p0++ = (c0 + (color.r - c0) * color.a) * 255.0;
*p0++ = (c0 + (color.g - c0) * color.a) * 255.0;
*p0++ = (c0 + (color.b - c0) * color.a) * 255.0;
*p1++ = (c1 + (r - c1) * a) * 255.0;
*p1++ = (c1 + (g - c1) * a) * 255.0;
*p1++ = (c1 + (b - c1) * a) * 255.0;
*p1++ = (c1 + (color.r - c1) * color.a) * 255.0;
*p1++ = (c1 + (color.g - c1) * color.a) * 255.0;
*p1++ = (c1 + (color.b - c1) * color.a) * 255.0;
cur_x += dx;
}

View file

@ -711,10 +711,7 @@ gradient_list_get_gradient_index (GSList *list,
void
gradient_get_color_at (gradient_t *gradient,
gdouble pos,
gdouble *r,
gdouble *g,
gdouble *b,
gdouble *a)
GimpRGB *color)
{
gdouble factor = 0.0;
grad_segment_t *seg;
@ -722,10 +719,12 @@ gradient_get_color_at (gradient_t *gradient,
gdouble middle;
GimpRGB rgb;
g_return_if_fail (color != NULL);
/* if there is no gradient return a totally transparent black */
if (gradient == NULL)
{
r = 0; g = 0; b = 0; a = 0;
gimp_rgba_set (color, 0.0, 0.0, 0.0, 0.0);
return;
}
@ -780,13 +779,18 @@ gradient_get_color_at (gradient_t *gradient,
/* Calculate color components */
*a = seg->left_color.a + (seg->right_color.a - seg->left_color.a) * factor;
rgb.a = seg->left_color.a + (seg->right_color.a - seg->left_color.a) * factor;
if (seg->color == GRAD_RGB)
{
*r = seg->left_color.r + (seg->right_color.r - seg->left_color.r) * factor;
*g = seg->left_color.g + (seg->right_color.g - seg->left_color.g) * factor;
*b = seg->left_color.b + (seg->right_color.b - seg->left_color.b) * factor;
rgb.r
= seg->left_color.r + (seg->right_color.r - seg->left_color.r) * factor;
rgb.g =
seg->left_color.g + (seg->right_color.g - seg->left_color.g) * factor;
rgb.b =
seg->left_color.b + (seg->right_color.b - seg->left_color.b) * factor;
}
else
{
@ -837,11 +841,9 @@ gradient_get_color_at (gradient_t *gradient,
}
gimp_hsv_to_rgb (&left_hsv, &rgb);
*r = rgb.r;
*g = rgb.g;
*b = rgb.b;
}
*color = rgb;
}
/***** The main gradient editor dialog *****/
@ -1361,7 +1363,7 @@ gradient_clist_fill_preview (gradient_t *gradient,
guchar *even, *odd;
gint x, y;
gdouble dx, cur_x;
gdouble r, g, b, a;
GimpRGB color;
gdouble c0, c1;
dx = (right - left) / (width - 1);
@ -1373,7 +1375,7 @@ gradient_clist_fill_preview (gradient_t *gradient,
for (x = 0; x < width; x++)
{
gradient_get_color_at (gradient, cur_x, &r, &g, &b, &a);
gradient_get_color_at (gradient, cur_x, &color);
if ((x / GIMP_CHECK_SIZE_SM) & 1)
{
@ -1386,13 +1388,13 @@ gradient_clist_fill_preview (gradient_t *gradient,
c1 = GIMP_CHECK_LIGHT;
}
*p0++ = (c0 + (r - c0) * a) * 255.0;
*p0++ = (c0 + (g - c0) * a) * 255.0;
*p0++ = (c0 + (b - c0) * a) * 255.0;
*p0++ = (c0 + (color.r - c0) * color.a) * 255.0;
*p0++ = (c0 + (color.g - c0) * color.a) * 255.0;
*p0++ = (c0 + (color.b - c0) * color.a) * 255.0;
*p1++ = (c1 + (r - c1) * a) * 255.0;
*p1++ = (c1 + (g - c1) * a) * 255.0;
*p1++ = (c1 + (b - c1) * a) * 255.0;
*p1++ = (c1 + (color.r - c1) * color.a) * 255.0;
*p1++ = (c1 + (color.g - c1) * color.a) * 255.0;
*p1++ = (c1 + (color.b - c1) * color.a) * 255.0;
cur_x += dx;
}
@ -2298,25 +2300,28 @@ static void
preview_set_hint (gint x)
{
gdouble xpos;
gdouble r, g, b, a;
gdouble h, s, v;
GimpRGB rgb;
GimpHSV hsv;
gchar *str;
xpos = control_calc_g_pos (x);
gradient_get_color_at (curr_gradient, xpos, &r, &g, &b, &a);
gradient_get_color_at (curr_gradient, xpos, &rgb);
h = r;
s = g;
v = b;
gimp_rgb_to_hsv_double (&h, &s, &v);
gimp_rgb_to_hsv (&rgb, &hsv);
str = g_strdup_printf (_("Position: %0.6f "
"RGB (%0.3f, %0.3f, %0.3f) "
"HSV (%0.3f, %0.3f, %0.3f) "
"Opacity: %0.3f"),
xpos, r, g, b, h * 360.0, s, v, a);
xpos,
rgb.r,
rgb.g,
rgb.b,
hsv.h * 360.0,
hsv.s,
hsv.v,
rgb.a);
ed_set_hint (str);
g_free (str);
@ -2332,8 +2337,7 @@ preview_set_foreground (gint x)
gchar *str;
xpos = control_calc_g_pos (x);
gradient_get_color_at (curr_gradient, xpos,
&color.r, &color.g, &color.b, &color.a);
gradient_get_color_at (curr_gradient, xpos, &color);
gimp_context_set_foreground (gimp_context_get_user (), &color);
@ -2356,8 +2360,7 @@ preview_set_background (gint x)
gchar *str;
xpos = control_calc_g_pos (x);
gradient_get_color_at (curr_gradient, xpos,
&color.r, &color.g, &color.b, &color.a);
gradient_get_color_at (curr_gradient, xpos, &color);
gimp_context_set_background (gimp_context_get_user (), &color);
@ -2464,7 +2467,7 @@ preview_fill_image (gint width,
guchar *p0, *p1;
gint x, y;
gdouble dx, cur_x;
gdouble r, g, b, a;
GimpRGB color;
gdouble c0, c1;
dx = (right - left) / (width - 1);
@ -2475,7 +2478,7 @@ preview_fill_image (gint width,
/* Create lines to fill the image */
for (x = 0; x < width; x++)
{
gradient_get_color_at (curr_gradient, cur_x, &r, &g, &b, &a);
gradient_get_color_at (curr_gradient, cur_x, &color);
if ((x / GIMP_CHECK_SIZE) & 1)
{
@ -2488,13 +2491,13 @@ preview_fill_image (gint width,
c1 = GIMP_CHECK_LIGHT;
}
*p0++ = (c0 + (r - c0) * a) * 255.0;
*p0++ = (c0 + (g - c0) * a) * 255.0;
*p0++ = (c0 + (b - c0) * a) * 255.0;
*p0++ = (c0 + (color.r - c0) * color.a) * 255.0;
*p0++ = (c0 + (color.g - c0) * color.a) * 255.0;
*p0++ = (c0 + (color.b - c0) * color.a) * 255.0;
*p1++ = (c1 + (r - c1) * a) * 255.0;
*p1++ = (c1 + (g - c1) * a) * 255.0;
*p1++ = (c1 + (b - c1) * a) * 255.0;
*p1++ = (c1 + (color.r - c1) * color.a) * 255.0;
*p1++ = (c1 + (color.g - c1) * color.a) * 255.0;
*p1++ = (c1 + (color.b - c1) * color.a) * 255.0;
cur_x += dx;
}
@ -4713,11 +4716,11 @@ cpopup_split_midpoint (grad_segment_t *lseg,
grad_segment_t **newl,
grad_segment_t **newr)
{
double r, g, b, a;
GimpRGB color;
grad_segment_t *newseg;
/* Get color at original segment's midpoint */
gradient_get_color_at (curr_gradient, lseg->middle, &r, &g, &b, &a);
gradient_get_color_at (curr_gradient, lseg->middle, &color);
/* Create a new segment and insert it in the list */
@ -4746,10 +4749,10 @@ cpopup_split_midpoint (grad_segment_t *lseg,
newseg->right_color = lseg->right_color;
lseg->right_color.r = newseg->left_color.r = r;
lseg->right_color.g = newseg->left_color.g = g;
lseg->right_color.b = newseg->left_color.b = b;
lseg->right_color.a = newseg->left_color.a = a;
lseg->right_color.r = newseg->left_color.r = color.r;
lseg->right_color.g = newseg->left_color.g = color.g;
lseg->right_color.b = newseg->left_color.b = color.b;
lseg->right_color.a = newseg->left_color.a = color.a;
/* Set parameters of new segment */
@ -4904,16 +4907,8 @@ cpopup_split_uniform (grad_segment_t *lseg,
seg->right = lseg->left + (i + 1) * seg_len;
seg->middle = (seg->left + seg->right) / 2.0;
gradient_get_color_at (curr_gradient, seg->left,
&seg->left_color.r,
&seg->left_color.g,
&seg->left_color.b,
&seg->left_color.a);
gradient_get_color_at (curr_gradient, seg->right,
&seg->right_color.r,
&seg->right_color.g,
&seg->right_color.b,
&seg->right_color.a);
gradient_get_color_at (curr_gradient, seg->left, &seg->left_color);
gradient_get_color_at (curr_gradient, seg->right, &seg->right_color);
seg->type = lseg->type;
seg->color = lseg->color;

View file

@ -39,10 +39,7 @@ gint gradient_list_get_gradient_index (GSList *list,
void gradient_get_color_at (gradient_t *gradient,
gdouble pos,
gdouble *r,
gdouble *g,
gdouble *b,
gdouble *a);
GimpRGB *color);
#endif /* __GRADIENT_H__ */

View file

@ -711,10 +711,7 @@ gradient_list_get_gradient_index (GSList *list,
void
gradient_get_color_at (gradient_t *gradient,
gdouble pos,
gdouble *r,
gdouble *g,
gdouble *b,
gdouble *a)
GimpRGB *color)
{
gdouble factor = 0.0;
grad_segment_t *seg;
@ -722,10 +719,12 @@ gradient_get_color_at (gradient_t *gradient,
gdouble middle;
GimpRGB rgb;
g_return_if_fail (color != NULL);
/* if there is no gradient return a totally transparent black */
if (gradient == NULL)
{
r = 0; g = 0; b = 0; a = 0;
gimp_rgba_set (color, 0.0, 0.0, 0.0, 0.0);
return;
}
@ -780,13 +779,18 @@ gradient_get_color_at (gradient_t *gradient,
/* Calculate color components */
*a = seg->left_color.a + (seg->right_color.a - seg->left_color.a) * factor;
rgb.a = seg->left_color.a + (seg->right_color.a - seg->left_color.a) * factor;
if (seg->color == GRAD_RGB)
{
*r = seg->left_color.r + (seg->right_color.r - seg->left_color.r) * factor;
*g = seg->left_color.g + (seg->right_color.g - seg->left_color.g) * factor;
*b = seg->left_color.b + (seg->right_color.b - seg->left_color.b) * factor;
rgb.r
= seg->left_color.r + (seg->right_color.r - seg->left_color.r) * factor;
rgb.g =
seg->left_color.g + (seg->right_color.g - seg->left_color.g) * factor;
rgb.b =
seg->left_color.b + (seg->right_color.b - seg->left_color.b) * factor;
}
else
{
@ -837,11 +841,9 @@ gradient_get_color_at (gradient_t *gradient,
}
gimp_hsv_to_rgb (&left_hsv, &rgb);
*r = rgb.r;
*g = rgb.g;
*b = rgb.b;
}
*color = rgb;
}
/***** The main gradient editor dialog *****/
@ -1361,7 +1363,7 @@ gradient_clist_fill_preview (gradient_t *gradient,
guchar *even, *odd;
gint x, y;
gdouble dx, cur_x;
gdouble r, g, b, a;
GimpRGB color;
gdouble c0, c1;
dx = (right - left) / (width - 1);
@ -1373,7 +1375,7 @@ gradient_clist_fill_preview (gradient_t *gradient,
for (x = 0; x < width; x++)
{
gradient_get_color_at (gradient, cur_x, &r, &g, &b, &a);
gradient_get_color_at (gradient, cur_x, &color);
if ((x / GIMP_CHECK_SIZE_SM) & 1)
{
@ -1386,13 +1388,13 @@ gradient_clist_fill_preview (gradient_t *gradient,
c1 = GIMP_CHECK_LIGHT;
}
*p0++ = (c0 + (r - c0) * a) * 255.0;
*p0++ = (c0 + (g - c0) * a) * 255.0;
*p0++ = (c0 + (b - c0) * a) * 255.0;
*p0++ = (c0 + (color.r - c0) * color.a) * 255.0;
*p0++ = (c0 + (color.g - c0) * color.a) * 255.0;
*p0++ = (c0 + (color.b - c0) * color.a) * 255.0;
*p1++ = (c1 + (r - c1) * a) * 255.0;
*p1++ = (c1 + (g - c1) * a) * 255.0;
*p1++ = (c1 + (b - c1) * a) * 255.0;
*p1++ = (c1 + (color.r - c1) * color.a) * 255.0;
*p1++ = (c1 + (color.g - c1) * color.a) * 255.0;
*p1++ = (c1 + (color.b - c1) * color.a) * 255.0;
cur_x += dx;
}
@ -2298,25 +2300,28 @@ static void
preview_set_hint (gint x)
{
gdouble xpos;
gdouble r, g, b, a;
gdouble h, s, v;
GimpRGB rgb;
GimpHSV hsv;
gchar *str;
xpos = control_calc_g_pos (x);
gradient_get_color_at (curr_gradient, xpos, &r, &g, &b, &a);
gradient_get_color_at (curr_gradient, xpos, &rgb);
h = r;
s = g;
v = b;
gimp_rgb_to_hsv_double (&h, &s, &v);
gimp_rgb_to_hsv (&rgb, &hsv);
str = g_strdup_printf (_("Position: %0.6f "
"RGB (%0.3f, %0.3f, %0.3f) "
"HSV (%0.3f, %0.3f, %0.3f) "
"Opacity: %0.3f"),
xpos, r, g, b, h * 360.0, s, v, a);
xpos,
rgb.r,
rgb.g,
rgb.b,
hsv.h * 360.0,
hsv.s,
hsv.v,
rgb.a);
ed_set_hint (str);
g_free (str);
@ -2332,8 +2337,7 @@ preview_set_foreground (gint x)
gchar *str;
xpos = control_calc_g_pos (x);
gradient_get_color_at (curr_gradient, xpos,
&color.r, &color.g, &color.b, &color.a);
gradient_get_color_at (curr_gradient, xpos, &color);
gimp_context_set_foreground (gimp_context_get_user (), &color);
@ -2356,8 +2360,7 @@ preview_set_background (gint x)
gchar *str;
xpos = control_calc_g_pos (x);
gradient_get_color_at (curr_gradient, xpos,
&color.r, &color.g, &color.b, &color.a);
gradient_get_color_at (curr_gradient, xpos, &color);
gimp_context_set_background (gimp_context_get_user (), &color);
@ -2464,7 +2467,7 @@ preview_fill_image (gint width,
guchar *p0, *p1;
gint x, y;
gdouble dx, cur_x;
gdouble r, g, b, a;
GimpRGB color;
gdouble c0, c1;
dx = (right - left) / (width - 1);
@ -2475,7 +2478,7 @@ preview_fill_image (gint width,
/* Create lines to fill the image */
for (x = 0; x < width; x++)
{
gradient_get_color_at (curr_gradient, cur_x, &r, &g, &b, &a);
gradient_get_color_at (curr_gradient, cur_x, &color);
if ((x / GIMP_CHECK_SIZE) & 1)
{
@ -2488,13 +2491,13 @@ preview_fill_image (gint width,
c1 = GIMP_CHECK_LIGHT;
}
*p0++ = (c0 + (r - c0) * a) * 255.0;
*p0++ = (c0 + (g - c0) * a) * 255.0;
*p0++ = (c0 + (b - c0) * a) * 255.0;
*p0++ = (c0 + (color.r - c0) * color.a) * 255.0;
*p0++ = (c0 + (color.g - c0) * color.a) * 255.0;
*p0++ = (c0 + (color.b - c0) * color.a) * 255.0;
*p1++ = (c1 + (r - c1) * a) * 255.0;
*p1++ = (c1 + (g - c1) * a) * 255.0;
*p1++ = (c1 + (b - c1) * a) * 255.0;
*p1++ = (c1 + (color.r - c1) * color.a) * 255.0;
*p1++ = (c1 + (color.g - c1) * color.a) * 255.0;
*p1++ = (c1 + (color.b - c1) * color.a) * 255.0;
cur_x += dx;
}
@ -4713,11 +4716,11 @@ cpopup_split_midpoint (grad_segment_t *lseg,
grad_segment_t **newl,
grad_segment_t **newr)
{
double r, g, b, a;
GimpRGB color;
grad_segment_t *newseg;
/* Get color at original segment's midpoint */
gradient_get_color_at (curr_gradient, lseg->middle, &r, &g, &b, &a);
gradient_get_color_at (curr_gradient, lseg->middle, &color);
/* Create a new segment and insert it in the list */
@ -4746,10 +4749,10 @@ cpopup_split_midpoint (grad_segment_t *lseg,
newseg->right_color = lseg->right_color;
lseg->right_color.r = newseg->left_color.r = r;
lseg->right_color.g = newseg->left_color.g = g;
lseg->right_color.b = newseg->left_color.b = b;
lseg->right_color.a = newseg->left_color.a = a;
lseg->right_color.r = newseg->left_color.r = color.r;
lseg->right_color.g = newseg->left_color.g = color.g;
lseg->right_color.b = newseg->left_color.b = color.b;
lseg->right_color.a = newseg->left_color.a = color.a;
/* Set parameters of new segment */
@ -4904,16 +4907,8 @@ cpopup_split_uniform (grad_segment_t *lseg,
seg->right = lseg->left + (i + 1) * seg_len;
seg->middle = (seg->left + seg->right) / 2.0;
gradient_get_color_at (curr_gradient, seg->left,
&seg->left_color.r,
&seg->left_color.g,
&seg->left_color.b,
&seg->left_color.a);
gradient_get_color_at (curr_gradient, seg->right,
&seg->right_color.r,
&seg->right_color.g,
&seg->right_color.b,
&seg->right_color.a);
gradient_get_color_at (curr_gradient, seg->left, &seg->left_color);
gradient_get_color_at (curr_gradient, seg->right, &seg->right_color);
seg->type = lseg->type;
seg->color = lseg->color;

View file

@ -39,10 +39,7 @@ gint gradient_list_get_gradient_index (GSList *list,
void gradient_get_color_at (gradient_t *gradient,
gdouble pos,
gdouble *r,
gdouble *g,
gdouble *b,
gdouble *a);
GimpRGB *color);
#endif /* __GRADIENT_H__ */

View file

@ -328,8 +328,10 @@ gradient_change_callbacks (GradientSelect *gsp,
{
gdouble *values, *pv;
double pos, delta;
double r, g, b, a;
gint i = gsp->sample_size;
GimpRGB color;
gint i;
i = gsp->sample_size;
pos = 0.0;
delta = 1.0 / (i - 1);
@ -338,12 +340,12 @@ gradient_change_callbacks (GradientSelect *gsp,
while (i--)
{
gradient_get_color_at (gradient, pos, &r, &g, &b, &a);
gradient_get_color_at (gradient, pos, &color);
*pv++ = r;
*pv++ = g;
*pv++ = b;
*pv++ = a;
*pv++ = color.r;
*pv++ = color.g;
*pv++ = color.b;
*pv++ = color.a;
pos += delta;
}

View file

@ -327,23 +327,24 @@ gradients_get_gradient_data_invoker (Argument *args)
if (success)
{
gdouble *pv;
gdouble pos, delta;
gdouble r, g, b, a;
int i = sample_size;
gdouble pos, delta;
GimpRGB color;
gint i;
pos = 0.0;
i = sample_size;
pos = 0.0;
delta = 1.0 / (i - 1);
pv = values = g_new (gdouble, i * 4);
while (i--)
{
gradient_get_color_at (gradient, pos, &r, &g, &b, &a);
gradient_get_color_at (gradient, pos, &color);
*pv++ = r;
*pv++ = g;
*pv++ = b;
*pv++ = a;
*pv++ = color.r;
*pv++ = color.g;
*pv++ = color.b;
*pv++ = color.a;
pos += delta;
}

View file

@ -211,7 +211,7 @@ gradients_sample_uniform_invoker (Argument *args)
gdouble *color_samples = NULL;
gradient_t *gradient;
gdouble pos, delta;
gdouble r, g, b, a;
GimpRGB color;
gdouble *pv;
i = args[0].value.pdb_int;
@ -231,12 +231,12 @@ gradients_sample_uniform_invoker (Argument *args)
while (i--)
{
gradient_get_color_at (gradient, pos, &r, &g, &b, &a);
gradient_get_color_at (gradient, pos, &color);
*pv++ = r;
*pv++ = g;
*pv++ = b;
*pv++ = a;
*pv++ = color.r;
*pv++ = color.g;
*pv++ = color.b;
*pv++ = color.a;
pos += delta;
}
@ -302,7 +302,7 @@ gradients_sample_custom_invoker (Argument *args)
gint32 array_length = 0;
gdouble *color_samples = NULL;
gradient_t *gradient;
gdouble r, g, b, a;
GimpRGB color;
gdouble *pv;
i = args[0].value.pdb_int;
@ -321,12 +321,12 @@ gradients_sample_custom_invoker (Argument *args)
while (i--)
{
gradient_get_color_at (gradient, *pos, &r, &g, &b, &a);
gradient_get_color_at (gradient, *pos, &color);
*pv++ = r;
*pv++ = g;
*pv++ = b;
*pv++ = a;
*pv++ = color.r;
*pv++ = color.g;
*pv++ = color.b;
*pv++ = color.a;
pos++;
}

View file

@ -711,10 +711,7 @@ gradient_list_get_gradient_index (GSList *list,
void
gradient_get_color_at (gradient_t *gradient,
gdouble pos,
gdouble *r,
gdouble *g,
gdouble *b,
gdouble *a)
GimpRGB *color)
{
gdouble factor = 0.0;
grad_segment_t *seg;
@ -722,10 +719,12 @@ gradient_get_color_at (gradient_t *gradient,
gdouble middle;
GimpRGB rgb;
g_return_if_fail (color != NULL);
/* if there is no gradient return a totally transparent black */
if (gradient == NULL)
{
r = 0; g = 0; b = 0; a = 0;
gimp_rgba_set (color, 0.0, 0.0, 0.0, 0.0);
return;
}
@ -780,13 +779,18 @@ gradient_get_color_at (gradient_t *gradient,
/* Calculate color components */
*a = seg->left_color.a + (seg->right_color.a - seg->left_color.a) * factor;
rgb.a = seg->left_color.a + (seg->right_color.a - seg->left_color.a) * factor;
if (seg->color == GRAD_RGB)
{
*r = seg->left_color.r + (seg->right_color.r - seg->left_color.r) * factor;
*g = seg->left_color.g + (seg->right_color.g - seg->left_color.g) * factor;
*b = seg->left_color.b + (seg->right_color.b - seg->left_color.b) * factor;
rgb.r
= seg->left_color.r + (seg->right_color.r - seg->left_color.r) * factor;
rgb.g =
seg->left_color.g + (seg->right_color.g - seg->left_color.g) * factor;
rgb.b =
seg->left_color.b + (seg->right_color.b - seg->left_color.b) * factor;
}
else
{
@ -837,11 +841,9 @@ gradient_get_color_at (gradient_t *gradient,
}
gimp_hsv_to_rgb (&left_hsv, &rgb);
*r = rgb.r;
*g = rgb.g;
*b = rgb.b;
}
*color = rgb;
}
/***** The main gradient editor dialog *****/
@ -1361,7 +1363,7 @@ gradient_clist_fill_preview (gradient_t *gradient,
guchar *even, *odd;
gint x, y;
gdouble dx, cur_x;
gdouble r, g, b, a;
GimpRGB color;
gdouble c0, c1;
dx = (right - left) / (width - 1);
@ -1373,7 +1375,7 @@ gradient_clist_fill_preview (gradient_t *gradient,
for (x = 0; x < width; x++)
{
gradient_get_color_at (gradient, cur_x, &r, &g, &b, &a);
gradient_get_color_at (gradient, cur_x, &color);
if ((x / GIMP_CHECK_SIZE_SM) & 1)
{
@ -1386,13 +1388,13 @@ gradient_clist_fill_preview (gradient_t *gradient,
c1 = GIMP_CHECK_LIGHT;
}
*p0++ = (c0 + (r - c0) * a) * 255.0;
*p0++ = (c0 + (g - c0) * a) * 255.0;
*p0++ = (c0 + (b - c0) * a) * 255.0;
*p0++ = (c0 + (color.r - c0) * color.a) * 255.0;
*p0++ = (c0 + (color.g - c0) * color.a) * 255.0;
*p0++ = (c0 + (color.b - c0) * color.a) * 255.0;
*p1++ = (c1 + (r - c1) * a) * 255.0;
*p1++ = (c1 + (g - c1) * a) * 255.0;
*p1++ = (c1 + (b - c1) * a) * 255.0;
*p1++ = (c1 + (color.r - c1) * color.a) * 255.0;
*p1++ = (c1 + (color.g - c1) * color.a) * 255.0;
*p1++ = (c1 + (color.b - c1) * color.a) * 255.0;
cur_x += dx;
}
@ -2298,25 +2300,28 @@ static void
preview_set_hint (gint x)
{
gdouble xpos;
gdouble r, g, b, a;
gdouble h, s, v;
GimpRGB rgb;
GimpHSV hsv;
gchar *str;
xpos = control_calc_g_pos (x);
gradient_get_color_at (curr_gradient, xpos, &r, &g, &b, &a);
gradient_get_color_at (curr_gradient, xpos, &rgb);
h = r;
s = g;
v = b;
gimp_rgb_to_hsv_double (&h, &s, &v);
gimp_rgb_to_hsv (&rgb, &hsv);
str = g_strdup_printf (_("Position: %0.6f "
"RGB (%0.3f, %0.3f, %0.3f) "
"HSV (%0.3f, %0.3f, %0.3f) "
"Opacity: %0.3f"),
xpos, r, g, b, h * 360.0, s, v, a);
xpos,
rgb.r,
rgb.g,
rgb.b,
hsv.h * 360.0,
hsv.s,
hsv.v,
rgb.a);
ed_set_hint (str);
g_free (str);
@ -2332,8 +2337,7 @@ preview_set_foreground (gint x)
gchar *str;
xpos = control_calc_g_pos (x);
gradient_get_color_at (curr_gradient, xpos,
&color.r, &color.g, &color.b, &color.a);
gradient_get_color_at (curr_gradient, xpos, &color);
gimp_context_set_foreground (gimp_context_get_user (), &color);
@ -2356,8 +2360,7 @@ preview_set_background (gint x)
gchar *str;
xpos = control_calc_g_pos (x);
gradient_get_color_at (curr_gradient, xpos,
&color.r, &color.g, &color.b, &color.a);
gradient_get_color_at (curr_gradient, xpos, &color);
gimp_context_set_background (gimp_context_get_user (), &color);
@ -2464,7 +2467,7 @@ preview_fill_image (gint width,
guchar *p0, *p1;
gint x, y;
gdouble dx, cur_x;
gdouble r, g, b, a;
GimpRGB color;
gdouble c0, c1;
dx = (right - left) / (width - 1);
@ -2475,7 +2478,7 @@ preview_fill_image (gint width,
/* Create lines to fill the image */
for (x = 0; x < width; x++)
{
gradient_get_color_at (curr_gradient, cur_x, &r, &g, &b, &a);
gradient_get_color_at (curr_gradient, cur_x, &color);
if ((x / GIMP_CHECK_SIZE) & 1)
{
@ -2488,13 +2491,13 @@ preview_fill_image (gint width,
c1 = GIMP_CHECK_LIGHT;
}
*p0++ = (c0 + (r - c0) * a) * 255.0;
*p0++ = (c0 + (g - c0) * a) * 255.0;
*p0++ = (c0 + (b - c0) * a) * 255.0;
*p0++ = (c0 + (color.r - c0) * color.a) * 255.0;
*p0++ = (c0 + (color.g - c0) * color.a) * 255.0;
*p0++ = (c0 + (color.b - c0) * color.a) * 255.0;
*p1++ = (c1 + (r - c1) * a) * 255.0;
*p1++ = (c1 + (g - c1) * a) * 255.0;
*p1++ = (c1 + (b - c1) * a) * 255.0;
*p1++ = (c1 + (color.r - c1) * color.a) * 255.0;
*p1++ = (c1 + (color.g - c1) * color.a) * 255.0;
*p1++ = (c1 + (color.b - c1) * color.a) * 255.0;
cur_x += dx;
}
@ -4713,11 +4716,11 @@ cpopup_split_midpoint (grad_segment_t *lseg,
grad_segment_t **newl,
grad_segment_t **newr)
{
double r, g, b, a;
GimpRGB color;
grad_segment_t *newseg;
/* Get color at original segment's midpoint */
gradient_get_color_at (curr_gradient, lseg->middle, &r, &g, &b, &a);
gradient_get_color_at (curr_gradient, lseg->middle, &color);
/* Create a new segment and insert it in the list */
@ -4746,10 +4749,10 @@ cpopup_split_midpoint (grad_segment_t *lseg,
newseg->right_color = lseg->right_color;
lseg->right_color.r = newseg->left_color.r = r;
lseg->right_color.g = newseg->left_color.g = g;
lseg->right_color.b = newseg->left_color.b = b;
lseg->right_color.a = newseg->left_color.a = a;
lseg->right_color.r = newseg->left_color.r = color.r;
lseg->right_color.g = newseg->left_color.g = color.g;
lseg->right_color.b = newseg->left_color.b = color.b;
lseg->right_color.a = newseg->left_color.a = color.a;
/* Set parameters of new segment */
@ -4904,16 +4907,8 @@ cpopup_split_uniform (grad_segment_t *lseg,
seg->right = lseg->left + (i + 1) * seg_len;
seg->middle = (seg->left + seg->right) / 2.0;
gradient_get_color_at (curr_gradient, seg->left,
&seg->left_color.r,
&seg->left_color.g,
&seg->left_color.b,
&seg->left_color.a);
gradient_get_color_at (curr_gradient, seg->right,
&seg->right_color.r,
&seg->right_color.g,
&seg->right_color.b,
&seg->right_color.a);
gradient_get_color_at (curr_gradient, seg->left, &seg->left_color);
gradient_get_color_at (curr_gradient, seg->right, &seg->right_color);
seg->type = lseg->type;
seg->color = lseg->color;

View file

@ -39,10 +39,7 @@ gint gradient_list_get_gradient_index (GSList *list,
void gradient_get_color_at (gradient_t *gradient,
gdouble pos,
gdouble *r,
gdouble *g,
gdouble *b,
gdouble *a);
GimpRGB *color);
#endif /* __GRADIENT_H__ */

View file

@ -328,8 +328,10 @@ gradient_change_callbacks (GradientSelect *gsp,
{
gdouble *values, *pv;
double pos, delta;
double r, g, b, a;
gint i = gsp->sample_size;
GimpRGB color;
gint i;
i = gsp->sample_size;
pos = 0.0;
delta = 1.0 / (i - 1);
@ -338,12 +340,12 @@ gradient_change_callbacks (GradientSelect *gsp,
while (i--)
{
gradient_get_color_at (gradient, pos, &r, &g, &b, &a);
gradient_get_color_at (gradient, pos, &color);
*pv++ = r;
*pv++ = g;
*pv++ = b;
*pv++ = a;
*pv++ = color.r;
*pv++ = color.g;
*pv++ = color.b;
*pv++ = color.a;
pos += delta;
}

View file

@ -2319,21 +2319,23 @@ static void
palette_import_fill_grad_preview (GtkWidget *preview,
gradient_t *gradient)
{
guchar buffer[3*IMPORT_PREVIEW_WIDTH];
gint loop;
guchar *p = buffer;
guchar buffer[3*IMPORT_PREVIEW_WIDTH];
gint loop;
guchar *p = buffer;
gdouble dx, cur_x;
gdouble r, g, b, a;
GimpRGB color;
dx = 1.0/ (IMPORT_PREVIEW_WIDTH - 1);
cur_x = 0;
for (loop = 0 ; loop < IMPORT_PREVIEW_WIDTH; loop++)
{
gradient_get_color_at (gradient, cur_x, &r, &g, &b, &a);
*p++ = r * 255.0;
*p++ = g * 255.0;
*p++ = b * 255.0;
gradient_get_color_at (gradient, cur_x, &color);
*p++ = (guchar) (color.r * 255.999);
*p++ = (guchar) (color.g * 255.999);
*p++ = (guchar) (color.b * 255.999);
cur_x += dx;
}
@ -2736,7 +2738,8 @@ palette_import_create_from_grad (gchar *name)
{
/* Add names to entry */
gdouble dx, cur_x;
gdouble r, g, b, a;
GimpRGB color;
guchar r, g, b;
gint sample_sz;
gint loop;
@ -2749,13 +2752,15 @@ palette_import_create_from_grad (gchar *name)
for (loop = 0; loop < sample_sz; loop++)
{
gradient_get_color_at (gradient, cur_x, &r, &g, &b, &a);
r = r * 255.0;
g = g * 255.0;
b = b * 255.0;
gradient_get_color_at (gradient, cur_x, &color);
gimp_rgb_get_uchar (&color, &r, &g, &b);
cur_x += dx;
palette_entries_add_entry (entries, _("Untitled"),
(gint) r, (gint) g, (gint) b);
(gint) r,
(gint) g,
(gint) b);
}
palette_insert_all (entries);

View file

@ -330,14 +330,17 @@ airbrush_motion (PaintCore *paint_core,
/* color the pixels */
if (pressure_options->color)
{
gdouble r, g, b, a;
GimpRGB color;
gradient_get_color_at (gimp_context_get_gradient (NULL),
paint_core->curpressure, &r, &g, &b, &a);
col[0] = r * 255.0;
col[1] = g * 255.0;
col[2] = b * 255.0;
col[3] = a * 255.0;
paint_core->curpressure, &color);
gimp_rgba_get_uchar (&color,
&col[RED_PIX],
&col[GREEN_PIX],
&col[BLUE_PIX],
&col[ALPHA_PIX]);
mode = INCREMENTAL;
color_pixels (temp_buf_data (area), col,
area->width * area->height, area->bytes);

View file

@ -172,14 +172,17 @@ pencil_motion (PaintCore *paint_core,
/* color the pixels */
if (pressure_options->color)
{
gdouble r, g, b, a;
GimpRGB color;
gradient_get_color_at (gimp_context_get_gradient (NULL),
paint_core->curpressure, &r, &g, &b, &a);
col[0] = r * 255.0;
col[1] = g * 255.0;
col[2] = b * 255.0;
col[3] = a * 255.0;
paint_core->curpressure, &color);
gimp_rgba_get_uchar (&color,
&col[RED_PIX],
&col[GREEN_PIX],
&col[BLUE_PIX],
&col[ALPHA_PIX]);
paint_appl_mode = INCREMENTAL;
color_pixels (temp_buf_data (area), col,
area->width * area->height, area->bytes);

View file

@ -1019,10 +1019,7 @@ paint_core_cleanup (void)
void
paint_core_get_color_from_gradient (PaintCore *paint_core,
gdouble gradient_length,
gdouble *r,
gdouble *g,
gdouble *b,
gdouble *a,
GimpRGB *color,
GradientPaintMode mode)
{
gdouble y;
@ -1040,7 +1037,7 @@ paint_core_get_color_from_gradient (PaintCore *paint_core,
else
y = y - (int)y;
gradient_get_color_at (gimp_context_get_gradient (NULL), y, r, g, b, a);
gradient_get_color_at (gimp_context_get_gradient (NULL), y, color);
}

View file

@ -155,10 +155,7 @@ void paint_core_cleanup (void);
void paint_core_get_color_from_gradient (PaintCore *paint_core,
gdouble gradient_length,
gdouble *r,
gdouble *g,
gdouble *b,
gdouble *a,
GimpRGB *color,
GradientPaintMode mode);
/* paint tool painting functions */

View file

@ -490,17 +490,17 @@ paintbrush_motion (PaintCore *paint_core,
PaintApplicationMode incremental,
GradientPaintMode gradient_type)
{
GImage *gimage;
TempBuf * area;
gdouble x, paint_left;
gdouble position;
guchar local_blend = OPAQUE_OPACITY;
guchar temp_blend = OPAQUE_OPACITY;
guchar col[MAX_CHANNELS];
gdouble r,g,b,a;
gint mode;
gint opacity;
gdouble scale;
GImage *gimage;
TempBuf *area;
gdouble x, paint_left;
gdouble position;
guchar local_blend = OPAQUE_OPACITY;
guchar temp_blend = OPAQUE_OPACITY;
guchar col[MAX_CHANNELS];
GimpRGB color;
gint mode;
gint opacity;
gdouble scale;
PaintApplicationMode paint_appl_mode = incremental ? INCREMENTAL : CONSTANT;
position = 0.0;
@ -538,19 +538,19 @@ paintbrush_motion (PaintCore *paint_core,
{
if (pressure_options->color)
gradient_get_color_at (gimp_context_get_gradient (NULL),
paint_core->curpressure, &r, &g, &b, &a);
paint_core->curpressure, &color);
else
paint_core_get_color_from_gradient (paint_core, gradient_length,
&r, &g, &b, &a, mode);
r = r * 255.0;
g = g * 255.0;
b = b * 255.0;
a = a * 255.0;
temp_blend = (gint)((a * local_blend) / 255);
col[0] = (gint)r;
col[1] = (gint)g;
col[2] = (gint)b;
col[3] = OPAQUE_OPACITY;
&color, mode);
temp_blend = (gint) ((color.a * local_blend));
gimp_rgb_get_uchar (&color,
&col[RED_PIX],
&col[GREEN_PIX],
&col[BLUE_PIX]);
col[ALPHA_PIX] = OPAQUE_OPACITY;
/* always use incremental mode with gradients */
/* make the gui cool later */
paint_appl_mode = INCREMENTAL;

View file

@ -2319,21 +2319,23 @@ static void
palette_import_fill_grad_preview (GtkWidget *preview,
gradient_t *gradient)
{
guchar buffer[3*IMPORT_PREVIEW_WIDTH];
gint loop;
guchar *p = buffer;
guchar buffer[3*IMPORT_PREVIEW_WIDTH];
gint loop;
guchar *p = buffer;
gdouble dx, cur_x;
gdouble r, g, b, a;
GimpRGB color;
dx = 1.0/ (IMPORT_PREVIEW_WIDTH - 1);
cur_x = 0;
for (loop = 0 ; loop < IMPORT_PREVIEW_WIDTH; loop++)
{
gradient_get_color_at (gradient, cur_x, &r, &g, &b, &a);
*p++ = r * 255.0;
*p++ = g * 255.0;
*p++ = b * 255.0;
gradient_get_color_at (gradient, cur_x, &color);
*p++ = (guchar) (color.r * 255.999);
*p++ = (guchar) (color.g * 255.999);
*p++ = (guchar) (color.b * 255.999);
cur_x += dx;
}
@ -2736,7 +2738,8 @@ palette_import_create_from_grad (gchar *name)
{
/* Add names to entry */
gdouble dx, cur_x;
gdouble r, g, b, a;
GimpRGB color;
guchar r, g, b;
gint sample_sz;
gint loop;
@ -2749,13 +2752,15 @@ palette_import_create_from_grad (gchar *name)
for (loop = 0; loop < sample_sz; loop++)
{
gradient_get_color_at (gradient, cur_x, &r, &g, &b, &a);
r = r * 255.0;
g = g * 255.0;
b = b * 255.0;
gradient_get_color_at (gradient, cur_x, &color);
gimp_rgb_get_uchar (&color, &r, &g, &b);
cur_x += dx;
palette_entries_add_entry (entries, _("Untitled"),
(gint) r, (gint) g, (gint) b);
(gint) r,
(gint) g,
(gint) b);
}
palette_insert_all (entries);

View file

@ -172,14 +172,17 @@ pencil_motion (PaintCore *paint_core,
/* color the pixels */
if (pressure_options->color)
{
gdouble r, g, b, a;
GimpRGB color;
gradient_get_color_at (gimp_context_get_gradient (NULL),
paint_core->curpressure, &r, &g, &b, &a);
col[0] = r * 255.0;
col[1] = g * 255.0;
col[2] = b * 255.0;
col[3] = a * 255.0;
paint_core->curpressure, &color);
gimp_rgba_get_uchar (&color,
&col[RED_PIX],
&col[GREEN_PIX],
&col[BLUE_PIX],
&col[ALPHA_PIX]);
paint_appl_mode = INCREMENTAL;
color_pixels (temp_buf_data (area), col,
area->width * area->height, area->bytes);

View file

@ -330,14 +330,17 @@ airbrush_motion (PaintCore *paint_core,
/* color the pixels */
if (pressure_options->color)
{
gdouble r, g, b, a;
GimpRGB color;
gradient_get_color_at (gimp_context_get_gradient (NULL),
paint_core->curpressure, &r, &g, &b, &a);
col[0] = r * 255.0;
col[1] = g * 255.0;
col[2] = b * 255.0;
col[3] = a * 255.0;
paint_core->curpressure, &color);
gimp_rgba_get_uchar (&color,
&col[RED_PIX],
&col[GREEN_PIX],
&col[BLUE_PIX],
&col[ALPHA_PIX]);
mode = INCREMENTAL;
color_pixels (temp_buf_data (area), col,
area->width * area->height, area->bytes);

View file

@ -1383,8 +1383,9 @@ gradient_render_pixel (double x,
/* Blend the colors */
if (rbd->blend_mode == CUSTOM_MODE)
gradient_get_color_at (gimp_context_get_gradient (NULL),
factor, &color->r, &color->g, &color->b, &color->a);
{
gradient_get_color_at (gimp_context_get_gradient (NULL), factor, color);
}
else
{
/* Blend values */

View file

@ -330,14 +330,17 @@ airbrush_motion (PaintCore *paint_core,
/* color the pixels */
if (pressure_options->color)
{
gdouble r, g, b, a;
GimpRGB color;
gradient_get_color_at (gimp_context_get_gradient (NULL),
paint_core->curpressure, &r, &g, &b, &a);
col[0] = r * 255.0;
col[1] = g * 255.0;
col[2] = b * 255.0;
col[3] = a * 255.0;
paint_core->curpressure, &color);
gimp_rgba_get_uchar (&color,
&col[RED_PIX],
&col[GREEN_PIX],
&col[BLUE_PIX],
&col[ALPHA_PIX]);
mode = INCREMENTAL;
color_pixels (temp_buf_data (area), col,
area->width * area->height, area->bytes);

View file

@ -1383,8 +1383,9 @@ gradient_render_pixel (double x,
/* Blend the colors */
if (rbd->blend_mode == CUSTOM_MODE)
gradient_get_color_at (gimp_context_get_gradient (NULL),
factor, &color->r, &color->g, &color->b, &color->a);
{
gradient_get_color_at (gimp_context_get_gradient (NULL), factor, color);
}
else
{
/* Blend values */

View file

@ -172,14 +172,17 @@ pencil_motion (PaintCore *paint_core,
/* color the pixels */
if (pressure_options->color)
{
gdouble r, g, b, a;
GimpRGB color;
gradient_get_color_at (gimp_context_get_gradient (NULL),
paint_core->curpressure, &r, &g, &b, &a);
col[0] = r * 255.0;
col[1] = g * 255.0;
col[2] = b * 255.0;
col[3] = a * 255.0;
paint_core->curpressure, &color);
gimp_rgba_get_uchar (&color,
&col[RED_PIX],
&col[GREEN_PIX],
&col[BLUE_PIX],
&col[ALPHA_PIX]);
paint_appl_mode = INCREMENTAL;
color_pixels (temp_buf_data (area), col,
area->width * area->height, area->bytes);

View file

@ -1019,10 +1019,7 @@ paint_core_cleanup (void)
void
paint_core_get_color_from_gradient (PaintCore *paint_core,
gdouble gradient_length,
gdouble *r,
gdouble *g,
gdouble *b,
gdouble *a,
GimpRGB *color,
GradientPaintMode mode)
{
gdouble y;
@ -1040,7 +1037,7 @@ paint_core_get_color_from_gradient (PaintCore *paint_core,
else
y = y - (int)y;
gradient_get_color_at (gimp_context_get_gradient (NULL), y, r, g, b, a);
gradient_get_color_at (gimp_context_get_gradient (NULL), y, color);
}

View file

@ -155,10 +155,7 @@ void paint_core_cleanup (void);
void paint_core_get_color_from_gradient (PaintCore *paint_core,
gdouble gradient_length,
gdouble *r,
gdouble *g,
gdouble *b,
gdouble *a,
GimpRGB *color,
GradientPaintMode mode);
/* paint tool painting functions */

View file

@ -490,17 +490,17 @@ paintbrush_motion (PaintCore *paint_core,
PaintApplicationMode incremental,
GradientPaintMode gradient_type)
{
GImage *gimage;
TempBuf * area;
gdouble x, paint_left;
gdouble position;
guchar local_blend = OPAQUE_OPACITY;
guchar temp_blend = OPAQUE_OPACITY;
guchar col[MAX_CHANNELS];
gdouble r,g,b,a;
gint mode;
gint opacity;
gdouble scale;
GImage *gimage;
TempBuf *area;
gdouble x, paint_left;
gdouble position;
guchar local_blend = OPAQUE_OPACITY;
guchar temp_blend = OPAQUE_OPACITY;
guchar col[MAX_CHANNELS];
GimpRGB color;
gint mode;
gint opacity;
gdouble scale;
PaintApplicationMode paint_appl_mode = incremental ? INCREMENTAL : CONSTANT;
position = 0.0;
@ -538,19 +538,19 @@ paintbrush_motion (PaintCore *paint_core,
{
if (pressure_options->color)
gradient_get_color_at (gimp_context_get_gradient (NULL),
paint_core->curpressure, &r, &g, &b, &a);
paint_core->curpressure, &color);
else
paint_core_get_color_from_gradient (paint_core, gradient_length,
&r, &g, &b, &a, mode);
r = r * 255.0;
g = g * 255.0;
b = b * 255.0;
a = a * 255.0;
temp_blend = (gint)((a * local_blend) / 255);
col[0] = (gint)r;
col[1] = (gint)g;
col[2] = (gint)b;
col[3] = OPAQUE_OPACITY;
&color, mode);
temp_blend = (gint) ((color.a * local_blend));
gimp_rgb_get_uchar (&color,
&col[RED_PIX],
&col[GREEN_PIX],
&col[BLUE_PIX]);
col[ALPHA_PIX] = OPAQUE_OPACITY;
/* always use incremental mode with gradients */
/* make the gui cool later */
paint_appl_mode = INCREMENTAL;

View file

@ -172,14 +172,17 @@ pencil_motion (PaintCore *paint_core,
/* color the pixels */
if (pressure_options->color)
{
gdouble r, g, b, a;
GimpRGB color;
gradient_get_color_at (gimp_context_get_gradient (NULL),
paint_core->curpressure, &r, &g, &b, &a);
col[0] = r * 255.0;
col[1] = g * 255.0;
col[2] = b * 255.0;
col[3] = a * 255.0;
paint_core->curpressure, &color);
gimp_rgba_get_uchar (&color,
&col[RED_PIX],
&col[GREEN_PIX],
&col[BLUE_PIX],
&col[ALPHA_PIX]);
paint_appl_mode = INCREMENTAL;
color_pixels (temp_buf_data (area), col,
area->width * area->height, area->bytes);

View file

@ -711,10 +711,7 @@ gradient_list_get_gradient_index (GSList *list,
void
gradient_get_color_at (gradient_t *gradient,
gdouble pos,
gdouble *r,
gdouble *g,
gdouble *b,
gdouble *a)
GimpRGB *color)
{
gdouble factor = 0.0;
grad_segment_t *seg;
@ -722,10 +719,12 @@ gradient_get_color_at (gradient_t *gradient,
gdouble middle;
GimpRGB rgb;
g_return_if_fail (color != NULL);
/* if there is no gradient return a totally transparent black */
if (gradient == NULL)
{
r = 0; g = 0; b = 0; a = 0;
gimp_rgba_set (color, 0.0, 0.0, 0.0, 0.0);
return;
}
@ -780,13 +779,18 @@ gradient_get_color_at (gradient_t *gradient,
/* Calculate color components */
*a = seg->left_color.a + (seg->right_color.a - seg->left_color.a) * factor;
rgb.a = seg->left_color.a + (seg->right_color.a - seg->left_color.a) * factor;
if (seg->color == GRAD_RGB)
{
*r = seg->left_color.r + (seg->right_color.r - seg->left_color.r) * factor;
*g = seg->left_color.g + (seg->right_color.g - seg->left_color.g) * factor;
*b = seg->left_color.b + (seg->right_color.b - seg->left_color.b) * factor;
rgb.r
= seg->left_color.r + (seg->right_color.r - seg->left_color.r) * factor;
rgb.g =
seg->left_color.g + (seg->right_color.g - seg->left_color.g) * factor;
rgb.b =
seg->left_color.b + (seg->right_color.b - seg->left_color.b) * factor;
}
else
{
@ -837,11 +841,9 @@ gradient_get_color_at (gradient_t *gradient,
}
gimp_hsv_to_rgb (&left_hsv, &rgb);
*r = rgb.r;
*g = rgb.g;
*b = rgb.b;
}
*color = rgb;
}
/***** The main gradient editor dialog *****/
@ -1361,7 +1363,7 @@ gradient_clist_fill_preview (gradient_t *gradient,
guchar *even, *odd;
gint x, y;
gdouble dx, cur_x;
gdouble r, g, b, a;
GimpRGB color;
gdouble c0, c1;
dx = (right - left) / (width - 1);
@ -1373,7 +1375,7 @@ gradient_clist_fill_preview (gradient_t *gradient,
for (x = 0; x < width; x++)
{
gradient_get_color_at (gradient, cur_x, &r, &g, &b, &a);
gradient_get_color_at (gradient, cur_x, &color);
if ((x / GIMP_CHECK_SIZE_SM) & 1)
{
@ -1386,13 +1388,13 @@ gradient_clist_fill_preview (gradient_t *gradient,
c1 = GIMP_CHECK_LIGHT;
}
*p0++ = (c0 + (r - c0) * a) * 255.0;
*p0++ = (c0 + (g - c0) * a) * 255.0;
*p0++ = (c0 + (b - c0) * a) * 255.0;
*p0++ = (c0 + (color.r - c0) * color.a) * 255.0;
*p0++ = (c0 + (color.g - c0) * color.a) * 255.0;
*p0++ = (c0 + (color.b - c0) * color.a) * 255.0;
*p1++ = (c1 + (r - c1) * a) * 255.0;
*p1++ = (c1 + (g - c1) * a) * 255.0;
*p1++ = (c1 + (b - c1) * a) * 255.0;
*p1++ = (c1 + (color.r - c1) * color.a) * 255.0;
*p1++ = (c1 + (color.g - c1) * color.a) * 255.0;
*p1++ = (c1 + (color.b - c1) * color.a) * 255.0;
cur_x += dx;
}
@ -2298,25 +2300,28 @@ static void
preview_set_hint (gint x)
{
gdouble xpos;
gdouble r, g, b, a;
gdouble h, s, v;
GimpRGB rgb;
GimpHSV hsv;
gchar *str;
xpos = control_calc_g_pos (x);
gradient_get_color_at (curr_gradient, xpos, &r, &g, &b, &a);
gradient_get_color_at (curr_gradient, xpos, &rgb);
h = r;
s = g;
v = b;
gimp_rgb_to_hsv_double (&h, &s, &v);
gimp_rgb_to_hsv (&rgb, &hsv);
str = g_strdup_printf (_("Position: %0.6f "
"RGB (%0.3f, %0.3f, %0.3f) "
"HSV (%0.3f, %0.3f, %0.3f) "
"Opacity: %0.3f"),
xpos, r, g, b, h * 360.0, s, v, a);
xpos,
rgb.r,
rgb.g,
rgb.b,
hsv.h * 360.0,
hsv.s,
hsv.v,
rgb.a);
ed_set_hint (str);
g_free (str);
@ -2332,8 +2337,7 @@ preview_set_foreground (gint x)
gchar *str;
xpos = control_calc_g_pos (x);
gradient_get_color_at (curr_gradient, xpos,
&color.r, &color.g, &color.b, &color.a);
gradient_get_color_at (curr_gradient, xpos, &color);
gimp_context_set_foreground (gimp_context_get_user (), &color);
@ -2356,8 +2360,7 @@ preview_set_background (gint x)
gchar *str;
xpos = control_calc_g_pos (x);
gradient_get_color_at (curr_gradient, xpos,
&color.r, &color.g, &color.b, &color.a);
gradient_get_color_at (curr_gradient, xpos, &color);
gimp_context_set_background (gimp_context_get_user (), &color);
@ -2464,7 +2467,7 @@ preview_fill_image (gint width,
guchar *p0, *p1;
gint x, y;
gdouble dx, cur_x;
gdouble r, g, b, a;
GimpRGB color;
gdouble c0, c1;
dx = (right - left) / (width - 1);
@ -2475,7 +2478,7 @@ preview_fill_image (gint width,
/* Create lines to fill the image */
for (x = 0; x < width; x++)
{
gradient_get_color_at (curr_gradient, cur_x, &r, &g, &b, &a);
gradient_get_color_at (curr_gradient, cur_x, &color);
if ((x / GIMP_CHECK_SIZE) & 1)
{
@ -2488,13 +2491,13 @@ preview_fill_image (gint width,
c1 = GIMP_CHECK_LIGHT;
}
*p0++ = (c0 + (r - c0) * a) * 255.0;
*p0++ = (c0 + (g - c0) * a) * 255.0;
*p0++ = (c0 + (b - c0) * a) * 255.0;
*p0++ = (c0 + (color.r - c0) * color.a) * 255.0;
*p0++ = (c0 + (color.g - c0) * color.a) * 255.0;
*p0++ = (c0 + (color.b - c0) * color.a) * 255.0;
*p1++ = (c1 + (r - c1) * a) * 255.0;
*p1++ = (c1 + (g - c1) * a) * 255.0;
*p1++ = (c1 + (b - c1) * a) * 255.0;
*p1++ = (c1 + (color.r - c1) * color.a) * 255.0;
*p1++ = (c1 + (color.g - c1) * color.a) * 255.0;
*p1++ = (c1 + (color.b - c1) * color.a) * 255.0;
cur_x += dx;
}
@ -4713,11 +4716,11 @@ cpopup_split_midpoint (grad_segment_t *lseg,
grad_segment_t **newl,
grad_segment_t **newr)
{
double r, g, b, a;
GimpRGB color;
grad_segment_t *newseg;
/* Get color at original segment's midpoint */
gradient_get_color_at (curr_gradient, lseg->middle, &r, &g, &b, &a);
gradient_get_color_at (curr_gradient, lseg->middle, &color);
/* Create a new segment and insert it in the list */
@ -4746,10 +4749,10 @@ cpopup_split_midpoint (grad_segment_t *lseg,
newseg->right_color = lseg->right_color;
lseg->right_color.r = newseg->left_color.r = r;
lseg->right_color.g = newseg->left_color.g = g;
lseg->right_color.b = newseg->left_color.b = b;
lseg->right_color.a = newseg->left_color.a = a;
lseg->right_color.r = newseg->left_color.r = color.r;
lseg->right_color.g = newseg->left_color.g = color.g;
lseg->right_color.b = newseg->left_color.b = color.b;
lseg->right_color.a = newseg->left_color.a = color.a;
/* Set parameters of new segment */
@ -4904,16 +4907,8 @@ cpopup_split_uniform (grad_segment_t *lseg,
seg->right = lseg->left + (i + 1) * seg_len;
seg->middle = (seg->left + seg->right) / 2.0;
gradient_get_color_at (curr_gradient, seg->left,
&seg->left_color.r,
&seg->left_color.g,
&seg->left_color.b,
&seg->left_color.a);
gradient_get_color_at (curr_gradient, seg->right,
&seg->right_color.r,
&seg->right_color.g,
&seg->right_color.b,
&seg->right_color.a);
gradient_get_color_at (curr_gradient, seg->left, &seg->left_color);
gradient_get_color_at (curr_gradient, seg->right, &seg->right_color);
seg->type = lseg->type;
seg->color = lseg->color;

View file

@ -39,10 +39,7 @@ gint gradient_list_get_gradient_index (GSList *list,
void gradient_get_color_at (gradient_t *gradient,
gdouble pos,
gdouble *r,
gdouble *g,
gdouble *b,
gdouble *a);
GimpRGB *color);
#endif /* __GRADIENT_H__ */

View file

@ -2319,21 +2319,23 @@ static void
palette_import_fill_grad_preview (GtkWidget *preview,
gradient_t *gradient)
{
guchar buffer[3*IMPORT_PREVIEW_WIDTH];
gint loop;
guchar *p = buffer;
guchar buffer[3*IMPORT_PREVIEW_WIDTH];
gint loop;
guchar *p = buffer;
gdouble dx, cur_x;
gdouble r, g, b, a;
GimpRGB color;
dx = 1.0/ (IMPORT_PREVIEW_WIDTH - 1);
cur_x = 0;
for (loop = 0 ; loop < IMPORT_PREVIEW_WIDTH; loop++)
{
gradient_get_color_at (gradient, cur_x, &r, &g, &b, &a);
*p++ = r * 255.0;
*p++ = g * 255.0;
*p++ = b * 255.0;
gradient_get_color_at (gradient, cur_x, &color);
*p++ = (guchar) (color.r * 255.999);
*p++ = (guchar) (color.g * 255.999);
*p++ = (guchar) (color.b * 255.999);
cur_x += dx;
}
@ -2736,7 +2738,8 @@ palette_import_create_from_grad (gchar *name)
{
/* Add names to entry */
gdouble dx, cur_x;
gdouble r, g, b, a;
GimpRGB color;
guchar r, g, b;
gint sample_sz;
gint loop;
@ -2749,13 +2752,15 @@ palette_import_create_from_grad (gchar *name)
for (loop = 0; loop < sample_sz; loop++)
{
gradient_get_color_at (gradient, cur_x, &r, &g, &b, &a);
r = r * 255.0;
g = g * 255.0;
b = b * 255.0;
gradient_get_color_at (gradient, cur_x, &color);
gimp_rgb_get_uchar (&color, &r, &g, &b);
cur_x += dx;
palette_entries_add_entry (entries, _("Untitled"),
(gint) r, (gint) g, (gint) b);
(gint) r,
(gint) g,
(gint) b);
}
palette_insert_all (entries);

View file

@ -210,23 +210,24 @@ HELP
if (success)
{
gdouble *pv;
gdouble pos, delta;
gdouble r, g, b, a;
int i = sample_size;
gdouble pos, delta;
GimpRGB color;
gint i;
pos = 0.0;
i = sample_size;
pos = 0.0;
delta = 1.0 / (i - 1);
pv = values = g_new (gdouble, i * 4);
while (i--)
{
gradient_get_color_at (gradient, pos, &r, &g, &b, &a);
gradient_get_color_at (gradient, pos, &color);
*pv++ = r;
*pv++ = g;
*pv++ = b;
*pv++ = a;
*pv++ = color.r;
*pv++ = color.g;
*pv++ = color.b;
*pv++ = color.a;
pos += delta;
}

View file

@ -149,7 +149,7 @@ HELP
&sample_outargs;
%invoke = (
vars => [ 'gradient_t *gradient', 'gdouble pos, delta', 'gdouble r, g, b, a', 'gdouble *pv' ],
vars => [ 'gradient_t *gradient', 'gdouble pos, delta', 'GimpRGB color', 'gdouble *pv' ],
code => <<'CODE'
{
pos = 0.0;
@ -163,12 +163,12 @@ HELP
while (i--)
{
gradient_get_color_at (gradient, pos, &r, &g, &b, &a);
gradient_get_color_at (gradient, pos, &color);
*pv++ = r;
*pv++ = g;
*pv++ = b;
*pv++ = a;
*pv++ = color.r;
*pv++ = color.g;
*pv++ = color.b;
*pv++ = color.a;
pos += delta;
}
@ -204,7 +204,7 @@ HELP
&sample_outargs;
%invoke = (
vars => [ 'gradient_t *gradient', 'gdouble r, g, b, a', 'gdouble *pv' ],
vars => [ 'gradient_t *gradient', 'GimpRGB color', 'gdouble *pv' ],
code => <<'CODE'
{
array_length = i * 4;
@ -215,12 +215,12 @@ HELP
while (i--)
{
gradient_get_color_at (gradient, *pos, &r, &g, &b, &a);
gradient_get_color_at (gradient, *pos, &color);
*pv++ = r;
*pv++ = g;
*pv++ = b;
*pv++ = a;
*pv++ = color.r;
*pv++ = color.g;
*pv++ = color.b;
*pv++ = color.a;
pos++;
}