local RegisterStateDriver = RegisterStateDriver;
local CooldownFrame_Set, CooldownFrame_Clear = CooldownFrame_Set, CooldownFrame_Clear;
local CTimerAfter = C_Timer.After;
-local GameTooltip = nil;
+local GameTooltip = GameTooltip;
+local GameTooltip_SetDefaultAnchor = GameTooltip_SetDefaultAnchor;
local COOLDOWN_TYPE_LOSS_OF_CONTROL = COOLDOWN_TYPE_LOSS_OF_CONTROL;
local COOLDOWN_TYPE_NORMAL = COOLDOWN_TYPE_NORMAL;
local CDTexture = "Interface\\Cooldown\\edge";
local inheritedFrames =
"SecureActionButtonTemplate,SecureHandlerDragTemplate,SecureHandlerStateTemplate";
+local function showTooltip(secure)
+ GameTooltip_SetDefaultAnchor(GameTooltip, secure);
+ GameTooltip:SetAction(secure:GetAttribute("action"));
+end
+
+local function hideTooltip()
+ GameTooltip:Hide();
+end
+
local numChargeCDs = 0;
local function createChargeCD(parent)
numChargeCDs = numChargeCDs + 1;
button:SetChecked(IsCurrentAction(slot) or IsAutoRepeatAction(slot));
end
-local function updateGlow(button, slot, spell, hide)
+local function updateGlow(button, slot)
local stype, id, _ = GetActionInfo(slot);
- if stype == "spell" and (spell and id == spell or IsSpellOverlayed(id)) then
- if hide then
- button.glow:Hide();
- else
- button.glow:Show();
- end
+ if stype == "spell" and IsSpellOverlayed(id) then
+ button.glow:Show();
elseif stype == "macro" then
local _, _, macroid = GetMacroSpell(id);
- if macroid and (spell and macroid == spell or IsSpellOverlayed(macroid)) then
- if hide then
- button.glow:Hide();
- else
- button.glow:Show();
- end
+ if macroid and IsSpellOverlayed(macroid) then
+ button.glow:Show();
else
button.glow:Hide();
end
end
end
+local function startGlow(button, slot, spell)
+ local stype, id, _ = GetActionInfo(slot);
+ if stype == "spell" and id == spell then
+ button.glow:Show();
+ elseif stype == "macro" then
+ local _, _, macroid = GetMacroSpell(id);
+ if macroid and macroid == spell then
+ button.glow:Show();
+ end
+ end
+ -- TODO FlyoutHasSpell glow
+end
+
+local function stopGlow(button, slot, spell)
+ local stype, id, _ = GetActionInfo(slot);
+ if stype == "spell" and id == spell then
+ button.glow:Hide();
+ elseif stype == "macro" then
+ local _, _, macroid = GetMacroSpell(id);
+ if macroid and macroid == spell then
+ button.glow:Hide();
+ end
+ end
+ -- TODO FlyoutHasSpell glow
+end
+
local function updateButton(button, slot)
if HasAction(slot) then
activeButtons[slot] = button;
end
if config.nomouse then
secure:EnableMouse(false);
+ else
+ -- only show tooltips for bars with mouse interaction
+ secure:SetScript("OnEnter", showTooltip);
+ secure:SetScript("OnLeave", hideTooltip);
end
secure:SetWidth(config.size or 32);
secure:SetHeight(config.size or 32);
secure.autocastable:Hide();
secure.glow = secure:CreateTexture(nil, "OVERLAY", nil, 1);
secure.glow:SetPoint("CENTER");
- secure.glow:SetWidth(config.size and config.size+20 or 52);
- secure.glow:SetHeight(config.size and config.size+20 or 52);
+ secure.glow:SetWidth(config.size and config.size+26 or 53);
+ secure.glow:SetHeight(config.size and config.size+26 or 53);
secure.glow:SetTexture("Interface\\SpellActivationOverlay\\IconAlert");
secure.glow:SetTexCoord(0.00781250, 0.50781250, 0.27734375, 0.52634375);
secure.glow:Hide();
["SPELL_ACTIVATION_OVERLAY_GLOW_SHOW"] = function(spell)
-- TODO create mapping from spellIDs to buttons
for _, button in pairs(activeButtons) do
- updateGlow(button, button.slot, spell);
- -- CD update might be throttled, force it
- updateCooldown(button, button.slot);
+ startGlow(button, button.slot, spell);
end
end,
["SPELL_ACTIVATION_OVERLAY_GLOW_HIDE"] = function(spell)
-- TODO create mapping from spellIDs to buttons
for _, button in pairs(activeButtons) do
- updateGlow(button, button.slot, spell, true);
- -- CD update might be throttled, force it
- updateCooldown(button, button.slot);
+ stopGlow(button, button.slot, spell);
end
end,
["UPDATE_BINDINGS"] = function()
end
end,
["PLAYER_LOGIN"] = function()
- GameTooltip = _G["GameTooltip"]; -- TODO use PLAYER_ENTERING_WORLD with MoveAnything
+ GameTooltip = _G["GameTooltip"];
initialize();
end,
["ADDON_LOADED"] = function(addon)
if unit == "player" then events["ACTIONBAR_UPDATE_STATE"]() end
end
events["UNIT_EXITED_VEHICLE"] = events["UNIT_ENTERED_VEHICLE"];
--- TODO overlay glow ? don't exactly know what it does, proc highlight?
--- tooltips
ActionBars:RegisterEvent("ADDON_LOADED");
ActionBars:RegisterEvent("PLAYER_LOGIN");