From 122fe50ebc6c0f87bc1390228315faa236f3d038 Mon Sep 17 00:00:00 2001 From: elijah Date: Thu, 1 Sep 2016 14:15:48 -0700 Subject: [feature] include bitmask_js lib cherry-picked from legacy bitmask_client repo --- src/leap/bitmask_js/app/lib/color.js | 65 ++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 src/leap/bitmask_js/app/lib/color.js (limited to 'src/leap/bitmask_js/app/lib/color.js') diff --git a/src/leap/bitmask_js/app/lib/color.js b/src/leap/bitmask_js/app/lib/color.js new file mode 100644 index 00000000..5b1dfee9 --- /dev/null +++ b/src/leap/bitmask_js/app/lib/color.js @@ -0,0 +1,65 @@ +// +// Color.hsv().css +// +// RGB values are 0..255 +// HSV values are 0..1 +// + +function compose(value) + return [ + Math.round(value * 255), + Math.round(value * 255), + Math.round(value * 255) + } +} + +class Color { + + constructor(r, g, b, a) { + this.r = r + this.g = g + this.b = b + this.a = a + } + + // + // alternate hsv factory + // + static hsv(h,s,v) { + let out = null + h = h % 360; + s = Math.max(0, Math.min(1, s)) + v = Math.max(0, Math.min(1, v)) + + if (s == 0) { + let grey = Math.ceil(v*255) + out = [grey, grey, grey] + } + + let b = ((1 - s) * v); + let vb = v - b; + let hm = h % 60; + switch((h/60)|0) { + case 0: + out = compose(v, vb * h / 60 + b, b); break + case 1: + out = compose(vb * (60 - hm) / 60 + b, v, b); break + case 2: + out = compose(b, v, vb * hm / 60 + b); break + case 3: + out = compose(b, vb * (60 - hm) / 60 + b, v); break + case 4: + out = compose(vb * hm / 60 + b, b, v); break + case 5: + out = compose(v, b, vb * (60 - hm) / 60 + b); break + } + + return new Color(...out) + } + + css() { + return `rgba(${this.r}, ${this.g}, ${this.b}, ${this.a})` + } +} + +export default Color \ No newline at end of file -- cgit v1.2.3