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";
["Stormreaver"] = {
["Vildan"] = {1, 2, 3, 4,},
["Gedren"] = {1, 2, 3, 4,},
+ ["Gazden"] = {1, 2, 3, 4,},
},
};
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;
local locstart, locduration = GetActionLossOfControlCooldown(slot);
local start, duration, enable, modrate = GetActionCooldown(slot);
local charges, maxcharges, chargestart, chargeduration, chargemodrate = GetActionCharges(slot);
+ -- avoid as many updates as possible by checking if there's changes first
+ if button.prev and
+ button.prev[1] == locstart and button.prev[2] == locduration and
+ button.prev[3] == start and button.prev[4] == duration and
+ button.prev[5] == enable and button.prev[6] == modrate and
+ button.prev[7] == charges and button.prev[8] == maxcharges and
+ button.prev[9] == chargestart and button.prev[10] == chargeduration and
+ button.prev[11] == chargemodrate then
+ return;
+ end
+ button.prev = { locstart, locduration, start, duration, enable, modrate,
+ charges, maxcharges, chargestart, chargeduration, chargemodrate };
if (locstart + locduration) > (start + duration) then
if button.cd.currentCooldownType ~= COOLDOWN_TYPE_LOSS_OF_CONTROL then
button.cd:SetEdgeTexture(locCDTexture);
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);
end
local mounted = false;
-local throttleCD = false;
-local function throttleCDDone()
- throttleCD = false
- -- update CD once more to confirm newest CD change is taken in even with some throttling
- for _, button in pairs(activeButtons) do
- updateCooldown(button, button.slot);
- end
-end
local events = {
["ACTIONBAR_UPDATE_COOLDOWN"] = function()
- if not throttleCD then -- only update at most once/frame
- throttleCD = true;
- for _, button in pairs(activeButtons) do
- updateCooldown(button, button.slot);
- end
- CTimerAfter(0.01, throttleCDDone); -- wait one frame
+ for _, button in pairs(activeButtons) do
+ updateCooldown(button, button.slot);
end
end,
["SPELL_UPDATE_CHARGES"] = 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"];
--- tooltips
ActionBars:RegisterEvent("ADDON_LOADED");
ActionBars:RegisterEvent("PLAYER_LOGIN");