changed the range of the "lightness" parameter to [-100..+100], where -100

2003-11-18  Michael Natterer  <mitch@gimp.org>

	* app/base/colorize.[ch]: changed the range of the "lightness"
	parameter to [-100..+100], where -100 results in pure black and
	+100 in pure white. Default to lightness == 0 so the initial
	transform changes just the colors while keeping the original
	lightness.

	* app/tools/gimpcolorizetool.[ch]: changed accordingly. Reordered
	the scales to be in HSL order.
This commit is contained in:
Michael Natterer 2003-11-18 16:06:47 +00:00 committed by Michael Natterer
parent 0d2229b75d
commit cbfbc2b269
5 changed files with 67 additions and 44 deletions

View File

@ -1,3 +1,14 @@
2003-11-18 Michael Natterer <mitch@gimp.org>
* app/base/colorize.[ch]: changed the range of the "lightness"
parameter to [-100..+100], where -100 results in pure black and
+100 in pure white. Default to lightness == 0 so the initial
transform changes just the colors while keeping the original
lightness.
* app/tools/gimpcolorizetool.[ch]: changed accordingly. Reordered
the scales to be in HSL order.
2003-11-18 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpcontainerpopup.[ch]

View File

@ -36,9 +36,9 @@ colorize_init (Colorize *colorize)
g_return_if_fail (colorize != NULL);
colorize->hue = 360.0 / 2;
colorize->lightness = 100.0 / 2;
colorize->saturation = 100.0 / 2;
colorize->hue = 180.0;
colorize->saturation = 50.0;
colorize->lightness = 0.0;
for (i = 0; i < 256; i ++)
{
@ -59,13 +59,14 @@ colorize_calculate (Colorize *colorize)
hsl.h = colorize->hue / 360.0;
hsl.s = colorize->saturation / 100.0;
hsl.l = colorize->lightness / 100.0;
gimp_hsl_to_rgb (&hsl, &rgb);
/* Calculate transfers */
for (i = 0; i < 256; i ++)
{
hsl.l = (gdouble) i / 255.0;
gimp_hsl_to_rgb (&hsl, &rgb);
colorize->final_red_lookup[i] = i * rgb.r;
colorize->final_green_lookup[i] = i * rgb.g;
colorize->final_blue_lookup[i] = i * rgb.b;
@ -101,6 +102,17 @@ colorize (PixelRegion *srcPR,
colorize->lum_green_lookup[s[GREEN_PIX]] +
colorize->lum_blue_lookup[s[BLUE_PIX]]); /* luminosity */
if (colorize->lightness > 0)
{
lum = (gdouble) lum * (100.0 - colorize->lightness) / 100.0;
lum += 255 - (100.0 - colorize->lightness) * 255.0 / 100.0;
}
else if (colorize->lightness < 0)
{
lum = (gdouble) lum * (colorize->lightness + 100.0) / 100.0;
}
d[RED_PIX] = colorize->final_red_lookup[lum];
d[GREEN_PIX] = colorize->final_green_lookup[lum];
d[BLUE_PIX] = colorize->final_blue_lookup[lum];

View File

@ -23,8 +23,8 @@
struct _Colorize
{
gdouble hue;
gdouble lightness;
gdouble saturation;
gdouble lightness;
gint lum_red_lookup[256];
gint lum_green_lookup[256];

View File

@ -46,8 +46,8 @@
#define DA_HEIGHT 20
#define HUE_SLIDER (1 << 0)
#define LIGHTNESS_SLIDER (1 << 1)
#define SATURATION_SLIDER (1 << 2)
#define SATURATION_SLIDER (1 << 1)
#define LIGHTNESS_SLIDER (1 << 2)
#define DRAW (1 << 3)
#define SLIDERS (HUE_SLIDER | LIGHTNESS_SLIDER | SATURATION_SLIDER)
#define ALL (SLIDERS | DRAW)
@ -71,10 +71,10 @@ static void colorize_update (GimpColorizeTool *col_tool,
gint update);
static void colorize_hue_adj_update (GtkAdjustment *adj,
GimpColorizeTool *col_tool);
static void colorize_lightness_adj_update (GtkAdjustment *adj,
GimpColorizeTool *col_tool);
static void colorize_saturation_adj_update (GtkAdjustment *adj,
GimpColorizeTool *col_tool);
static void colorize_lightness_adj_update (GtkAdjustment *adj,
GimpColorizeTool *col_tool);
/* private variables */
@ -262,22 +262,8 @@ gimp_colorize_tool_dialog (GimpImageMapTool *image_map_tool)
G_CALLBACK (colorize_hue_adj_update),
col_tool);
/* Create the lightness scale widget */
data = gimp_scale_entry_new (GTK_TABLE (table), 0, 1,
_("_Lightness:"), SLIDER_WIDTH, -1,
0.0, 0.0, 100.0, 1.0, 10.0, 0,
TRUE, 0.0, 0.0,
NULL, NULL);
col_tool->lightness_data = GTK_ADJUSTMENT (data);
slider = GIMP_SCALE_ENTRY_SCALE (data);
gtk_range_set_update_policy (GTK_RANGE (slider), GTK_UPDATE_DELAYED);
g_signal_connect (data, "value_changed",
G_CALLBACK (colorize_lightness_adj_update),
col_tool);
/* Create the saturation scale widget */
data = gimp_scale_entry_new (GTK_TABLE (table), 0, 2,
data = gimp_scale_entry_new (GTK_TABLE (table), 0, 1,
_("_Saturation:"), SLIDER_WIDTH, -1,
0.0, 0.0, 100.0, 1.0, 10.0, 0,
TRUE, 0.0, 0.0,
@ -289,6 +275,20 @@ gimp_colorize_tool_dialog (GimpImageMapTool *image_map_tool)
g_signal_connect (col_tool->saturation_data, "value_changed",
G_CALLBACK (colorize_saturation_adj_update),
col_tool);
/* Create the lightness scale widget */
data = gimp_scale_entry_new (GTK_TABLE (table), 0, 2,
_("_Lightness:"), SLIDER_WIDTH, -1,
0.0, -100.0, 100.0, 1.0, 10.0, 0,
TRUE, 0.0, 0.0,
NULL, NULL);
col_tool->lightness_data = GTK_ADJUSTMENT (data);
slider = GIMP_SCALE_ENTRY_SCALE (data);
gtk_range_set_update_policy (GTK_RANGE (slider), GTK_UPDATE_DELAYED);
g_signal_connect (data, "value_changed",
G_CALLBACK (colorize_lightness_adj_update),
col_tool);
}
static void
@ -311,13 +311,13 @@ colorize_update (GimpColorizeTool *col_tool,
gtk_adjustment_set_value (GTK_ADJUSTMENT (col_tool->hue_data),
col_tool->colorize->hue);
if (update & LIGHTNESS_SLIDER)
gtk_adjustment_set_value (GTK_ADJUSTMENT (col_tool->lightness_data),
col_tool->colorize->lightness);
if (update & SATURATION_SLIDER)
gtk_adjustment_set_value (GTK_ADJUSTMENT (col_tool->saturation_data),
col_tool->colorize->saturation);
if (update & LIGHTNESS_SLIDER)
gtk_adjustment_set_value (GTK_ADJUSTMENT (col_tool->lightness_data),
col_tool->colorize->lightness);
}
static void
@ -333,19 +333,6 @@ colorize_hue_adj_update (GtkAdjustment *adjustment,
}
}
static void
colorize_lightness_adj_update (GtkAdjustment *adjustment,
GimpColorizeTool *col_tool)
{
if (col_tool->colorize->lightness != adjustment->value)
{
col_tool->colorize->lightness = adjustment->value;
colorize_update (col_tool, DRAW);
gimp_image_map_tool_preview (GIMP_IMAGE_MAP_TOOL (col_tool));
}
}
static void
colorize_saturation_adj_update (GtkAdjustment *adjustment,
GimpColorizeTool *col_tool)
@ -358,3 +345,16 @@ colorize_saturation_adj_update (GtkAdjustment *adjustment,
gimp_image_map_tool_preview (GIMP_IMAGE_MAP_TOOL (col_tool));
}
}
static void
colorize_lightness_adj_update (GtkAdjustment *adjustment,
GimpColorizeTool *col_tool)
{
if (col_tool->colorize->lightness != adjustment->value)
{
col_tool->colorize->lightness = adjustment->value;
colorize_update (col_tool, DRAW);
gimp_image_map_tool_preview (GIMP_IMAGE_MAP_TOOL (col_tool));
}
}

View File

@ -42,8 +42,8 @@ struct _GimpColorizeTool
/* dialog */
GtkAdjustment *hue_data;
GtkAdjustment *lightness_data;
GtkAdjustment *saturation_data;
GtkAdjustment *lightness_data;
};
struct _GimpColorizeToolClass