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 ID = ID 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 unit and self.db.npcID and not isPlayerUnit then local guid = UnitGUID(unit) if guid then local id = tonumber(sub(guid, 8, 12), 16) if id then tt:AddLine(format("|cFFCA3C3C%s|r %d", ID, id)) end end 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.spellID then left = format("|cFFCA3C3C%s|r %d", ID, tonumber(match(link, ":(%d+)"))) end 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:SetUnitAura(tt, ...) local caster, _, _, id = select(8, UnitAura(...)) if id and self.db.spellID then if caster then local name = UnitName(caster) local _, class = UnitClass(caster) local color = UnitIsUnit("player", caster) and E.media.herocolor or RAID_CLASS_COLORS[class] tt:AddDoubleLine(format("|cFFCA3C3C%s|r %d", ID, id), format("%s%s", E:RGBToHex(color.r, color.g, color.b), name)) else tt:AddLine(format("|cFFCA3C3C%s|r %d", ID, id)) end tt:Show() end end function TT:GameTooltip_OnTooltipSetSpell(tt) local id = select(3, tt:GetSpell()) if not id or not self.db.spellID then return end local displayString = format("|cFFCA3C3C%s|r %d", ID, id) for i = 1, tt:NumLines() do local line = _G[format("GameTooltipTextLeft%d", i)] if line and line:GetText() and find(line:GetText(), displayString) then return end end tt:AddLine(displayString) tt:Show() end function TT:SetHyperlink(refTooltip, link) if self.db.spellID and (find(link, "^spell:") or find(link, "^item:")) then refTooltip:AddLine(format("|cFFCA3C3C%s|r %d", ID, tonumber(match(link, "(%d+)")))) refTooltip:Show() 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(ItemRefTooltip, "SetHyperlink") self:SecureHook("GameTooltip_SetDefaultAnchor") self:SecureHook(GameTooltip, "SetUnitAura") self:SecureHook(GameTooltip, "SetUnitBuff", "SetUnitAura") self:SecureHook(GameTooltip, "SetUnitDebuff", "SetUnitAura") self:HookScript(GameTooltip, "OnTooltipSetSpell", "GameTooltip_OnTooltipSetSpell") 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)