+// ----------------------------------------------------------------------------
+// TODO: These functions or something like them should probably be made
+// public. There are similar functions in src/aui/dockart.cpp...
+
+static double wxBlendColour(double fg, double bg, double alpha)
+{
+ double result = bg + (alpha * (fg - bg));
+ if (result < 0.0)
+ result = 0.0;
+ if (result > 255)
+ result = 255;
+ return result;
+}
+
+static wxColor wxStepColour(const wxColor& c, int ialpha)
+{
+ if (ialpha == 100)
+ return c;
+
+ double r = c.Red(), g = c.Green(), b = c.Blue();
+ double bg;
+
+ // ialpha is 0..200 where 0 is completely black
+ // and 200 is completely white and 100 is the same
+ // convert that to normal alpha 0.0 - 1.0
+ ialpha = wxMin(ialpha, 200);
+ ialpha = wxMax(ialpha, 0);
+ double alpha = ((double)(ialpha - 100.0))/100.0;
+
+ if (ialpha > 100)
+ {
+ // blend with white
+ bg = 255.0;
+ alpha = 1.0 - alpha; // 0 = transparent fg; 1 = opaque fg
+ }
+ else
+ {
+ // blend with black
+ bg = 0.0;
+ alpha = 1.0 + alpha; // 0 = transparent fg; 1 = opaque fg
+ }
+
+ r = wxBlendColour(r, bg, alpha);
+ g = wxBlendColour(g, bg, alpha);
+ b = wxBlendColour(b, bg, alpha);
+
+ return wxColour((unsigned char)r, (unsigned char)g, (unsigned char)b);
+}
+
+#define LIGHT_STEP 160
+