@script name="ColorMgr" hide="y">
Implements the %STUDIO% colors space manager
(c) SAP AG 2003-2006. All rights reserved.
//////////////////////////////////////////////////////////////////////////////////////
// COLOR CONVERSION
<@func name="STR2RGB" also="RGB2STR">
Parses a string containing an RGB value
A #RRGGBB color string
An object containing the RGB color components (each 0-255)
function STR2RGB(str) {
var r=0, g=0, b=0;
if (typeof str == 'string') {
if (str.charAt(0) == '#') str=str.substring(1);
r = parseInt(str.substring(0,2), 16) || 0;
g = parseInt(str.substring(2,4), 16) || 0;
b = parseInt(str.substring(4,6), 16) || 0;
}
return {r:r, g:g, b:b};
}
<@func name="RGB2STR" also="STR2RGB">
Returns a string representation of the given RGB color
An object containing the RGB color components (each 0-255)
A #RRGGBB color string
function RGB2STR(rgb) {
return ('#'+p(rgb.r)+p(rgb.g)+p(rgb.b)).toUpperCase();
function p(n) { return ('0'+n.toString(16)).slice(-2); }
}
<@func name="HSB2RGB" also="RGB2HSB">
Converts an HSB color object to an RGB color object
An object containing the HSB color components (each 0-255)
An object containing the equivalent RGB color components (each 0-255)
function HSB2RGB(hsb) {
var H=hsb.h/255, S=hsb.s/255, B=hsb.b/255;
var r=0, g=0, b=0
if (S == 0) {
r = g = b = B;
} else {
var h = H*6.0;
var f = h-Math.floor(h);
var p = B*(1-S);
var q = B*(1-S*f);
var t = B*(1-(S*(1-f)));
switch (Math.round(h)) {
case 0: r=B; g=t; b=p; break;
case 1: r=q; g=B; b=p; break;
case 2: r=p; g=B; b=t; break;
case 3: r=p; g=q; b=B; break;
case 4: r=t; g=p; b=B; break;
case 5: r=B; g=p; b=q; break;
}
}
r = Math.max(0, Math.min(255, Math.round(r*255+0.5)));
g = Math.max(0, Math.min(255, Math.round(g*255+0.5)));
b = Math.max(0, Math.min(255, Math.round(b*255+0.5)));
return {r:r, g:g, b:b};
}
<@func name="RGB2HSB" also="HSB2RGB">
Converts an RGB color object to an HSB color object
An object containing the RGB color components (each 0-255)
An object containing the equivalent HSB color components (each 0-255)
function RGB2HSB(rgb) {
var r=rgb.r, g=rgb.g, b=rgb.b;
var cmax=Math.max(r,g,b), cmin=Math.min(r,g,b);
var B = cmax/255;
var S = (cmax == 0 ? 0 : (cmax-cmin)/cmax);
var H = 0;
if (S != 0) {
var rc = (cmax-r)/(cmax-cmin);
var gc = (cmax-g)/(cmax-cmin);
var bc = (cmax-b)/(cmax-cmin);
H = ( (r == cmax) ? (bc-gc) : ( (g == cmax) ? (2+rc-bc) : (4+gc-rc) ) )/6;
if (H < 0) H += 1;
}
return {h:Math.round(H*255), s:Math.round(S*255), b:Math.round(B*255)};
}
//////////////////////////////////////////////////////////////////////////////////////
// COLOR SHIFTING
<@func name="SHIFT_COLOR" also="BRIGHTER_RGB DARKER_RGB">
Returns a shifted version of the given color string
A #RRGGBB color string
Shift factor: -1 (darkest) ... 0 (same) ... +1 (brightest)
The shifted RGB color string
function SHIFT_COLOR(str, factor) {
var rgb = (typeof str == 'string') ? STR2RGB(str) : str;
if (!factor) factor=0;
if (factor > 0) rgb = BRIGHTER_RGB(rgb, factor);
if (factor < 0) rgb = DARKER_RGB(rgb, -factor);
return RGB2STR(rgb);
}
<@func name="BRIGHTER_RGB" also="SHIFT_COLOR DARKER_RGB">
Returns a brighter version of the given RGB color
An object containing the RGB color components (each 0-255)
Brightness factor: 0 (same) ... 1 (brightest)
The brighter RGB color object
function BRIGHTER_RGB(rgb, factor) {
if (!factor) factor = 0.3;
factor = 1-Math.max(0.05, Math.min(0.95, factor));
var r=rgb.r, g=rgb.g, b=rgb.b, i=Math.round(1/(1-factor));
if ( r == 0 && g == 0 && b == 0) {
rgb.r = rgb.g = rgb.b = i;
} else {
if ( r > 0 && r < i ) r = i;
if ( g > 0 && g < i ) g = i;
if ( b > 0 && b < i ) b = i;
rgb.r = Math.min(Math.round(r/factor),255);
rgb.g = Math.min(Math.round(g/factor),255);
rgb.b = Math.min(Math.round(b/factor),255);
}
return rgb;
}
<@func name="DARKER_RGB" also="SHIFT_COLOR BRIGHTER_RGB">
Returns a darker version of the given RGB color
An object containing the RGB color components (each 0-255)
Darkness factor: 0 (same) ... 1 (darkest)
The darker RGB color object
function DARKER_RGB(rgb, factor) {
if (!factor) factor = 0.3;
factor = 1-Math.max(0.05, Math.min(0.95, factor));
var r = Math.max(0, Math.round(rgb.r*factor));
var g = Math.max(0, Math.round(rgb.g*factor));
var b = Math.max(0, Math.round(rgb.b*factor));
return {r:r, g:g, b:b};
}
<@func name="WEB_PALETTE" also="SHIFT_COLOR BRIGHTER_RGB">
Returns a palette of web-safe RGB colors (7 rows x 18 cells)
The colors palette
function WEB_PALETTE() {
return [
'FF00FF FF33FF FF66FF FF99FF FFCCFF CCFFCC 99FFCC 66FFCC 00CC99 008080 CCFFFF CCECFF CCCCFF CC99FF CC66FF CC00FF 9900CC 660066 CC00CC',
'FF33CC FF66CC FF99CC FFCCCC FFFFCC CCFF99 99FF99 66FF99 00CC99 008080 66FFFF 66CCFF 99CCFF 9999FF 9966FF 9933FF 9900FF 800080 CC0099',
'FF3399 FF6699 FF9999 FFCC99 FFFF99 CCFF66 99FF66 66FF66 00CC66 339966 00FFFF 33CCFF 3399FF 6699FF 6666FF 6600FF 6600CC 990099 CC3399',
'FF0066 FF7C80 FF9966 FFCC66 FFFF66 CCFF33 99FF33 66FF33 00CC00 339933 33CCCC 00CCFF 0099FF 0066FF 3366FF 3333CC 666699 993366 D60093',
'FF5050 FF6600 FF9933 FFCC00 FFFF00 CCCC00 99CC00 669900 008000 006600 006699 0099CC 0066CC 0033CC 0000FF 3333FF 333399 660033 CC0066',
'FF0000 FF3300 CC6600 FF9900 CC9900 996633 808000 656533 336600 003300 003366 336699 3366CC 003399 000099 0000CC 000066 000000 222222',
'444444 555555 656565 777777 888888 999999 AAAAAA BBBBBB CCCCCC DDDDDD EEEEEE FFFFFF'
];
}