Initial check-in
[dygraphs.git] / mochikit_v14 / doc / rst / MochiKit / Color.rst
CommitLineData
6a1aa64f
DV
1.. title:: MochiKit.Color - color abstraction with CSS3 support
2
3Name
4====
5
6MochiKit.Color - color abstraction with CSS3 support
7
8
9Synopsis
10========
11
12::
13
14 // RGB color expressions are supported
15 assert(
16 objEqual(Color.whiteColor(), Color.fromString("rgb(255,100%, 255)"))
17 );
18
19 // So is instantiating directly from HSL or RGB values.
20 // Note that fromRGB and fromHSL take numbers between 0.0 and 1.0!
21 assert( objEqual(Color.fromRGB(1.0, 1.0, 1.0), Color.fromHSL(0.0, 0.0, 1.0) );
22
23 // Or even SVG color keyword names, as per CSS3!
24 assert( Color.fromString("aquamarine"), "#7fffd4" );
25
26 // NSColor-like colors built in
27 assert( Color.whiteColor().toHexString() == "#ffffff" );
28
29
30Description
31===========
32
33MochiKit.Color is an abstraction for handling colors and strings that
34represent colors.
35
36
37Dependencies
38============
39
40- :mochiref:`MochiKit.Base`
41- :mochiref:`MochiKit.DOM`
42- :mochiref:`MochiKit.Style`
43
44
45Overview
46========
47
48MochiKit.Color provides an abstraction of RGB, HSL and HSV colors with
49alpha. It supports parsing and generating of CSS3 colors, and has a
50full CSS3 (SVG) color table.
51
52All of the functionality in this module is exposed through a Color
53constructor and its prototype, but a few of its internals are
54available for direct use at module level.
55
56
57API Reference
58=============
59
60Constructors
61------------
62
63:mochidef:`Color()`:
64
65 Represents a color. Component values should be integers between
66 ``0.0`` and ``1.0``. You should use one of the :mochiref:`Color`
67 factory functions such as :mochiref:`Color.fromRGB`,
68 :mochiref:`Color.fromHSL`, etc. instead of constructing
69 :mochiref:`Color` objects directly.
70
71 :mochiref:`Color` instances can be compared with
72 :mochiref:`MochiKit.Base.compare` (though ordering is on RGB, so
73 is not particularly meaningful except for equality), and the
74 default ``toString`` implementation returns
75 :mochiref:`Color.prototype.toHexString()`.
76
77 :mochiref:`Color` instances are immutable, and much of the
78 architecture is inspired by AppKit's NSColor [1]_
79
80 *Availability*:
81 Available in MochiKit 1.3.1+
82
83
84:mochidef:`Color.fromBackground(elem)`:
85
86 Returns a :mochiref:`Color` object based on the background of the
87 provided element. Equivalent to::
88
89 c = Color.fromComputedStyle(
90 elem, "backgroundColor", "background-color") || Color.whiteColor();
91
92 *Availability*:
93 Available in MochiKit 1.3.1+
94
95
96:mochidef:`Color.fromComputedStyle(elem, style)`:
97
98 Returns a :mochiref:`Color` object based on the result of
99 :mochiref:`MochiKit.Style.getStyle(elem, style)` or ``null`` if not
100 found.
101
102 *Availability*:
103 Available in MochiKit 1.3.1+
104
105
106:mochidef:`Color.fromHexString(hexString)`:
107
108 Returns a :mochiref:`Color` object from the given hexadecimal
109 color string. For example, ``"#FFFFFF"`` would return a
110 :mochiref:`Color` with RGB values ``[255/255, 255/255, 255/255]``
111 (white).
112
113 *Availability*:
114 Available in MochiKit 1.3.1+
115
116
117:mochidef:`Color.fromHSL(hue, saturation, lightness, alpha=1.0)`:
118
119 Return a :mochiref:`Color` object from the given ``hue``,
120 ``saturation``, ``lightness`` values. Values should be numbers
121 between ``0.0`` and ``1.0``.
122
123 If ``alpha`` is not given, then ``1.0`` (completely opaque) will
124 be used.
125
126 Alternate form:
127 :mochiref:`Color.fromHSL({h: hue, s: saturation, l: lightness,
128 a: alpha})`
129
130 *Availability*:
131 Available in MochiKit 1.3.1+
132
133
134:mochidef:`Color.fromHSLString(hslString)`:
135
136 Returns a :mochiref:`Color` object from the given decimal hsl
137 color string. For example, ``"hsl(0,0%,100%)"`` would return a
138 :mochiref:`Color` with HSL values ``[0/360, 0/360, 360/360]``
139 (white).
140
141 *Availability*:
142 Available in MochiKit 1.3.1+
143
144
145:mochidef:`Color.fromHSV(hue, saturation, value, alpha=1.0)`:
146
147 Return a :mochiref:`Color` object from the given ``hue``,
148 ``saturation``, ``value`` values. Values should be numbers between
149 ``0.0`` and ``1.0``.
150
151 If ``alpha`` is not given, then ``1.0`` (completely opaque) will
152 be used.
153
154 Alternate form:
155 :mochiref:`Color.fromHSV({h: hue, s: saturation, v: value, a:
156 alpha})`
157
158 *Availability*:
159 Available in MochiKit 1.3.1+
160
161
162:mochidef:`Color.fromName(colorName)`:
163
164 Returns a :mochiref:`Color` object corresponding to the given SVG
165 1.0 color keyword name [2]_ as per the W3C CSS3 Color Module
166 [3]_. ``"transparent"`` is also accepted as a color name, and will
167 return :mochiref:`Color.transparentColor()`.
168
169 *Availability*:
170 Available in MochiKit 1.3.1+
171
172
173:mochidef:`Color.fromRGB(red, green, blue, alpha=1.0)`:
174
175 Return a :mochiref:`Color` object from the given ``red``,
176 ``green``, ``blue``, and ``alpha`` values. Values should be
177 numbers between ``0`` and ``1.0``.
178
179 If ``alpha`` is not given, then ``1.0`` (completely opaque) will
180 be used.
181
182 Alternate form:
183 :mochiref:`Color.fromRGB({r: red, g: green, b: blue, a:
184 alpha})`
185
186 *Availability*:
187 Available in MochiKit 1.3.1+
188
189
190:mochidef:`Color.fromRGBString(rgbString)`:
191
192 Returns a :mochiref:`Color` object from the given decimal rgb
193 color string. For example, ``"rgb(255,255,255)"`` would return a
194 :mochiref:`Color` with RGB values ``[255/255, 255/255, 255/255]``
195 (white).
196
197 *Availability*:
198 Available in MochiKit 1.3.1+
199
200
201:mochidef:`Color.fromText(elem)`:
202
203 Returns a :mochiref:`Color` object based on the text color of the
204 provided element. Equivalent to::
205
206 c = Color.fromComputedStyle(elem, "color") || Color.whiteColor();
207
208 *Availability*:
209 Available in MochiKit 1.3.1+
210
211
212:mochidef:`Color.fromString(rgbOrHexString)`:
213
214 Returns a :mochiref:`Color` object from the given RGB, HSL, hex,
215 or name. Will return ``null`` if the string can not be parsed by
216 any of these methods.
217
218 See :mochiref:`Color.fromHexString`,
219 :mochiref:`Color.fromRGBString`, :mochiref:`Color.fromHSLString`
220 and :mochiref:`Color.fromName` more information.
221
222 *Availability*:
223 Available in MochiKit 1.3.1+
224
225
226:mochidef:`Color.namedColors()`:
227
228 Returns an object with properties for each SVG 1.0 color keyword
229 name [2]_ supported by CSS3 [3]_. Property names are the color
230 keyword name in lowercase, and the value is a string suitable for
231 :mochiref:`Color.fromString()`.
232
233 *Availability*:
234 Available in MochiKit 1.3.1+
235
236
237:mochidef:`Color.prototype.colorWithAlpha(alpha)`:
238
239 Return a new :mochiref:`Color` based on this color, but with the
240 provided ``alpha`` value.
241
242 *Availability*:
243 Available in MochiKit 1.3.1+
244
245
246:mochidef:`Color.prototype.colorWithHue(hue)`:
247
248 Return a new :mochiref:`Color` based on this color, but with the
249 provided ``hue`` value.
250
251 *Availability*:
252 Available in MochiKit 1.3.1+
253
254
255:mochidef:`Color.prototype.colorWithSaturation(saturation)`:
256
257 Return a new :mochiref:`Color` based on this color, but with the
258 provided ``saturation`` value (using the HSL color model).
259
260 *Availability*:
261 Available in MochiKit 1.3.1+
262
263
264:mochidef:`Color.prototype.colorWithLightness(lightness)`:
265
266 Return a new :mochiref:`Color` based on this color, but with the
267 provided ``lightness`` value.
268
269 *Availability*:
270 Available in MochiKit 1.3.1+
271
272
273:mochidef:`Color.prototype.darkerColorWithLevel(level)`:
274
275 Return a new :mochiref:`Color` based on this color, but darker by
276 the given ``level`` (between ``0`` and ``1.0``).
277
278 *Availability*:
279 Available in MochiKit 1.3.1+
280
281
282:mochidef:`Color.prototype.lighterColorWithLevel(level)`:
283
284 Return a new :mochiref:`Color` based on this color, but lighter by
285 the given ``level`` (between ``0`` and ``1.0``).
286
287 *Availability*:
288 Available in MochiKit 1.3.1+
289
290
291:mochidef:`Color.prototype.blendedColor(other, fraction=0.5)`:
292
293 Return a new :mochiref:`Color` whose RGBA component values are a
294 weighted sum of this color and ``other``. Each component of the
295 returned color is the ``fraction`` of other's value plus ``1 -
296 fraction`` of this color's.
297
298 *Availability*:
299 Available in MochiKit 1.3.1+
300
301
302:mochidef:`Color.prototype.isLight()`:
303
304 Return ``true`` if the lightness value of this color is greater
305 than ``0.5``.
306
307 Note that ``alpha`` is ignored for this calculation (color
308 components are not premultiplied).
309
310 *Availability*:
311 Available in MochiKit 1.3.1+
312
313
314:mochidef:`Color.prototype.isDark()`:
315
316 Return ``true`` if the lightness value of this color is less than
317 or equal to ``0.5``.
318
319 Note that ``alpha`` is ignored for this calculation (color
320 components are not premultiplied).
321
322 *Availability*:
323 Available in MochiKit 1.3.1+
324
325
326:mochidef:`Color.prototype.toRGBString()`:
327
328 Return the decimal ``"rgb(red, green, blue)"`` string
329 representation of this color.
330
331 If the alpha component is not ``1.0`` (fully opaque), the
332 ``"rgba(red, green, blue, alpha)"`` string representation will be
333 used.
334
335 For example::
336
337 assert( Color.whiteColor().toRGBString() == "rgb(255,255,255)" );
338
339 *Availability*:
340 Available in MochiKit 1.3.1+
341
342
343:mochidef:`Color.prototype.toHSLString()`:
344
345 Return the decimal ``"hsl(hue, saturation, lightness)"`` string
346 representation of this color.
347
348 If the alpha component is not ``1.0`` (fully opaque), the
349 ``"hsla(hue, saturation, lightness, alpha)"`` string
350 representation will be used.
351
352 For example::
353
354 assert( Color.whiteColor().toHSLString() == "hsl(0,0,360)" );
355
356 *Availability*:
357 Available in MochiKit 1.3.1+
358
359
360:mochidef:`Color.prototype.toHexString()`:
361
362 Return the hexadecimal ``"#RRGGBB"`` string representation of this
363 color.
364
365 Note that the alpha component is completely ignored for
366 hexadecimal string representations!
367
368 For example::
369
370 assert( Color.whiteColor().toHexString() == "#FFFFFF" );
371
372 *Availability*:
373 Available in MochiKit 1.3.1+
374
375
376:mochidef:`Color.prototype.asRGB()`:
377
378 Return the RGB (red, green, blue, alpha) components of this color
379 as an object with ``r``, ``g``, ``b``, and ``a`` properties that
380 have values between ``0.0`` and ``1.0``.
381
382 *Availability*:
383 Available in MochiKit 1.3.1+
384
385
386:mochidef:`Color.prototype.asHSL()`:
387
388 Return the HSL (hue, saturation, lightness, alpha) components of
389 this color as an object with ``h``, ``s``, ``l`` and ``a``
390 properties that have values between ``0.0`` and ``1.0``.
391
392 *Availability*:
393 Available in MochiKit 1.3.1+
394
395
396:mochidef:`Color.prototype.asHSV()`:
397
398 Return the HSV (hue, saturation, value, alpha) components of this
399 color as an object with ``h``, ``s``, ``v`` and ``a`` properties
400 that have values between ``0.0`` and ``1.0``.
401
402 *Availability*:
403 Available in MochiKit 1.3.1+
404
405
406:mochidef:`Color.blackColor()`:
407
408 Return a :mochiref:`Color` object whose RGB values are 0, 0, 0
409 (#000000).
410
411 *Availability*:
412 Available in MochiKit 1.3.1+
413
414
415:mochidef:`Color.blueColor()`:
416
417 Return a :mochiref:`Color` object whose RGB values are 0, 0, 1
418 (#0000ff).
419
420 *Availability*:
421 Available in MochiKit 1.3.1+
422
423
424:mochidef:`Color.brownColor()`:
425
426 Return a :mochiref:`Color` object whose RGB values are 0.6, 0.4,
427 0.2 (#996633).
428
429 *Availability*:
430 Available in MochiKit 1.3.1+
431
432
433:mochidef:`Color.cyanColor()`:
434
435 Return a :mochiref:`Color` object whose RGB values are 0, 1, 1
436 (#00ffff).
437
438 *Availability*:
439 Available in MochiKit 1.3.1+
440
441
442:mochidef:`Color.darkGrayColor()`:
443
444 Return a :mochiref:`Color` object whose RGB values are 1/3, 1/3,
445 1/3 (#555555).
446
447 *Availability*:
448 Available in MochiKit 1.3.1+
449
450
451:mochidef:`Color.grayColor()`:
452
453 Return a :mochiref:`Color` object whose RGB values are 0.5, 0.5,
454 0.5 (#808080).
455
456 *Availability*:
457 Available in MochiKit 1.3.1+
458
459
460:mochidef:`Color.greenColor()`:
461
462 Return a :mochiref:`Color` object whose RGB values are 0, 1, 0.
463 (#00ff00).
464
465 *Availability*:
466 Available in MochiKit 1.3.1+
467
468
469:mochidef:`Color.lightGrayColor()`:
470
471 Return a :mochiref:`Color` object whose RGB values are 2/3, 2/3,
472 2/3 (#aaaaaa).
473
474 *Availability*:
475 Available in MochiKit 1.3.1+
476
477
478:mochidef:`Color.magentaColor()`:
479
480 Return a :mochiref:`Color` object whose RGB values are 1, 0, 1
481 (#ff00ff).
482
483 *Availability*:
484 Available in MochiKit 1.3.1+
485
486
487:mochidef:`Color.orangeColor()`:
488
489 Return a :mochiref:`Color` object whose RGB values are 1, 0.5, 0
490 (#ff8000).
491
492 *Availability*:
493 Available in MochiKit 1.3.1+
494
495
496:mochidef:`Color.purpleColor()`:
497
498 Return a :mochiref:`Color` object whose RGB values are 0.5, 0, 0.5
499 (#800080).
500
501 *Availability*:
502 Available in MochiKit 1.3.1+
503
504
505:mochidef:`Color.redColor()`:
506
507 Return a :mochiref:`Color` object whose RGB values are 1, 0, 0
508 (#ff0000).
509
510 *Availability*:
511 Available in MochiKit 1.3.1+
512
513
514:mochidef:`Color.whiteColor()`:
515
516 Return a :mochiref:`Color` object whose RGB values are 1, 1, 1
517 (#ffffff).
518
519 *Availability*:
520 Available in MochiKit 1.3.1+
521
522
523:mochidef:`Color.yellowColor()`:
524
525 Return a :mochiref:`Color` object whose RGB values are 1, 1, 0
526 (#ffff00).
527
528 *Availability*:
529 Available in MochiKit 1.3.1+
530
531
532:mochidef:`Color.transparentColor()`:
533
534 Return a :mochiref:`Color` object that is completely transparent
535 (has alpha component of 0).
536
537 *Availability*:
538 Available in MochiKit 1.3.1+
539
540
541Functions
542---------
543
544:mochidef:`clampColorComponent(num, scale)`:
545
546 Returns ``num * scale`` clamped between ``0`` and ``scale``.
547
548 :mochiref:`clampColorComponent` is not exported by default when
549 using JSAN.
550
551 *Availability*:
552 Available in MochiKit 1.3.1+
553
554
555:mochidef:`hslToRGB(hue, saturation, lightness, alpha)`:
556
557 Computes RGB values from the provided HSL values. The return value
558 is a mapping with ``"r"``, ``"g"``, ``"b"`` and ``"a"`` keys.
559
560 Alternate form:
561 :mochiref:`hslToRGB({h: hue, s: saturation, l: lightness, a:
562 alpha})`.
563
564 :mochiref:`hslToRGB` is not exported by default when using JSAN.
565
566 *Availability*:
567 Available in MochiKit 1.3.1+
568
569
570:mochidef:`hsvToRGB(hue, saturation, value, alpha)`:
571
572 Computes RGB values from the provided HSV values. The return value
573 is a mapping with ``"r"``, ``"g"``, ``"b"`` and ``"a"`` keys.
574
575 Alternate form:
576 :mochiref:`hsvToRGB({h: hue, s: saturation, v: value, a:
577 alpha})`.
578
579 :mochiref:`hsvToRGB` is not exported by default when using JSAN.
580
581 *Availability*:
582 Available in MochiKit 1.3.1+
583
584
585:mochidef:`toColorPart(num)`:
586
587 Convert num to a zero padded hexadecimal digit for use in a
588 hexadecimal color string. Num should be an integer between ``0``
589 and ``255``.
590
591 :mochiref:`toColorPart` is not exported by default when using
592 JSAN.
593
594 *Availability*:
595 Available in MochiKit 1.3.1+
596
597
598:mochidef:`rgbToHSL(red, green, blue, alpha)`:
599
600 Computes HSL values based on the provided RGB values. The return
601 value is a mapping with ``"h"``, ``"s"``, ``"l"`` and ``"a"``
602 keys.
603
604 Alternate form:
605 :mochiref:`rgbToHSL({r: red, g: green, b: blue, a: alpha})`.
606
607 :mochiref:`rgbToHSL` is not exported by default when using JSAN.
608
609 *Availability*:
610 Available in MochiKit 1.3.1+
611
612
613:mochidef:`rgbToHSV(red, green, blue, alpha)`:
614
615 Computes HSV values based on the provided RGB values. The return
616 value is a mapping with ``"h"``, ``"s"``, ``"v"`` and ``"a"``
617 keys.
618
619 Alternate form:
620 :mochiref:`rgbToHSV({r: red, g: green, b: blue, a: alpha})`.
621
622 :mochiref:`rgbToHSV` is not exported by default when using JSAN.
623
624 *Availability*:
625 Available in MochiKit 1.3.1+
626
627
628See Also
629========
630
631.. [1] Application Kit Reference - NSColor: http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/ObjC_classic/Classes/NSColor.html
632.. [2] SVG 1.0 color keywords: http://www.w3.org/TR/SVG/types.html#ColorKeywords
633.. [3] W3C CSS3 Color Module: http://www.w3.org/TR/css3-color/#svg-color
634
635
636Authors
637=======
638
639- Bob Ippolito <bob@redivi.com>
640
641
642Copyright
643=========
644
645Copyright 2005 Bob Ippolito <bob@redivi.com>. This program is
646dual-licensed free software; you can redistribute it and/or modify it
647under the terms of the `MIT License`_ or the `Academic Free License
648v2.1`_.
649
650.. _`MIT License`: http://www.opensource.org/licenses/mit-license.php
651.. _`Academic Free License v2.1`: http://www.opensource.org/licenses/afl-2.1.php