]> git.saurik.com Git - wxWidgets.git/blob - wxPython/wx/lib/colourchooser/pycolourslider.py
More lib and demo patches to drop the wx prefix (Jeff has been busy!)
[wxWidgets.git] / wxPython / wx / lib / colourchooser / pycolourslider.py
1 """
2 PyColourChooser
3 Copyright (C) 2002 Michael Gilfix
4
5 This file is part of PyColourChooser.
6
7 You should have received a file COPYING containing license terms
8 along with this program; if not, write to Michael Gilfix
9 (mgilfix@eecs.tufts.edu) for a copy.
10
11 This version of PyColourChooser is open source; you can redistribute it and/or
12 modify it under the terms listed in the file COPYING.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
17 """
18
19 # 12/14/2003 - Jeff Grimmett (grimmtooth@softhome.net)
20 #
21 # o 2.5 compatability update.
22 #
23 # 12/21/2003 - Jeff Grimmett (grimmtooth@softhome.net)
24 #
25 # o wxPyColorChooser -> PyColorChooser
26 # o wxPyColourChooser -> PyColourChooser
27 #
28
29 import wx
30
31 import canvas
32 import colorsys
33
34 class PyColourSlider(canvas.Canvas):
35 """A Pure-Python Colour Slider
36
37 The colour slider displays transitions from value 0 to value 1 in
38 HSV, allowing the user to select a colour within the transition
39 spectrum.
40
41 This class is best accompanying by a wxSlider that allows the user
42 to select a particular colour shade.
43 """
44
45 HEIGHT = 172
46 WIDTH = 12
47
48 def __init__(self, parent, id, colour=None):
49 """Creates a blank slider instance. A colour must be set before the
50 slider will be filled in."""
51 # Set the base colour first since our base class calls the buffer
52 # drawing function
53 self.SetBaseColour(colour)
54
55 canvas.Canvas.__init__(self, parent, id, size=(self.WIDTH, self.HEIGHT))
56
57 def SetBaseColour(self, colour):
58 """Sets the base, or target colour, to use as the central colour
59 when calculating colour transitions."""
60 self.base_colour = colour
61
62 def GetBaseColour(self):
63 """Return the current colour used as a colour base for filling out
64 the slider."""
65 return self.base_colour
66
67 def GetValue(self, pos):
68 """Returns the colour value for a position on the slider. The position
69 must be within the valid height of the slider, or results can be
70 unpredictable."""
71 return self.buffer.GetPixel((0, pos))
72
73 def DrawBuffer(self):
74 """Actual implementation of the widget's drawing. We simply draw
75 from value 0.0 to value 1.0 in HSV."""
76 if self.base_colour is None:
77 return
78
79 target_red = self.base_colour.Red()
80 target_green = self.base_colour.Green()
81 target_blue = self.base_colour.Blue()
82
83 h,s,v = colorsys.rgb_to_hsv(target_red / 255.0, target_green / 255.0,
84 target_blue / 255.0)
85 v = 1.0
86 vstep = 1.0 / self.HEIGHT
87 for y_pos in range(0, self.HEIGHT):
88 r,g,b = [c * 255.0 for c in colorsys.hsv_to_rgb(h,s,v)]
89 colour = wx.Colour(int(r), int(g), int(b))
90 self.buffer.SetPen(wx.Pen(colour, 1, wx.SOLID))
91 self.buffer.DrawRectangle((0, y_pos), (15, 1))
92 v = v - vstep