vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
--[[
Name: Crayon-2.0
Revision: $Rev: 7622 $
Author(s): ckknight (ckknight@gmail.com)
Website: http://ckknight.wowinterface.com/
Documentation: http://wiki.wowace.com/index.php/Crayon-2.0
SVN: http://svn.wowace.com/root/trunk/CrayonLib/Crayon-2.0
Description: A library to provide coloring tools.
Dependencies: AceLibrary
]]

--Theondry (theondry@gmail.com) added the purple.  yell at me if it's wrong, please

local MAJOR_VERSION = "Crayon-2.0"
local MINOR_VERSION = "$Revision: 7622 $"

if not AceLibrary then error(MAJOR_VERSION .. " requires AceLibrary") end
if not AceLibrary:IsNewVersion(MAJOR_VERSION, MINOR_VERSION) then return end

local Crayon = {}

Crayon.COLOR_HEX_RED       = "ff0000"
Crayon.COLOR_HEX_ORANGE    = "ff7f00"
Crayon.COLOR_HEX_YELLOW    = "ffff00"
Crayon.COLOR_HEX_GREEN     = "00ff00"
Crayon.COLOR_HEX_WHITE     = "ffffff"
Crayon.COLOR_HEX_COPPER    = "eda55f"
Crayon.COLOR_HEX_SILVER    = "c7c7cf"
Crayon.COLOR_HEX_GOLD      = "ffd700"
Crayon.COLOR_HEX_PURPLE    = "9980CC"

function Crayon:Colorize(hexColor, text)
        return "|cff" .. tostring(hexColor or 'ffffff') .. tostring(text) .. "|r"
end
function Crayon:Red(text) return self:Colorize(self.COLOR_HEX_RED, text) end
function Crayon:Orange(text) return self:Colorize(self.COLOR_HEX_ORANGE, text) end
function Crayon:Yellow(text) return self:Colorize(self.COLOR_HEX_YELLOW, text) end
function Crayon:Green(text) return self:Colorize(self.COLOR_HEX_GREEN, text) end
function Crayon:White(text) return self:Colorize(self.COLOR_HEX_WHITE, text) end
function Crayon:Copper(text) return self:Colorize(self.COLOR_HEX_COPPER, text) end
function Crayon:Silver(text) return self:Colorize(self.COLOR_HEX_SILVER, text) end
function Crayon:Gold(text) return self:Colorize(self.COLOR_HEX_GOLD, text) end
function Crayon:Purple(text) return self:Colorize(self.COLOR_HEX_PURPLE, text) end

local inf = 1/0

function Crayon:GetThresholdColor(quality, worst, worse, normal, better, best)
        self:argCheck(quality, 2, "number")
        if quality ~= quality or quality == inf or quality == -inf then
                return 1, 1, 1
        end
        if not best then
                worst = 0
                worse = 0.25
                normal = 0.5
                better = 0.75
                best = 1
        end
        
        if worst < best then
                if (worse == better and quality == worse) or (worst == best and quality == worst) then
                        return 1, 1, 0
                elseif quality <= worst then
                        return 1, 0, 0
                elseif quality <= worse then
                        return 1, 0.5 * (quality - worst) / (worse - worst), 0
                elseif quality <= normal then
                        return 1, 0.5 + 0.5 * (quality - worse) / (normal - worse), 0
                elseif quality <= better then
                        return 1 - 0.5 * (quality - normal) / (better - normal), 1, 0
                elseif quality <= best then
                        return 0.5 - 0.5 * (quality - better) / (best - better), 1, 0
                else
                        return 0, 1, 0
                end
        else
                if (worse == better and quality == worse) or (worst == best and quality == worst) then
                        return 1, 1, 0
                elseif quality >= worst then
                        return 1, 0, 0
                elseif quality >= worse then
                        return 1, 0.5 - 0.5 * (quality - worse) / (worst - worse), 0
                elseif quality >= normal then
                        return 1, 1 - 0.5 * (quality - normal) / (worse - normal), 0
                elseif quality >= better then
                        return 0.5 + 0.5 * (quality - better) / (normal - better), 1, 0
                elseif quality >= best then
                        return 0.5 * (quality - best) / (better - best), 1, 0
                else
                        return 0, 1, 0
                end
        end
end

function Crayon:GetThresholdHexColor(quality, worst, worse, normal, better, best)
        local r, g, b = self:GetThresholdColor(quality, worst, worse, normal, better, best)
        return string.format("%02x%02x%02x", r*255, g*255, b*255)
end

function Crayon:GetThresholdColorTrivial(quality, worst, worse, normal, better, best)
        self:argCheck(quality, 2, "number")
        if quality ~= quality or quality == inf or quality == -inf then
                return 1, 1, 1
        end
        if not best then
                worst = 0
                worse = 0.25
                normal = 0.5
                better = 0.75
                best = 1
        end
        
        if worst < best then
                if worse == better and normal == worse then
                        return 1, 1, 0
                elseif quality <= worst then
                        return 1, 0, 0
                elseif quality <= worse then
                        return 1, 0.5 * (quality - worst) / (worse - worst), 0
                elseif quality <= normal then
                        return 1, 0.5 + 0.5 * (quality - worse) / (normal - worse), 0
                elseif quality <= better then
                        return 1 - (quality - normal) / (better - normal), 1, 0
                elseif quality <= best then
                        local x = 0.5 * (quality - better) / (best - better)
                        return x, 1 - x, x
                else
                        return 0.5, 0.5, 0.5
                end
        else
                if worse == better and normal == worse then
                        return 1, 1, 0
                elseif quality >= worst then
                        return 1, 0, 0
                elseif quality >= worse then
                        return 1, 0.5 - 0.5 * (quality - worse) / (worst - worse), 0
                elseif quality >= normal then
                        return 1, 1 - 0.5 * (quality - normal) / (worse - normal), 0
                elseif quality >= better then
                        return (quality - better) / (normal - better), 1, 0
                elseif quality >= best then
                        local x = 0.5 * (quality - best) / (better - best)
                        return 0.5 - x, 0.5 + x, 0.5 - x
                else
                        return 0.5, 0.5, 0.5
                end
        end
end

function Crayon:GetThresholdHexColorTrivial(quality, worst, worse, normal, better, best)
        local r, g, b = self:GetThresholdColorTrivial(quality, worst, worse, normal, better, best)
        return string.format("%02x%02x%02x", r*255, g*255, b*255)
end

AceLibrary:Register(Crayon, MAJOR_VERSION, MINOR_VERSION)
Crayon = nil