mirror of https://github.com/GNOME/gimp.git
libgimpwidgets: change GimpColorSelect's handle positions to double
so we can select more than 256 values on each color channel.
This commit is contained in:
parent
662ade6911
commit
494ec0ace5
|
@ -114,7 +114,7 @@ struct _GimpColorSelect
|
||||||
GtkWidget *xy_color;
|
GtkWidget *xy_color;
|
||||||
GtkWidget *z_color;
|
GtkWidget *z_color;
|
||||||
|
|
||||||
gint pos[3];
|
gdouble pos[3];
|
||||||
|
|
||||||
ColorSelectFillType z_color_fill;
|
ColorSelectFillType z_color_fill;
|
||||||
ColorSelectFillType xy_color_fill;
|
ColorSelectFillType xy_color_fill;
|
||||||
|
@ -489,35 +489,35 @@ gimp_color_select_update_values (GimpColorSelect *select)
|
||||||
switch (select->z_color_fill)
|
switch (select->z_color_fill)
|
||||||
{
|
{
|
||||||
case COLOR_SELECT_RED:
|
case COLOR_SELECT_RED:
|
||||||
selector->rgb.b = select->pos[0] / 255.0;
|
selector->rgb.b = select->pos[0];
|
||||||
selector->rgb.g = select->pos[1] / 255.0;
|
selector->rgb.g = select->pos[1];
|
||||||
selector->rgb.r = select->pos[2] / 255.0;
|
selector->rgb.r = select->pos[2];
|
||||||
break;
|
break;
|
||||||
case COLOR_SELECT_GREEN:
|
case COLOR_SELECT_GREEN:
|
||||||
selector->rgb.b = select->pos[0] / 255.0;
|
selector->rgb.b = select->pos[0];
|
||||||
selector->rgb.r = select->pos[1] / 255.0;
|
selector->rgb.r = select->pos[1];
|
||||||
selector->rgb.g = select->pos[2] / 255.0;
|
selector->rgb.g = select->pos[2];
|
||||||
break;
|
break;
|
||||||
case COLOR_SELECT_BLUE:
|
case COLOR_SELECT_BLUE:
|
||||||
selector->rgb.g = select->pos[0] / 255.0;
|
selector->rgb.g = select->pos[0];
|
||||||
selector->rgb.r = select->pos[1] / 255.0;
|
selector->rgb.r = select->pos[1];
|
||||||
selector->rgb.b = select->pos[2] / 255.0;
|
selector->rgb.b = select->pos[2];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case COLOR_SELECT_HUE:
|
case COLOR_SELECT_HUE:
|
||||||
selector->hsv.v = select->pos[0] / 255.0;
|
selector->hsv.v = select->pos[0];
|
||||||
selector->hsv.s = select->pos[1] / 255.0;
|
selector->hsv.s = select->pos[1];
|
||||||
selector->hsv.h = select->pos[2] / 255.0;
|
selector->hsv.h = select->pos[2];
|
||||||
break;
|
break;
|
||||||
case COLOR_SELECT_SATURATION:
|
case COLOR_SELECT_SATURATION:
|
||||||
selector->hsv.v = select->pos[0] / 255.0;
|
selector->hsv.v = select->pos[0];
|
||||||
selector->hsv.h = select->pos[1] / 255.0;
|
selector->hsv.h = select->pos[1];
|
||||||
selector->hsv.s = select->pos[2] / 255.0;
|
selector->hsv.s = select->pos[2];
|
||||||
break;
|
break;
|
||||||
case COLOR_SELECT_VALUE:
|
case COLOR_SELECT_VALUE:
|
||||||
selector->hsv.s = select->pos[0] / 255.0;
|
selector->hsv.s = select->pos[0];
|
||||||
selector->hsv.h = select->pos[1] / 255.0;
|
selector->hsv.h = select->pos[1];
|
||||||
selector->hsv.v = select->pos[2] / 255.0;
|
selector->hsv.v = select->pos[2];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -551,35 +551,35 @@ gimp_color_select_update_pos (GimpColorSelect *select)
|
||||||
switch (select->z_color_fill)
|
switch (select->z_color_fill)
|
||||||
{
|
{
|
||||||
case COLOR_SELECT_RED:
|
case COLOR_SELECT_RED:
|
||||||
select->pos[0] = ROUND (selector->rgb.b * 255.0);
|
select->pos[0] = CLAMP (selector->rgb.b, 0.0, 1.0);
|
||||||
select->pos[1] = ROUND (selector->rgb.g * 255.0);
|
select->pos[1] = CLAMP (selector->rgb.g, 0.0, 1.0);
|
||||||
select->pos[2] = ROUND (selector->rgb.r * 255.0);
|
select->pos[2] = CLAMP (selector->rgb.r, 0.0, 1.0);
|
||||||
break;
|
break;
|
||||||
case COLOR_SELECT_GREEN:
|
case COLOR_SELECT_GREEN:
|
||||||
select->pos[0] = ROUND (selector->rgb.b * 255.0);
|
select->pos[0] = CLAMP (selector->rgb.b, 0.0, 1.0);
|
||||||
select->pos[1] = ROUND (selector->rgb.r * 255.0);
|
select->pos[1] = CLAMP (selector->rgb.r, 0.0, 1.0);
|
||||||
select->pos[2] = ROUND (selector->rgb.g * 255.0);
|
select->pos[2] = CLAMP (selector->rgb.g, 0.0, 1.0);
|
||||||
break;
|
break;
|
||||||
case COLOR_SELECT_BLUE:
|
case COLOR_SELECT_BLUE:
|
||||||
select->pos[0] = ROUND (selector->rgb.g * 255.0);
|
select->pos[0] = CLAMP (selector->rgb.g, 0.0, 1.0);
|
||||||
select->pos[1] = ROUND (selector->rgb.r * 255.0);
|
select->pos[1] = CLAMP (selector->rgb.r, 0.0, 1.0);
|
||||||
select->pos[2] = ROUND (selector->rgb.b * 255.0);
|
select->pos[2] = CLAMP (selector->rgb.b, 0.0, 1.0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case COLOR_SELECT_HUE:
|
case COLOR_SELECT_HUE:
|
||||||
select->pos[0] = ROUND (selector->hsv.v * 255.0);
|
select->pos[0] = CLAMP (selector->hsv.v, 0.0, 1.0);
|
||||||
select->pos[1] = ROUND (selector->hsv.s * 255.0);
|
select->pos[1] = CLAMP (selector->hsv.s, 0.0, 1.0);
|
||||||
select->pos[2] = ROUND (selector->hsv.h * 255.0);
|
select->pos[2] = CLAMP (selector->hsv.h, 0.0, 1.0);
|
||||||
break;
|
break;
|
||||||
case COLOR_SELECT_SATURATION:
|
case COLOR_SELECT_SATURATION:
|
||||||
select->pos[0] = ROUND (selector->hsv.v * 255.0);
|
select->pos[0] = CLAMP (selector->hsv.v, 0.0, 1.0);
|
||||||
select->pos[1] = ROUND (selector->hsv.h * 255.0);
|
select->pos[1] = CLAMP (selector->hsv.h, 0.0, 1.0);
|
||||||
select->pos[2] = ROUND (selector->hsv.s * 255.0);
|
select->pos[2] = CLAMP (selector->hsv.s, 0.0, 1.0);
|
||||||
break;
|
break;
|
||||||
case COLOR_SELECT_VALUE:
|
case COLOR_SELECT_VALUE:
|
||||||
select->pos[0] = ROUND (selector->hsv.s * 255.0);
|
select->pos[0] = CLAMP (selector->hsv.s, 0.0, 1.0);
|
||||||
select->pos[1] = ROUND (selector->hsv.h * 255.0);
|
select->pos[1] = CLAMP (selector->hsv.h, 0.0, 1.0);
|
||||||
select->pos[2] = ROUND (selector->hsv.v * 255.0);
|
select->pos[2] = CLAMP (selector->hsv.v, 0.0, 1.0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -630,8 +630,8 @@ gimp_color_select_xy_expose (GtkWidget *widget,
|
||||||
gdk_cairo_region (cr, event->region);
|
gdk_cairo_region (cr, event->region);
|
||||||
cairo_clip (cr);
|
cairo_clip (cr);
|
||||||
|
|
||||||
x = ((allocation.width - 1) * select->pos[0]) / 255;
|
x = (allocation.width - 1) * select->pos[0];
|
||||||
y = (allocation.height - 1) - ((allocation.height - 1) * select->pos[1]) / 255;
|
y = (allocation.height - 1) - (allocation.height - 1) * select->pos[1];
|
||||||
|
|
||||||
cairo_move_to (cr, 0, y + 0.5);
|
cairo_move_to (cr, 0, y + 0.5);
|
||||||
cairo_line_to (cr, allocation.width, y + 0.5);
|
cairo_line_to (cr, allocation.width, y + 0.5);
|
||||||
|
@ -658,7 +658,7 @@ gimp_color_select_xy_events (GtkWidget *widget,
|
||||||
GimpColorSelect *select)
|
GimpColorSelect *select)
|
||||||
{
|
{
|
||||||
GtkAllocation allocation;
|
GtkAllocation allocation;
|
||||||
gint x, y;
|
gdouble x, y;
|
||||||
|
|
||||||
switch (event->type)
|
switch (event->type)
|
||||||
{
|
{
|
||||||
|
@ -712,12 +712,12 @@ gimp_color_select_xy_events (GtkWidget *widget,
|
||||||
|
|
||||||
if (allocation.width > 1 && allocation.height > 1)
|
if (allocation.width > 1 && allocation.height > 1)
|
||||||
{
|
{
|
||||||
select->pos[0] = (x * 255) / (allocation.width - 1);
|
select->pos[0] = x / (allocation.width - 1);
|
||||||
select->pos[1] = 255 - (y * 255) / (allocation.height - 1);
|
select->pos[1] = 1.0 - y / (allocation.height - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
select->pos[0] = CLAMP (select->pos[0], 0, 255);
|
select->pos[0] = CLAMP (select->pos[0], 0.0, 1.0);
|
||||||
select->pos[1] = CLAMP (select->pos[1], 0, 255);
|
select->pos[1] = CLAMP (select->pos[1], 0.0, 1.0);
|
||||||
|
|
||||||
gtk_widget_queue_draw (select->xy_color);
|
gtk_widget_queue_draw (select->xy_color);
|
||||||
|
|
||||||
|
@ -752,7 +752,7 @@ gimp_color_select_z_expose (GtkWidget *widget,
|
||||||
gdk_cairo_region (cr, event->region);
|
gdk_cairo_region (cr, event->region);
|
||||||
cairo_clip (cr);
|
cairo_clip (cr);
|
||||||
|
|
||||||
y = (allocation.height - 1) - ((allocation.height - 1) * select->pos[2]) / 255;
|
y = (allocation.height - 1) - (allocation.height - 1) * select->pos[2];
|
||||||
|
|
||||||
cairo_move_to (cr, 0, y + 0.5);
|
cairo_move_to (cr, 0, y + 0.5);
|
||||||
cairo_line_to (cr, allocation.width, y + 0.5);
|
cairo_line_to (cr, allocation.width, y + 0.5);
|
||||||
|
@ -776,7 +776,7 @@ gimp_color_select_z_events (GtkWidget *widget,
|
||||||
GimpColorSelect *select)
|
GimpColorSelect *select)
|
||||||
{
|
{
|
||||||
GtkAllocation allocation;
|
GtkAllocation allocation;
|
||||||
gint z;
|
gdouble z;
|
||||||
|
|
||||||
switch (event->type)
|
switch (event->type)
|
||||||
{
|
{
|
||||||
|
@ -826,9 +826,9 @@ gimp_color_select_z_events (GtkWidget *widget,
|
||||||
gtk_widget_get_allocation (select->z_color, &allocation);
|
gtk_widget_get_allocation (select->z_color, &allocation);
|
||||||
|
|
||||||
if (allocation.height > 1)
|
if (allocation.height > 1)
|
||||||
select->pos[2] = 255 - (z * 255) / (allocation.height - 1);
|
select->pos[2] = 1.0 - z / (allocation.height - 1);
|
||||||
|
|
||||||
select->pos[2] = CLAMP (select->pos[2], 0, 255);
|
select->pos[2] = CLAMP (select->pos[2], 0.0, 1.0);
|
||||||
|
|
||||||
gtk_widget_queue_draw (select->z_color);
|
gtk_widget_queue_draw (select->z_color);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue