Mercurial > wow > reaction
comparison 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 |
comparison
equal
deleted
inserted
replaced
6:2da5089ab7ff | 7:f920db5fc6b1 |
---|---|
1 -- ReAction.IColorScheme is an interface to describe color schemes for hotkey labels and | |
2 -- icon/border colorization, depending on the current state. | |
3 -- | |
4 | |
5 local AceOO = AceLibrary("AceOO-2.0") | |
6 | |
7 ReAction.IColorScheme = AceOO.Interface { | |
8 GetHotkeyColor = "function", -- r,g,b,a = GetHotkeyColor( isUsable, notEnoughMana, outOfRange, [bindingText] ) | |
9 GetIconColor = "function", -- r,g,b,a = GetIconColor( isUsable, notEnoughMana, outOfRange ) | |
10 GetBorderColor = "function", -- r,g,b,a = GetBorderColor( isUsable, notEnoughMana, outOfRange ) | |
11 } | |
12 | |
13 | |
14 | |
15 -- ReAction.DefaultColorScheme is a Mixin implementation of ReAction.IColorScheme which | |
16 -- supports the standard Blizzard colorization plus optional hotkey modifier-driven colorization | |
17 -- and colorizing icons red (in addition to hotkeys) when out of range. | |
18 -- | |
19 -- DefaultColorScheme makes use of self.config as follows: | |
20 -- | |
21 -- self.config = { | |
22 -- keyBindColorCode = true/false, -- color-code keybindings based on modifier key | |
23 -- } | |
24 | |
25 | |
26 ReAction.DefaultColorScheme = AceOO.Mixin { | |
27 "GetHotkeyColor", | |
28 "GetModifiedHotkeyColor", -- returns the default modified color (if configured) | |
29 "GetIconColor", | |
30 "GetBorderColor" | |
31 } | |
32 | |
33 | |
34 -- private variables | |
35 local hotKeyDefaultColor = { r=1.00, g=1.00, b=1.00, a=1.00 } -- white | |
36 local hotKeyDisabledColor = { r=0.60, g=0.60, b=0.60, a=1.00 } -- 60% gray | |
37 local hotKeyOutOfRangeColor = { r=1.00, g=0.20, b=0.20, a=1.00 } -- red | |
38 | |
39 local actionUsableColor = { r=1.00, g=1.00, b=1.00, a=1.00 } -- white | |
40 local actionNotUsableColor = { r=0.40, g=0.40, b=0.40, a=1.00 } -- 40% gray | |
41 local actionNotEnoughManaColor = { r=0.20, g=0.20, b=0.70, a=1.00 } -- medium blue | |
42 local actionOutOfRangeColor = { r=1.00, g=0.20, b=0.20, a=1.00 } -- red | |
43 | |
44 local hotKeyModifierColors = { | |
45 S = { r=0.60, g=0.60, b=1.00, a=1.00 }, -- shift (blue) | |
46 C = { r=1.00, g=0.82, b=0.00, a=1.00 }, -- ctrl (gold) | |
47 A = { r=0.10, g=1.00, b=0.10, a=1.00 }, -- alt (green) | |
48 M = { r=0.90, g=0.30, b=1.00, a=1.00 }, -- mouse (purple) | |
49 } | |
50 | |
51 -- build list of modifier keys (as a string) from table above | |
52 local hotKeyModifiers = "" | |
53 for k, _ in pairs(hotKeyModifierColors) do | |
54 hotKeyModifiers = hotKeyModifiers..k | |
55 end | |
56 | |
57 -- private functions | |
58 -- extract and return color fields from a table, to be fed into SetVertexColor()/SetTextColor() | |
59 local function tcolor(c) | |
60 return c.r, c.g, c.b, c.a | |
61 end | |
62 | |
63 | |
64 | |
65 -- mixin methods | |
66 | |
67 local RADCS = ReAction.DefaultColorScheme | |
68 | |
69 function RADCS:GetHotkeyColor( isUsable, notEnoughMana, outOfRange, bindingTxt ) | |
70 if isUsable or notEnoughMana then | |
71 return tcolor(self:GetModifiedHotkeyColor(bindingTxt)) | |
72 elseif outOfRange then | |
73 return tcolor(hotKeyOutOfRangeColor) | |
74 else | |
75 return tcolor(hotKeyDisabledColor) | |
76 end | |
77 end | |
78 | |
79 function RADCS:GetModifiedHotkeyColor(txt) | |
80 local c = hotKeyDefaultColor | |
81 if txt and self.config.keyBindColorCode then | |
82 local modKey = string.match( txt or "", "(["..hotKeyModifiers.."])%-") | |
83 c = modKey and hotKeyModifierColors[modKey] or c | |
84 end | |
85 return c | |
86 end | |
87 | |
88 function RADCS:GetIconColor( isUsable, notEnoughMana, outOfRange ) | |
89 if isUsable then | |
90 return tcolor(actionUsableColor) | |
91 elseif notEnoughMana then | |
92 return tcolor(actionNotEnoughManaColor) | |
93 elseif outOfRange then | |
94 return tcolor(actionOutOfRangeColor) | |
95 else | |
96 return tcolor(actionNotUsableColor) | |
97 end | |
98 end | |
99 | |
100 function RADCS:GetBorderColor( isUsable, notEnoughMana, outOfRange ) | |
101 if isUsable or notEnoughMana or outOfRange then | |
102 return tcolor(actionUsableColor) | |
103 else | |
104 return tcolor(actionNotUsableColor) | |
105 end | |
106 end | |
107 |