Bug 11436 fixed: With matplot, color outside the colormap was replaced with the last...
[scilab.git] / scilab / modules / graphic_objects / src / cpp / ColorComputer.cpp
index d3a81fe..cad1d4a 100644 (file)
@@ -36,7 +36,7 @@ void ColorComputer::getColor(double s, double smin, double srange, double indexO
     else
     {
         value = (s - smin) / (srange);
-        index = (int) ((double)(colormapSize-1)*value + indexOffset);
+        index = (int) ((double)(colormapSize - 1) * value + indexOffset);
 
         /* Clamp */
         if (index < 0)
@@ -49,8 +49,8 @@ void ColorComputer::getColor(double s, double smin, double srange, double indexO
         }
 
         returnedColor[0] = (float)colormap[index];
-        returnedColor[1] = (float)colormap[colormapSize+index];
-        returnedColor[2] = (float)colormap[2*colormapSize+index];
+        returnedColor[1] = (float)colormap[colormapSize + index];
+        returnedColor[2] = (float)colormap[2 * colormapSize + index];
     }
 }
 
@@ -69,7 +69,7 @@ void ColorComputer::getColor(double s, double smin, double srange, double indexO
     else
     {
         value = (s - smin) / (srange);
-        index = (int) ((double)(maxIndex - minIndex)*value + indexOffset + (double) minIndex);
+        index = (int) ((double)(maxIndex - minIndex) * value + indexOffset + (double) minIndex);
 
         /* Clamp */
         if (index < minIndex)
@@ -82,8 +82,8 @@ void ColorComputer::getColor(double s, double smin, double srange, double indexO
         }
 
         returnedColor[0] = (float)colormap[index];
-        returnedColor[1] = (float)colormap[colormapSize+index];
-        returnedColor[2] = (float)colormap[2*colormapSize+index];
+        returnedColor[1] = (float)colormap[colormapSize + index];
+        returnedColor[2] = (float)colormap[2 * colormapSize + index];
     }
 }
 
@@ -100,7 +100,7 @@ double ColorComputer::getIndex(double s, double smin, double srange, double inde
     else
     {
         value = (s - smin) / (srange);
-        index = (double)(maxIndex - minIndex)*value + indexOffset + (double) minIndex;
+        index = (double)(maxIndex - minIndex) * value + indexOffset + (double) minIndex;
 
         index = floor(index);
 
@@ -118,7 +118,7 @@ double ColorComputer::getIndex(double s, double smin, double srange, double inde
     return index;
 }
 
-void ColorComputer::getDirectColor(double s, double* colormap, int colormapSize, float* returnedColor)
+void ColorComputer::getDirectColor(double s, double* colormap, int colormapSize, float* returnedColor, bool clamped)
 {
     int index = 0;
 
@@ -140,14 +140,22 @@ void ColorComputer::getDirectColor(double s, double* colormap, int colormapSize,
     {
         if (s > (double)(colormapSize - 1))
         {
-            s = (double) (colormapSize - 1);
+            if (clamped)
+            {
+                s = (double) (colormapSize - 1);
+            }
+            else
+            {
+                returnedColor[0] = -1;
+                return;
+            }
         }
 
         index = (int) s;
 
         returnedColor[0] = (float)colormap[index];
-        returnedColor[1] = (float)colormap[colormapSize+index];
-        returnedColor[2] = (float)colormap[2*colormapSize+index];
+        returnedColor[1] = (float)colormap[colormapSize + index];
+        returnedColor[2] = (float)colormap[2 * colormapSize + index];
     }
 }
 
@@ -183,14 +191,23 @@ double ColorComputer::getDirectIndex(double s, int colormapSize)
     return index;
 }
 
-void ColorComputer::getDirectByteColor(double s, double* colormap, int colormapSize, unsigned char* returnedColor)
+void ColorComputer::getDirectByteColor(double s, double* colormap, int colormapSize, unsigned char* returnedColor, bool clamped)
 {
-  float color[3];
-  getDirectColor(s, colormap, colormapSize, color);
+    float color[3];
+    getDirectColor(s, colormap, colormapSize, color, clamped);
+
+    returnedColor[0] = (unsigned char)(color[0] * 255);
+    returnedColor[1] = (unsigned char)(color[1] * 255);
+    returnedColor[2] = (unsigned char)(color[2] * 255);
 
-  returnedColor[0] = (unsigned char)(color[0] * 255);
-  returnedColor[1] = (unsigned char)(color[1] * 255);
-  returnedColor[2] = (unsigned char)(color[2] * 255);
+    if (!clamped && color[0] == -1)
+    {
+        returnedColor[3] = 0;
+    }
+    else
+    {
+        returnedColor[3] = 255;
+    }
 }
 
 double ColorComputer::getClampedDirectIndex(double s, int colormapSize)
@@ -246,8 +263,7 @@ void ColorComputer::getClampedDirectColor(double s, double* colormap, int colorm
         index = (int) s;
 
         returnedColor[0] = (float)colormap[index];
-        returnedColor[1] = (float)colormap[colormapSize+index];
-        returnedColor[2] = (float)colormap[2*colormapSize+index];
+        returnedColor[1] = (float)colormap[colormapSize + index];
+        returnedColor[2] = (float)colormap[2 * colormapSize + index];
     }
 }
-