2 # -*- coding: ISO-8859-1 -*-
5 # Copyright (C) 2002 Jörg Lehmann <joergl@users.sourceforge.net>
6 # Copyright (C) 2002 André Wobst <wobsta@users.sourceforge.net>
8 # This file is part of PyX (http://pyx.sourceforge.net/).
10 # PyX is free software; you can redistribute it and/or modify
11 # it under the terms of the GNU General Public License as published by
12 # the Free Software Foundation; either version 2 of the License, or
13 # (at your option) any later version.
15 # PyX is distributed in the hope that it will be useful,
16 # but WITHOUT ANY WARRANTY; without even the implied warranty of
17 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 # GNU General Public License for more details.
20 # You should have received a copy of the GNU General Public License
21 # along with PyX; if not, write to the Free Software
22 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
26 class color(attr
.exclusiveattr
, style
.strokestyle
, style
.fillstyle
):
28 """base class for all colors"""
31 attr
.exclusiveattr
.__init
__(self
, color
)
34 clear
= attr
.clearclass(color
)
41 def __init__(self
, gray
):
43 if gray
<0 or gray
>1: raise ValueError
44 self
.color
= {"gray": gray
}
46 def write(self
, file):
47 file.write("%(gray)f setgray\n" % self
.color
)
49 grey
.black
= grey(0.0)
50 grey
.white
= grey(1.0)
58 def __init__(self
, r
=0.0, g
=0.0, b
=0.0):
60 if r
<0 or r
>1 or g
<0 or g
>1 or b
<0 or b
>1: raise ValueError
61 self
.color
= {"r": r
, "g": g
, "b": b
}
63 def write(self
, file):
64 file.write("%(r)f %(g)f %(b)f setrgbcolor\n" % self
.color
)
67 rgb
.green
= rgb(0,1,0)
69 rgb
.white
= rgb(1,1,1)
70 rgb
.black
= rgb(0,0,0)
77 def __init__(self
, h
=0.0, s
=0.0, b
=0.0):
79 if h
<0 or h
>1 or s
<0 or s
>1 or b
<0 or b
>1: raise ValueError
80 self
.color
= {"h": h
, "s": s
, "b": b
}
82 def write(self
, file):
83 file.write("%(h)f %(s)f %(b)f sethsbcolor\n" % self
.color
)
90 def __init__(self
, c
=0.0, m
=0.0, y
=0.0, k
=0.0):
92 if c
<0 or c
>1 or m
<0 or m
>1 or y
<0 or y
>1 or k
<0 or k
>1: raise ValueError
93 self
.color
= {"c": c
, "m": m
, "y": y
, "k": k
}
95 def write(self
, file):
96 file.write("%(c)f %(m)f %(y)f %(k)f setcmykcolor\n" % self
.color
)
99 cmyk
.GreenYellow
= cmyk(0.15, 0, 0.69, 0)
100 cmyk
.Yellow
= cmyk(0, 0, 1, 0)
101 cmyk
.Goldenrod
= cmyk(0, 0.10, 0.84, 0)
102 cmyk
.Dandelion
= cmyk(0, 0.29, 0.84, 0)
103 cmyk
.Apricot
= cmyk(0, 0.32, 0.52, 0)
104 cmyk
.Peach
= cmyk(0, 0.50, 0.70, 0)
105 cmyk
.Melon
= cmyk(0, 0.46, 0.50, 0)
106 cmyk
.YellowOrange
= cmyk(0, 0.42, 1, 0)
107 cmyk
.Orange
= cmyk(0, 0.61, 0.87, 0)
108 cmyk
.BurntOrange
= cmyk(0, 0.51, 1, 0)
109 cmyk
.Bittersweet
= cmyk(0, 0.75, 1, 0.24)
110 cmyk
.RedOrange
= cmyk(0, 0.77, 0.87, 0)
111 cmyk
.Mahogany
= cmyk(0, 0.85, 0.87, 0.35)
112 cmyk
.Maroon
= cmyk(0, 0.87, 0.68, 0.32)
113 cmyk
.BrickRed
= cmyk(0, 0.89, 0.94, 0.28)
114 cmyk
.Red
= cmyk(0, 1, 1, 0)
115 cmyk
.OrangeRed
= cmyk(0, 1, 0.50, 0)
116 cmyk
.RubineRed
= cmyk(0, 1, 0.13, 0)
117 cmyk
.WildStrawberry
= cmyk(0, 0.96, 0.39, 0)
118 cmyk
.Salmon
= cmyk(0, 0.53, 0.38, 0)
119 cmyk
.CarnationPink
= cmyk(0, 0.63, 0, 0)
120 cmyk
.Magenta
= cmyk(0, 1, 0, 0)
121 cmyk
.VioletRed
= cmyk(0, 0.81, 0, 0)
122 cmyk
.Rhodamine
= cmyk(0, 0.82, 0, 0)
123 cmyk
.Mulberry
= cmyk(0.34, 0.90, 0, 0.02)
124 cmyk
.RedViolet
= cmyk(0.07, 0.90, 0, 0.34)
125 cmyk
.Fuchsia
= cmyk(0.47, 0.91, 0, 0.08)
126 cmyk
.Lavender
= cmyk(0, 0.48, 0, 0)
127 cmyk
.Thistle
= cmyk(0.12, 0.59, 0, 0)
128 cmyk
.Orchid
= cmyk(0.32, 0.64, 0, 0)
129 cmyk
.DarkOrchid
= cmyk(0.40, 0.80, 0.20, 0)
130 cmyk
.Purple
= cmyk(0.45, 0.86, 0, 0)
131 cmyk
.Plum
= cmyk(0.50, 1, 0, 0)
132 cmyk
.Violet
= cmyk(0.79, 0.88, 0, 0)
133 cmyk
.RoyalPurple
= cmyk(0.75, 0.90, 0, 0)
134 cmyk
.BlueViolet
= cmyk(0.86, 0.91, 0, 0.04)
135 cmyk
.Periwinkle
= cmyk(0.57, 0.55, 0, 0)
136 cmyk
.CadetBlue
= cmyk(0.62, 0.57, 0.23, 0)
137 cmyk
.CornflowerBlue
= cmyk(0.65, 0.13, 0, 0)
138 cmyk
.MidnightBlue
= cmyk(0.98, 0.13, 0, 0.43)
139 cmyk
.NavyBlue
= cmyk(0.94, 0.54, 0, 0)
140 cmyk
.RoyalBlue
= cmyk(1, 0.50, 0, 0)
141 cmyk
.Blue
= cmyk(1, 1, 0, 0)
142 cmyk
.Cerulean
= cmyk(0.94, 0.11, 0, 0)
143 cmyk
.Cyan
= cmyk(1, 0, 0, 0)
144 cmyk
.ProcessBlue
= cmyk(0.96, 0, 0, 0)
145 cmyk
.SkyBlue
= cmyk(0.62, 0, 0.12, 0)
146 cmyk
.Turquoise
= cmyk(0.85, 0, 0.20, 0)
147 cmyk
.TealBlue
= cmyk(0.86, 0, 0.34, 0.02)
148 cmyk
.Aquamarine
= cmyk(0.82, 0, 0.30, 0)
149 cmyk
.BlueGreen
= cmyk(0.85, 0, 0.33, 0)
150 cmyk
.Emerald
= cmyk(1, 0, 0.50, 0)
151 cmyk
.JungleGreen
= cmyk(0.99, 0, 0.52, 0)
152 cmyk
.SeaGreen
= cmyk(0.69, 0, 0.50, 0)
153 cmyk
.Green
= cmyk(1, 0, 1, 0)
154 cmyk
.ForestGreen
= cmyk(0.91, 0, 0.88, 0.12)
155 cmyk
.PineGreen
= cmyk(0.92, 0, 0.59, 0.25)
156 cmyk
.LimeGreen
= cmyk(0.50, 0, 1, 0)
157 cmyk
.YellowGreen
= cmyk(0.44, 0, 0.74, 0)
158 cmyk
.SpringGreen
= cmyk(0.26, 0, 0.76, 0)
159 cmyk
.OliveGreen
= cmyk(0.64, 0, 0.95, 0.40)
160 cmyk
.RawSienna
= cmyk(0, 0.72, 1, 0.45)
161 cmyk
.Sepia
= cmyk(0, 0.83, 1, 0.70)
162 cmyk
.Brown
= cmyk(0, 0.81, 1, 0.60)
163 cmyk
.Tan
= cmyk(0.14, 0.42, 0.56, 0)
164 cmyk
.Gray
= cmyk(0, 0, 0, 0.50)
165 cmyk
.Grey
= cmyk
.Gray
166 cmyk
.Black
= cmyk(0, 0, 0, 1)
167 cmyk
.White
= cmyk(0, 0, 0, 0)
168 cmyk
.white
= cmyk
.White
169 cmyk
.black
= cmyk
.Black
172 # TODO: - a palette is not a style (as it is not an PSOp)
173 # - should we have a changeable attribute instead
174 # those may define a method get etc.
178 """palette is a collection of two colors for calculating transitions between them"""
180 def __init__(self
, mincolor
, maxcolor
, min=0, max=1):
181 if mincolor
.__class
__ != maxcolor
.__class
__:
183 self
.colorclass
= mincolor
.__class
__
184 self
.mincolor
= mincolor
185 self
.maxcolor
= maxcolor
189 def getcolor(self
, index
):
191 for key
in self
.mincolor
.color
.keys():
192 color
[key
] = ((index
- self
.min) * self
.maxcolor
.color
[key
] +
193 (self
.max - index
) * self
.mincolor
.color
[key
]) / float(self
.max - self
.min)
194 return self
.colorclass(**color
)
196 #palette.clear = attr._classclear(palette)
198 palette
.Gray
= palette(gray
.white
, gray
.black
)
199 palette
.Grey
= palette
.Gray
200 palette
.ReverseGray
= palette(gray
.black
, gray
.white
)
201 palette
.ReverseGrey
= palette
.ReverseGray
202 palette
.RedGreen
= palette(rgb
.red
, rgb
.green
)
203 palette
.RedBlue
= palette(rgb
.red
, rgb
.blue
)
204 palette
.GreenRed
= palette(rgb
.green
, rgb
.red
)
205 palette
.GreenBlue
= palette(rgb
.green
, rgb
.blue
)
206 palette
.BlueRed
= palette(rgb
.blue
, rgb
.red
)
207 palette
.BlueGreen
= palette(rgb
.blue
, rgb
.green
)
208 palette
.RedBlack
= palette(rgb
.red
, rgb
.black
)
209 palette
.BlackRed
= palette(rgb
.black
, rgb
.red
)
210 palette
.RedWhite
= palette(rgb
.red
, rgb
.white
)
211 palette
.WhiteRed
= palette(rgb
.white
, rgb
.red
)
212 palette
.GreenBlack
= palette(rgb
.green
, rgb
.black
)
213 palette
.BlackGreen
= palette(rgb
.black
, rgb
.green
)
214 palette
.GreenWhite
= palette(rgb
.green
, rgb
.white
)
215 palette
.WhiteGreen
= palette(rgb
.white
, rgb
.green
)
216 palette
.BlueBlack
= palette(rgb
.blue
, rgb
.black
)
217 palette
.BlackBlue
= palette(rgb
.black
, rgb
.blue
)
218 palette
.BlueWhite
= palette(rgb
.blue
, rgb
.white
)
219 palette
.WhiteBlue
= palette(rgb
.white
, rgb
.blue
)
220 palette
.Rainbow
= palette(hsb(0, 1, 1), hsb(2.0/3.0, 1, 1))
221 palette
.ReverseRainbow
= palette(hsb(2.0/3.0, 1, 1), hsb(0, 1, 1))
222 palette
.Hue
= palette(hsb(0, 1, 1), hsb(1, 1, 1))
223 palette
.ReverseHue
= palette(hsb(1, 1, 1), hsb(0, 1, 1))