diff options
Diffstat (limited to 'webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/color/Color.js')
-rw-r--r-- | webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/color/Color.js | 669 |
1 files changed, 669 insertions, 0 deletions
diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/color/Color.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/color/Color.js new file mode 100644 index 0000000000..37af8611fb --- /dev/null +++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/renderer/color/Color.js @@ -0,0 +1,669 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL: http://www.gnu.org/licenses/lgpl.html + EPL: http://www.eclipse.org/org/documents/epl-v10.php + See the LICENSE file in the project's top-level directory for details. + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(ui_core) +#require(qx.lang.Function) +#load(qx.renderer.color.ColorObject) + +************************************************************************ */ + +qx.OO.defineClass("qx.renderer.color.Color", qx.core.Object, +function(vValue) +{ + if (vValue != null) { + this.setValue(vValue); + } + + qx.core.Object.call(this); +}); + + + + + +/* ************************************************************************ + Class data, properties and methods +************************************************************************ */ + +/* +--------------------------------------------------------------------------- + CORE METHODS +--------------------------------------------------------------------------- +*/ + +qx.Class.rgb2style = function(r, g, b) { + return "rgb(" + r + "," + g + "," + b + ")"; +} + + + + + +/* +--------------------------------------------------------------------------- + CORE DATA +--------------------------------------------------------------------------- +*/ + +qx.renderer.color.Color.m_hex = [ "0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f" ]; +qx.renderer.color.Color.m_rgb = { 0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,b:11,c:12,d:13,e:14,f:15 } + +qx.renderer.color.Color.r_hex3 = /^#([0-9a-f]{1})([0-9a-f]{1})([0-9a-f]{1})$/; +qx.renderer.color.Color.r_hex6 = /^#([0-9a-f]{1})([0-9a-f]{1})([0-9a-f]{1})([0-9a-f]{1})([0-9a-f]{1})([0-9a-f]{1})$/; +qx.renderer.color.Color.r_cssrgb = /^rgb\(\s*([0-9]{1,3}\.{0,1}[0-9]*)\s*,\s*([0-9]{1,3}\.{0,1}[0-9]*)\s*,\s*([0-9]{1,3}\.{0,1}[0-9]*)\s*\)$/; + +qx.renderer.color.Color.r_rgb = /^[0-9]{1,3},[0-9]{1,3},[0-9]{1,3}$/; +qx.renderer.color.Color.r_number = /^[0-9]{1,3}\.{0,1}[0-9]*$/; +qx.renderer.color.Color.r_percent = /^[0-9]{1,3}\.{0,1}[0-9]*%$/; + +/** + * CSS 3 colors (http://www.w3.org/TR/css3-color/#svg-color) + * + * This includes all classic HTML Color names (http://www.w3.org/TR/css3-color/#html4) and the <code>transparent</code> keyword. + */ +qx.Class.htmlNames = +{ + transparent : [-1,-1,-1], + aliceblue : [ 240,248,255 ], + antiquewhite : [ 250,235,215 ], + aqua : [ 0,255,255 ], + aquamarine : [ 127,255,212 ], + azure : [ 240,255,255 ], + beige : [ 245,245,220 ], + bisque : [ 255,228,196 ], + black : [ 0,0,0 ], + blanchedalmond : [ 255,235,205 ], + blue : [ 0,0,255 ], + blueviolet : [ 138,43,226 ], + brown : [ 165,42,42 ], + burlywood : [ 222,184,135 ], + cadetblue : [ 95,158,160 ], + chartreuse : [ 127,255,0 ], + chocolate : [ 210,105,30 ], + coral : [ 255,127,80 ], + cornflowerblue : [ 100,149,237 ], + cornsilk : [ 255,248,220 ], + crimson : [ 220,20,60 ], + cyan : [ 0,255,255 ], + darkblue : [ 0,0,139 ], + darkcyan : [ 0,139,139 ], + darkgoldenrod : [ 184,134,11 ], + darkgray : [ 169,169,169 ], + darkgreen : [ 0,100,0 ], + darkgrey : [ 169,169,169 ], + darkkhaki : [ 189,183,107 ], + darkmagenta : [ 139,0,139 ], + darkolivegreen : [ 85,107,47 ], + darkorange : [ 255,140,0 ], + darkorchid : [ 153,50,204 ], + darkred : [ 139,0,0 ], + darksalmon : [ 233,150,122 ], + darkseagreen : [ 143,188,143 ], + darkslateblue : [ 72,61,139 ], + darkslategray : [ 47,79,79 ], + darkslategrey : [ 47,79,79 ], + darkturquoise : [ 0,206,209 ], + darkviolet : [ 148,0,211 ], + deeppink : [ 255,20,147 ], + deepskyblue : [ 0,191,255 ], + dimgray : [ 105,105,105 ], + dimgrey : [ 105,105,105 ], + dodgerblue : [ 30,144,255 ], + firebrick : [ 178,34,34 ], + floralwhite : [ 255,250,240 ], + forestgreen : [ 34,139,34 ], + fuchsia : [ 255,0,255 ], + gainsboro : [ 220,220,220 ], + ghostwhite : [ 248,248,255 ], + gold : [ 255,215,0 ], + goldenrod : [ 218,165,32 ], + gray : [ 128,128,128 ], + green : [ 0,128,0 ], + greenyellow : [ 173,255,47 ], + grey : [ 128,128,128 ], + honeydew : [ 240,255,240 ], + hotpink : [ 255,105,180 ], + indianred : [ 205,92,92 ], + indigo : [ 75,0,130 ], + ivory : [ 255,255,240 ], + khaki : [ 240,230,140 ], + lavender : [ 230,230,250 ], + lavenderblush : [ 255,240,245 ], + lawngreen : [ 124,252,0 ], + lemonchiffon : [ 255,250,205 ], + lightblue : [ 173,216,230 ], + lightcoral : [ 240,128,128 ], + lightcyan : [ 224,255,255 ], + lightgoldenrodyellow : [ 250,250,210 ], + lightgray : [ 211,211,211 ], + lightgreen : [ 144,238,144 ], + lightgrey : [ 211,211,211 ], + lightpink : [ 255,182,193 ], + lightsalmon : [ 255,160,122 ], + lightseagreen : [ 32,178,170 ], + lightskyblue : [ 135,206,250 ], + lightslategray : [ 119,136,153 ], + lightslategrey : [ 119,136,153 ], + lightsteelblue : [ 176,196,222 ], + lightyellow : [ 255,255,224 ], + lime : [ 0,255,0 ], + limegreen : [ 50,205,50 ], + linen : [ 250,240,230 ], + magenta : [ 255,0,255 ], + maroon : [ 128,0,0 ], + mediumaquamarine : [ 102,205,170 ], + mediumblue : [ 0,0,205 ], + mediumorchid : [ 186,85,211 ], + mediumpurple : [ 147,112,219 ], + mediumseagreen : [ 60,179,113 ], + mediumslateblue : [ 123,104,238 ], + mediumspringgreen : [ 0,250,154 ], + mediumturquoise : [ 72,209,204 ], + mediumvioletred : [ 199,21,133 ], + midnightblue : [ 25,25,112 ], + mintcream : [ 245,255,250 ], + mistyrose : [ 255,228,225 ], + moccasin : [ 255,228,181 ], + navajowhite : [ 255,222,173 ], + navy : [ 0,0,128 ], + oldlace : [ 253,245,230 ], + olive : [ 128,128,0 ], + olivedrab : [ 107,142,35 ], + orange : [ 255,165,0 ], + orangered : [ 255,69,0 ], + orchid : [ 218,112,214 ], + palegoldenrod : [ 238,232,170 ], + palegreen : [ 152,251,152 ], + paleturquoise : [ 175,238,238 ], + palevioletred : [ 219,112,147 ], + papayawhip : [ 255,239,213 ], + peachpuff : [ 255,218,185 ], + peru : [ 205,133,63 ], + pink : [ 255,192,203 ], + plum : [ 221,160,221 ], + powderblue : [ 176,224,230 ], + purple : [ 128,0,128 ], + red : [ 255,0,0 ], + rosybrown : [ 188,143,143 ], + royalblue : [ 65,105,225 ], + saddlebrown : [ 139,69,19 ], + salmon : [ 250,128,114 ], + sandybrown : [ 244,164,96 ], + seagreen : [ 46,139,87 ], + seashell : [ 255,245,238 ], + sienna : [ 160,82,45 ], + silver : [ 192,192,192 ], + skyblue : [ 135,206,235 ], + slateblue : [ 106,90,205 ], + slategray : [ 112,128,144 ], + slategrey : [ 112,128,144 ], + snow : [ 255,250,250 ], + springgreen : [ 0,255,127 ], + steelblue : [ 70,130,180 ], + tan : [ 210,180,140 ], + teal : [ 0,128,128 ], + thistle : [ 216,191,216 ], + tomato : [ 255,99,71 ], + turquoise : [ 64,224,208 ], + violet : [ 238,130,238 ], + wheat : [ 245,222,179 ], + white : [ 255,255,255 ], + whitesmoke : [ 245,245,245 ], + yellow : [ 255,255,0 ], + yellowgreen : [ 154,205,50 ] +}; + +/** + * ActiveBorder: Active window border. + * ActiveCaption: Active window caption. + * + * AppWorkspace: Background color of multiple document interface. + * Background: Desktop background. + * + * ButtonFace: Face color for three-dimensional display elements. + * ButtonHighlight: Highlight color for three-dimensional display elements (for edges facing away from the light source). + * ButtonShadow: Shadow color for three-dimensional display elements. + * ButtonText: Text on push buttons. + * + * CaptionText: Text in caption, size box, and scrollbar arrow box. + * GrayText: Grayed (disabled) text. + * + * Highlight: Item(s) selected in a control. + * HighlightText: Text of item(s) selected in a control. + * + * InactiveBorder: Inactive window border. + * InactiveCaption: Inactive window caption. + * InactiveCaptionText: Color of text in an inactive caption. + * + * InfoBackground: Background color for tooltip controls. + * InfoText: Text color for tooltip controls. + * + * Menu: Menu background. + * MenuText: Text in menus. + * + * Scrollbar: Scroll bar gray area. + * + * ThreeDDarkShadow: Dark shadow for three-dimensional display elements. + * ThreeDFace: Face color for three-dimensional display elements. + * ThreeDHighlight: Highlight color for three-dimensional display elements. + * ThreeDLightShadow: Light color for three-dimensional display elements (for edges facing the light source). + * ThreeDShadow: Dark shadow for three-dimensional display elements. + * + * Window: Window background. + * WindowFrame: Window frame. + * WindowText: Text in windows. + */ +qx.Class.themedNames = +{ + activeborder : 1, + activecaption : 1, + appworkspace : 1, + background : 1, + buttonface : 1, + buttonhighlight : 1, + buttonshadow : 1, + buttontext : 1, + captiontext : 1, + graytext : 1, + highlight : 1, + highlighttext : 1, + inactiveborder : 1, + inactivecaption : 1, + inactivecaptiontext : 1, + infobackground : 1, + infotext : 1, + menu : 1, + menutext : 1, + scrollbar : 1, + threeddarkshadow : 1, + threedface : 1, + threedhighlight : 1, + threedlightshadow : 1, + threedshadow : 1, + window : 1, + windowframe : 1, + windowtext : 1 +} + + + + + + + +/* ************************************************************************ + Instance data, properties and methods +************************************************************************ */ + +/* +--------------------------------------------------------------------------- + UTILITY +--------------------------------------------------------------------------- +*/ + +qx.Class.fromString = function(vDefString) { + return new qx.renderer.color.Color(vDefString); +} + +qx.Class.fromRandom = function() { + return new qx.renderer.color.Color([Math.round(255*Math.random()), Math.round(255*Math.random()), Math.round(255*Math.random())]); +} + + + + + + +/* +--------------------------------------------------------------------------- + DATA +--------------------------------------------------------------------------- +*/ + +qx.Proto._value = null; +qx.Proto._style = null; + +qx.Proto._isRgbColor = false; +qx.Proto._isHtmlColor = false; +qx.Proto._isThemedColor = false; + +qx.Proto._red = null; +qx.Proto._green = null; +qx.Proto._blue = null; + +qx.Proto._hex = null; + + + + + +/* +--------------------------------------------------------------------------- + COMPATIBILITY METHODS +--------------------------------------------------------------------------- +*/ + +qx.Proto.add = qx.lang.Function.returnTrue; +qx.Proto.remove = qx.lang.Function.returnTrue; + + + + + + +/* +--------------------------------------------------------------------------- + PUBLIC METHODS +--------------------------------------------------------------------------- +*/ + +qx.Proto.isRgbColor = function() { + return this._isRgbColor; +} + +qx.Proto.isHtmlColor = function() { + return this._isHtmlColor; +} + +qx.Proto.isThemedColor = function() { + return this._isThemedColor; +} + + + + +qx.Proto.setValue = function(vValue) +{ + this._normalize(vValue); + + if (this._isThemedColor) { + throw new Error("Please use qx.renderer.color.ColorObject for themed colors!"); + } +} + +qx.Proto.getValue = function() { + return this._value || ""; +} + + + + +qx.Proto.getStyle = function() +{ + if (this._style == null) { + this._evalStyle(); + } + + return this._style; +} + +qx.Proto._evalStyle = function() +{ + if (this._isRgbColor) + { + this._style = qx.renderer.color.Color.rgb2style(this._red, this._green, this._blue); + } + else if (this._isThemedColor) + { + this._applyThemedValue(); + } + else if (this._isHtmlColor) + { + this._style = this._value; + } + else if (this._value != null) + { + this.error("Could not handle non-rgb colors :" + this.getValue() + "!"); + } +} + + + + +qx.Proto.getHex = function() +{ + if (this._hex == null) { + this._evalHex(); + } + + return this._hex; +} + +qx.Proto._evalHex = function() +{ + if (this._isRgbColor) + { + var a = ["#"]; + + var r = this.getRed(); + a.push(qx.renderer.color.Color.m_hex[Math.floor(r/16)]); + a.push(qx.renderer.color.Color.m_hex[Math.floor(r%16)]); + + var g = this.getGreen(); + a.push(qx.renderer.color.Color.m_hex[Math.floor(g/16)]); + a.push(qx.renderer.color.Color.m_hex[Math.floor(g%16)]); + + var b = this.getBlue(); + a.push(qx.renderer.color.Color.m_hex[Math.floor(b/16)]); + a.push(qx.renderer.color.Color.m_hex[Math.floor(b%16)]); + + this._hex = a.join(""); + } + else + { + // TODO + } +} + + + + +qx.Proto.getRed = function() +{ + if (this._red == null) { + this._evalRgb(); + } + + return this._red; +} + +qx.Proto.getGreen = function() +{ + if (this._green == null) { + this._evalRgb(); + } + + return this._green; +} + +qx.Proto.getBlue = function() +{ + if (this._blue == null) { + this._evalRgb(); + } + + return this._blue; +} + + + + +qx.Proto._evalRgb = function() +{ + if (this._isThemedColor) + { + this._applyThemedValue(); + } + else if (this._isHtmlColor) + { + var a = qx.renderer.color.Color.htmlNames[this._value]; + + this._red = a[0]; + this._green = a[1]; + this._blue = a[2]; + } + else + { + throw new Error("_evalRgb needs implementation!"); + } +} + + + + + +/* +--------------------------------------------------------------------------- + PRIVATE METHODS +--------------------------------------------------------------------------- +*/ + +qx.Proto._normalize = function(vInValue) +{ + this._isThemedColor = this._isRgbColor = this._isHtmlColor = false; + this._hex = null; + + var invalid = new Error("Invalid color: " + vInValue); + + switch(typeof vInValue) + { + case "string": + vInValue = vInValue.toLowerCase(); + + if (qx.renderer.color.Color.htmlNames[vInValue]) + { + this._isHtmlColor = true; + } + else if (qx.renderer.color.Color.themedNames[vInValue]) + { + this._isThemedColor = true; + } + else if (qx.renderer.color.Color.r_cssrgb.test(vInValue)) + { + this._red = parseInt(RegExp.$1); + this._green = parseInt(RegExp.$2); + this._blue = parseInt(RegExp.$3); + + this._isRgbColor = true; + } + else if (qx.renderer.color.Color.r_hex3.test(vInValue)) + { + this._hex = vInValue; + + this._red = (qx.renderer.color.Color.m_rgb[RegExp.$1] * 16) + qx.renderer.color.Color.m_rgb[RegExp.$1]; + this._green = (qx.renderer.color.Color.m_rgb[RegExp.$2] * 16) + qx.renderer.color.Color.m_rgb[RegExp.$2]; + this._blue = (qx.renderer.color.Color.m_rgb[RegExp.$3] * 16) + qx.renderer.color.Color.m_rgb[RegExp.$3]; + + this._isRgbColor = true; + } + else if (qx.renderer.color.Color.r_hex6.test(vInValue)) + { + this._hex = vInValue; + + this._red = (qx.renderer.color.Color.m_rgb[RegExp.$1] * 16) + qx.renderer.color.Color.m_rgb[RegExp.$2]; + this._green = (qx.renderer.color.Color.m_rgb[RegExp.$3] * 16) + qx.renderer.color.Color.m_rgb[RegExp.$4]; + this._blue = (qx.renderer.color.Color.m_rgb[RegExp.$5] * 16) + qx.renderer.color.Color.m_rgb[RegExp.$6]; + + this._isRgbColor = true; + } + else + { + throw invalid; + } + + break; + + case "number": + if (vInValue >= 0 && vInValue <= 255) + { + this._red = this._green = this._blue = vInValue; + this._isRgbColor = true; + } + else + { + throw invalid; + } + + break; + + case "object": + if (qx.util.Validation.isValidArray(vInValue) && vInValue.length == 3) + { + this._red = vInValue[0]; + this._green = vInValue[1]; + this._blue = vInValue[2]; + + this._isRgbColor = true; + break; + } + + default: + throw invalid; + } + + if (!this._isRgbColor) + { + this._red = this._green = this._blue = null; + this._style = this._isHtmlColor ? vInValue : null; + } + else + { + this._style = null; + + if (!(this._red >= 0 && this._red <= 255 && this._green >= 0 && this._green <= 255 && this._blue >= 0 && this._blue <= 255)) { + throw invalid; + } + } + + return this._value = vInValue; +} + + + + + + +/* +--------------------------------------------------------------------------- + DISPOSER +--------------------------------------------------------------------------- +*/ + +qx.Proto.dispose = function() +{ + if (this.getDisposed()) { + return true; + } + + delete this._value; + delete this._style; + + delete this._red; + delete this._green; + delete this._blue; + + delete this._isRgbColor; + delete this._isHtmlColor; + delete this._isThemedColor; + + return qx.core.Object.prototype.dispose.call(this); +} |