Anatoly03

Colors v7b

Nov 10th, 2019
227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 36.67 KB | None | 0 0
  1.  
  2. --[[
  3.  
  4. Name:        Colors
  5. Author:      Anatoly
  6. License:     ISC
  7. Description: Colors is a library, that manipulates colors.
  8. Thread:      https://codea.io/talk/discussion/10043/colors
  9. Release:     7
  10.  
  11. ]]
  12.  
  13. colors = {}
  14.  
  15. do
  16.    
  17.     local colors1 = {}
  18.    
  19.     -- Origins
  20.     colors1["red"] = color(255, 0, 0, 255)
  21.     colors1["orangered"] = color(255, 80, 0, 255)
  22.     colors1["orange"] = color(255, 150, 0, 255)
  23.     colors1["brown"] = color(200, 115, 45, 255)
  24.     colors1["darkbrown"] = color(115, 75, 40, 255)
  25.     colors1["strawberry-red"] = color(223, 85, 111, 255)
  26.     colors1["yellow"] = color(255, 255, 0, 255)
  27.     colors1["gold"] = color(225, 180, 60, 255)
  28.     colors1["bronze"] = color(190, 155, 90, 255)
  29.     colors1["forestgreen"] = color(0, 155, 0, 255)
  30.     colors1["middlegreen"] = color(150, 155, 0, 255)
  31.     colors1["green"] = color(0, 255, 0, 255)
  32.     colors1["grassgreen"] = color(150, 255, 0, 255)
  33.     colors1["turquoise"] = color(0, 255, 150, 255)
  34.     colors1["neon-green"] = color(210, 255, 0, 255)
  35.     colors1["blue"] = color(0, 0, 255, 255)
  36.     colors1["skyblue"] = color(0, 150, 255, 255)
  37.     colors1["seablue"] = color(50, 200, 255)
  38.     colors1["diamondblue"] = color(95, 170, 225, 255)
  39.     colors1["cyan"] = color(0, 255, 255, 255)
  40.     colors1["silver"] = color(180, 210, 210, 255)
  41.     colors1["cold-white"] = color(192, 212, 225, 255)
  42.     colors1["warm-white"] = color(228, 223, 207, 255)
  43.     colors1["purple"] = color(160, 0, 255, 255)
  44.     colors1["rosa"] = color(255, 0, 150, 255)
  45.     colors1["magenta"] = color(255, 0, 255, 255)
  46.     colors1["pink"] = color(255, 150, 255, 255)
  47.     colors1["violet"] = color(125, 0, 255, 255)
  48.     colors1["darkviolet"] = color(150, 25, 120, 255)
  49.    
  50.     -- SVG, X11
  51.     -- Author: Andrew Stacey, adopted by Anatoly
  52.     -- Website: http://www.math.ntnu.no/~stacey/HowDidIDoThat/iPad/Codea.html
  53.     -- Source: https://github.com/loopspace/Codea-Library-Base/blob/master/ColourExt.lua
  54.     -- Licence: CC0 (http://wiki.creativecommons.org/CC0)
  55.    
  56.     -- SVG
  57.    
  58.     local schema = {}
  59.    
  60.     schema.svg = {}
  61.     schema.svg.AliceBlue = color(239,247,255,255)
  62.     schema.svg.AntiqueWhite = color(249,234,215,255)
  63.     schema.svg.Aqua = color(0,255,255,255)
  64.     schema.svg.Aquamarine = color(126,255,211,255)
  65.     schema.svg.Azure = color(239,255,255,255)
  66.     schema.svg.Beige = color(244,244,220,255)
  67.     schema.svg.Bisque = color(255,227,196,255)
  68.     schema.svg.Black = color(0,0,0,255)
  69.     schema.svg.BlanchedAlmond = color(255,234,205,255)
  70.     schema.svg.Blue = color(0,0,255,255)
  71.     schema.svg.BlueViolet = color(137,43,226,255)
  72.     schema.svg.Brown = color(165,42,42,255)
  73.     schema.svg.BurlyWood = color(221,183,135,255)
  74.     schema.svg.CadetBlue = color(94,158,160,255)
  75.     schema.svg.Chartreuse = color(126,255,0,255)
  76.     schema.svg.Chocolate = color(210,104,29,255)
  77.     schema.svg.Coral = color(255,126,79,255)
  78.     schema.svg.CornflowerBlue = color(99,149,237,255)
  79.     schema.svg.Cornsilk = color(255,247,220,255)
  80.     schema.svg.Crimson = color(220,20,59,255)
  81.     schema.svg.Cyan = color(0,255,255,255)
  82.     schema.svg.DarkBlue = color(0,0,138,255)
  83.     schema.svg.DarkCyan = color(0,138,138,255)
  84.     schema.svg.DarkGoldenrod = color(183,133,11,255)
  85.     schema.svg.DarkGray = color(169,169,169,255)
  86.     schema.svg.DarkGreen = color(0,99,0,255)
  87.     schema.svg.DarkGrey = color(169,169,169,255)
  88.     schema.svg.DarkKhaki = color(188,182,107,255)
  89.     schema.svg.DarkMagenta = color(138,0,138,255)
  90.     schema.svg.DarkOliveGreen = color(84,107,47,255)
  91.     schema.svg.DarkOrange = color(255,140,0,255)
  92.     schema.svg.DarkOrchid = color(183,49,204,255)
  93.     schema.svg.DarkRed = color(138,0,0,255)
  94.     schema.svg.DarkSalmon = color(232,150,122,255)
  95.     schema.svg.DarkSeaGreen = color(142,187,142,255)
  96.     schema.svg.DarkSlateBlue = color(72,61,138,255)
  97.     schema.svg.DarkSlateGray = color(47,79,79,255)
  98.     schema.svg.DarkSlateGrey = color(47,79,79,255)
  99.     schema.svg.DarkTurquoise = color(0,206,209,255)
  100.     schema.svg.DarkViolet = color(147,0,211,255)
  101.     schema.svg.DeepPink = color(255,20,146,255)
  102.     schema.svg.DeepSkyBlue = color(0,191,255,255)
  103.     schema.svg.DimGray = color(104,104,104,255)
  104.     schema.svg.DimGrey = color(104,104,104,255)
  105.     schema.svg.DodgerBlue = color(29,144,255,255)
  106.     schema.svg.FireBrick = color(177,33,33,255)
  107.     schema.svg.FloralWhite = color(255,249,239,255)
  108.     schema.svg.ForestGreen = color(33,138,33,255)
  109.     schema.svg.Fuchsia = color(255,0,255,255)
  110.     schema.svg.Gainsboro = color(220,220,220,255)
  111.     schema.svg.GhostWhite = color(247,247,255,255)
  112.     schema.svg.Gold = color(255,215,0,255)
  113.     schema.svg.Goldenrod = color(218,165,31,255)
  114.     schema.svg.Gray = color(127,127,127,255)
  115.     schema.svg.Green = color(0,127,0,255)
  116.     schema.svg.GreenYellow = color(173,255,47,255)
  117.     schema.svg.Grey = color(127,127,127,255)
  118.     schema.svg.Honeydew = color(239,255,239,255)
  119.     schema.svg.HotPink = color(255,104,179,255)
  120.     schema.svg.IndianRed = color(205,91,91,255)
  121.     schema.svg.Indigo = color(74,0,130,255)
  122.     schema.svg.Ivory = color(255,255,239,255)
  123.     schema.svg.Khaki = color(239,229,140,255)
  124.     schema.svg.Lavender = color(229,229,249,255)
  125.     schema.svg.LavenderBlush = color(255,239,244,255)
  126.     schema.svg.LawnGreen = color(124,252,0,255)
  127.     schema.svg.LemonChiffon = color(255,249,205,255)
  128.     schema.svg.LightBlue = color(173,216,229,255)
  129.     schema.svg.LightCoral = color(239,127,127,255)
  130.     schema.svg.LightCyan = color(224,255,255,255)
  131.     schema.svg.LightGoldenrod = color(237,221,130,255)
  132.     schema.svg.LightGoldenrodYellow = color(249,249,210,255)
  133.     schema.svg.LightGray = color(211,211,211,255)
  134.     schema.svg.LightGreen = color(144,237,144,255)
  135.     schema.svg.LightGrey = color(211,211,211,255)
  136.     schema.svg.LightPink = color(255,181,192,255)
  137.     schema.svg.LightSalmon = color(255,160,122,255)
  138.     schema.svg.LightSeaGreen = color(31,177,170,255)
  139.     schema.svg.LightSkyBlue = color(135,206,249,255)
  140.     schema.svg.LightSlateBlue = color(132,112,255,255)
  141.     schema.svg.LightSlateGray = color(119,135,153,255)
  142.     schema.svg.LightSlateGrey = color(119,135,153,255)
  143.     schema.svg.LightSteelBlue = color(175,196,221,255)
  144.     schema.svg.LightYellow = color(255,255,224,255)
  145.     schema.svg.Lime = color(0,255,0,255)
  146.     schema.svg.LimeGreen = color(49,205,49,255)
  147.     schema.svg.Linen = color(249,239,229,255)
  148.     schema.svg.Magenta = color(255,0,255,255)
  149.     schema.svg.Maroon = color(127,0,0,255)
  150.     schema.svg.MediumAquamarine = color(102,205,170,255)
  151.     schema.svg.MediumBlue = color(0,0,205,255)
  152.     schema.svg.MediumOrchid = color(186,84,211,255)
  153.     schema.svg.MediumPurple = color(146,112,219,255)
  154.     schema.svg.MediumSeaGreen = color(59,178,113,255)
  155.     schema.svg.MediumSlateBlue = color(123,104,237,255)
  156.     schema.svg.MediumSpringGreen = color(0,249,154,255)
  157.     schema.svg.MediumTurquoise = color(72,209,204,255)
  158.     schema.svg.MediumVioletRed = color(198,21,132,255)
  159.     schema.svg.MidnightBlue = color(24,24,112,255)
  160.     schema.svg.MintCream = color(244,255,249,255)
  161.     schema.svg.MistyRose = color(255,227,225,255)
  162.     schema.svg.Moccasin = color(255,227,181,255)
  163.     schema.svg.NavajoWhite = color(255,221,173,255)
  164.     schema.svg.Navy = color(0,0,127,255)
  165.     schema.svg.NavyBlue = color(0,0,127,255)
  166.     schema.svg.OldLace = color(252,244,229,255)
  167.     schema.svg.Olive = color(127,127,0,255)
  168.     schema.svg.OliveDrab = color(107,141,34,255)
  169.     schema.svg.Orange = color(255,165,0,255)
  170.     schema.svg.OrangeRed = color(255,68,0,255)
  171.     schema.svg.Orchid = color(218,112,214,255)
  172.     schema.svg.PaleGoldenrod = color(237,232,170,255)
  173.     schema.svg.PaleGreen = color(151,251,151,255)
  174.     schema.svg.PaleTurquoise = color(175,237,237,255)
  175.     schema.svg.PaleVioletRed = color(219,112,146,255)
  176.     schema.svg.PapayaWhip = color(255,238,212,255)
  177.     schema.svg.PeachPuff = color(255,218,184,255)
  178.     schema.svg.Peru = color(205,132,63,255)
  179.     schema.svg.Pink = color(255,191,202,255)
  180.     schema.svg.Plum = color(221,160,221,255)
  181.     schema.svg.PowderBlue = color(175,224,229,255)
  182.     schema.svg.Purple = color(127,0,127,255)
  183.     schema.svg.Red = color(255,0,0,255)
  184.     schema.svg.RosyBrown = color(187,142,142,255)
  185.     schema.svg.RoyalBlue = color(65,104,225,255)
  186.     schema.svg.SaddleBrown = color(138,68,19,255)
  187.     schema.svg.Salmon = color(249,127,114,255)
  188.     schema.svg.SandyBrown = color(243,164,95,255)
  189.     schema.svg.SeaGreen = color(45,138,86,255)
  190.     schema.svg.Seashell = color(255,244,237,255)
  191.     schema.svg.Sienna = color(160,81,44,255)
  192.     schema.svg.Silver = color(191,191,191,255)
  193.     schema.svg.SkyBlue = color(135,206,234,255)
  194.     schema.svg.SlateBlue = color(105,89,205,255)
  195.     schema.svg.SlateGray = color(112,127,144,255)
  196.     schema.svg.SlateGrey = color(112,127,144,255)
  197.     schema.svg.Snow = color(255,249,249,255)
  198.     schema.svg.SpringGreen = color(0,255,126,255)
  199.     schema.svg.SteelBlue = color(70,130,179,255)
  200.     schema.svg.Tan = color(210,179,140,255)
  201.     schema.svg.Teal = color(0,127,127,255)
  202.     schema.svg.Thistle = color(216,191,216,255)
  203.     schema.svg.Tomato = color(255,99,71,255)
  204.     schema.svg.Turquoise = color(63,224,207,255)
  205.     schema.svg.Violet = color(237,130,237,255)
  206.     schema.svg.VioletRed = color(208,31,144,255)
  207.     schema.svg.Wheat = color(244,221,178,255)
  208.     schema.svg.White = color(255,255,255,255)
  209.     schema.svg.WhiteSmoke = color(244,244,244,255)
  210.     schema.svg.Yellow = color(255,255,0,255)
  211.     schema.svg.YellowGreen = color(154,205,49,255)
  212.    
  213.     for a, b in pairs(schema.svg) do
  214.         colors["svg-" .. string.lower(a)] = b
  215.     end
  216.    
  217.     -- X11
  218. "x11-" .. string.lower(a)] = b
  219.     end
  220.    
  221.     -- Generator
  222.    
  223.     local domains = {
  224.     { -- The default color
  225.     d = "", -- Subdomain
  226.     w = true, -- Grayscale generate subdomains?
  227.     c = function(b) return b end -- Returns color
  228.     },
  229.     {
  230.     d = "slightly-dark-",
  231.     w = false,
  232.     c = function(b) return b:mix(color(65, 255), 0.5) end
  233.     },
  234.     {
  235.     d = "dark-",
  236.     w = false,
  237.     c = function(b) return b:mix(color(0, 255), 0.5) end
  238.     },
  239.     {
  240.     d = "slightly-light-",
  241.     w = false,
  242.     c = function(b) return b:mix(color(190, 255), 0.5) end
  243.     },
  244.     {
  245.     d = "light-",
  246.     w = false,
  247.     c = function(b) return b:mix(color(255, 255), 0.5) end
  248.     },
  249.     {
  250.     d = "middle-",
  251.     w = false,
  252.     c = function(b) return b:mix(color(127, 255), 0.5) end
  253.     },
  254.     {
  255.     d = "reddish-",
  256.     w = true,
  257.     c = function(b) return b:mix(color(255, 0, 0, 255), 0.6) end
  258.     },
  259.     {
  260.     d = "greenish-",
  261.     w = true,
  262.     c = function(b) return b:mix(color(0, 255, 0, 255), 0.6) end
  263.     },
  264.     {
  265.     d = "blueish-",
  266.     w = true,
  267.     c = function(b) return b:mix(color(0, 0, 255, 255), 0.6) end
  268.     },
  269.     {
  270.     d = "cyanish-",
  271.     w = true,
  272.     c = function(b) return b:mix(color(0, 255, 255, 255), 0.6) end
  273.     },
  274.     {
  275.     d = "magentish-",
  276.     w = true,
  277.     c = function(b) return b:mix(color(255, 0, 255, 255), 0.6) end
  278.     },
  279.     {
  280.     d = "yellowish-",
  281.     w = true,
  282.     c = function(b) return b:mix(color(255, 255, 0, 255), 0.6) end
  283.     },
  284.     {
  285.     d = "slightly-reddish-",
  286.     w = true,
  287.     c = function(b) return b:mix(color(255, 0, 0, 255), 0.7) end
  288.     },
  289.     {
  290.     d = "slightly-greenish-",
  291.     w = true,
  292.     c = function(b) return b:mix(color(0, 255, 0, 255), 0.7) end
  293.     },
  294.     {
  295.     d = "slightly-blueish-",
  296.     w = true,
  297.     c = function(b) return b:mix(color(0, 0, 255, 255), 0.7) end
  298.     },
  299.     {
  300.     d = "reduced-",
  301.     w = false,
  302.     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
  303.     },
  304.     {
  305.     d = "saturated-",
  306.     w = false,
  307.     c = function(b) return color(b.r*b.r/255, b.g*b.g/255, b.b*b.b/255) end
  308.     },
  309.     {
  310.     d = "over-saturated-",
  311.     w = false,
  312.     c = function(b) return color(b.r*b.r*b.r/65025, b.g*b.g*b.g/65025, b.b*b.b*b.b/65025) end
  313.     },
  314.     }
  315.    
  316.     -- Generate subdomains.
  317.     for a, b in pairs(colors1) do
  318.         for c, d in ipairs (domains) do
  319.             colors[d.d .. a] = d.c(b)
  320.         end
  321.        
  322.        
  323.         for i = 1, 9 do
  324.             colors[a .. "-" .. i .. "0"] = b:mix(color(0, 255), i/10)
  325.         end
  326.     end
  327.    
  328.     -- Grayscale
  329.     for a, b in ipairs (domains) do
  330.         if b.w then
  331.             colors[b.d .. "white"] = b.c(color(255, 255))
  332.             colors[b.d .. "black"] = b.c(color(0, 255))
  333.             colors[b.d .. "grey"] = b.c(color(128, 255))
  334.             colors[b.d .. "gray"] = b.c(color(128, 255))
  335.            
  336.             for i = 1, 9 do
  337.                 colors[b.d .. "white-" .. i .. "0"] = b.c(color(25.5 * i, 255))
  338.             end
  339.         end
  340.     end
  341. end
  342.  
  343. -- Initialise
  344.  
  345. --[[
  346.  
  347. Hex() -> Color() -> color()
  348.  
  349. ]]
  350.  
  351. Hex = function(l, alpha)
  352.     if not (type(l) == "string") then
  353.         assert(false, "bad argument #1 to 'Hex' (string expected, got ".. type(l) ..")")
  354.     end
  355.    
  356.     if #l == 6 then
  357.         return Color(tonumber(l, 16))
  358.     elseif #l == 3 then
  359.         l = string.rep(string.sub(l, 1, 1), 2) +
  360.         string.rep(string.sub(l, 2, 2), 2) +
  361.         string.rep(string.sub(l, 3, 3), 2)
  362.     elseif #l == 2 then
  363.         l = string.rep(l, 3)
  364.     elseif #l == 1 then
  365.         l = string.rep(l, 6)
  366.     end
  367.    
  368.     return Color(tonumber(l, 16), alpha)
  369. end
  370.  
  371. --[[
  372.  
  373. Hue() -> color()
  374.  
  375. ]]
  376.  
  377. Hue = function(val, alpha)
  378.     local r, g, b = 0, 0, 0
  379.    
  380.     if val > 360 then
  381.         val = val - math.floor(val / 360) * 360
  382.     elseif val < 0 then
  383.         val = val + math.floor(val / 360) * 360
  384.     end
  385.    
  386.     val = math.floor(val)
  387.    
  388.     if val <= 60 then
  389.         r = 255
  390.         g = (val/60)*255
  391.         b = 0
  392.     elseif val <= 120 then
  393.         r = 255 - (val-60)/60 * 255
  394.         g = 255
  395.         b = 0
  396.     elseif val <= 180 then
  397.         r = 0
  398.         g = 255
  399.         b = ((val-120)/60)*255
  400.     elseif val <= 240 then
  401.         r = 0
  402.         g = 255 - (val-180)/60 * 255
  403.         b = 255
  404.     elseif val <= 300 then
  405.         r = ((val-240)/60)*255
  406.         g = 0
  407.         b = 255
  408.     else
  409.         r = 255
  410.         g = 0
  411.         b = 255 - (val-300)/60 * 255
  412.     end
  413.    
  414.     return color(r, g, b, alpha or 255)
  415. end
  416.  
  417. --[[
  418.  
  419. Color(col, alpha) -> ... -> color()
  420.  
  421. ]]
  422.  
  423. Color = function(s, alpha)
  424.     local c = color(0, 255)
  425.    
  426.     -- Define Color
  427.     if type(s) == "string" then
  428.         s = string.lower(s)
  429.         if s == "random" then
  430.             c = RandomColor()
  431.         elseif s == "transparent" then
  432.             return color(0, 0)
  433.         elseif (s == "random-grey") or (s == "random-gray") then
  434.             c = color(math.random(255))
  435.         elseif string.sub(s, 1, 4) == "hue-" then
  436.             c = Hue(tonumber(string.sub(s, 5, #s)), a)
  437.         elseif colors[s] then
  438.             c = colors[s]
  439.         elseif string.sub(s, 1, 1) == "#" and #s > 1 then
  440.             c = Hex(string.sub(s, 2, #s), alpha)
  441.         end
  442.     elseif type(s) == "table" then
  443.         local methods = {
  444.         {
  445.         name = "origin",
  446.         f = function(q)
  447.             return Color(q)
  448.         end
  449.         },
  450.         {
  451.         name = "shade",
  452.         f = function(q)
  453.             for a, b in pairs{
  454.             -- Visibility
  455.             ["light"] = function()
  456.                 return c:mix(color(255, 255), 0.5)
  457.             end,
  458.             ["dark"] = function()
  459.                 return c:mix(color(0, 255), 0.5)
  460.             end,
  461.             ["slightly-dark"] = function()
  462.                 return c:mix(color(65, 255), 0.5)
  463.             end,
  464.             ["slightly-light"] = function()
  465.                 return c:mix(color(190, 255), 0.5)
  466.             end,
  467.             ["middle"] = function()
  468.                 return c:mix(color(127, 255), 0.5)
  469.             end,
  470.             ["saturated"] = function()
  471.                 return color(c.r*c.r/255, c.g*c.g/255, c.b*c.b/255)
  472.             end,
  473.            
  474.             -- Shading
  475.             ["reddish"] = function()
  476.                 return c:mix(color(255, 0, 0), 0.6)
  477.             end,
  478.             ["greenish"] = function()
  479.                 return c:mix(color(0, 255, 0), 0.6)
  480.             end,
  481.             ["blueish"] = function()
  482.                 return c:mix(color(0, 0, 255), 0.6)
  483.             end,
  484.             ["slightly-reddish"] = function()
  485.                 return c:mix(color(255, 0, 0), 0.7)
  486.             end,
  487.             ["slightly-greenish"] = function()
  488.                 return c:mix(color(0, 255, 0), 0.7)
  489.             end,
  490.             ["slightly-blueish"] = function()
  491.                 return c:mix(color(0, 0, 255), 0.7)
  492.             end,
  493.             } do
  494.                 if q == a then
  495.                     return b()
  496.                 end
  497.             end
  498.            
  499.         end
  500.         },
  501.         {
  502.         name = "desaturate",
  503.         f = function(q)
  504.             for a, b in pairs{
  505.             ["avg"] = function()
  506.                 return color((c.r+c.g+c.b)/3, 255)
  507.             end,
  508.             ["hsv"] = function()
  509.                 return color(math.max(c.r, c.g, c.b), 255)
  510.             end,
  511.             ["hsl"] = function()
  512.                 return color((math.max(c.r, c.g, c.b) + math.min(c.r, c.g, c.b))*.5, 255)
  513.             end,
  514.             ["lum"] = function()
  515.                 return color(c.r*.22 + c.g*.72 + c.b*.06, 255)
  516.             end,
  517.             ["red"] = function()
  518.                 return color(c.r, 255)
  519.             end,
  520.             ["green"] = function()
  521.                 return color(c.g, 255)
  522.             end,
  523.             ["blue"] = function()
  524.                 return color(c.b, 255)
  525.             end,
  526.             } do
  527.                 if q == a then
  528.                     return b()
  529.                 end
  530.             end
  531.         end
  532.         },
  533.         {
  534.         name = "invert",
  535.         f = function(q)
  536.             if q then
  537.                 return color(255-c.r, 255-c.g, 255-c.b, 255)
  538.             end
  539.         end
  540.         },
  541.         {
  542.         name = "filter",
  543.         f = function(q)
  544.             local m = c
  545.             if q.r == false then
  546.                 m.r = 0
  547.             end if q.g == false then
  548.                 m.g = 0
  549.             end if q.b == false then
  550.                 m.b = 0
  551.             end
  552.             return m
  553.         end
  554.         },
  555.         {
  556.         name = "alpha",
  557.         f = function(q)
  558.             return color(c.r, c.g, c.b, q)
  559.         end
  560.         },
  561.         }
  562.        
  563.         for d, e in ipairs(methods) do
  564.             for a, b in pairs(s) do
  565.                 if a == e.name then
  566.                     c = e.f(b) or c
  567.                 end
  568.             end
  569.         end
  570.     elseif type(s) == "number" then
  571.         local b = s%256
  572.         local g = ((s - b)/256)%256
  573.         local r = ((s - g - b)/256^2)
  574.        
  575.         c = color(r, g, b)
  576.     elseif type(s) == "userdata" then -- s is already a color
  577.         c = s
  578.     elseif type(s) == "nil" then
  579.         --if s then
  580.         return RandomColor()
  581.         --end
  582.     else
  583.         assert(false, "bad argument #1 to 'Color' (string expected, got ".. type(s) ..")")
  584.     end
  585.    
  586.     -- Set transparency
  587.     if type(alpha) == "number" then
  588.         c.a = alpha
  589.     elseif type(alpha) == "string" then
  590.         local m = {
  591.         ["slightly-opaque"] = 225,
  592.         ["slightly-visible"] = 50
  593.         }
  594.         c.a = m[alpha]
  595.     elseif type(alpha) == "boolean" then
  596.         if alpha then
  597.             c.a = 255
  598.         else
  599.             c.a = 0
  600.         end
  601.     elseif type(s) == "table" then
  602.     elseif alpha == nil then
  603.         -- ignore
  604.     else
  605.         assert(false, "bad argument #2 to 'Color' (number expected, got ".. type(alpha) ..")")
  606.     end
  607.    
  608.     return c
  609. end
  610.  
  611. --[[
  612.  
  613. Colors(col1, col2, mode) -> color()
  614.  
  615. ]]
  616.  
  617. Colors = function(c1, c2, mode)
  618.     local modes = {
  619.     ["dif"] = function()
  620.         return color(math.abs(c1.r-c2.r), math.abs(c1.g-c2.g), math.abs(c1.b-c2.b))
  621.     end,
  622.     ["avg"] = function()
  623.         return color((c1.r+c2.r)/2, (c1.g+c2.g)/2, (c1.b+c2.b)/2)
  624.     end,
  625.     ["min"] = function()
  626.         return color(math.min(c1.r, c2.r), math.min(c1.g, c2.g), math.min(c1.b, c2.b))
  627.     end,
  628.     ["max"] = function()
  629.         return color(math.max(c1.r, c2.r), math.max(c1.g, c2.g), math.max(c1.b, c2.b))
  630.     end,
  631.     ["sqrt"] = function()
  632.         return color(math.sqrt(c1.r^2 + c2.r^2)/math.sqrt(2),
  633.         math.sqrt(c1.g^2 + c2.g^2)/math.sqrt(2),
  634.         math.sqrt(c1.b^2 + c2.b^2)/math.sqrt(2)
  635.         )
  636.     end,
  637.     ["multiply"] = function()
  638.         return color(c1.r*c2.r/255, c1.g*c2.g/255, c1.b*c2.b/255)
  639.     end,
  640.     ["screen"] = function()
  641.         return color(255-(255-c1.r)*(255-c2.r)/255,
  642.         255-(255-c1.g)*(255-c2.g)/255,
  643.         255-(255-c1.b)*(255-c2.b)/255
  644.         )
  645.     end,
  646.     }
  647.    
  648.     return modes[string.lower(mode)]()
  649. end
  650.  
  651. -- Fast access implementations
  652.  
  653. Fill = function(s, a) fill(Color(s, a)) end
  654. Stroke = function(s, a) stroke(Color(s, a)) end
  655. Tint = function(s, a) tint(Color(s, a)) end
  656. Background = function(s, a) background(Color(s, a)) end
  657. RandomColor = function(a) return color(math.random(255), math.random(255), math.random(255), a or 255) end
Advertisement
Add Comment
Please, Sign In to add comment