115 lines
3.3 KiB
Lua
115 lines
3.3 KiB
Lua
|
-- ------------------------------------------------------------------------------ --
|
||
|
-- TradeSkillMaster --
|
||
|
-- https://tradeskillmaster.com --
|
||
|
-- All Rights Reserved - Detailed license information included with addon. --
|
||
|
-- ------------------------------------------------------------------------------ --
|
||
|
|
||
|
local _, TSM = ...
|
||
|
local ExtraTip = TSM.Init("Service.ItemTooltipClasses.ExtraTip")
|
||
|
local private = {
|
||
|
numExtraTips = 0,
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
-- ============================================================================
|
||
|
-- Module Functions
|
||
|
-- ============================================================================
|
||
|
|
||
|
function ExtraTip.Create(tooltip)
|
||
|
return private.CreateExtraTip(tooltip)
|
||
|
end
|
||
|
|
||
|
|
||
|
|
||
|
-- ============================================================================
|
||
|
-- Extra Tip Methods
|
||
|
-- ============================================================================
|
||
|
|
||
|
local EXTRA_TIP_METHODS = {
|
||
|
Attach = function(self, tooltip)
|
||
|
self:SetOwner(tooltip, "ANCHOR_PRESERVE")
|
||
|
self.anchorFrame = nil
|
||
|
self:OnUpdate()
|
||
|
end,
|
||
|
|
||
|
Show = function(self)
|
||
|
self.anchorFrame = nil
|
||
|
GameTooltip.Show(self)
|
||
|
local bottom = self:GetBottom()
|
||
|
if bottom and self:GetParent():IsShown() then
|
||
|
self.isTop = bottom <= 0
|
||
|
end
|
||
|
self:OnUpdate()
|
||
|
local numLines = self:NumLines()
|
||
|
local changedLines = self.changedLines or 0
|
||
|
if changedLines >= numLines then return end
|
||
|
for i = changedLines + 1, numLines do
|
||
|
local left, right = self.Left[i], self.Right[i]
|
||
|
local font = i == 1 and GameTooltipHeader or GameFontNormal
|
||
|
|
||
|
local r, g, b, a = left:GetTextColor()
|
||
|
left:SetFontObject(font)
|
||
|
left:SetTextColor(r, g, b, a)
|
||
|
|
||
|
r, g, b, a = right:GetTextColor()
|
||
|
right:SetFontObject(font)
|
||
|
right:SetTextColor(r, g, b, a)
|
||
|
end
|
||
|
self.changedLines = numLines
|
||
|
GameTooltip.Show(self)
|
||
|
self:OnUpdate()
|
||
|
end,
|
||
|
|
||
|
OnUpdate = function(self)
|
||
|
local tooltip = self:GetParent()
|
||
|
local anchorFrame = private.GetExtraTipFrame(tooltip, tooltip:GetChildren()) or tooltip
|
||
|
if anchorFrame ~= self.anchorFrame then
|
||
|
self:ClearAllPoints()
|
||
|
if self.isTop then
|
||
|
self:SetPoint("BOTTOM", anchorFrame, "TOP")
|
||
|
else
|
||
|
self:SetPoint("TOP", anchorFrame, "BOTTOM")
|
||
|
end
|
||
|
self.anchorFrame = anchorFrame
|
||
|
end
|
||
|
end,
|
||
|
}
|
||
|
|
||
|
local LINE_METATABLE = {
|
||
|
__index = function(t, k)
|
||
|
local v = _G[t.name..k]
|
||
|
rawset(t, k, v)
|
||
|
return v
|
||
|
end,
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
-- ============================================================================
|
||
|
-- Private Helper Functions
|
||
|
-- ============================================================================
|
||
|
|
||
|
function private.CreateExtraTip(tooltip)
|
||
|
private.numExtraTips = private.numExtraTips + 1
|
||
|
local extraTip = CreateFrame("GameTooltip", "TSMExtraTip"..private.numExtraTips, tooltip, "GameTooltipTemplate")
|
||
|
extraTip:SetClampedToScreen(true)
|
||
|
|
||
|
for name, func in pairs(EXTRA_TIP_METHODS) do
|
||
|
extraTip[name] = func
|
||
|
end
|
||
|
|
||
|
extraTip.Left = setmetatable({name = extraTip:GetName().."TextLeft"}, LINE_METATABLE)
|
||
|
extraTip.Right = setmetatable({name = extraTip:GetName().."TextRight"}, LINE_METATABLE)
|
||
|
return extraTip
|
||
|
end
|
||
|
|
||
|
function private.GetExtraTipFrame(tooltip, ...)
|
||
|
for i = 1, select('#', ...) do
|
||
|
local frame = select(i, ...)
|
||
|
if frame.InitLines and frame:GetParent() == tooltip and frame:IsVisible() then
|
||
|
return frame
|
||
|
end
|
||
|
end
|
||
|
end
|