--- /dev/null
+import wx
+import wx.lib.colourselect as cs
+import wx.lib.imageutils as iu
+
+class TestPanel(wx.Panel):
+ def __init__(self, *args, **kw):
+ wx.Panel.__init__(self, *args, **kw)
+
+ self.colour = wx.NamedColour("purple")
+
+ self.cpnl = wx.Panel(self, size=(100,100), style=wx.SIMPLE_BORDER)
+ self.slider = wx.Slider(self,
+ minValue=0,
+ value=100,
+ maxValue=200,
+ size=(300, -1),
+ style=wx.SL_HORIZONTAL | wx.SL_LABELS)
+ csel = cs.ColourSelect(self, colour=self.colour)
+
+ sizer = wx.BoxSizer(wx.VERTICAL)
+ sizer.Add(self.cpnl, 0, wx.ALL, 20)
+ sizer.Add(self.slider, 0, wx.LEFT, 20)
+ sizer.Add(csel, 0, wx.ALL, 20)
+ self.SetSizer(sizer)
+
+ self.slider.Bind(wx.EVT_SCROLL, self.OnSliderChanged)
+ self.Bind(cs.EVT_COLOURSELECT, self.OnColourSelect)
+
+ self.UpdatePanel()
+
+
+ def UpdatePanel(self):
+ val = self.slider.GetValue()
+
+ colour = iu.stepColour(self.colour, val)
+
+ self.cpnl.SetBackgroundColour(colour)
+ self.cpnl.Refresh()
+
+
+ def OnSliderChanged(self, evt):
+ self.UpdatePanel()
+
+
+ def OnColourSelect(self, evt):
+ self.colour = evt.GetValue()
+ self.UpdatePanel()
+
+
+
+app = wx.App()
+frm = wx.Frame(None, title="Stepping Colours")
+pnl = TestPanel(frm)
+frm.Show()
+app.MainLoop()
+
# Licence: wxWindows license
#----------------------------------------------------------------------
-from __future__ import nested_scopes
-
+import wx
def grayOut(anImage):
"""
return map(lambda x: int((230 - x) * factor) + x, (r,g,b))
else:
return (r,g,b)
+
+
+
+def stepColour(c, step):
+ """
+ stepColour is a utility function that simply darkens or lightens a
+ color, based on the specified step value. A step of 0 is
+ completely black and a step of 200 is totally white, and 100
+ results in the same color as was passed in.
+ """
+ def _blendColour(fg, bg, dstep):
+ result = bg + (dstep * (fg - bg))
+ if result < 0:
+ result = 0
+ if result > 255:
+ result = 255
+ return result
+
+ if step == 100:
+ return c
+
+ r = c.Red()
+ g = c.Green()
+ b = c.Blue()
+
+ # step is 0..200 where 0 is completely black
+ # and 200 is completely white and 100 is the same
+ # convert that to a range of -1.0 .. 1.0
+ step = min(step, 200)
+ step = max(step, 0)
+ dstep = (step - 100.0)/100.0
+
+ if step > 100:
+ # blend with white
+ bg = 255.0
+ dstep = 1.0 - dstep # 0 = transparent fg; 1 = opaque fg
+ else:
+ # blend with black
+ bg = 0.0
+ dstep = 1.0 + dstep; # 0 = transparent fg; 1 = opaque fg
+
+ r = _blendColour(r, bg, dstep)
+ g = _blendColour(g, bg, dstep)
+ b = _blendColour(b, bg, dstep)
+
+ return wx.Colour(int(r), int(g), int(b))
+