| var Active_Color_Index = 0; | var Active_Color_Index = 0; | ||||
| function InvertRGB(hex){ | |||||
| var h = (255 - parseInt(hex, 16)).toString(16); | |||||
| return (h.length < 2) ? "0" + h : h; | |||||
| } | |||||
| function InvertColor(chex, bw){ | |||||
| bw = (bw === true); | |||||
| if (chex.indexOf("#") === 0){ | |||||
| chex = chex.slice(1); | |||||
| } | |||||
| if (chex.length === 3){ | |||||
| chex = chex[0] + chex[0] + chex[1] + chex[1] + chex[2] + chex[2]; | |||||
| } | |||||
| if (chex.length !== 6){ | |||||
| throw new ValueError("Hex color expected to be 3 or 6 characters long."); | |||||
| } | |||||
| if (bw) { | |||||
| var r = parseInt(chex.slice(0, 2), 16); | |||||
| var g = parseInt(chex.slice(2, 4), 16); | |||||
| var b = parseInt(chex.slice(4, 6), 16); | |||||
| // http://stackoverflow.com/a/3943023/112731 | |||||
| return (r * 0.299 + g * 0.587 + b * 0.114) > 186 | |||||
| ? '#000000' : '#FFFFFF'; | |||||
| } | |||||
| return "#" + InvertRGB(chex.slice(0, 2)) + InvertRGB(chex.slice(2, 4)) + InvertRGB(chex.slice(4, 6)); | |||||
| } | |||||
| class CTRLPalettes{ | class CTRLPalettes{ | ||||
| constructor(){ | constructor(){ | ||||
| var handle_syspalette_clicked = function(event){ | var handle_syspalette_clicked = function(event){ | ||||
| if (this.hasAttribute(ATTRIB_NESIDX)){ | if (this.hasAttribute(ATTRIB_NESIDX)){ | ||||
| var idx = parseInt(this.getAttribute(ATTRIB_NESIDX), 16); | var idx = parseInt(this.getAttribute(ATTRIB_NESIDX), 16); | ||||
| if (idx >= 0 && idx < NESPalette.SystemColors.length){ | |||||
| if (idx >= 0 && idx < NESPalette.SystemColor.length){ | |||||
| console.log(idx); | console.log(idx); | ||||
| // TODO: Set a selected Tile/Sprite palette index to the color index clicked. | // TODO: Set a selected Tile/Sprite palette index to the color index clicked. | ||||
| } | } | ||||
| var idx = parseInt(el.getAttribute(ATTRIB_NESIDX), 16); | var idx = parseInt(el.getAttribute(ATTRIB_NESIDX), 16); | ||||
| if (idx >= 0 && idx < NESPalette.SystemColor.length){ | if (idx >= 0 && idx < NESPalette.SystemColor.length){ | ||||
| el.style["background-color"] = NESPalette.SystemColor[idx]; | el.style["background-color"] = NESPalette.SystemColor[idx]; | ||||
| el.style.color = InvertColor(NESPalette.SystemColor[idx], true); | |||||
| el.addEventListener("click", handle_syspalette_clicked); | el.addEventListener("click", handle_syspalette_clicked); | ||||
| } | } | ||||
| }); | }); |