| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222 |
1
9
21
1
1
21
21
5
21
21
21
21
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
3
1
1
1
1
| /*
* Photo Editor SDK - photoeditorsdk.com
* Copyright (c) 2013-2015 9elements GmbH
*
* Released under Attribution-NonCommercial 3.0 Unported
* http://creativecommons.org/licenses/by-nc/3.0/
*
* For commercial use, please contact us at contact@9elements.com
*/
/**
* Represents a color
* @class
* @alias ImglyKit.Color
* @param {Number} r
* @param {Number} g
* @param {Number} b
* @param {Number} [a]
* @private
*/
'use strict';
Object.defineProperty(exports, '__esModule', {
value: true
});
// istanbul ignore next
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; Eif ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { Eif (protoProps) defineProperties(Constructor.prototype, protoProps); Iif (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
// istanbul ignore next
function _classCallCheck(instance, Constructor) { Iif (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
var Color = (function () {
function Color(r, g, b, a) {
_classCallCheck(this, Color);
if (typeof a === 'undefined') {
a = 1.0;
}
this.r = r;
this.g = g;
this.b = b;
this.a = a;
}
/**
* Returns an rgba() representation of this color
* @return {String}
*/
_createClass(Color, [{
key: 'toRGBA',
value: function toRGBA() {
var colors = [Math.round(this.r * 255), Math.round(this.g * 255), Math.round(this.b * 255), this.a];
return 'rgba(' + colors.join(',') + ')';
}
/**
* Returns a hex representation of this color
* @return {String}
*/
}, {
key: 'toHex',
value: function toHex() {
var components = [this._componentToHex(Math.round(this.r * 255)), this._componentToHex(Math.round(this.g * 255)), this._componentToHex(Math.round(this.b * 255))];
return '#' + components.join('');
}
/**
* Returns an array with 4 values (0...1)
* @return {Array.<Number>}
*/
}, {
key: 'toGLColor',
value: function toGLColor() {
return [this.r, this.g, this.b, this.a];
}
/**
* Returns an array with 3 values (0...1)
* @return {Array.<Number>}
*/
}, {
key: 'toRGBGLColor',
value: function toRGBGLColor() {
return [this.r, this.g, this.b];
}
/**
* Converts the RGB value to HSV
* @return {Array.<Number>}
*/
}, {
key: 'toHSV',
value: function toHSV() {
var max = Math.max(this.r, this.g, this.b);
var min = Math.min(this.r, this.g, this.b);
var h = undefined;
var s = undefined;
var v = max;
var d = max - min;
s = max === 0 ? 0 : d / max;
Iif (max === min) {
h = 0; // achromatic
} else {
switch (max) {
case this.r:
h = (this.g - this.b) / d + (this.g < this.b ? 6 : 0);
break;
case this.g:
h = (this.b - this.r) / d + 2;
break;
case this.b:
h = (this.r - this.g) / d + 4;
break;
}
h /= 6;
}
return [h, s, v];
}
/**
* Sets the RGB values of this color to match the given HSV values
* @param {Number} h
* @param {Number} s
* @param {Number} v
*/
}, {
key: 'fromHSV',
value: function fromHSV(h, s, v) {
var r = this.r;
var g = this.g;
var b = this.b;
var i = Math.floor(h * 6);
var f = h * 6 - i;
var p = v * (1 - s);
var q = v * (1 - f * s);
var t = v * (1 - (1 - f) * s);
switch (i % 6) {
case 0:
r = v;
g = t;
b = p;
break;
case 1:
r = q;
g = v;
b = p;
break;
case 2:
r = p;
g = v;
b = t;
break;
case 3:
r = p;
g = q;
b = v;
break;
case 4:
r = t;
g = p;
b = v;
break;
case 5:
r = v;
g = p;
b = q;
break;
}
this.r = r;
this.g = g;
this.b = b;
}
/**
* Returns a clone of the current color
* @return {Color}
*/
}, {
key: 'clone',
value: function clone() {
return new Color(this.r, this.g, this.b, this.a);
}
/**
* Returns the given number as hex
* @param {Number} component
* @return {String}
* @private
*/
}, {
key: '_componentToHex',
value: function _componentToHex(component) {
var hex = component.toString(16);
return hex.length === 1 ? '0' + hex : hex;
}
/**
* Returns the string representation of this color
* @returns {String}
*/
}, {
key: 'toString',
value: function toString() {
return 'Color(' + this.r + ', ' + this.g + ', ' + this.b + ', ' + this.a + ')';
}
}]);
return Color;
})();
exports['default'] = Color;
module.exports = exports['default'];
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9yb290L1NFUlZFUi9pbWdseS1zZGstaHRtbDUvc3JjL2pzL2xpYi9jb2xvci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFvQk0sS0FBSztBQUNHLFdBRFIsS0FBSyxDQUNJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTswQkFEckIsS0FBSzs7QUFFUCxRQUFJLE9BQU8sQ0FBQyxLQUFLLFdBQVcsRUFBRTtBQUM1QixPQUFDLEdBQUcsR0FBRyxDQUFBO0tBQ1I7O0FBRUQsUUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUE7QUFDVixRQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtBQUNWLFFBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBQ1YsUUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUE7R0FDWDs7Ozs7OztlQVZHLEtBQUs7O1dBZ0JGLGtCQUFHO0FBQ1IsVUFBSSxNQUFNLEdBQUcsQ0FDWCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsRUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUN4QixJQUFJLENBQUMsQ0FBQyxDQUNQLENBQUE7QUFDRCxhQUFPLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQTtLQUN4Qzs7Ozs7Ozs7V0FNSyxpQkFBRztBQUNQLFVBQUksVUFBVSxHQUFHLENBQ2YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFDOUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMs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R0FBRyxDQUFDLENBQUE7S0FDWDs7Ozs7Ozs7V0FNSyxpQkFBRztBQUNQLGFBQU8sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0tBQ2pEOzs7Ozs7Ozs7O1dBUWUseUJBQUMsU0FBUyxFQUFFO0FBQzFCLFVBQUksR0FBRyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUE7QUFDaEMsYUFBTyxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtLQUMxQzs7Ozs7Ozs7V0FNUSxvQkFBRztBQUNWLHdCQUFnQixJQUFJLENBQUMsQ0FBQyxVQUFLLElBQUksQ0FBQyxDQUFDLFVBQUssSUFBSSxDQUFDLENBQUMsVUFBSyxJQUFJLENBQUMsQ0FBQyxPQUFHO0tBQzNEOzs7U0F0S0csS0FBSzs7O3FCQXlLSSxLQUFLIiwiZmlsZSI6Ii9yb290L1NFUlZFUi9pbWdseS1zZGstaHRtbDUvc3JjL2pzL2xpYi9jb2xvci5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQaG90byBFZGl0b3IgU0RLIC0gcGhvdG9lZGl0b3JzZGsuY29tXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNSA5ZWxlbWVudHMgR21iSFxuICpcbiAqIFJlbGVhc2VkIHVuZGVyIEF0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwgMy4wIFVucG9ydGVkXG4gKiBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1uYy8zLjAvXG4gKlxuICogRm9yIGNvbW1lcmNpYWwgdXNlLCBwbGVhc2UgY29udGFjdCB1cyBhdCBjb250YWN0QDllbGVtZW50cy5jb21cbiAqL1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBjb2xvclxuICogQGNsYXNzXG4gKiBAYWxpYXMgSW1nbHlLaXQuQ29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSByXG4gKiBAcGFyYW0ge051bWJlcn0gZ1xuICogQHBhcmFtIHtOdW1iZXJ9IGJcbiAqIEBwYXJhbSB7TnVtYmVyfSBbYV1cbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIENvbG9yIHtcbiAgY29uc3RydWN0b3IgKHIsIGcsIGIsIGEpIHtcbiAgICBpZiAodHlwZW9mIGEgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBhID0gMS4wXG4gICAgfVxuXG4gICAgdGhpcy5yID0gclxuICAgIHRoaXMuZyA9IGdcbiAgICB0aGlzLmIgPSBiXG4gICAgdGhpcy5hID0gYVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gcmdiYSgpIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgY29sb3JcbiAgICogQHJldHVybiB7U3RyaW5nfVxuICAgKi9cbiAgdG9SR0JBICgpIHtcbiAgICB2YXIgY29sb3JzID0gW1xuICAgICAgTWF0aC5yb3VuZCh0aGlzLnIgKiAyNTUpLFxuICAgICAgTWF0aC5yb3VuZCh0aGlzLmcgKiAyNTUpLFxuICAgICAgTWF0aC5yb3VuZCh0aGlzLmIgKiAyNTUpLFxuICAgICAgdGhpcy5hXG4gICAgXVxuICAgIHJldHVybiAncmdiYSgnICsgY29sb3JzLmpvaW4oJywnKSArICcpJ1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBoZXggcmVwcmVzZW50YXRpb24gb2YgdGhpcyBjb2xvclxuICAgKiBAcmV0dXJuIHtTdHJpbmd9XG4gICAqL1xuICB0b0hleCAoKSB7XG4gICAgdmFyIGNvbXBvbmVudHMgPSBbXG4gICAgICB0aGlzLl9jb21wb25lbnRUb0hleChNYXRoLnJvdW5kKHRoaXMuciAqIDI1NSkpLFxuICAgICAgdGhpcy5fY29tcG9uZW50VG9IZXgoTWF0aC5yb3VuZCh0aGlzLmcgKiAyNTUpKSxcbiAgICAgIHRoaXMuX2NvbXBvbmVudFRvSGV4KE1hdGgucm91bmQodGhpcy5iICogMjU1KSlcbiAgICBdXG4gICAgcmV0dXJuICcjJyArIGNvbXBvbmVudHMuam9pbignJylcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGFycmF5IHdpdGggNCB2YWx1ZXMgKDAuLi4xKVxuICAgKiBAcmV0dXJuIHtBcnJheS48TnVtYmVyPn1cbiAgICovXG4gIHRvR0xDb2xvciAoKSB7XG4gICAgcmV0dXJuIFt0aGlzLnIsIHRoaXMuZywgdGhpcy5iLCB0aGlzLmFdXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBhcnJheSB3aXRoIDMgdmFsdWVzICgwLi4uMSlcbiAgICogQHJldHVybiB7QXJyYXkuPE51bWJlcj59XG4gICAqL1xuICB0b1JHQkdMQ29sb3IgKCkge1xuICAgIHJldHVybiBbdGhpcy5yLCB0aGlzLmcsIHRoaXMuYl1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgUkdCIHZhbHVlIHRvIEhTVlxuICAgKiBAcmV0dXJuIHtBcnJheS48TnVtYmVyPn1cbiAgICovXG4gIHRvSFNWICgpIHtcbiAgICBsZXQgbWF4ID0gTWF0aC5tYXgodGhpcy5yLCB0aGlzLmcsIHRoaXMuYilcbiAgICBsZXQgbWluID0gTWF0aC5taW4odGhpcy5yLCB0aGlzLmcsIHRoaXMuYilcbiAgICBsZXQgaFxuICAgIGxldCBzXG4gICAgbGV0IHYgPSBtYXhcbiAgICBsZXQgZCA9IG1heCAtIG1pblxuICAgIHMgPSBtYXggPT09IDAgPyAwIDogZCAvIG1heFxuXG4gICAgaWYgKG1heCA9PT0gbWluKSB7XG4gICAgICBoID0gMCAvLyBhY2hyb21hdGljXG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXRjaCAobWF4KSB7XG4gICAgICAgIGNhc2UgdGhpcy5yOlxuICAgICAgICAgIGggPSAodGhpcy5nIC0gdGhpcy5iKSAvIGQgKyAodGhpcy5nIDwgdGhpcy5iID8gNiA6IDApXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSB0aGlzLmc6XG4gICAgICAgICAgaCA9ICh0aGlzLmIgLSB0aGlzLnIpIC8gZCArIDJcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIHRoaXMuYjpcbiAgICAgICAgICBoID0gKHRoaXMuciAtIHRoaXMuZykgLyBkICsgNFxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBoIC89IDZcbiAgICB9XG5cbiAgICByZXR1cm4gW2gsIHMsIHZdXG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgUkdCIHZhbHVlcyBvZiB0aGlzIGNvbG9yIHRvIG1hdGNoIHRoZSBnaXZlbiBIU1YgdmFsdWVzXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBoXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBzXG4gICAqIEBwYXJhbSB7TnVtYmVyfSB2XG4gICAqL1xuICBmcm9tSFNWIChoLCBzLCB2KSB7XG4gICAgbGV0IHtyLCBnLCBifSA9IHRoaXNcblxuICAgIGxldCBpID0gTWF0aC5mbG9vcihoICogNilcbiAgICBsZXQgZiA9IGggKiA2IC0gaVxuICAgIGxldCBwID0gdiAqICgxIC0gcylcbiAgICBsZXQgcSA9IHYgKiAoMSAtIGYgKiBzKVxuICAgIGxldCB0ID0gdiAqICgxIC0gKDEgLSBmKSAqIHMpXG5cbiAgICBzd2l0Y2ggKGkgJSA2KSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIHIgPSB2XG4gICAgICAgIGcgPSB0XG4gICAgICAgIGIgPSBwXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIDE6XG4gICAgICAgIHIgPSBxXG4gICAgICAgIGcgPSB2XG4gICAgICAgIGIgPSBwXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIDI6XG4gICAgICAgIHIgPSBwXG4gICAgICAgIGcgPSB2XG4gICAgICAgIGIgPSB0XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIDM6XG4gICAgICAgIHIgPSBwXG4gICAgICAgIGcgPSBxXG4gICAgICAgIGIgPSB2XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIDQ6XG4gICAgICAgIHIgPSB0XG4gICAgICAgIGcgPSBwXG4gICAgICAgIGIgPSB2XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIDU6XG4gICAgICAgIHIgPSB2XG4gICAgICAgIGcgPSBwXG4gICAgICAgIGIgPSBxXG4gICAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgdGhpcy5yID0gclxuICAgIHRoaXMuZyA9IGdcbiAgICB0aGlzLmIgPSBiXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGNsb25lIG9mIHRoZSBjdXJyZW50IGNvbG9yXG4gICAqIEByZXR1cm4ge0NvbG9yfVxuICAgKi9cbiAgY2xvbmUgKCkge1xuICAgIHJldHVybiBuZXcgQ29sb3IodGhpcy5yLCB0aGlzLmcsIHRoaXMuYiwgdGhpcy5hKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGdpdmVuIG51bWJlciBhcyBoZXhcbiAgICogQHBhcmFtICB7TnVtYmVyfSBjb21wb25lbnRcbiAgICogQHJldHVybiB7U3RyaW5nfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NvbXBvbmVudFRvSGV4IChjb21wb25lbnQpIHtcbiAgICB2YXIgaGV4ID0gY29tcG9uZW50LnRvU3RyaW5nKDE2KVxuICAgIHJldHVybiBoZXgubGVuZ3RoID09PSAxID8gJzAnICsgaGV4IDogaGV4XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgY29sb3JcbiAgICogQHJldHVybnMge1N0cmluZ31cbiAgICovXG4gIHRvU3RyaW5nICgpIHtcbiAgICByZXR1cm4gYENvbG9yKCR7dGhpcy5yfSwgJHt0aGlzLmd9LCAke3RoaXMuYn0sICR7dGhpcy5hfSlgXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29sb3JcbiJdfQ== |