]>
git.saurik.com Git - wxWidgets.git/blob - wxPython/wx/lib/colourchooser/pycolourslider.py
3 Copyright (C) 2002 Michael Gilfix
5 This file is part of PyColourChooser.
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.
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.
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.
19 # 12/14/2003 - Jeff Grimmett (grimmtooth@softhome.net)
21 # o 2.5 compatability update.
23 # 12/21/2003 - Jeff Grimmett (grimmtooth@softhome.net)
25 # o wxPyColorChooser -> PyColorChooser
26 # o wxPyColourChooser -> PyColourChooser
34 class PyColourSlider(canvas
.Canvas
):
35 """A Pure-Python Colour Slider
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
41 This class is best accompanying by a wxSlider that allows the user
42 to select a particular colour shade.
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
53 self
.SetBaseColour(colour
)
55 canvas
.Canvas
.__init
__(self
, parent
, id, size
=(self
.WIDTH
, self
.HEIGHT
))
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
62 def GetBaseColour(self
):
63 """Return the current colour used as a colour base for filling out
65 return self
.base_colour
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
71 return self
.buffer.GetPixel(0, pos
)
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:
79 target_red
= self
.base_colour
.Red()
80 target_green
= self
.base_colour
.Green()
81 target_blue
= self
.base_colour
.Blue()
83 h
,s
,v
= colorsys
.rgb_to_hsv(target_red
/ 255.0, target_green
/ 255.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)