Fix conversion from float to int so that we don't get skew in the int =>

Sun Aug  5 11:24:27 2001  Owen Taylor  <otaylor@redhat.com>

	* gtk/gtkcolorsel.c (gtk_color_selection_set_current_alpha):
	Fix conversion from float to int so that we don't get
	skew in the int => float => int roundtrip.
	(#58120, reported by Vitaly Tishkov). Also fix problem
	where if no alpha was set, the returned alpha
	from (say) set_current_alpha() was returned as 1, not 65535.
This commit is contained in:
Owen Taylor 2001-08-05 15:27:30 +00:00 committed by Owen Taylor
parent 42cf380d36
commit 727cdae769
8 changed files with 217 additions and 35 deletions

View File

@ -1,3 +1,28 @@
Sun Aug 5 11:24:27 2001 Owen Taylor <otaylor@redhat.com>
* gtk/gtkcolorsel.c (gtk_color_selection_set_current_alpha):
Fix conversion from float to int so that we don't get
skew in the int => float => int roundtrip.
(#58120, reported by Vitaly Tishkov). Also fix problem
where if no alpha was set, the returned alpha
from (say) set_current_alpha() was returned as 1, not 65535.
Sun Aug 5 09:48:08 2001 Owen Taylor <otaylor@redhat.com>
* gtk/gtklist.c (gtk_list_clear_items): Fix
problem with selecting a new focus child.
* gtk/gtklist.c (gtk_list_clear_items): Clear
list->undo/list_focus_child after unparenting
child, since unparenting the child can result
in list->last_focus_child being set. (#58024)
* Makefile.am (SUBDIRS): Add target specific pc
files to DISTCLEANFILES.
* gtk/Makefile.am: add @GTK_DEBUG_FLAGS@
(58327, Matthias Clasen)
Sat Aug 4 19:28:21 2001 Owen Taylor <otaylor@redhat.com>
* tests/testgtk.c: Patch from Hans (with various modifications),

View File

@ -1,3 +1,28 @@
Sun Aug 5 11:24:27 2001 Owen Taylor <otaylor@redhat.com>
* gtk/gtkcolorsel.c (gtk_color_selection_set_current_alpha):
Fix conversion from float to int so that we don't get
skew in the int => float => int roundtrip.
(#58120, reported by Vitaly Tishkov). Also fix problem
where if no alpha was set, the returned alpha
from (say) set_current_alpha() was returned as 1, not 65535.
Sun Aug 5 09:48:08 2001 Owen Taylor <otaylor@redhat.com>
* gtk/gtklist.c (gtk_list_clear_items): Fix
problem with selecting a new focus child.
* gtk/gtklist.c (gtk_list_clear_items): Clear
list->undo/list_focus_child after unparenting
child, since unparenting the child can result
in list->last_focus_child being set. (#58024)
* Makefile.am (SUBDIRS): Add target specific pc
files to DISTCLEANFILES.
* gtk/Makefile.am: add @GTK_DEBUG_FLAGS@
(58327, Matthias Clasen)
Sat Aug 4 19:28:21 2001 Owen Taylor <otaylor@redhat.com>
* tests/testgtk.c: Patch from Hans (with various modifications),

View File

@ -1,3 +1,28 @@
Sun Aug 5 11:24:27 2001 Owen Taylor <otaylor@redhat.com>
* gtk/gtkcolorsel.c (gtk_color_selection_set_current_alpha):
Fix conversion from float to int so that we don't get
skew in the int => float => int roundtrip.
(#58120, reported by Vitaly Tishkov). Also fix problem
where if no alpha was set, the returned alpha
from (say) set_current_alpha() was returned as 1, not 65535.
Sun Aug 5 09:48:08 2001 Owen Taylor <otaylor@redhat.com>
* gtk/gtklist.c (gtk_list_clear_items): Fix
problem with selecting a new focus child.
* gtk/gtklist.c (gtk_list_clear_items): Clear
list->undo/list_focus_child after unparenting
child, since unparenting the child can result
in list->last_focus_child being set. (#58024)
* Makefile.am (SUBDIRS): Add target specific pc
files to DISTCLEANFILES.
* gtk/Makefile.am: add @GTK_DEBUG_FLAGS@
(58327, Matthias Clasen)
Sat Aug 4 19:28:21 2001 Owen Taylor <otaylor@redhat.com>
* tests/testgtk.c: Patch from Hans (with various modifications),

View File

@ -1,3 +1,28 @@
Sun Aug 5 11:24:27 2001 Owen Taylor <otaylor@redhat.com>
* gtk/gtkcolorsel.c (gtk_color_selection_set_current_alpha):
Fix conversion from float to int so that we don't get
skew in the int => float => int roundtrip.
(#58120, reported by Vitaly Tishkov). Also fix problem
where if no alpha was set, the returned alpha
from (say) set_current_alpha() was returned as 1, not 65535.
Sun Aug 5 09:48:08 2001 Owen Taylor <otaylor@redhat.com>
* gtk/gtklist.c (gtk_list_clear_items): Fix
problem with selecting a new focus child.
* gtk/gtklist.c (gtk_list_clear_items): Clear
list->undo/list_focus_child after unparenting
child, since unparenting the child can result
in list->last_focus_child being set. (#58024)
* Makefile.am (SUBDIRS): Add target specific pc
files to DISTCLEANFILES.
* gtk/Makefile.am: add @GTK_DEBUG_FLAGS@
(58327, Matthias Clasen)
Sat Aug 4 19:28:21 2001 Owen Taylor <otaylor@redhat.com>
* tests/testgtk.c: Patch from Hans (with various modifications),

View File

@ -1,3 +1,28 @@
Sun Aug 5 11:24:27 2001 Owen Taylor <otaylor@redhat.com>
* gtk/gtkcolorsel.c (gtk_color_selection_set_current_alpha):
Fix conversion from float to int so that we don't get
skew in the int => float => int roundtrip.
(#58120, reported by Vitaly Tishkov). Also fix problem
where if no alpha was set, the returned alpha
from (say) set_current_alpha() was returned as 1, not 65535.
Sun Aug 5 09:48:08 2001 Owen Taylor <otaylor@redhat.com>
* gtk/gtklist.c (gtk_list_clear_items): Fix
problem with selecting a new focus child.
* gtk/gtklist.c (gtk_list_clear_items): Clear
list->undo/list_focus_child after unparenting
child, since unparenting the child can result
in list->last_focus_child being set. (#58024)
* Makefile.am (SUBDIRS): Add target specific pc
files to DISTCLEANFILES.
* gtk/Makefile.am: add @GTK_DEBUG_FLAGS@
(58327, Matthias Clasen)
Sat Aug 4 19:28:21 2001 Owen Taylor <otaylor@redhat.com>
* tests/testgtk.c: Patch from Hans (with various modifications),

View File

@ -1,3 +1,28 @@
Sun Aug 5 11:24:27 2001 Owen Taylor <otaylor@redhat.com>
* gtk/gtkcolorsel.c (gtk_color_selection_set_current_alpha):
Fix conversion from float to int so that we don't get
skew in the int => float => int roundtrip.
(#58120, reported by Vitaly Tishkov). Also fix problem
where if no alpha was set, the returned alpha
from (say) set_current_alpha() was returned as 1, not 65535.
Sun Aug 5 09:48:08 2001 Owen Taylor <otaylor@redhat.com>
* gtk/gtklist.c (gtk_list_clear_items): Fix
problem with selecting a new focus child.
* gtk/gtklist.c (gtk_list_clear_items): Clear
list->undo/list_focus_child after unparenting
child, since unparenting the child can result
in list->last_focus_child being set. (#58024)
* Makefile.am (SUBDIRS): Add target specific pc
files to DISTCLEANFILES.
* gtk/Makefile.am: add @GTK_DEBUG_FLAGS@
(58327, Matthias Clasen)
Sat Aug 4 19:28:21 2001 Owen Taylor <otaylor@redhat.com>
* tests/testgtk.c: Patch from Hans (with various modifications),

View File

@ -1,3 +1,28 @@
Sun Aug 5 11:24:27 2001 Owen Taylor <otaylor@redhat.com>
* gtk/gtkcolorsel.c (gtk_color_selection_set_current_alpha):
Fix conversion from float to int so that we don't get
skew in the int => float => int roundtrip.
(#58120, reported by Vitaly Tishkov). Also fix problem
where if no alpha was set, the returned alpha
from (say) set_current_alpha() was returned as 1, not 65535.
Sun Aug 5 09:48:08 2001 Owen Taylor <otaylor@redhat.com>
* gtk/gtklist.c (gtk_list_clear_items): Fix
problem with selecting a new focus child.
* gtk/gtklist.c (gtk_list_clear_items): Clear
list->undo/list_focus_child after unparenting
child, since unparenting the child can result
in list->last_focus_child being set. (#58024)
* Makefile.am (SUBDIRS): Add target specific pc
files to DISTCLEANFILES.
* gtk/Makefile.am: add @GTK_DEBUG_FLAGS@
(58327, Matthias Clasen)
Sat Aug 4 19:28:21 2001 Owen Taylor <otaylor@redhat.com>
* tests/testgtk.c: Patch from Hans (with various modifications),

View File

@ -70,6 +70,13 @@
#define GTK_CUSTOM_PALETTE_WIDTH 10
#define GTK_CUSTOM_PALETTE_HEIGHT 2
/* Conversion between 0->1 double and and guint16. See
* scale_round() below for more general conversions
*/
#define SCALE(i) (i / 65535.)
#define UNSCALE(d) ((guint16)(d * 65535 + 0.5))
enum {
COLOR_CHANGED,
LAST_SIGNAL
@ -403,14 +410,14 @@ color_sample_draw_sample (GtkColorSelection *colorsel, int which)
{
da = priv->old_sample;
for (n = 0, i = COLORSEL_RED; n < 3; n++, i++)
c[n] = (guchar) (255.0 * priv->old_color[i]);
c[n] = (guchar) (UNSCALE (priv->old_color[i]) >> 8);
goff = 0;
}
else
{
da = priv->cur_sample;
for (n = 0, i = COLORSEL_RED; n < 3; n++, i++)
c[n] = (guchar) (255.0 * priv->color[i]);
c[n] = (guchar) (UNSCALE (priv->color[i]) >> 8);
goff = priv->old_sample->allocation.width % 32;
}
@ -728,9 +735,9 @@ palette_change_color (GtkWidget *drawing_area,
priv = colorsel->private_data;
gdk_color.red = color[0]*65535;
gdk_color.green = color[1]*65535;
gdk_color.blue = color[2]*65535;
gdk_color.red = UNSCALE (color[0]);
gdk_color.green = UNSCALE (color[1]);
gdk_color.blue = UNSCALE (color[2]);
x = 0;
while (x < GTK_CUSTOM_PALETTE_WIDTH)
@ -767,9 +774,9 @@ palette_set_color (GtkWidget *drawing_area,
gdouble *old_color;
GdkColor gdk_color;
gdk_color.red = color[0]*65535;
gdk_color.green = color[1]*65535;
gdk_color.blue = color[2]*65535;
gdk_color.red = UNSCALE (color[0]);
gdk_color.green = UNSCALE (color[1]);
gdk_color.blue = UNSCALE (color[2]);
gtk_widget_modify_bg (drawing_area, GTK_STATE_NORMAL, &gdk_color);
@ -1106,9 +1113,9 @@ grab_color_at_mouse (GtkWidget *invisible,
gdk_colormap_query_color (colormap, pixel, &color);
priv->color[COLORSEL_RED] = (double)color.red / 65535.0;
priv->color[COLORSEL_GREEN] = (double)color.green / 65535.0;
priv->color[COLORSEL_BLUE] = (double)color.blue / 65535.0;
priv->color[COLORSEL_RED] = SCALE (color.red);
priv->color[COLORSEL_GREEN] = SCALE (color.green);
priv->color[COLORSEL_BLUE] = SCALE (color.blue);
gtk_rgb_to_hsv (priv->color[COLORSEL_RED],
priv->color[COLORSEL_GREEN],
@ -1521,7 +1528,7 @@ update_color (GtkColorSelection *colorsel)
(GTK_RANGE (priv->opacity_slider)),
scale_round (priv->color[COLORSEL_OPACITY], 255));
g_snprintf (opacity_text, 32, "%.0f", priv->color[COLORSEL_OPACITY] * 255);
g_snprintf (opacity_text, 32, "%.0f", scale_round (priv->color[COLORSEL_OPACITY], 255));
gtk_entry_set_text (GTK_ENTRY (priv->opacity_entry), opacity_text);
g_snprintf (entryval, 11, "#%2X%2X%2X",
@ -2116,9 +2123,9 @@ gtk_color_selection_set_current_color (GtkColorSelection *colorsel,
priv = colorsel->private_data;
priv->changing = TRUE;
priv->color[COLORSEL_RED] = color->red / 65535.0;
priv->color[COLORSEL_GREEN] = color->green / 65535.0;
priv->color[COLORSEL_BLUE] = color->blue / 65535.0;
priv->color[COLORSEL_RED] = SCALE (color->red);
priv->color[COLORSEL_GREEN] = SCALE (color->green);
priv->color[COLORSEL_BLUE] = SCALE (color->blue);
gtk_rgb_to_hsv (priv->color[COLORSEL_RED],
priv->color[COLORSEL_GREEN],
priv->color[COLORSEL_BLUE],
@ -2155,7 +2162,7 @@ gtk_color_selection_set_current_alpha (GtkColorSelection *colorsel,
priv = colorsel->private_data;
priv->changing = TRUE;
priv->color[COLORSEL_OPACITY] = alpha / 65535.0;
priv->color[COLORSEL_OPACITY] = SCALE (alpha);
if (priv->default_alpha_set == FALSE)
{
for (i = 0; i < COLORSEL_NUM_CHANNELS; i++)
@ -2225,9 +2232,9 @@ gtk_color_selection_get_current_color (GtkColorSelection *colorsel,
g_return_if_fail (GTK_IS_COLOR_SELECTION (colorsel));
priv = colorsel->private_data;
color->red = priv->color[COLORSEL_RED] * 65535;
color->green = priv->color[COLORSEL_GREEN] * 65535;
color->blue = priv->color[COLORSEL_BLUE] * 65535;
color->red = UNSCALE (priv->color[COLORSEL_RED]);
color->green = UNSCALE (priv->color[COLORSEL_GREEN]);
color->blue = UNSCALE (priv->color[COLORSEL_BLUE]);
}
/**
@ -2246,7 +2253,7 @@ gtk_color_selection_get_current_alpha (GtkColorSelection *colorsel)
g_return_val_if_fail (GTK_IS_COLOR_SELECTION (colorsel), 0);
priv = colorsel->private_data;
return priv->has_opacity ? priv->color[COLORSEL_OPACITY] * 65535 : 1.0;
return priv->has_opacity ? UNSCALE (priv->color[COLORSEL_OPACITY]) : 65535;
}
/**
@ -2269,7 +2276,7 @@ gtk_color_selection_get_color (GtkColorSelection *colorsel,
color[0] = priv->color[COLORSEL_RED];
color[1] = priv->color[COLORSEL_GREEN];
color[2] = priv->color[COLORSEL_BLUE];
color[3] = priv->has_opacity ? priv->color[COLORSEL_OPACITY] : 1.0;
color[3] = priv->has_opacity ? priv->color[COLORSEL_OPACITY] : 65535;
}
/**
@ -2293,9 +2300,9 @@ gtk_color_selection_set_previous_color (GtkColorSelection *colorsel,
priv = colorsel->private_data;
priv->changing = TRUE;
priv->old_color[COLORSEL_RED] = color->red / 65535.0;
priv->old_color[COLORSEL_GREEN] = color->green / 65535.0;
priv->old_color[COLORSEL_BLUE] = color->blue / 65535.0;
priv->old_color[COLORSEL_RED] = SCALE (color->red);
priv->old_color[COLORSEL_GREEN] = SCALE (color->green);
priv->old_color[COLORSEL_BLUE] = SCALE (color->blue);
gtk_rgb_to_hsv (priv->old_color[COLORSEL_RED],
priv->old_color[COLORSEL_GREEN],
priv->old_color[COLORSEL_BLUE],
@ -2325,7 +2332,7 @@ gtk_color_selection_set_previous_alpha (GtkColorSelection *colorsel,
priv = colorsel->private_data;
priv->changing = TRUE;
priv->old_color[COLORSEL_OPACITY] = alpha / 65535.0;
priv->old_color[COLORSEL_OPACITY] = SCALE (alpha);
color_sample_draw_samples (colorsel);
priv->default_alpha_set = TRUE;
}
@ -2348,9 +2355,9 @@ gtk_color_selection_get_previous_color (GtkColorSelection *colorsel,
g_return_if_fail (GTK_IS_COLOR_SELECTION (colorsel));
priv = colorsel->private_data;
color->red = priv->old_color[COLORSEL_RED] * 65535;
color->green = priv->old_color[COLORSEL_GREEN] * 65535;
color->blue = priv->old_color[COLORSEL_BLUE] * 65535;
color->red = UNSCALE (priv->old_color[COLORSEL_RED]);
color->green = UNSCALE (priv->old_color[COLORSEL_GREEN]);
color->blue = UNSCALE (priv->old_color[COLORSEL_BLUE]);
}
/**
@ -2369,7 +2376,7 @@ gtk_color_selection_get_previous_alpha (GtkColorSelection *colorsel)
g_return_val_if_fail (GTK_IS_COLOR_SELECTION (colorsel), 0);
priv = colorsel->private_data;
return priv->has_opacity ? priv->old_color[COLORSEL_OPACITY] * 65535 : 1.0;
return priv->has_opacity ? UNSCALE (priv->old_color[COLORSEL_OPACITY]) : 65535;
}
/**
@ -2397,9 +2404,9 @@ gtk_color_selection_set_palette_color (GtkColorSelection *colorsel,
y = index / GTK_CUSTOM_PALETTE_WIDTH;
priv = colorsel->private_data;
col[0] = color->red / 65535.0;
col[1] = color->green / 65535.0;
col[2] = color->blue / 65535.0;
col[0] = SCALE (color->red);
col[1] = SCALE (color->green);
col[2] = SCALE (color->blue);
palette_set_color (priv->custom_palette[x][y], colorsel, col);
}
@ -2438,9 +2445,9 @@ gtk_color_selection_get_palette_color (GtkColorSelection *colorsel,
palette_get_color (priv->custom_palette[x][y], col);
color->red = col[0] * 65535;
color->green = col[1] * 65535;
color->blue = col[2] * 65535;
color->red = UNSCALE (col[0]);
color->green = UNSCALE (col[1]);
color->blue = UNSCALE (col[2]);
return TRUE;
}