view classes/ReAction_ColorScheme.lua @ 7:f920db5fc6b1

version 0.3
author Flick <flickerstreak@gmail.com>
date Tue, 20 Mar 2007 21:25:29 +0000
parents
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