Hi,
there were some problems with the colordialog, with HSV <-> RGB
conversions, and with direct modification of RGB or HSV values.
The fix is in attachements.
--
Colin Pitrat
http://www.framasoft.net/
Découvrez la signification du mot liberté.
--- e17/libs/ewl/src/lib/ewl_colordialog.c 2005-06-18 19:40:30.734919928
+0200
+++ my_e17/libs/ewl/src/lib/ewl_colordialog.c 2005-06-18 19:47:37.533036752
+0200
@@ -197,7 +197,10 @@
DCHECK_PARAM_PTR("user_data", user_data);
cd = user_data;
- col.r = strtol(ev_data, NULL, 10);
+ if(ev_data)
+ col.r = strtol(ev_data, NULL, 10);
+ else
+ col.r = 0;
col.g = cd->selected.g;
col.b = cd->selected.b;
@@ -226,7 +229,10 @@
cd = user_data;
col.r = cd->selected.r;
- col.g = strtol(ev_data, NULL, 10);
+ if(ev_data)
+ col.g = strtol(ev_data, NULL, 10);
+ else
+ col.g = 0;
col.b = cd->selected.b;
if(col.g > 255) col.g = 255;
@@ -254,10 +260,14 @@
cd = user_data;
col.r = cd->selected.r;
col.g = cd->selected.g;
- col.b = strtol(ev_data, NULL, 10);
-
- if(col.b > 255) col.b = 255;
- if(col.b < 0) col.b = 0;
+ if(ev_data)
+ col.b = strtol(ev_data, NULL, 10);
+ else
+ col.b = 0;
+ if(col.b > 255)
+ col.b = 255;
+ if(col.b < 0)
+ col.b = 0;
// Change the base color
ewl_spectrum_rgb_to_hsv(col.r, col.g, col.b, &h, &s, &v);
@@ -280,9 +290,14 @@
cd = user_data;
ewl_spectrum_rgb_to_hsv(cd->selected.r, cd->selected.g,
cd->selected.b, &h, &s, &v);
- h = strtod(ev_data, NULL);
- if(h > 360) h = 360;
- if(h < 0) h = 0;
+ if(ev_data)
+ h = strtod(ev_data, NULL);
+ else
+ h = 0;
+ if(h > 360)
+ h = 360;
+ if(h < 0)
+ h = 0;
ewl_spectrum_hsv_to_rgb(h, s, v, &col.r, &col.g, &col.b);
ewl_colorpicker_hue_set(EWL_COLORPICKER(cd->picker), h);
@@ -303,9 +318,14 @@
cd = user_data;
ewl_spectrum_rgb_to_hsv(cd->selected.r, cd->selected.g,
cd->selected.b, &h, &s, &v);
- s = strtod(ev_data, NULL);
- if(s > 1) s = 1;
- if(s < 0) s = 0;
+ if(ev_data)
+ s = strtod(ev_data, NULL);
+ else
+ s = 0;
+ if(s > 1)
+ s = 1;
+ if(s < 0)
+ s = 0;
ewl_spectrum_hsv_to_rgb(h, s, v, &col.r, &col.g, &col.b);
ewl_colorpicker_hue_set(EWL_COLORPICKER(cd->picker), h);
@@ -326,9 +346,14 @@
cd = user_data;
ewl_spectrum_rgb_to_hsv(cd->selected.r, cd->selected.g,
cd->selected.b, &h, &s, &v);
- v = strtod(ev_data, NULL);
- if(v > 1) v = 1;
- if(v < 0) v = 0;
+ if(ev_data)
+ v = strtod(ev_data, NULL);
+ else
+ v = 0;
+ if(v > 1)
+ v = 1;
+ if(v < 0)
+ v = 0;
ewl_spectrum_hsv_to_rgb(h, s, v, &col.r, &col.g, &col.b);
ewl_colorpicker_hue_set(EWL_COLORPICKER(cd->picker), h);
--- e17/libs/ewl/src/lib/ewl_colorpicker.c 2005-06-14 22:59:44.000000000
+0200
+++ my_e17/libs/ewl/src/lib/ewl_colorpicker.c 2005-06-18 18:57:53.028750368
+0200
@@ -90,9 +90,12 @@
void ewl_colorpicker_hue_set(Ewl_ColorPicker *cp, float h)
{
- int ref_r, ref_g, ref_b;
- ewl_spectrum_hsv_to_rgb(h, 1, 1, &ref_r, &ref_g, &ref_b);
- ewl_spectrum_rgb_set(EWL_SPECTRUM(cp->spectrum), ref_r, ref_g, ref_b);
+ if(h != 0)
+ {
+ int ref_r, ref_g, ref_b;
+ ewl_spectrum_hsv_to_rgb(h, 1, 1, &ref_r, &ref_g, &ref_b);
+ ewl_spectrum_rgb_set(EWL_SPECTRUM(cp->spectrum), ref_r, ref_g,
ref_b);
+ }
}
void ewl_colorpicker_range_move_cb(Ewl_Widget *w, void *ev_data, void
*user_data)
--- e17/libs/ewl/src/lib/ewl_spectrum.c 2005-06-14 23:23:07.000000000 +0200
+++ my_e17/libs/ewl/src/lib/ewl_spectrum.c 2005-06-18 19:02:41.902834832
+0200
@@ -334,13 +334,14 @@
if( max != 0 )
*s = (float)delta / (float)max; // s
else {
- // r = g = b = 0 // s = 0, v is undefined
*s = 0;
*h = 0;
return;
}
- if( r == max )
+ if(delta == 0)
+ *h = 0;
+ else if( r == max )
*h = (float)( g - b ) / (float)delta; // between
yellow & magenta
else if( g == max )
*h = 2.0 + (float)( b - r ) / (float)delta; // between
cyan & yellow