663 lines
21 KiB
Lua
663 lines
21 KiB
Lua
local E, L, V, P, G = unpack(select(2, ...)) --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
|
|
local TT = E:GetModule("Tooltip")
|
|
|
|
--Lua functions
|
|
local _G = _G
|
|
local unpack, tonumber, select = unpack, tonumber, select
|
|
local twipe, tinsert, tconcat = table.wipe, table.insert, table.concat
|
|
local floor = math.floor
|
|
local find, format, sub, match = string.find, string.format, string.sub, string.match
|
|
--WoW API / Variables
|
|
local CreateFrame = CreateFrame
|
|
local GetTime = GetTime
|
|
local UnitGUID = UnitGUID
|
|
local InCombatLockdown = InCombatLockdown
|
|
local IsShiftKeyDown = IsShiftKeyDown
|
|
local IsControlKeyDown = IsControlKeyDown
|
|
local IsAltKeyDown = IsAltKeyDown
|
|
local GetInventoryItemLink = GetInventoryItemLink
|
|
local GetInventorySlotInfo = GetInventorySlotInfo
|
|
local UnitExists = UnitExists
|
|
local CanInspect = CanInspect
|
|
local NotifyInspect = NotifyInspect
|
|
local GetMouseFocus = GetMouseFocus
|
|
local UnitLevel = UnitLevel
|
|
local UnitIsPlayer = UnitIsPlayer
|
|
local UnitClass = UnitClass
|
|
local UnitName = UnitName
|
|
local GetGuildInfo = GetGuildInfo
|
|
local UnitPVPName = UnitPVPName
|
|
local UnitIsAFK = UnitIsAFK
|
|
local UnitIsDND = UnitIsDND
|
|
local GetQuestDifficultyColor = GetQuestDifficultyColor
|
|
local UnitRace = UnitRace
|
|
local UnitIsTapped = UnitIsTapped
|
|
local UnitIsTappedByPlayer = UnitIsTappedByPlayer
|
|
local UnitReaction = UnitReaction
|
|
local UnitClassification = UnitClassification
|
|
local UnitCreatureType = UnitCreatureType
|
|
local UnitIsPVP = UnitIsPVP
|
|
local UnitHasVehicleUI = UnitHasVehicleUI
|
|
local GetNumPartyMembers = GetNumPartyMembers
|
|
local GetNumRaidMembers = GetNumRaidMembers
|
|
local UnitIsUnit = UnitIsUnit
|
|
local UnitIsDeadOrGhost = UnitIsDeadOrGhost
|
|
local GetItemCount = GetItemCount
|
|
local UnitAura = UnitAura
|
|
local SetTooltipMoney = SetTooltipMoney
|
|
local GameTooltip_ClearMoney = GameTooltip_ClearMoney
|
|
local TARGET = TARGET
|
|
local DEAD = DEAD
|
|
local FOREIGN_SERVER_LABEL = FOREIGN_SERVER_LABEL
|
|
local PVP = PVP
|
|
local FACTION_ALLIANCE = FACTION_ALLIANCE
|
|
local FACTION_HORDE = FACTION_HORDE
|
|
local LEVEL = LEVEL
|
|
local FACTION_BAR_COLORS = FACTION_BAR_COLORS
|
|
|
|
local GameTooltip, GameTooltipStatusBar = GameTooltip, GameTooltipStatusBar
|
|
local targetList, inspectCache = {}, {}
|
|
local TAPPED_COLOR = {r=.6, g=.6, b=.6}
|
|
local AFK_LABEL = " |cffFFFFFF[|r|cffE7E716"..L["AFK"].."|r|cffFFFFFF]|r"
|
|
local DND_LABEL = " |cffFFFFFF[|r|cffFF0000"..L["DND"].."|r|cffFFFFFF]|r"
|
|
local keybindFrame
|
|
|
|
local classification = {
|
|
worldboss = format("|cffAF5050 %s|r", BOSS),
|
|
rareelite = format("|cffAF5050+ %s|r", ITEM_QUALITY3_DESC),
|
|
elite = "|cffAF5050+|r",
|
|
rare = format("|cffAF5050 %s|r", ITEM_QUALITY3_DESC)
|
|
}
|
|
|
|
local inventorySlots = {
|
|
"HeadSlot", "NeckSlot", "ShoulderSlot", "BackSlot", "ChestSlot", "WristSlot",
|
|
"HandsSlot", "WaistSlot", "LegsSlot", "FeetSlot", "Finger0Slot", "Finger1Slot",
|
|
"Trinket0Slot", "Trinket1Slot", "MainHandSlot", "SecondaryHandSlot", "RangedSlot"
|
|
}
|
|
|
|
local updateUnitModifiers = {
|
|
["LSHIFT"] = true,
|
|
["RSHIFT"] = true,
|
|
["LCTRL"] = true,
|
|
["RCTRL"] = true,
|
|
["LALT"] = true,
|
|
["RALT"] = true,
|
|
}
|
|
|
|
function TT:GameTooltip_SetDefaultAnchor(tt, parent)
|
|
if not E.private.tooltip.enable then return end
|
|
if not self.db.visibility then return end
|
|
|
|
if tt:GetAnchorType() ~= "ANCHOR_NONE" then return end
|
|
if InCombatLockdown() and self.db.visibility.combat then
|
|
local modifier = self.db.visibility.combatOverride
|
|
if (not(
|
|
(modifier == "SHIFT" and IsShiftKeyDown())
|
|
or
|
|
(modifier == "CTRL" and IsControlKeyDown())
|
|
or
|
|
(modifier == "ALT" and IsAltKeyDown())
|
|
)) then
|
|
tt:Hide()
|
|
return
|
|
end
|
|
end
|
|
|
|
local ownerName = tt:GetOwner() and tt:GetOwner().GetName and tt:GetOwner():GetName()
|
|
if self.db.visibility.actionbars ~= "NONE" and ownerName and (find(ownerName, "ElvUI_Bar") or find(ownerName, "ElvUI_StanceBar") or find(ownerName, "PetAction")) and not keybindFrame.active then
|
|
local modifier = self.db.visibility.actionbars
|
|
|
|
if modifier == "ALL" or not ((modifier == "SHIFT" and IsShiftKeyDown()) or (modifier == "CTRL" and IsControlKeyDown()) or (modifier == "ALT" and IsAltKeyDown())) then
|
|
tt:Hide()
|
|
return
|
|
end
|
|
end
|
|
|
|
if tt.StatusBar then
|
|
if self.db.healthBar.statusPosition == "BOTTOM" then
|
|
if tt.StatusBar.anchoredToTop then
|
|
tt.StatusBar:ClearAllPoints()
|
|
tt.StatusBar:Point("TOPLEFT", tt, "BOTTOMLEFT", E.Border, -(E.Spacing * 3))
|
|
tt.StatusBar:Point("TOPRIGHT", tt, "BOTTOMRIGHT", -E.Border, -(E.Spacing * 3))
|
|
tt.StatusBar.text:Point("CENTER", tt.StatusBar, 0, 0)
|
|
tt.StatusBar.anchoredToTop = nil
|
|
end
|
|
else
|
|
if not tt.StatusBar.anchoredToTop then
|
|
tt.StatusBar:ClearAllPoints()
|
|
tt.StatusBar:Point("BOTTOMLEFT", tt, "TOPLEFT", E.Border, (E.Spacing * 3))
|
|
tt.StatusBar:Point("BOTTOMRIGHT", tt, "TOPRIGHT", -E.Border, (E.Spacing * 3))
|
|
tt.StatusBar.text:Point("CENTER", tt.StatusBar, 0, 0)
|
|
tt.StatusBar.anchoredToTop = true
|
|
end
|
|
end
|
|
end
|
|
|
|
if parent then
|
|
if self.db.cursorAnchor then
|
|
tt:SetOwner(parent, self.db.cursorAnchorType, self.db.cursorAnchorX, self.db.cursorAnchorY)
|
|
return
|
|
else
|
|
tt:SetOwner(parent, "ANCHOR_NONE")
|
|
end
|
|
end
|
|
|
|
local _, anchor = tt:GetPoint()
|
|
|
|
if anchor == nil or (ElvUI_ContainerFrame and anchor == ElvUI_ContainerFrame) or anchor == RightChatPanel or anchor == TooltipMover or anchor == _G.UIParent or anchor == E.UIParent then
|
|
tt:ClearAllPoints()
|
|
if not E:HasMoverBeenMoved("TooltipMover") then
|
|
if ElvUI_ContainerFrame and ElvUI_ContainerFrame:IsShown() then
|
|
tt:Point("BOTTOMRIGHT", ElvUI_ContainerFrame, "TOPRIGHT", 0, 18)
|
|
elseif RightChatPanel:GetAlpha() == 1 and RightChatPanel:IsShown() then
|
|
tt:Point("BOTTOMRIGHT", RightChatPanel, "TOPRIGHT", 0, 18)
|
|
else
|
|
tt:Point("BOTTOMRIGHT", RightChatPanel, "BOTTOMRIGHT", 0, 18)
|
|
end
|
|
else
|
|
local point = E:GetScreenQuadrant(TooltipMover)
|
|
if point == "TOPLEFT" then
|
|
tt:Point("TOPLEFT", TooltipMover, "BOTTOMLEFT")
|
|
elseif point == "TOPRIGHT" then
|
|
tt:Point("TOPRIGHT", TooltipMover, "BOTTOMRIGHT")
|
|
elseif point == "BOTTOMLEFT" or point == "LEFT" then
|
|
tt:Point("BOTTOMLEFT", TooltipMover, "TOPLEFT")
|
|
else
|
|
tt:Point("BOTTOMRIGHT", TooltipMover, "TOPRIGHT")
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function TT:GetItemLvL(unit)
|
|
local total, items = 0, 0
|
|
for i = 1, #inventorySlots do
|
|
if inventorySlots[i]~="SecondaryHandSlot" and inventorySlots[i]~= "RangedSlot" then -- does not calculate offhand and ranged
|
|
local itemLink = GetInventoryItemLink(unit, GetInventorySlotInfo(inventorySlots[i]))
|
|
|
|
if itemLink then
|
|
local iLvl = select(4, GetItemInfo(itemLink))
|
|
if iLvl then
|
|
items = items + 1
|
|
total = total + iLvl
|
|
end
|
|
else --if no item equipped in slot still calculate +1 item
|
|
items = items + 1
|
|
end
|
|
end
|
|
end
|
|
|
|
if items == 0 then
|
|
return 0
|
|
end
|
|
|
|
return E:Round(total / items, 2)
|
|
end
|
|
|
|
function TT:RemoveTrashLines(tt)
|
|
for i = 3, tt:NumLines() do
|
|
local tiptext = _G["GameTooltipTextLeft"..i]
|
|
local linetext = tiptext:GetText()
|
|
|
|
if linetext == PVP or linetext == FACTION_ALLIANCE or linetext == FACTION_HORDE then
|
|
tiptext:SetText(nil)
|
|
-- tiptext:Hide()
|
|
end
|
|
end
|
|
end
|
|
|
|
function TT:GetLevelLine(tt, offset)
|
|
for i = offset, tt:NumLines() do
|
|
local tipText = _G["GameTooltipTextLeft"..i]
|
|
if tipText:GetText() and find(tipText:GetText(), LEVEL) then
|
|
return tipText
|
|
end
|
|
end
|
|
end
|
|
|
|
function TT:SetUnitText(tt, unit, level, isShiftKeyDown)
|
|
local color
|
|
if UnitIsPlayer(unit) then
|
|
local localeClass, class = UnitClass(unit)
|
|
if not localeClass or not class then return end
|
|
|
|
local name, realm = UnitName(unit)
|
|
local guildName, guildRankName = GetGuildInfo(unit)
|
|
local pvpName = UnitPVPName(unit)
|
|
|
|
color = UnitIsUnit("player", unit) and E.media.herocolor or RAID_CLASS_COLORS[class]
|
|
|
|
if self.db.playerTitles and pvpName then
|
|
name = pvpName
|
|
end
|
|
|
|
if realm and realm ~= "" then
|
|
if isShiftKeyDown or self.db.alwaysShowRealm then
|
|
name = name.."-"..realm
|
|
else
|
|
name = name..FOREIGN_SERVER_LABEL
|
|
end
|
|
end
|
|
|
|
if UnitIsAFK(unit) then
|
|
name = name..AFK_LABEL
|
|
elseif UnitIsDND(unit) then
|
|
name = name..DND_LABEL
|
|
end
|
|
|
|
GameTooltipTextLeft1:SetFormattedText("%s%s", E:RGBToHex(color.r, color.g, color.b), name)
|
|
|
|
local lineOffset = 2
|
|
if guildName then
|
|
if self.db.guildRanks then
|
|
GameTooltipTextLeft2:SetFormattedText("<|cff00ff10%s|r> [|cff00ff10%s|r]", guildName, guildRankName)
|
|
else
|
|
GameTooltipTextLeft2:SetFormattedText("<|cff00ff10%s|r>", guildName)
|
|
end
|
|
|
|
lineOffset = 3
|
|
end
|
|
|
|
local levelLine = self:GetLevelLine(tt, lineOffset)
|
|
if levelLine then
|
|
local diffColor = GetQuestDifficultyColor(level)
|
|
local race = UnitRace(unit)
|
|
levelLine:SetFormattedText("|cff%02x%02x%02x%s|r %s %s%s|r", diffColor.r * 255, diffColor.g * 255, diffColor.b * 255, level > 0 and level or "??", race or "", E:RGBToHex(color.r, color.g, color.b), localeClass)
|
|
end
|
|
else
|
|
if UnitIsTapped(unit) and not UnitIsTappedByPlayer(unit) then
|
|
color = TAPPED_COLOR
|
|
else
|
|
local unitReaction = UnitReaction(unit, "player")
|
|
if E.db.tooltip.useCustomFactionColors then
|
|
if unitReaction then
|
|
color = E.db.tooltip.factionColors[unitReaction]
|
|
end
|
|
else
|
|
color = FACTION_BAR_COLORS[unitReaction]
|
|
end
|
|
end
|
|
|
|
if not color then
|
|
color = UnitIsUnit("player", unit) and E.media.herocolor or RAID_CLASS_COLORS[class]
|
|
end
|
|
|
|
local levelLine = self:GetLevelLine(tt, 2)
|
|
if levelLine then
|
|
local creatureClassification = UnitClassification(unit)
|
|
local creatureType = UnitCreatureType(unit)
|
|
local pvpFlag = ""
|
|
local diffColor = GetQuestDifficultyColor(level)
|
|
|
|
if UnitIsPVP(unit) then
|
|
pvpFlag = format(" (%s)", PVP)
|
|
end
|
|
|
|
levelLine:SetFormattedText("|cff%02x%02x%02x%s|r%s %s%s", diffColor.r * 255, diffColor.g * 255, diffColor.b * 255, level > 0 and level or "??", classification[creatureClassification] or "", creatureType or "", pvpFlag)
|
|
end
|
|
end
|
|
|
|
return color
|
|
end
|
|
|
|
function TT:INSPECT_TALENT_READY(event, unit)
|
|
if not unit then
|
|
if self.lastGUID ~= UnitGUID("mouseover") then return end
|
|
|
|
self:UnregisterEvent(event)
|
|
|
|
unit = "mouseover"
|
|
if not UnitExists(unit) then return end
|
|
end
|
|
|
|
local itemLevel = self:GetItemLvL(unit)
|
|
inspectCache[self.lastGUID] = {time = GetTime()}
|
|
|
|
if itemLevel then
|
|
inspectCache[self.lastGUID].itemLevel = itemLevel
|
|
end
|
|
|
|
GameTooltip:SetUnit(unit)
|
|
end
|
|
|
|
function TT:ShowInspectInfo(tt, unit, r, g, b)
|
|
local canInspect = CanInspect(unit)
|
|
if not canInspect then return end
|
|
|
|
local GUID = UnitGUID(unit)
|
|
if GUID == E.myguid then
|
|
tt:AddDoubleLine(L["Item Level:"], self:GetItemLvL("player"), nil, nil, nil, 1, 1, 1)
|
|
return
|
|
elseif inspectCache[GUID] then
|
|
local itemLevel = inspectCache[GUID].itemLevel
|
|
|
|
if (GetTime() - inspectCache[GUID].time) < 900 and itemLevel then
|
|
tt:AddDoubleLine(L["Item Level:"], itemLevel, nil, nil, nil, 1, 1, 1)
|
|
return
|
|
else
|
|
inspectCache[GUID] = nil
|
|
end
|
|
end
|
|
|
|
if InspectFrame and InspectFrame.unit then
|
|
if UnitIsUnit(InspectFrame.unit, unit) then
|
|
self.lastGUID = GUID
|
|
self:INSPECT_TALENT_READY(nil, unit)
|
|
end
|
|
else
|
|
self.lastGUID = GUID
|
|
NotifyInspect(unit)
|
|
self:RegisterEvent("INSPECT_TALENT_READY")
|
|
end
|
|
end
|
|
|
|
function TT:GameTooltip_OnTooltipSetUnit(tt)
|
|
local isShiftKeyDown = IsShiftKeyDown()
|
|
local isControlKeyDown = IsControlKeyDown()
|
|
|
|
if tt:GetOwner() ~= UIParent and (self.db.visibility and self.db.visibility.unitFrames ~= "NONE") then
|
|
local modifier = self.db.visibility.unitFrames
|
|
|
|
if modifier == "ALL" or not ((modifier == "SHIFT" and isShiftKeyDown) or (modifier == "CTRL" and isControlKeyDown) or (modifier == "ALT" and IsAltKeyDown())) then
|
|
tt:Hide()
|
|
return
|
|
end
|
|
end
|
|
|
|
local _, unit = tt:GetUnit()
|
|
|
|
if not unit then
|
|
local GMF = GetMouseFocus()
|
|
if GMF and GMF:GetAttribute("unit") then
|
|
unit = GMF:GetAttribute("unit")
|
|
end
|
|
|
|
if not unit or not UnitExists(unit) then return end
|
|
end
|
|
|
|
self:RemoveTrashLines(tt)
|
|
|
|
if not isShiftKeyDown and not isControlKeyDown and self.db.targetInfo then
|
|
local unitTarget = unit.."target"
|
|
if unit ~= "player" and UnitExists(unitTarget) then
|
|
local targetColor
|
|
if UnitIsPlayer(unitTarget) and not UnitHasVehicleUI(unitTarget) then
|
|
local _, class = UnitClass(unitTarget)
|
|
targetColor = UnitIsUnit("player", unitTarget) and E.media.herocolor or RAID_CLASS_COLORS[class]
|
|
else
|
|
targetColor = E.db.tooltip.useCustomFactionColors and E.db.tooltip.factionColors[UnitReaction(unitTarget, "player")] or FACTION_BAR_COLORS[UnitReaction(unitTarget, "player")]
|
|
end
|
|
|
|
if not targetColor then
|
|
local _, class = UnitClass(unitTarget)
|
|
targetColor = UnitIsUnit("player", unitTarget) and E.media.herocolor or RAID_CLASS_COLORS[class]
|
|
end
|
|
|
|
tt:AddDoubleLine(format("%s:", TARGET), format("|cff%02x%02x%02x%s|r", targetColor.r * 255, targetColor.g * 255, targetColor.b * 255, UnitName(unitTarget)))
|
|
end
|
|
|
|
local numParty = GetNumPartyMembers()
|
|
local numRaid = GetNumRaidMembers()
|
|
local inRaid = numRaid > 0
|
|
|
|
if inRaid or numParty > 0 then
|
|
for i = 1, (inRaid and numRaid or numParty) do
|
|
local groupUnit = (inRaid and "raid"..i or "party"..i)
|
|
|
|
if not UnitIsUnit(groupUnit, "player") and UnitIsUnit(groupUnit.."target", unit) then
|
|
local _, class = UnitClass(groupUnit)
|
|
local classColor = RAID_CLASS_COLORS[class]
|
|
|
|
tinsert(targetList, format("%s%s", E:RGBToHex(classColor.r, classColor.g, classColor.b), UnitName(groupUnit)))
|
|
end
|
|
end
|
|
|
|
local numList = #targetList
|
|
if numList > 0 then
|
|
tt:AddLine(format("%s (|cffffffff%d|r): %s", L["Targeted By:"], numList, tconcat(targetList, ", ")), nil, nil, nil, 1)
|
|
twipe(targetList)
|
|
end
|
|
end
|
|
end
|
|
|
|
local isPlayerUnit = UnitIsPlayer(unit)
|
|
local color = self:SetUnitText(tt, unit, UnitLevel(unit), isShiftKeyDown)
|
|
|
|
if isShiftKeyDown and isPlayerUnit then
|
|
self:ShowInspectInfo(tt, unit, color.r, color.g, color.b)
|
|
end
|
|
|
|
if color then
|
|
tt.StatusBar:SetStatusBarColor(color.r, color.g, color.b)
|
|
else
|
|
tt.StatusBar:SetStatusBarColor(0.6, 0.6, 0.6)
|
|
end
|
|
|
|
local textWidth = tt.StatusBar.text:GetStringWidth()
|
|
if textWidth then
|
|
tt:SetMinimumWidth(textWidth)
|
|
end
|
|
end
|
|
|
|
function TT:GameTooltipStatusBar_OnValueChanged(tt, value)
|
|
if not value or not tt.text or not self.db.healthBar.text then return end
|
|
|
|
local _, unit = tt:GetParent():GetUnit()
|
|
|
|
if not unit then
|
|
local GMF = GetMouseFocus()
|
|
if GMF and GMF:GetAttribute("unit") then
|
|
unit = GMF:GetAttribute("unit")
|
|
end
|
|
end
|
|
|
|
local _, max = tt:GetMinMaxValues()
|
|
if value > 0 and max == 1 then
|
|
tt.text:SetFormattedText("%d%%", floor(value * 100))
|
|
tt:SetStatusBarColor(TAPPED_COLOR.r, TAPPED_COLOR.g, TAPPED_COLOR.b)
|
|
elseif value == 0 or (unit and UnitIsDeadOrGhost(unit)) then
|
|
tt.text:SetText(DEAD)
|
|
else
|
|
tt.text:SetText(E:ShortValue(value).." / "..E:ShortValue(max))
|
|
end
|
|
end
|
|
|
|
function TT:GameTooltip_OnTooltipCleared(tt)
|
|
tt.itemCleared = nil
|
|
end
|
|
|
|
function TT:GameTooltip_OnTooltipSetItem(tt)
|
|
if self.db.visibility and self.db.visibility.bags ~= "NONE" then
|
|
local ownerName = tt:GetOwner() and tt:GetOwner().GetName and tt:GetOwner():GetName()
|
|
|
|
if ownerName and (find(ownerName, "ElvUI_Container") or find(ownerName, "ElvUI_BankContainer")) then
|
|
local modifier = self.db.visibility.bags
|
|
|
|
if modifier == "ALL" or not ((modifier == "SHIFT" and IsShiftKeyDown()) or (modifier == "CTRL" and IsControlKeyDown()) or (modifier == "ALT" and IsAltKeyDown())) then
|
|
tt.itemCleared = true
|
|
tt:Hide()
|
|
return
|
|
end
|
|
end
|
|
end
|
|
|
|
if tt.itemCleared then return end
|
|
|
|
local _, link = tt:GetItem()
|
|
if not link then return end
|
|
|
|
local num = GetItemCount(link)
|
|
local numall = GetItemCount(link, true)
|
|
local left, right, bankCount
|
|
|
|
if self.db.itemCount == "BAGS_ONLY" then
|
|
right = format("|cFFCA3C3C%s|r %d", L["Count"], num)
|
|
elseif self.db.itemCount == "BANK_ONLY" then
|
|
bankCount = format("|cFFCA3C3C%s|r %d", L["Bank"], (numall - num))
|
|
elseif self.db.itemCount == "BOTH" then
|
|
right = format("|cFFCA3C3C%s|r %d", L["Count"], num)
|
|
bankCount = format("|cFFCA3C3C%s|r %d", L["Bank"], (numall - num))
|
|
end
|
|
|
|
if left or right then
|
|
tt:AddLine(" ")
|
|
tt:AddDoubleLine(left or " ", right or " ")
|
|
end
|
|
if bankCount then
|
|
tt:AddDoubleLine(" ", bankCount)
|
|
end
|
|
|
|
tt.itemCleared = true
|
|
end
|
|
|
|
function TT:GameTooltip_ShowStatusBar(tt)
|
|
local sb = _G[tt:GetName().."StatusBar"..tt.shownStatusBars]
|
|
if not sb or sb.backdrop then return end
|
|
|
|
sb:StripTextures()
|
|
sb:CreateBackdrop(nil, nil, true)
|
|
sb:SetStatusBarTexture(E.media.normTex)
|
|
end
|
|
|
|
function TT:CheckBackdropColor(tt)
|
|
if tt:GetAnchorType() == "ANCHOR_CURSOR" then
|
|
local r, g, b = unpack(E.media.backdropfadecolor, 1, 3)
|
|
tt:SetBackdropColor(r, g, b, self.db.colorAlpha)
|
|
end
|
|
end
|
|
|
|
function TT:SetStyle(tt)
|
|
if not tt.template then
|
|
tt:SetTemplate("Transparent")
|
|
else
|
|
tt:SetBackdropBorderColor(unpack(E.media.bordercolor, 1, 3))
|
|
end
|
|
|
|
local r, g, b = unpack(E.media.backdropfadecolor, 1, 3)
|
|
tt:SetBackdropColor(r, g, b, self.db.colorAlpha)
|
|
end
|
|
|
|
function TT:MODIFIER_STATE_CHANGED(_, key)
|
|
if updateUnitModifiers[key] then
|
|
local owner = GameTooltip:GetOwner()
|
|
local notOnAuras = not (owner and owner.UpdateTooltip)
|
|
if notOnAuras and UnitExists("mouseover") then
|
|
GameTooltip:SetUnit("mouseover")
|
|
end
|
|
end
|
|
end
|
|
|
|
function TT:SetTooltipFonts()
|
|
local font = E.Libs.LSM:Fetch("font", E.db.tooltip.font)
|
|
local fontOutline = E.db.tooltip.fontOutline
|
|
local headerSize = E.db.tooltip.headerFontSize
|
|
local textSize = E.db.tooltip.textFontSize
|
|
local smallTextSize = E.db.tooltip.smallTextFontSize
|
|
|
|
GameTooltipHeaderText:FontTemplate(font, headerSize, fontOutline)
|
|
GameTooltipText:FontTemplate(font, textSize, fontOutline)
|
|
GameTooltipTextSmall:FontTemplate(font, smallTextSize, fontOutline)
|
|
if GameTooltip.hasMoney then
|
|
for i = 1, GameTooltip.numMoneyFrames do
|
|
_G["GameTooltipMoneyFrame"..i.."PrefixText"]:FontTemplate(font, textSize, fontOutline)
|
|
_G["GameTooltipMoneyFrame"..i.."SuffixText"]:FontTemplate(font, textSize, fontOutline)
|
|
_G["GameTooltipMoneyFrame"..i.."GoldButtonText"]:FontTemplate(font, textSize, fontOutline)
|
|
_G["GameTooltipMoneyFrame"..i.."SilverButtonText"]:FontTemplate(font, textSize, fontOutline)
|
|
_G["GameTooltipMoneyFrame"..i.."CopperButtonText"]:FontTemplate(font, textSize, fontOutline)
|
|
end
|
|
end
|
|
|
|
-- Ignore header font size on DatatextTooltip
|
|
if DatatextTooltip then
|
|
DatatextTooltipTextLeft1:FontTemplate(font, textSize, fontOutline)
|
|
DatatextTooltipTextRight1:FontTemplate(font, textSize, fontOutline)
|
|
end
|
|
|
|
--These show when you compare items ("Currently Equipped", name of item, item level)
|
|
--Since they appear at the top of the tooltip, we set it to use the header font size.
|
|
for i = 1, 2 do
|
|
for j = 1, 4 do
|
|
_G["ShoppingTooltip"..i.."TextLeft"..j]:FontTemplate(font, headerSize, fontOutline)
|
|
_G["ShoppingTooltip"..i.."TextRight"..j]:FontTemplate(font, headerSize, fontOutline)
|
|
end
|
|
end
|
|
end
|
|
|
|
--This changes the growth direction of the toast frame depending on position of the mover
|
|
local function PostBNToastMove(mover)
|
|
local x, y = mover:GetCenter()
|
|
local screenHeight = E.UIParent:GetTop()
|
|
local screenWidth = E.UIParent:GetRight()
|
|
|
|
local anchorPoint
|
|
if y > (screenHeight / 2) then
|
|
anchorPoint = (x > (screenWidth / 2)) and "TOPRIGHT" or "TOPLEFT"
|
|
else
|
|
anchorPoint = (x > (screenWidth / 2)) and "BOTTOMRIGHT" or "BOTTOMLEFT"
|
|
end
|
|
mover.anchorPoint = anchorPoint
|
|
|
|
BNToastFrame:ClearAllPoints()
|
|
BNToastFrame:Point(anchorPoint, mover)
|
|
end
|
|
|
|
function TT:RepositionBNET(frame, _, anchor)
|
|
if anchor ~= BNETMover then
|
|
frame:ClearAllPoints()
|
|
frame:Point("TOPLEFT", BNETMover, "TOPLEFT")
|
|
end
|
|
end
|
|
|
|
function TT:Initialize()
|
|
self.db = E.db.tooltip
|
|
|
|
BNToastFrame:Point("TOPRIGHT", MMHolder, "BOTTOMRIGHT", 0, -10)
|
|
E:CreateMover(BNToastFrame, "BNETMover", L["BNet Frame"], nil, nil, PostBNToastMove)
|
|
self:SecureHook(BNToastFrame, "SetPoint", "RepositionBNET")
|
|
|
|
if not E.private.tooltip.enable then return end
|
|
|
|
SetCVar("showItemLevel", 1)
|
|
|
|
GameTooltip.StatusBar = GameTooltipStatusBar
|
|
GameTooltip.StatusBar:Height(self.db.healthBar.height)
|
|
GameTooltip.StatusBar:SetScript("OnValueChanged", nil)
|
|
GameTooltip.StatusBar.text = GameTooltip.StatusBar:CreateFontString(nil, "OVERLAY")
|
|
GameTooltip.StatusBar.text:Point("CENTER", GameTooltip.StatusBar, 0, 0)
|
|
GameTooltip.StatusBar.text:FontTemplate(E.Libs.LSM:Fetch("font", self.db.healthBar.font), self.db.healthBar.fontSize, self.db.healthBar.fontOutline)
|
|
|
|
--Tooltip Fonts
|
|
if not GameTooltip.hasMoney then
|
|
--Force creation of the money lines, so we can set font for it
|
|
SetTooltipMoney(GameTooltip, 1, nil, "", "")
|
|
SetTooltipMoney(GameTooltip, 1, nil, "", "")
|
|
GameTooltip_ClearMoney(GameTooltip)
|
|
end
|
|
self:SetTooltipFonts()
|
|
|
|
local GameTooltipAnchor = CreateFrame("Frame", "GameTooltipAnchor", E.UIParent)
|
|
GameTooltipAnchor:Point("BOTTOMRIGHT", RightChatToggleButton, "BOTTOMRIGHT")
|
|
GameTooltipAnchor:Size(130, 20)
|
|
GameTooltipAnchor:SetFrameLevel(GameTooltipAnchor:GetFrameLevel() + 400)
|
|
E:CreateMover(GameTooltipAnchor, "TooltipMover", L["Tooltip"], nil, nil, nil, nil, nil, "tooltip,general")
|
|
|
|
self:SecureHook("GameTooltip_SetDefaultAnchor")
|
|
self:HookScript(GameTooltip, "OnTooltipCleared", "GameTooltip_OnTooltipCleared")
|
|
self:HookScript(GameTooltip, "OnTooltipSetItem", "GameTooltip_OnTooltipSetItem")
|
|
self:HookScript(GameTooltip, "OnTooltipSetUnit", "GameTooltip_OnTooltipSetUnit")
|
|
self:HookScript(GameTooltip.StatusBar, "OnValueChanged", "GameTooltipStatusBar_OnValueChanged")
|
|
self:RegisterEvent("MODIFIER_STATE_CHANGED")
|
|
|
|
--Variable is localized at top of file, then set here when we're sure the frame has been created
|
|
--Used to check if keybinding is active, if so then don"t hide tooltips on actionbars
|
|
keybindFrame = ElvUI_KeyBinder
|
|
|
|
self.Initialized = true
|
|
end
|
|
|
|
local function InitializeCallback()
|
|
TT:Initialize()
|
|
end
|
|
|
|
E:RegisterModule(TT:GetName(), InitializeCallback)
|