initial commit
This commit is contained in:
114
LibTSM/Service/ItemTooltipClasses/ExtraTip.lua
Normal file
114
LibTSM/Service/ItemTooltipClasses/ExtraTip.lua
Normal file
@@ -0,0 +1,114 @@
|
||||
-- ------------------------------------------------------------------------------ --
|
||||
-- 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
|
||||
Reference in New Issue
Block a user