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

Reply via email to