summaryrefslogtreecommitdiff
path: root/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/renderer/color/Color.js
diff options
context:
space:
mode:
Diffstat (limited to 'webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/renderer/color/Color.js')
-rw-r--r--webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/renderer/color/Color.js542
1 files changed, 542 insertions, 0 deletions
diff --git a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/renderer/color/Color.js b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/renderer/color/Color.js
new file mode 100644
index 0000000000..868ac6f496
--- /dev/null
+++ b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/renderer/color/Color.js
@@ -0,0 +1,542 @@
+/* ************************************************************************
+
+ qooxdoo - the new era of web development
+
+ http://qooxdoo.org
+
+ Copyright:
+ 2004-2006 by 1&1 Internet AG, Germany, http://www.1and1.org
+
+ License:
+ LGPL 2.1: http://www.gnu.org/licenses/lgpl.html
+
+ Authors:
+ * Sebastian Werner (wpbasti)
+ * Andreas Ecker (ecker)
+
+************************************************************************ */
+
+/* ************************************************************************
+
+#module(ui_core)
+#require(qx.util.Return)
+#load(qx.renderer.color.ColorObject)
+
+************************************************************************ */
+
+qx.OO.defineClass("qx.renderer.color.Color", qx.core.Object,
+function(vValue)
+{
+ if (qx.util.Validation.isValid(vValue)) {
+ this.setValue(vValue);
+ }
+
+ qx.core.Object.call(this);
+});
+
+
+
+
+
+/* ************************************************************************
+ Class data, properties and methods
+************************************************************************ */
+
+/*
+---------------------------------------------------------------------------
+ CORE METHODS
+---------------------------------------------------------------------------
+*/
+
+qx.renderer.color.Color.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]*%$/;
+
+qx.renderer.color.Color.htmlNames =
+{
+ maroon : [ 128,0,0 ],
+ red : [ 255,0,0 ],
+ orange : [ 255,165,0 ],
+ yellow : [ 255,255,0 ],
+ olive : [ 128,128,0 ],
+ purple : [ 128,0,128 ],
+ fuchsia : [ 255,0,255 ],
+ white : [ 255,255,255 ],
+ lime : [ 0,255,0 ],
+ green : [ 0,128,0 ],
+ navy : [ 0,0,128 ],
+ blue : [ 0,0,255 ],
+ aqua : [ 0,255,255 ],
+ teal : [ 0,128,128 ],
+ black : [ 0,0,0 ],
+ silver : [ 192,192,192 ],
+ gray : [ 128,128,128 ],
+ transparent : [-1,-1,-1]
+}
+
+// TODO: Add some IE related colors (IE 4.x)
+// http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/colors/colors.asp
+/*
+qx.renderer.color.Color.cssNames =
+{
+
+}
+*/
+
+/*
+ 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.renderer.color.Color.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.renderer.color.Color.fromString = function(vDefString) {
+ return new qx.renderer.color.Color(vDefString);
+}
+
+qx.renderer.color.Color.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.util.Return.returnTrue;
+qx.Proto.remove = qx.util.Return.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 (qx.util.Validation.isValid(this._value))
+ {
+ throw new Error("_evalStyle 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);
+}