--# Colors --[[ Author: Anatoly License: ISC Description: Color()s is a function that helps you accessing all the colors very easily. Thread: https://codea.io/talk/discussion/10043/colors Release: 5 $ COLOR CHANGE WARNING! violet and purple color revamped! $ DEPRECATION WARNING! 4 PREFIXES GOT REMOVED. avg, no-blue, no-red, no-green, invert. THEY STILL EXIST IN THE TABLE VERSION. DON'T USE: Color("no-red-yellow") USE: Color{ origin = yellow, filter = {r = false} } DON'T USE: Color("avg-yellow") USE: Color{ origin = yellow, desaturate = "avg" } DON'T USE: Color("invert-yellow") USE: Color{ origin = yellow, invert = true } $ Changes: * "transparent" color * Color(name, alpha) - alpha now supports strings. - "slightly-opaque" - "slightly-visible" * Colors(c1, c2, operator) - Operators: = dif - Get the difference between two colors. = avg - Get the average between two colors. (a+b)/2 = max - Get the minimum of two colors. = min - Get the maximum of two colors. = sqrt - Get the square root average (a^2+b^2)/sqrt2 = multiply = screen - Read: docs.gimp.org/en/gimp-concepts-layer-modes.html * Hex() now supports: RRGGBB, RGB, DD, D (RGB - red green blue, D - grey) * X11 Support! * New prefix! - "saturated-" - Makes the color more saturated. - "slightly-dark" and "slightly-light" - These also exist as shades in the table. * 360 NEW COLORS (AUTO GENERATED) - Color("hue-xx") - xx can be anything between 0 and 360 (Zeroes are allowed: hue-034 = hue-34; hue-7 = hue-07 = hue-007; funny 0053 also works) Hues can be also beside the border: 1080 (in degrees) will be the same as 0. You can use Hue(ElapsedTime) and every 6 minutes the color cycle will be repeating. Beautiful, yeah? * violet and purple color revamped! * "neon-green", "strawberry-red", "darkviolet" $ Main File: * Improved Scroll Engine * Rewrote the Credits code * They now show up for the first five seconds automatically. ]] -- Only ipairs outputs colors! _colors = {} -- Colors directly colors = {} -- ipairs ignore hidden functions. _colors.svg = {} _colors.x11 = {} -- Locals are local! do local colors1 = {} -- Origins colors1["red"] = color(255, 0, 0, 255) colors1["orangered"] = color(255,60,0,255) colors1["orange"] = color(255, 150, 0, 255) colors1["brown"] = color(200, 115, 45, 255) colors1["darkbrown"] = color(115, 75, 40, 255) colors1["strawberry-red"] = color(223, 85, 111, 255) colors1["yellow"] = color(255, 255, 0, 255) colors1["gold"] = color(225, 180, 60, 255) colors1["bronze"] = color(190, 155, 90, 255) colors1["forestgreen"] = color(0, 155, 0, 255) colors1["middlegreen"] = color(150, 155, 0, 255) colors1["green"] = color(0, 255, 0, 255) colors1["grassgreen"] = color(150, 255, 0, 255) colors1["turquoise"] = color(0, 255, 150, 255) colors1["neon-green"] = color(210, 255, 0, 255) colors1["blue"] = color(0, 0, 255, 255) colors1["skyblue"] = color(0, 150, 255, 255) colors1["seablue"] = color(50, 200, 255) colors1["diamondblue"] = color(95, 170, 225, 255) colors1["cyan"] = color(0, 255, 255, 255) colors1["silver"] = color(180, 210, 210, 255) colors1["cold-white"] = color(192, 212, 225, 255) colors1["warm-white"] = color(228, 223, 207, 255) colors1["purple"] = color(160, 0, 255, 255) colors1["rosa"] = color(255, 0, 150, 255) colors1["magenta"] = color(255, 0, 255, 255) colors1["pink"] = color(255, 150, 255, 255) colors1["violet"] = color(125, 0, 255, 255) colors1["darkviolet"] = color(150, 25, 120, 255) -- Grayshades colors1["black"] = color(0, 255) colors1["white"] = color(255, 255) colors1["gray"] = colors1["white-50"] -- Support BE and AE colors1["grey"] = colors1["white-50"] for i = 1, 9 do colors1["white-" .. i .. "0"] = color(25.5 * i, 255) end -- SVG, X11 -- Author: Andrew Stacey, adopted by Anatoly -- Website: http://www.math.ntnu.no/~stacey/HowDidIDoThat/iPad/Codea.html -- Source: https://github.com/loopspace/Codea-Library-Base/blob/master/ColourExt.lua -- Licence: CC0 (http://wiki.creativecommons.org/CC0) -- SVG _colors.svg.AliceBlue = color(239,247,255,255) _colors.svg.AntiqueWhite = color(249,234,215,255) _colors.svg.Aqua = color(0,255,255,255) _colors.svg.Aquamarine = color(126,255,211,255) _colors.svg.Azure = color(239,255,255,255) _colors.svg.Beige = color(244,244,220,255) _colors.svg.Bisque = color(255,227,196,255) _colors.svg.Black = color(0,0,0,255) _colors.svg.BlanchedAlmond = color(255,234,205,255) _colors.svg.Blue = color(0,0,255,255) _colors.svg.BlueViolet = color(137,43,226,255) _colors.svg.Brown = color(165,42,42,255) _colors.svg.BurlyWood = color(221,183,135,255) _colors.svg.CadetBlue = color(94,158,160,255) _colors.svg.Chartreuse = color(126,255,0,255) _colors.svg.Chocolate = color(210,104,29,255) _colors.svg.Coral = color(255,126,79,255) _colors.svg.CornflowerBlue = color(99,149,237,255) _colors.svg.Cornsilk = color(255,247,220,255) _colors.svg.Crimson = color(220,20,59,255) _colors.svg.Cyan = color(0,255,255,255) _colors.svg.DarkBlue = color(0,0,138,255) _colors.svg.DarkCyan = color(0,138,138,255) _colors.svg.DarkGoldenrod = color(183,133,11,255) _colors.svg.DarkGray = color(169,169,169,255) _colors.svg.DarkGreen = color(0,99,0,255) _colors.svg.DarkGrey = color(169,169,169,255) _colors.svg.DarkKhaki = color(188,182,107,255) _colors.svg.DarkMagenta = color(138,0,138,255) _colors.svg.DarkOliveGreen = color(84,107,47,255) _colors.svg.DarkOrange = color(255,140,0,255) _colors.svg.DarkOrchid = color(183,49,204,255) _colors.svg.DarkRed = color(138,0,0,255) _colors.svg.DarkSalmon = color(232,150,122,255) _colors.svg.DarkSeaGreen = color(142,187,142,255) _colors.svg.DarkSlateBlue = color(72,61,138,255) _colors.svg.DarkSlateGray = color(47,79,79,255) _colors.svg.DarkSlateGrey = color(47,79,79,255) _colors.svg.DarkTurquoise = color(0,206,209,255) _colors.svg.DarkViolet = color(147,0,211,255) _colors.svg.DeepPink = color(255,20,146,255) _colors.svg.DeepSkyBlue = color(0,191,255,255) _colors.svg.DimGray = color(104,104,104,255) _colors.svg.DimGrey = color(104,104,104,255) _colors.svg.DodgerBlue = color(29,144,255,255) _colors.svg.FireBrick = color(177,33,33,255) _colors.svg.FloralWhite = color(255,249,239,255) _colors.svg.ForestGreen = color(33,138,33,255) _colors.svg.Fuchsia = color(255,0,255,255) _colors.svg.Gainsboro = color(220,220,220,255) _colors.svg.GhostWhite = color(247,247,255,255) _colors.svg.Gold = color(255,215,0,255) _colors.svg.Goldenrod = color(218,165,31,255) _colors.svg.Gray = color(127,127,127,255) _colors.svg.Green = color(0,127,0,255) _colors.svg.GreenYellow = color(173,255,47,255) _colors.svg.Grey = color(127,127,127,255) _colors.svg.Honeydew = color(239,255,239,255) _colors.svg.HotPink = color(255,104,179,255) _colors.svg.IndianRed = color(205,91,91,255) _colors.svg.Indigo = color(74,0,130,255) _colors.svg.Ivory = color(255,255,239,255) _colors.svg.Khaki = color(239,229,140,255) _colors.svg.Lavender = color(229,229,249,255) _colors.svg.LavenderBlush = color(255,239,244,255) _colors.svg.LawnGreen = color(124,252,0,255) _colors.svg.LemonChiffon = color(255,249,205,255) _colors.svg.LightBlue = color(173,216,229,255) _colors.svg.LightCoral = color(239,127,127,255) _colors.svg.LightCyan = color(224,255,255,255) _colors.svg.LightGoldenrod = color(237,221,130,255) _colors.svg.LightGoldenrodYellow = color(249,249,210,255) _colors.svg.LightGray = color(211,211,211,255) _colors.svg.LightGreen = color(144,237,144,255) _colors.svg.LightGrey = color(211,211,211,255) _colors.svg.LightPink = color(255,181,192,255) _colors.svg.LightSalmon = color(255,160,122,255) _colors.svg.LightSeaGreen = color(31,177,170,255) _colors.svg.LightSkyBlue = color(135,206,249,255) _colors.svg.LightSlateBlue = color(132,112,255,255) _colors.svg.LightSlateGray = color(119,135,153,255) _colors.svg.LightSlateGrey = color(119,135,153,255) _colors.svg.LightSteelBlue = color(175,196,221,255) _colors.svg.LightYellow = color(255,255,224,255) _colors.svg.Lime = color(0,255,0,255) _colors.svg.LimeGreen = color(49,205,49,255) _colors.svg.Linen = color(249,239,229,255) _colors.svg.Magenta = color(255,0,255,255) _colors.svg.Maroon = color(127,0,0,255) _colors.svg.MediumAquamarine = color(102,205,170,255) _colors.svg.MediumBlue = color(0,0,205,255) _colors.svg.MediumOrchid = color(186,84,211,255) _colors.svg.MediumPurple = color(146,112,219,255) _colors.svg.MediumSeaGreen = color(59,178,113,255) _colors.svg.MediumSlateBlue = color(123,104,237,255) _colors.svg.MediumSpringGreen = color(0,249,154,255) _colors.svg.MediumTurquoise = color(72,209,204,255) _colors.svg.MediumVioletRed = color(198,21,132,255) _colors.svg.MidnightBlue = color(24,24,112,255) _colors.svg.MintCream = color(244,255,249,255) _colors.svg.MistyRose = color(255,227,225,255) _colors.svg.Moccasin = color(255,227,181,255) _colors.svg.NavajoWhite = color(255,221,173,255) _colors.svg.Navy = color(0,0,127,255) _colors.svg.NavyBlue = color(0,0,127,255) _colors.svg.OldLace = color(252,244,229,255) _colors.svg.Olive = color(127,127,0,255) _colors.svg.OliveDrab = color(107,141,34,255) _colors.svg.Orange = color(255,165,0,255) _colors.svg.OrangeRed = color(255,68,0,255) _colors.svg.Orchid = color(218,112,214,255) _colors.svg.PaleGoldenrod = color(237,232,170,255) _colors.svg.PaleGreen = color(151,251,151,255) _colors.svg.PaleTurquoise = color(175,237,237,255) _colors.svg.PaleVioletRed = color(219,112,146,255) _colors.svg.PapayaWhip = color(255,238,212,255) _colors.svg.PeachPuff = color(255,218,184,255) _colors.svg.Peru = color(205,132,63,255) _colors.svg.Pink = color(255,191,202,255) _colors.svg.Plum = color(221,160,221,255) _colors.svg.PowderBlue = color(175,224,229,255) _colors.svg.Purple = color(127,0,127,255) _colors.svg.Red = color(255,0,0,255) _colors.svg.RosyBrown = color(187,142,142,255) _colors.svg.RoyalBlue = color(65,104,225,255) _colors.svg.SaddleBrown = color(138,68,19,255) _colors.svg.Salmon = color(249,127,114,255) _colors.svg.SandyBrown = color(243,164,95,255) _colors.svg.SeaGreen = color(45,138,86,255) _colors.svg.Seashell = color(255,244,237,255) _colors.svg.Sienna = color(160,81,44,255) _colors.svg.Silver = color(191,191,191,255) _colors.svg.SkyBlue = color(135,206,234,255) _colors.svg.SlateBlue = color(105,89,205,255) _colors.svg.SlateGray = color(112,127,144,255) _colors.svg.SlateGrey = color(112,127,144,255) _colors.svg.Snow = color(255,249,249,255) _colors.svg.SpringGreen = color(0,255,126,255) _colors.svg.SteelBlue = color(70,130,179,255) _colors.svg.Tan = color(210,179,140,255) _colors.svg.Teal = color(0,127,127,255) _colors.svg.Thistle = color(216,191,216,255) _colors.svg.Tomato = color(255,99,71,255) _colors.svg.Turquoise = color(63,224,207,255) _colors.svg.Violet = color(237,130,237,255) _colors.svg.VioletRed = color(208,31,144,255) _colors.svg.Wheat = color(244,221,178,255) _colors.svg.White = color(255,255,255,255) _colors.svg.WhiteSmoke = color(244,244,244,255) _colors.svg.Yellow = color(255,255,0,255) _colors.svg.YellowGreen = color(154,205,49,255) for a, b in pairs(_colors.svg) do table.insert(_colors, {n="svg-"..string.lower(a), c=b}) end -- X11 _colors.x11.AntiqueWhite1 = color(255,238,219,255) _colors.x11.AntiqueWhite2 = color(237,223,204,255) _colors.x11.AntiqueWhite3 = color(205,191,175,255) _colors.x11.AntiqueWhite4 = color(138,130,119,255) _colors.x11.Aquamarine1 = color(126,255,211,255) _colors.x11.Aquamarine2 = color(118,237,197,255) _colors.x11.Aquamarine3 = color(102,205,170,255) _colors.x11.Aquamarine4 = color(68,138,116,255) _colors.x11.Azure1 = color(239,255,255,255) _colors.x11.Azure2 = color(224,237,237,255) _colors.x11.Azure3 = color(192,205,205,255) _colors.x11.Azure4 = color(130,138,138,255) _colors.x11.Bisque1 = color(255,227,196,255) _colors.x11.Bisque2 = color(237,212,182,255) _colors.x11.Bisque3 = color(205,182,158,255) _colors.x11.Bisque4 = color(138,124,107,255) _colors.x11.Blue1 = color(0,0,255,255) _colors.x11.Blue2 = color(0,0,237,255) _colors.x11.Blue3 = color(0,0,205,255) _colors.x11.Blue4 = color(0,0,138,255) _colors.x11.Brown1 = color(255,63,63,255) _colors.x11.Brown2 = color(237,58,58,255) _colors.x11.Brown3 = color(205,51,51,255) _colors.x11.Brown4 = color(138,34,34,255) _colors.x11.Burlywood1 = color(255,211,155,255) _colors.x11.Burlywood2 = color(237,196,145,255) _colors.x11.Burlywood3 = color(205,170,124,255) _colors.x11.Burlywood4 = color(138,114,84,255) _colors.x11.CadetBlue1 = color(151,244,255,255) _colors.x11.CadetBlue2 = color(141,228,237,255) _colors.x11.CadetBlue3 = color(122,196,205,255) _colors.x11.CadetBlue4 = color(82,133,138,255) _colors.x11.Chartreuse1 = color(126,255,0,255) _colors.x11.Chartreuse2 = color(118,237,0,255) _colors.x11.Chartreuse3 = color(102,205,0,255) _colors.x11.Chartreuse4 = color(68,138,0,255) _colors.x11.Chocolate1 = color(255,126,35,255) _colors.x11.Chocolate2 = color(237,118,33,255) _colors.x11.Chocolate3 = color(205,102,28,255) _colors.x11.Chocolate4 = color(138,68,19,255) _colors.x11.Coral1 = color(255,114,85,255) _colors.x11.Coral2 = color(237,105,79,255) _colors.x11.Coral3 = color(205,90,68,255) _colors.x11.Coral4 = color(138,62,47,255) _colors.x11.Cornsilk1 = color(255,247,220,255) _colors.x11.Cornsilk2 = color(237,232,205,255) _colors.x11.Cornsilk3 = color(205,200,176,255) _colors.x11.Cornsilk4 = color(138,135,119,255) _colors.x11.Cyan1 = color(0,255,255,255) _colors.x11.Cyan2 = color(0,237,237,255) _colors.x11.Cyan3 = color(0,205,205,255) _colors.x11.Cyan4 = color(0,138,138,255) _colors.x11.DarkGoldenrod1 = color(255,184,15,255) _colors.x11.DarkGoldenrod2 = color(237,173,14,255) _colors.x11.DarkGoldenrod3 = color(205,149,12,255) _colors.x11.DarkGoldenrod4 = color(138,100,7,255) _colors.x11.DarkOliveGreen1 = color(201,255,112,255) _colors.x11.DarkOliveGreen2 = color(187,237,104,255) _colors.x11.DarkOliveGreen3 = color(161,205,89,255) _colors.x11.DarkOliveGreen4 = color(109,138,61,255) _colors.x11.DarkOrange1 = color(255,126,0,255) _colors.x11.DarkOrange2 = color(237,118,0,255) _colors.x11.DarkOrange3 = color(205,102,0,255) _colors.x11.DarkOrange4 = color(138,68,0,255) _colors.x11.DarkOrchid1 = color(191,62,255,255) _colors.x11.DarkOrchid2 = color(177,58,237,255) _colors.x11.DarkOrchid3 = color(154,49,205,255) _colors.x11.DarkOrchid4 = color(104,33,138,255) _colors.x11.DarkSeaGreen1 = color(192,255,192,255) _colors.x11.DarkSeaGreen2 = color(179,237,179,255) _colors.x11.DarkSeaGreen3 = color(155,205,155,255) _colors.x11.DarkSeaGreen4 = color(104,138,104,255) _colors.x11.DarkSlateGray1 = color(150,255,255,255) _colors.x11.DarkSlateGray2 = color(140,237,237,255) _colors.x11.DarkSlateGray3 = color(121,205,205,255) _colors.x11.DarkSlateGray4 = color(81,138,138,255) _colors.x11.DeepPink1 = color(255,20,146,255) _colors.x11.DeepPink2 = color(237,17,136,255) _colors.x11.DeepPink3 = color(205,16,118,255) _colors.x11.DeepPink4 = color(138,10,79,255) _colors.x11.DeepSkyBlue1 = color(0,191,255,255) _colors.x11.DeepSkyBlue2 = color(0,177,237,255) _colors.x11.DeepSkyBlue3 = color(0,154,205,255) _colors.x11.DeepSkyBlue4 = color(0,104,138,255) _colors.x11.DodgerBlue1 = color(29,144,255,255) _colors.x11.DodgerBlue2 = color(28,133,237,255) _colors.x11.DodgerBlue3 = color(23,116,205,255) _colors.x11.DodgerBlue4 = color(16,77,138,255) _colors.x11.Firebrick1 = color(255,48,48,255) _colors.x11.Firebrick2 = color(237,43,43,255) _colors.x11.Firebrick3 = color(205,38,38,255) _colors.x11.Firebrick4 = color(138,25,25,255) _colors.x11.Gold1 = color(255,215,0,255) _colors.x11.Gold2 = color(237,201,0,255) _colors.x11.Gold3 = color(205,173,0,255) _colors.x11.Gold4 = color(138,117,0,255) _colors.x11.Goldenrod1 = color(255,192,36,255) _colors.x11.Goldenrod2 = color(237,179,33,255) _colors.x11.Goldenrod3 = color(205,155,28,255) _colors.x11.Goldenrod4 = color(138,104,20,255) _colors.x11.Green1 = color(0,255,0,255) _colors.x11.Green2 = color(0,237,0,255) _colors.x11.Green3 = color(0,205,0,255) _colors.x11.Green4 = color(0,138,0,255) _colors.x11.Honeydew1 = color(239,255,239,255) _colors.x11.Honeydew2 = color(224,237,224,255) _colors.x11.Honeydew3 = color(192,205,192,255) _colors.x11.Honeydew4 = color(130,138,130,255) _colors.x11.HotPink1 = color(255,109,179,255) _colors.x11.HotPink2 = color(237,105,167,255) _colors.x11.HotPink3 = color(205,95,144,255) _colors.x11.HotPink4 = color(138,58,98,255) _colors.x11.IndianRed1 = color(255,105,105,255) _colors.x11.IndianRed2 = color(237,99,99,255) _colors.x11.IndianRed3 = color(205,84,84,255) _colors.x11.IndianRed4 = color(138,58,58,255) _colors.x11.Ivory1 = color(255,255,239,255) _colors.x11.Ivory2 = color(237,237,224,255) _colors.x11.Ivory3 = color(205,205,192,255) _colors.x11.Ivory4 = color(138,138,130,255) _colors.x11.Khaki1 = color(255,246,142,255) _colors.x11.Khaki2 = color(237,229,132,255) _colors.x11.Khaki3 = color(205,197,114,255) _colors.x11.Khaki4 = color(138,133,77,255) _colors.x11.LavenderBlush1 = color(255,239,244,255) _colors.x11.LavenderBlush2 = color(237,224,228,255) _colors.x11.LavenderBlush3 = color(205,192,196,255) _colors.x11.LavenderBlush4 = color(138,130,133,255) _colors.x11.LemonChiffon1 = color(255,249,205,255) _colors.x11.LemonChiffon2 = color(237,232,191,255) _colors.x11.LemonChiffon3 = color(205,201,165,255) _colors.x11.LemonChiffon4 = color(138,136,112,255) _colors.x11.LightBlue1 = color(191,238,255,255) _colors.x11.LightBlue2 = color(177,223,237,255) _colors.x11.LightBlue3 = color(154,191,205,255) _colors.x11.LightBlue4 = color(104,130,138,255) _colors.x11.LightCyan1 = color(224,255,255,255) _colors.x11.LightCyan2 = color(209,237,237,255) _colors.x11.LightCyan3 = color(179,205,205,255) _colors.x11.LightCyan4 = color(122,138,138,255) _colors.x11.LightGoldenrod1 = color(255,235,138,255) _colors.x11.LightGoldenrod2 = color(237,220,130,255) _colors.x11.LightGoldenrod3 = color(205,189,112,255) _colors.x11.LightGoldenrod4 = color(138,128,75,255) _colors.x11.LightPink1 = color(255,174,184,255) _colors.x11.LightPink2 = color(237,161,173,255) _colors.x11.LightPink3 = color(205,140,149,255) _colors.x11.LightPink4 = color(138,94,100,255) _colors.x11.LightSalmon1 = color(255,160,122,255) _colors.x11.LightSalmon2 = color(237,149,114,255) _colors.x11.LightSalmon3 = color(205,128,98,255) _colors.x11.LightSalmon4 = color(138,86,66,255) _colors.x11.LightSkyBlue1 = color(175,226,255,255) _colors.x11.LightSkyBlue2 = color(164,211,237,255) _colors.x11.LightSkyBlue3 = color(140,181,205,255) _colors.x11.LightSkyBlue4 = color(95,123,138,255) _colors.x11.LightSteelBlue1 = color(201,225,255,255) _colors.x11.LightSteelBlue2 = color(187,210,237,255) _colors.x11.LightSteelBlue3 = color(161,181,205,255) _colors.x11.LightSteelBlue4 = color(109,123,138,255) _colors.x11.LightYellow1 = color(255,255,224,255) _colors.x11.LightYellow2 = color(237,237,209,255) _colors.x11.LightYellow3 = color(205,205,179,255) _colors.x11.LightYellow4 = color(138,138,122,255) _colors.x11.Magenta1 = color(255,0,255,255) _colors.x11.Magenta2 = color(237,0,237,255) _colors.x11.Magenta3 = color(205,0,205,255) _colors.x11.Magenta4 = color(138,0,138,255) _colors.x11.Maroon1 = color(255,52,178,255) _colors.x11.Maroon2 = color(237,48,167,255) _colors.x11.Maroon3 = color(205,40,144,255) _colors.x11.Maroon4 = color(138,28,98,255) _colors.x11.MediumOrchid1 = color(224,102,255,255) _colors.x11.MediumOrchid2 = color(209,94,237,255) _colors.x11.MediumOrchid3 = color(179,81,205,255) _colors.x11.MediumOrchid4 = color(122,54,138,255) _colors.x11.MediumPurple1 = color(170,130,255,255) _colors.x11.MediumPurple2 = color(159,121,237,255) _colors.x11.MediumPurple3 = color(136,104,205,255) _colors.x11.MediumPurple4 = color(93,71,138,255) _colors.x11.MistyRose1 = color(255,227,225,255) _colors.x11.MistyRose2 = color(237,212,210,255) _colors.x11.MistyRose3 = color(205,182,181,255) _colors.x11.MistyRose4 = color(138,124,123,255) _colors.x11.NavajoWhite1 = color(255,221,173,255) _colors.x11.NavajoWhite2 = color(237,206,160,255) _colors.x11.NavajoWhite3 = color(205,178,138,255) _colors.x11.NavajoWhite4 = color(138,121,94,255) _colors.x11.OliveDrab1 = color(191,255,62,255) _colors.x11.OliveDrab2 = color(178,237,58,255) _colors.x11.OliveDrab3 = color(154,205,49,255) _colors.x11.OliveDrab4 = color(104,138,33,255) _colors.x11.Orange1 = color(255,165,0,255) _colors.x11.Orange2 = color(237,154,0,255) _colors.x11.Orange3 = color(205,132,0,255) _colors.x11.Orange4 = color(138,89,0,255) _colors.x11.OrangeRed1 = color(255,68,0,255) _colors.x11.OrangeRed2 = color(237,63,0,255) _colors.x11.OrangeRed3 = color(205,54,0,255) _colors.x11.OrangeRed4 = color(138,36,0,255) _colors.x11.Orchid1 = color(255,130,249,255) _colors.x11.Orchid2 = color(237,122,232,255) _colors.x11.Orchid3 = color(205,104,201,255) _colors.x11.Orchid4 = color(138,71,136,255) _colors.x11.PaleGreen1 = color(154,255,154,255) _colors.x11.PaleGreen2 = color(144,237,144,255) _colors.x11.PaleGreen3 = color(124,205,124,255) _colors.x11.PaleGreen4 = color(84,138,84,255) _colors.x11.PaleTurquoise1 = color(186,255,255,255) _colors.x11.PaleTurquoise2 = color(174,237,237,255) _colors.x11.PaleTurquoise3 = color(150,205,205,255) _colors.x11.PaleTurquoise4 = color(102,138,138,255) _colors.x11.PaleVioletRed1 = color(255,130,170,255) _colors.x11.PaleVioletRed2 = color(237,121,159,255) _colors.x11.PaleVioletRed3 = color(205,104,136,255) _colors.x11.PaleVioletRed4 = color(138,71,93,255) _colors.x11.PeachPuff1 = color(255,218,184,255) _colors.x11.PeachPuff2 = color(237,202,173,255) _colors.x11.PeachPuff3 = color(205,175,149,255) _colors.x11.PeachPuff4 = color(138,119,100,255) _colors.x11.Pink1 = color(255,181,196,255) _colors.x11.Pink2 = color(237,169,183,255) _colors.x11.Pink3 = color(205,145,158,255) _colors.x11.Pink4 = color(138,99,108,255) _colors.x11.Plum1 = color(255,186,255,255) _colors.x11.Plum2 = color(237,174,237,255) _colors.x11.Plum3 = color(205,150,205,255) _colors.x11.Plum4 = color(138,102,138,255) _colors.x11.Purple1 = color(155,48,255,255) _colors.x11.Purple2 = color(145,43,237,255) _colors.x11.Purple3 = color(124,38,205,255) _colors.x11.Purple4 = color(84,25,138,255) _colors.x11.Red1 = color(255,0,0,255) _colors.x11.Red2 = color(237,0,0,255) _colors.x11.Red3 = color(205,0,0,255) _colors.x11.Red4 = color(138,0,0,255) _colors.x11.RosyBrown1 = color(255,192,192,255) _colors.x11.RosyBrown2 = color(237,179,179,255) _colors.x11.RosyBrown3 = color(205,155,155,255) _colors.x11.RosyBrown4 = color(138,104,104,255) _colors.x11.RoyalBlue1 = color(72,118,255,255) _colors.x11.RoyalBlue2 = color(67,109,237,255) _colors.x11.RoyalBlue3 = color(58,94,205,255) _colors.x11.RoyalBlue4 = color(38,63,138,255) _colors.x11.Salmon1 = color(255,140,104,255) _colors.x11.Salmon2 = color(237,130,98,255) _colors.x11.Salmon3 = color(205,112,84,255) _colors.x11.Salmon4 = color(138,75,57,255) _colors.x11.SeaGreen1 = color(84,255,159,255) _colors.x11.SeaGreen2 = color(77,237,147,255) _colors.x11.SeaGreen3 = color(67,205,127,255) _colors.x11.SeaGreen4 = color(45,138,86,255) _colors.x11.Seashell1 = color(255,244,237,255) _colors.x11.Seashell2 = color(237,228,221,255) _colors.x11.Seashell3 = color(205,196,191,255) _colors.x11.Seashell4 = color(138,133,130,255) _colors.x11.Sienna1 = color(255,130,71,255) _colors.x11.Sienna2 = color(237,121,66,255) _colors.x11.Sienna3 = color(205,104,57,255) _colors.x11.Sienna4 = color(138,71,38,255) _colors.x11.SkyBlue1 = color(135,206,255,255) _colors.x11.SkyBlue2 = color(125,191,237,255) _colors.x11.SkyBlue3 = color(108,165,205,255) _colors.x11.SkyBlue4 = color(73,112,138,255) _colors.x11.SlateBlue1 = color(130,110,255,255) _colors.x11.SlateBlue2 = color(122,103,237,255) _colors.x11.SlateBlue3 = color(104,89,205,255) _colors.x11.SlateBlue4 = color(71,59,138,255) _colors.x11.SlateGray1 = color(197,226,255,255) _colors.x11.SlateGray2 = color(184,211,237,255) _colors.x11.SlateGray3 = color(159,181,205,255) _colors.x11.SlateGray4 = color(108,123,138,255) _colors.x11.Snow1 = color(255,249,249,255) _colors.x11.Snow2 = color(237,232,232,255) _colors.x11.Snow3 = color(205,201,201,255) _colors.x11.Snow4 = color(138,136,136,255) _colors.x11.SpringGreen1 = color(0,255,126,255) _colors.x11.SpringGreen2 = color(0,237,118,255) _colors.x11.SpringGreen3 = color(0,205,102,255) _colors.x11.SpringGreen4 = color(0,138,68,255) _colors.x11.SteelBlue1 = color(99,183,255,255) _colors.x11.SteelBlue2 = color(91,172,237,255) _colors.x11.SteelBlue3 = color(79,147,205,255) _colors.x11.SteelBlue4 = color(53,99,138,255) _colors.x11.Tan1 = color(255,165,79,255) _colors.x11.Tan2 = color(237,154,73,255) _colors.x11.Tan3 = color(205,132,63,255) _colors.x11.Tan4 = color(138,89,43,255) _colors.x11.Thistle1 = color(255,225,255,255) _colors.x11.Thistle2 = color(237,210,237,255) _colors.x11.Thistle3 = color(205,181,205,255) _colors.x11.Thistle4 = color(138,123,138,255) _colors.x11.Tomato1 = color(255,99,71,255) _colors.x11.Tomato2 = color(237,91,66,255) _colors.x11.Tomato3 = color(205,79,57,255) _colors.x11.Tomato4 = color(138,53,38,255) _colors.x11.Turquoise1 = color(0,244,255,255) _colors.x11.Turquoise2 = color(0,228,237,255) _colors.x11.Turquoise3 = color(0,196,205,255) _colors.x11.Turquoise4 = color(0,133,138,255) _colors.x11.VioletRed1 = color(255,62,150,255) _colors.x11.VioletRed2 = color(237,58,140,255) _colors.x11.VioletRed3 = color(205,49,119,255) _colors.x11.VioletRed4 = color(138,33,81,255) _colors.x11.Wheat1 = color(255,230,186,255) _colors.x11.Wheat2 = color(237,216,174,255) _colors.x11.Wheat3 = color(205,186,150,255) _colors.x11.Wheat4 = color(138,125,102,255) _colors.x11.Yellow1 = color(255,255,0,255) _colors.x11.Yellow2 = color(237,237,0,255) _colors.x11.Yellow3 = color(205,205,0,255) _colors.x11.Yellow4 = color(138,138,0,255) _colors.x11.Gray0 = color(189,189,189,255) _colors.x11.Green0 = color(0,255,0,255) _colors.x11.Grey0 = color(189,189,189,255) _colors.x11.Maroon0 = color(175,48,95,255) _colors.x11.Purple0 = color(160,31,239,255) for a, b in pairs(_colors.x11) do table.insert(_colors, {n="x11-"..string.lower(a), c=b}) end -- Generator local colors2 = {} local domains = { --[[ d - Subdomain c - function(b) returns color ]] { -- The default color d = "", c = function(b) return b end }, { d = "slightly-dark-", c = function(b) return b:mix(color(65, 255), 0.5) end }, { d = "dark-", c = function(b) return b:mix(color(0, 255), 0.5) end }, { d = "slightly-light-", c = function(b) return b:mix(color(190, 255), 0.5) end }, { d = "light-", c = function(b) return b:mix(color(255, 255), 0.5) end }, { d = "middle-", c = function(b) return b:mix(color(127, 255), 0.5) end }, { d = "reddish-", c = function(b) return b:mix(color(255, 0, 0, 255), 0.6) end }, { d = "greenish-", c = function(b) return b:mix(color(0, 255, 0, 255), 0.6) end }, { d = "blueish-", c = function(b) return b:mix(color(0, 0, 255, 255), 0.6) end }, { d = "slightly-reddish-", c = function(b) return b:mix(color(255, 0, 0, 255), 0.7) end }, { d = "slightly-greenish-", c = function(b) return b:mix(color(0, 255, 0, 255), 0.7) end }, { d = "slightly-blueish-", c = function(b) return b:mix(color(0, 0, 255, 255), 0.7) end }, { d = "reduced-", c = function(b) return color(math.max(b.r-90,0), math.max(b.g-90,0), math.max(b.b-90,0), 255) end }, { d = "saturated-", c = function(b) return color(b.r*b.r/255, b.g*b.g/255, b.b*b.b/255) end }, } -- Generate subdomains. for a, b in pairs(colors1) do for c, d in ipairs (domains) do colors2[d.d .. a] = d.c(b) table.insert(_colors, {n=d.d..a,c=colors2[d.d..a]}) end end -- Generate hues for i = 0, 360 do --local x = 60 -- 360 / 6 local r, g, b = 0, 0, 0 if i <= 60 then -- 1 * x (0 < i <= 60) r = 255 g = (i/60)*255 b = 0 elseif i <= 120 then -- 2 * x r = 255 - (i-60)/60 * 255 g = 255 b = 0 elseif i <= 180 then -- 3 * x r = 0 g = 255 b = ((i-120)/60)*255 elseif i <= 240 then -- 4 * x r = 0 g = 255 - (i-180)/60 * 255 b = 255 elseif i <= 300 then -- 5 * x r = ((i-240)/60)*255 g = 0 b = 255 else--if i <= 360 then-- 6 * x r = 255 g = 0 b = 255 - (i-300)/60 * 255 end local m = "hue-" if #(""..i) == 1 then m = m .. "00" elseif #(""..i) == 2 then m = m .. "0" end m = m .. i table.insert(_colors, {n=m, c=color(r, g, b)}) end -- Export for a, b in pairs(colors2) do colors[a]=b end -- Sort alphabetically. table.sort(_colors, function(a, b) return a.n < b.n end) end -- Initialise --[[ Hex() -> color() ]] Hex = function(l, alpha) if not (type(l) == "string") then assert(false, "bad argument #1 to 'Hex' (string expected, got ".. type(l) ..")") end if #l == 6 then return Color(tonumber(l, 16)) elseif #l == 3 then l = string.rep(string.sub(l, 1, 1), 2) + string.rep(string.sub(l, 2, 2), 2) + string.rep(string.sub(l, 3, 3), 2) elseif #l == 2 then l = string.rep(l, 3) elseif #l == 1 then l = string.rep(l, 6) end return Color(tonumber(l, 16), alpha) end --[[ Hue() -> color() ]] Hue = function(val, alpha) local r, g, b = 0, 0, 0 if val > 360 then val = val - math.floor(val / 360) * 360 elseif val < 0 then val = val + math.floor(val / 360) * 360 end if val <= 60 then r = 255 g = (val/60)*255 b = 0 elseif val <= 120 then r = 255 - (val-60)/60 * 255 g = 255 b = 0 elseif val <= 180 then r = 0 g = 255 b = ((val-120)/60)*255 elseif val <= 240 then r = 0 g = 255 - (val-180)/60 * 255 b = 255 elseif val <= 300 then r = ((val-240)/60)*255 g = 0 b = 255 else r = 255 g = 0 b = 255 - (val-300)/60 * 255 end return color(r, g, b, alpha) end --[[ Color(col, alpha) -> color() ]] Color = function(s, alpha) local c = color(0, 255) -- Define Color if type(s) == "string" then s = string.lower(s) if s == "random" then c = RandomColor() elseif s == "transparent" then return color(0, 0) elseif (s == "random-grey") or (s == "random-gray") then c = color(math.random(255)) elseif string.sub(s, 1, 4) == "svg-" then for a, b in pairs(_colors.svg) do if string.lower(a) == string.sub(s, 5, #s) then c = b end end elseif string.sub(s, 1, 4) == "x11-" then for a, b in pairs(_colors.x11) do if string.lower(a) == string.sub(s, 5, #s) then c = b end end elseif string.sub(s, 1, 4) == "hue-" then local v = tonumber(string.sub(s, 5, #s)) c = Hue(v, a) elseif colors[s] then c = colors[s] elseif string.sub(s, 1, 1) == "#" and #s > 1 then c = Hex(string.sub(s, 2, #s), alpha) end elseif type(s) == "table" then local methods = { { name = "origin", f = function(q) return Color(q) end }, { name = "shade", f = function(q) if q == "light" then return c:mix(color(255, 255), 0.5) elseif q == "dark" then return c:mix(color(0, 255), 0.5) elseif q == "middle" then return c:mix(color(127, 255), 0.5) elseif q == "slightly-dark" then return c:mix(color(65, 255), 0.5) elseif q == "slightly-light" then return c:mix(color(190, 255), 0.5) elseif q == "redish" then return c:mix(color(255, 0, 0), 0.6) elseif q == "greenish" then return c:mix(color(0, 255, 0), 0.6) elseif q == "blueish" then return c:mix(color(0, 0, 255), 0.6) elseif q == "slightly-redish" then return c:mix(color(255, 0, 0), 0.7) elseif q == "slightly-greenish" then return c:mix(color(0, 255, 0), 0.7) elseif q == "slightly-blueish" then return c:mix(color(0, 0, 255), 0.7) elseif q == "saturated" then return color(c.r*c.r/255, c.g*c.g/255, c.b*c.b/255) end end }, { name = "desaturate", f = function(q) if q == "avg" then return color((c.r+c.g+c.b)/3, 255) elseif q == "hsv" then return color(math.max(c.r, c.g, c.b), 255) elseif q == "hsl" then return color((math.max(c.r, c.g, c.b) + math.min(c.r, c.g, c.b))*.5, 255) elseif q == "lum" then return color(c.r*.22 + c.g*.72 + c.b*.06, 255) elseif q == "red" then return color(c.r, 255) elseif q == "green" then return color(c.g, 255) elseif q == "blue" then return color(c.b, 255) end end }, { name = "invert", f = function(q) if q then return color(255-c.r, 255-c.g, 255-c.b, 255) end end }, { name = "filter", f = function(q) local m = c if q.r == false then m.r = 0 end if q.g == false then m.g = 0 end if q.b == false then m.b = 0 end return m end }, { name = "transparency", f = function(q) return color(c.r, c.g, c.b, q) end }, } for d, e in ipairs(methods) do for a, b in pairs(s) do if a == e.name then c = e.f(b) or c end end end elseif type(s) == "number" then local b = s%256 local g = ((s - b)/256)%256 local r = ((s - g - b)/256^2) c = color(r, g, b) elseif type(s) == "userdata" then -- s is already a color c = s elseif type(s) == "nil" then --if s then return RandomColor() --end else assert(false, "bad argument #1 to 'Color' (string expected, got ".. type(s) ..")") end -- Set transparency if type(alpha) == "number" then c.a = alpha elseif type(alpha) == "string" then local m = { ["slightly-opaque"] = 225, ["slightly-visible"] = 50 } c.a = m[alpha] elseif type(alpha) == "boolean" then if alpha then c.a = 255 else c.a = 0 end elseif type(s) == "table" then elseif alpha == nil then -- ignore else assert(false, "bad argument #2 to 'Color' (number expected, got ".. type(alpha) ..")") end return c end --[[ Colors(col1, col2, ) -> color() ]] Colors = function(c1, c2, mode) local modes = { ["dif"] = function() return color(math.abs(c1.r-c2.r), math.abs(c1.g-c2.g), math.abs(c1.b-c2.b)) end, ["avg"] = function() return color((c1.r+c2.r)/2, (c1.g+c2.g)/2, (c1.b+c2.b)/2) end, ["min"] = function() return color(math.min(c1.r, c2.r), math.min(c1.g, c2.g), math.min(c1.b, c2.b)) end, ["max"] = function() return color(math.max(c1.r, c2.r), math.max(c1.g, c2.g), math.max(c1.b, c2.b)) end, ["sqrt"] = function() return color(math.sqrt(c1.r^2 + c2.r^2)/math.sqrt(2), math.sqrt(c1.g^2 + c2.g^2)/math.sqrt(2), math.sqrt(c1.b^2 + c2.b^2)/math.sqrt(2) ) end, ["multiply"] = function() return color(c1.r*c2.r/255, c1.g*c2.g/255, c1.b*c2.b/255) end, ["screen"] = function() return color(255-(255-c1.r)*(255-c2.r)/255, 255-(255-c1.g)*(255-c2.g)/255, 255-(255-c1.b)*(255-c2.b)/255 ) end, } return modes[string.lower(mode)]() end -- Fast access implementations function Fill(s, a) fill(Color(s, a)) end function Stroke(s, a) stroke(Color(s, a)) end function Tint(s, a) tint(Color(s, a)) end function RandomColor(a) return color(math.random(255), math.random(255), math.random(255), a or 255) end --# Main -- colors1 function setup() displayMode(FULLSCREEN) parameter.text("SEARCH", "", search) --parameter.watch("1/DeltaTime") scrollY = 0 scrollYAcc = 0 scrollYAccMax = 100 scrollYAccMin = -100 touching = false touchSelected = -1 infoState = 1 infoVisibility = 20 credits = getCredits() COLORS = _colors local __different = {} for a, b in pairs(colors) do local unique = true for c, d in ipairs(__different) do if d.r == b.r and d.g == b.g and d.b == b.b then unique = false end end if unique then table.insert(__different, b) end end print("There are " .. #__different .. " unique colors on the 'colors' thread.") __different = {} for a, b in ipairs(_colors) do local unique = true for c, d in ipairs(__different) do if d.r == b.c.r and d.g == b.c.g and d.b == b.c.b then unique = false end end if unique then table.insert(__different, b.c) end end print("There are " .. #__different .. " unique colors on the '_colors' thread.") end function getCredits() local m = image(1024, 1024) -- Generate Credits setContext(m) Fill("dark-red", 255) fontSize(100) font("MarkerFelt-Wide") text("Colors v5", 512, 512) Fill("dark-rosa", 255) fontSize(50) font("Noteworthy-Light") text("Created by Anatoly.", 512, 412) -- Generate Blur local n = image(1024, 1024) local _n = mesh() _n.texture = m _n.shader = shader("Filters:Blur") _n.shader.conPixel = vec2(1/1024,1/1024) _n.shader.conWeight = 1/5 __n = _n:addRect(0, 0, 0, 0) setContext(n) sprite(m, 512, 512, 1024, 1024) tint(255, 100) _n:setRect(__n, 512, 512, 1024, 1024) _n:draw() -- Reset setContext() return n end function search(h) local function s(str, match) return string.find(str, match:gsub("-", "%%-")) end c = {} for a, b in ipairs(_colors) do c[a]=b end if #h > 0 then r = 0 for v = 1, #c do if not s(c[v - r].n, h) then table.remove(c, v - r) r = r + 1 elseif v > #c then break end end end COLORS = c end function showInfo() infoState = 1 end function hideInfo() infoState = 2 end function draw() displayRows = math.floor(HEIGHT/50)+3 scrollY = scrollY + scrollYAcc if scrollYAcc < 1.5 and not touching then scrollYAcc = scrollYAcc + .05 elseif touching then scrollYAcc = scrollYAcc * .8 end if scrollYAcc > scrollYAccMax then scrollYAcc = scrollYAccMax elseif scrollYAcc < scrollYAccMin then scrollYAcc = scrollYAccMin end if scrollY > #COLORS * 50 + 100 then scrollY = -HEIGHT scrollYAcc = 2 elseif scrollY < -HEIGHT then scrollY = -HEIGHT scrollYAcc = 0 showInfo() end if scrollY > 100-HEIGHT then hideInfo() end if infoState == 1 and infoVisibility < 20 then infoVisibility = infoVisibility + 1 elseif infoState == 2 and infoVisibility > 0 and (ElapsedTime > 4 or touching) then infoVisibility = infoVisibility - 1 end background(0) resetStyle() for a, b in ipairs(COLORS) do -- IGNORE IF OUTSIDE OF RANGE if (scrollY - 50 * a < 50 and HEIGHT - 50 * a + scrollY > -50) and b.c then -- BG strokeWidth(40) Stroke(b.c) if touchSelected == a then stroke(20) end lineCapMode(ROUND) line(50, HEIGHT - 50 * a + scrollY, WIDTH-75, HEIGHT - 50 * a + scrollY) -- TEXT strokeWidth(0) fill(0) if (b.c.r <= 50 and b.c.g <= 50 and b.c.b <= 50) then fill(255) end fontSize(30) font("CourierNewPS-BoldMT") text(b.n, WIDTH*.5, HEIGHT - 50 * a + scrollY) -- COMPARISERS for d, e in ipairs({ "white", "white-50", "black", "red", "yellow", "green", "cyan", "blue", "magenta" }) do Fill(e) ellipse(50 + (d-1) * 15, HEIGHT - 50 * a + scrollY, 10) end -- INDEX local w, _ = textSize("#" .. a) --[[Fill{ origin = b.c, --invert = true, }]] Fill("white") --[[if Color{origin = b.c, desaturate = "avg"}.r > 150 then Fill("black") end]] text("#" .. a, WIDTH-85-w*.5, HEIGHT - 50 * a + scrollY) end end local _c = color(stroke()) local heightTotal = 50 * #COLORS Stroke("white-10") strokeWidth(25) lineCapMode(SQUARE) line(WIDTH-25, 0, WIDTH-25, HEIGHT) fill(_c) strokeWidth(0) ellipse(WIDTH-25, 25 + (HEIGHT-50)*(scrollY/heightTotal), 20) if infoVisibility > 0 then tint(255, 255 * (infoVisibility / 20)) spriteMode(CENTER) sprite(credits, WIDTH*.5, HEIGHT*.5) end end function touched(t) local heightTotal = 50 * #COLORS -- t.y = 25 + (HEIGHT-50)*(scrollY/heightTotal) -- (t.y - 25) * heightTotal = (HEIGHT-50)*scrollY -- (t.y - 25) * heightTotal / (HEIGHT-50) = scrollY -- scrollY = (t.y - 25) * heightTotal / (HEIGHT-50) if t.state == BEGAN then if t.x < WIDTH - 25 * 1.5 then touching = true elseif t.x > WIDTH - 25 * 1.5 then scrollY = (t.y - 25) * heightTotal / (HEIGHT-50) end elseif t.state == MOVING then if t.x < WIDTH - 25 * 1.5 and touching then scrollYAcc = scrollYAcc + t.deltaY *.2 elseif t.x > WIDTH - 25 * 1.5 then scrollY = (t.y - 25) * heightTotal / (HEIGHT-50) end else touching = false end end