Mercurial > wow > reaction
view classes/ReAction_ColorScheme.lua @ 8:c05fd3e18b4f
Version 0.31
author | Flick <flickerstreak@gmail.com> |
---|---|
date | Tue, 20 Mar 2007 21:33:59 +0000 |
parents | f920db5fc6b1 |
children |
line wrap: on
line source
-- ReAction.IColorScheme is an interface to describe color schemes for hotkey labels and -- icon/border colorization, depending on the current state. -- local AceOO = AceLibrary("AceOO-2.0") ReAction.IColorScheme = AceOO.Interface { GetHotkeyColor = "function", -- r,g,b,a = GetHotkeyColor( isUsable, notEnoughMana, outOfRange, [bindingText] ) GetIconColor = "function", -- r,g,b,a = GetIconColor( isUsable, notEnoughMana, outOfRange ) GetBorderColor = "function", -- r,g,b,a = GetBorderColor( isUsable, notEnoughMana, outOfRange ) } -- ReAction.DefaultColorScheme is a Mixin implementation of ReAction.IColorScheme which -- supports the standard Blizzard colorization plus optional hotkey modifier-driven colorization -- and colorizing icons red (in addition to hotkeys) when out of range. -- -- DefaultColorScheme makes use of self.config as follows: -- -- self.config = { -- keyBindColorCode = true/false, -- color-code keybindings based on modifier key -- } ReAction.DefaultColorScheme = AceOO.Mixin { "GetHotkeyColor", "GetModifiedHotkeyColor", -- returns the default modified color (if configured) "GetIconColor", "GetBorderColor" } -- private variables local hotKeyDefaultColor = { r=1.00, g=1.00, b=1.00, a=1.00 } -- white local hotKeyDisabledColor = { r=0.60, g=0.60, b=0.60, a=1.00 } -- 60% gray local hotKeyOutOfRangeColor = { r=1.00, g=0.20, b=0.20, a=1.00 } -- red local actionUsableColor = { r=1.00, g=1.00, b=1.00, a=1.00 } -- white local actionNotUsableColor = { r=0.40, g=0.40, b=0.40, a=1.00 } -- 40% gray local actionNotEnoughManaColor = { r=0.20, g=0.20, b=0.70, a=1.00 } -- medium blue local actionOutOfRangeColor = { r=1.00, g=0.20, b=0.20, a=1.00 } -- red local hotKeyModifierColors = { S = { r=0.60, g=0.60, b=1.00, a=1.00 }, -- shift (blue) C = { r=1.00, g=0.82, b=0.00, a=1.00 }, -- ctrl (gold) A = { r=0.10, g=1.00, b=0.10, a=1.00 }, -- alt (green) M = { r=0.90, g=0.30, b=1.00, a=1.00 }, -- mouse (purple) } -- build list of modifier keys (as a string) from table above local hotKeyModifiers = "" for k, _ in pairs(hotKeyModifierColors) do hotKeyModifiers = hotKeyModifiers..k end -- private functions -- extract and return color fields from a table, to be fed into SetVertexColor()/SetTextColor() local function tcolor(c) return c.r, c.g, c.b, c.a end -- mixin methods local RADCS = ReAction.DefaultColorScheme function RADCS:GetHotkeyColor( isUsable, notEnoughMana, outOfRange, bindingTxt ) if isUsable or notEnoughMana then return tcolor(self:GetModifiedHotkeyColor(bindingTxt)) elseif outOfRange then return tcolor(hotKeyOutOfRangeColor) else return tcolor(hotKeyDisabledColor) end end function RADCS:GetModifiedHotkeyColor(txt) local c = hotKeyDefaultColor if txt and self.config.keyBindColorCode then local modKey = string.match( txt or "", "(["..hotKeyModifiers.."])%-") c = modKey and hotKeyModifierColors[modKey] or c end return c end function RADCS:GetIconColor( isUsable, notEnoughMana, outOfRange ) if isUsable then return tcolor(actionUsableColor) elseif notEnoughMana then return tcolor(actionNotEnoughManaColor) elseif outOfRange then return tcolor(actionOutOfRangeColor) else return tcolor(actionNotUsableColor) end end function RADCS:GetBorderColor( isUsable, notEnoughMana, outOfRange ) if isUsable or notEnoughMana or outOfRange then return tcolor(actionUsableColor) else return tcolor(actionNotUsableColor) end end