starling-framework
Version:
A fast, productive library for 2D cross-platform development.
284 lines (267 loc) • 7.87 kB
JavaScript
// Class: starling.utils.Color
var $global = typeof window != "undefined" ? window : typeof global != "undefined" ? global : typeof self != "undefined" ? self : this
$global.Object.defineProperty(exports, "__esModule", {value: true});
var __map_reserved = {};
// Imports
var $hxClasses = require("./../../hxClasses_stub").default;
var $hxEnums = require("./../../hxEnums_stub").default;
var $import = require("./../../import_stub").default;
function Std() {return require("./../../Std");}
function openfl__$Vector_Vector_$Impl_$() {return require("./../../openfl/_Vector/Vector_Impl_");}
function _$UInt_UInt_$Impl_$() {return require("./../../_UInt/UInt_Impl_");}
// Constructor
var Color = function(){}
// Meta
Color.__name__ = "starling.utils.Color";
Color.__isInterface__ = false;
Color.prototype = {
};
Color.prototype.__class__ = Color.prototype.constructor = $hxClasses["starling.utils.Color"] = Color;
// Init
// Statics
Color.getAlpha = function(color) {
return color >>> 24 & 255;
}
Color.getRed = function(color) {
return color >>> 16 & 255;
}
Color.getGreen = function(color) {
return color >>> 8 & 255;
}
Color.getBlue = function(color) {
return color & 255;
}
Color.setAlpha = function(color,alpha) {
return color & 16777215 | (alpha & 255) << 24;
}
Color.setRed = function(color,red) {
return color & -16711681 | (red & 255) << 16;
}
Color.setGreen = function(color,green) {
return color & -65281 | (green & 255) << 8;
}
Color.setBlue = function(color,blue) {
return color & -256 | blue & 255;
}
Color.rgb = function(red,green,blue) {
return red << 16 | green << 8 | blue;
}
Color.argb = function(alpha,red,green,blue) {
return alpha << 24 | red << 16 | green << 8 | blue;
}
Color.hsv = function(hue,saturation,value) {
var r = 0;
var g = 0;
var b = 0;
var i = Math.floor(hue * 6);
var f = hue * 6 - i;
var p = value * (1 - saturation);
var q = value * (1 - f * saturation);
var t = value * (1 - (1 - f) * saturation);
switch((Std().default).int(i % 6)) {
case 0:
r = value;
g = t;
b = p;
break;
case 1:
r = q;
g = value;
b = p;
break;
case 2:
r = p;
g = value;
b = t;
break;
case 3:
r = p;
g = q;
b = value;
break;
case 4:
r = t;
g = p;
b = value;
break;
case 5:
r = value;
g = p;
b = q;
break;
}
return Color.rgb(Math.ceil(r * 255),Math.ceil(g * 255),Math.ceil(b * 255));
}
Color.hsl = function(hue,saturation,lightness) {
var r = 0;
var g = 0;
var b = 0;
var c = (1.0 - Math.abs(2.0 * lightness - 1.0)) * saturation;
var h2 = hue * 6.0;
var x = c * (1.0 - Math.abs(h2 % 2 - 1.0));
var m = lightness - c / 2.0;
switch((Std().default).int(h2 % 6)) {
case 0:
r = c + m;
g = x + m;
b = m;
break;
case 1:
r = x + m;
g = c + m;
b = m;
break;
case 2:
r = m;
g = c + m;
b = x + m;
break;
case 3:
r = m;
g = x + m;
b = c + m;
break;
case 4:
r = x + m;
g = m;
b = c + m;
break;
case 5:
r = c + m;
g = m;
b = x + m;
break;
}
return Color.rgb(Math.ceil(r * 255),Math.ceil(g * 255),Math.ceil(b * 255));
}
Color.rgbToHsv = function(rgb,hsv) {
if(hsv == null) {
hsv = (openfl__$Vector_Vector_$Impl_$().default)._new(3,true);
}
var r = Color.getRed(rgb) / 255.0;
var g = Color.getGreen(rgb) / 255.0;
var b = Color.getBlue(rgb) / 255.0;
var t = Math.max(r,g);
var cMax = Math.max(t,b);
t = Math.min(r,g);
var cMin = Math.min(t,b);
var delta = cMax - cMin;
if(delta == 0) {
(openfl__$Vector_Vector_$Impl_$().default).set(hsv,0,0);
} else if(cMax == r) {
(openfl__$Vector_Vector_$Impl_$().default).set(hsv,0,(g - b) / delta % 6 / 6.0);
} else if(cMax == g) {
(openfl__$Vector_Vector_$Impl_$().default).set(hsv,0,((b - r) / delta + 2) / 6.0);
} else if(cMax == b) {
(openfl__$Vector_Vector_$Impl_$().default).set(hsv,0,((r - g) / delta + 4) / 6.0);
}
while(hsv[0] < 0.0) {
var _g = hsv;
(openfl__$Vector_Vector_$Impl_$().default).set(_g,0,_g[0] + 1.0);
}
while(hsv[0] >= 1.0) {
var _g1 = hsv;
(openfl__$Vector_Vector_$Impl_$().default).set(_g1,0,_g1[0] - 1.0);
}
(openfl__$Vector_Vector_$Impl_$().default).set(hsv,2,cMax);
(openfl__$Vector_Vector_$Impl_$().default).set(hsv,1,cMax == 0 ? 0 : delta / cMax);
return hsv;
}
Color.rgbToHsl = function(rgb,hsl) {
if(hsl == null) {
hsl = (openfl__$Vector_Vector_$Impl_$().default)._new(3,true);
}
var r = Color.getRed(rgb) / 255.0;
var g = Color.getGreen(rgb) / 255.0;
var b = Color.getBlue(rgb) / 255.0;
var t = Math.max(r,g);
var cMax = Math.max(t,b);
t = Math.min(r,g);
var cMin = Math.min(t,b);
var delta = cMax - cMin;
if(delta == 0) {
(openfl__$Vector_Vector_$Impl_$().default).set(hsl,0,0);
} else if(cMax == r) {
(openfl__$Vector_Vector_$Impl_$().default).set(hsl,0,(g - b) / delta % 6 / 6.0);
} else if(cMax == g) {
(openfl__$Vector_Vector_$Impl_$().default).set(hsl,0,((b - r) / delta + 2) / 6.0);
} else if(cMax == b) {
(openfl__$Vector_Vector_$Impl_$().default).set(hsl,0,((r - g) / delta + 4) / 6.0);
}
while(hsl[0] < 0.0) {
var _g = hsl;
(openfl__$Vector_Vector_$Impl_$().default).set(_g,0,_g[0] + 1.0);
}
while(hsl[0] >= 1.0) {
var _g1 = hsl;
(openfl__$Vector_Vector_$Impl_$().default).set(_g1,0,_g1[0] - 1.0);
}
(openfl__$Vector_Vector_$Impl_$().default).set(hsl,2,(cMax + cMin) * 0.5);
(openfl__$Vector_Vector_$Impl_$().default).set(hsl,1,delta == 0 ? 0 : delta / (1.0 - Math.abs(2.0 * hsl[2] - 1.0)));
return hsl;
}
Color.toVector = function(color,out) {
if(out == null) {
out = (openfl__$Vector_Vector_$Impl_$().default)._new(4,true);
}
(openfl__$Vector_Vector_$Impl_$().default).set(out,0,(_$UInt_UInt_$Impl_$().default).toFloat(color >>> 16 & 255) / 255.0);
(openfl__$Vector_Vector_$Impl_$().default).set(out,1,(_$UInt_UInt_$Impl_$().default).toFloat(color >>> 8 & 255) / 255.0);
(openfl__$Vector_Vector_$Impl_$().default).set(out,2,(_$UInt_UInt_$Impl_$().default).toFloat(color & 255) / 255.0);
(openfl__$Vector_Vector_$Impl_$().default).set(out,3,(_$UInt_UInt_$Impl_$().default).toFloat(color >>> 24 & 255) / 255.0);
return out;
}
Color.multiply = function(color,factor) {
if(factor == 0.0) {
return 0;
}
var alpha = (Std().default).int((_$UInt_UInt_$Impl_$().default).toFloat(color >>> 24 & 255) * factor);
var red = (Std().default).int((_$UInt_UInt_$Impl_$().default).toFloat(color >>> 16 & 255) * factor);
var green = (Std().default).int((_$UInt_UInt_$Impl_$().default).toFloat(color >>> 8 & 255) * factor);
var blue = (Std().default).int((_$UInt_UInt_$Impl_$().default).toFloat(color & 255) * factor);
if((_$UInt_UInt_$Impl_$().default).gt(alpha,255)) {
alpha = 255;
}
if((_$UInt_UInt_$Impl_$().default).gt(red,255)) {
red = 255;
}
if((_$UInt_UInt_$Impl_$().default).gt(green,255)) {
green = 255;
}
if((_$UInt_UInt_$Impl_$().default).gt(blue,255)) {
blue = 255;
}
return Color.argb(alpha,red,green,blue);
}
Color.interpolate = function(startColor,endColor,ratio) {
var startA = startColor >>> 24 & 255;
var startR = startColor >>> 16 & 255;
var startG = startColor >>> 8 & 255;
var startB = startColor & 255;
var endA = endColor >>> 24 & 255;
var endR = endColor >>> 16 & 255;
var endG = endColor >>> 8 & 255;
var endB = endColor & 255;
var newA = (Std().default).int(startA + (endA - startA) * ratio);
var newR = (Std().default).int(startR + (endR - startR) * ratio);
var newG = (Std().default).int(startG + (endG - startG) * ratio);
var newB = (Std().default).int(startB + (endB - startB) * ratio);
return newA << 24 | newR << 16 | newG << 8 | newB;
}
Color.WHITE = 16777215
Color.SILVER = 12632256
Color.GRAY = 8421504
Color.BLACK = 0
Color.RED = 16711680
Color.MAROON = 8388608
Color.YELLOW = 16776960
Color.OLIVE = 8421376
Color.LIME = 65280
Color.GREEN = 32768
Color.AQUA = 65535
Color.TEAL = 32896
Color.BLUE = 255
Color.NAVY = 128
Color.FUCHSIA = 16711935
Color.PURPLE = 8388736
// Export
exports.default = Color;