You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

119 lines
3.9 KiB

local _, addon = ...
local GetItemInfoInstant = C_Item.GetItemInfoInstant;
local GetDetailedItemLevelInfo = C_Item.GetDetailedItemLevelInfo;
local GemDataProvider = addon.GemDataProvider;
local PADDING = 24;
local ICON_SIZE = 16;
local ICON_NAME_GAP = 8;
local TEXT_OFFSET = 24;
local TEXT_WIDTH = 320 - 2 * PADDING - ICON_SIZE - ICON_NAME_GAP;
NarciEquipmentTooltipGemFrameMixin = {};
function NarciEquipmentTooltipGemFrameMixin:SetFrameWidth(width)
TEXT_WIDTH = width - TEXT_OFFSET - PADDING;
if self.texts then
for i = 1, #self.texts do
self.texts[i]:SetWidth(TEXT_WIDTH);
end
end
self:SetWidth(width);
end
function NarciEquipmentTooltipGemFrameMixin:SetSocketInfo(socketInfo)
self:Clear();
if socketInfo then
local numGems = #socketInfo;
self.numGems = numGems;
local maxWidth = 0;
local width;
for i = 1, numGems do
width = self:SetGemEffect(i, unpack(socketInfo[i]));
if width > maxWidth then
maxWidth = width;
end
end
self:Show();
local frameHeight = self:GetTop() - self.texts[numGems]:GetBottom();
self:SetHeight(frameHeight);
maxWidth = maxWidth + TEXT_OFFSET;
return true, frameHeight, maxWidth
end
end
function NarciEquipmentTooltipGemFrameMixin:Clear()
if self.numGems and self.numGems > 0 then
if self.icons then
for i = 1, #self.icons do
self.icons[i]:Hide();
self.texts[i]:Hide();
self.borders[i]:Hide();
end
end
self:Hide();
end
self.numGems = 0;
end
function NarciEquipmentTooltipGemFrameMixin:SetGemEffect(n, texture, gemName, gemLink, gemEffect)
if not self.icons then
self.icons = {};
self.texts = {};
self.borders = {};
end
if not self.icons[n] then
self.texts[n] = self:CreateFontString(nil, "ARTWORK", self:GetParent().textFont);
self.texts[n]:SetSpacing(2);
self.texts[n]:SetWidth(TEXT_WIDTH);
self.texts[n]:SetJustifyH("LEFT");
self.icons[n] = self:CreateTexture(nil, "ARTWORK");
self.icons[n]:SetSize(ICON_SIZE, ICON_SIZE);
self.icons[n]:SetPoint("RIGHT", self.texts[n], "TOPLEFT", -7, -5);
self.borders[n] = self:CreateTexture(nil,"OVERLAY");
self.borders[n]:SetSize(22, 22);
self.borders[n]:SetPoint("CENTER", self.icons[n], "CENTER", 0, 0);
self.borders[n]:SetTexture("Interface\\AddOns\\Narcissus\\Art\\GameTooltip\\GemBorderSqaure");
end
if n == 1 then
self.texts[n]:SetPoint("TOPLEFT", self, "TOPLEFT", TEXT_OFFSET, -2);
else
self.texts[n]:SetPoint("TOPLEFT", self.texts[n - 1], "BOTTOMLEFT", 0, -12);
end
self.icons[n]:SetTexture(texture);
--print(gemEffect .." "..texture)
if gemLink then
--local itemID, itemType, itemSubType, itemEquipLoc, icon = GetItemInfoInstant(gemLink);
self.texts[n]:SetTextColor(0.8863, 0.8863, 0.8863);
self.icons[n]:Show();
self.borders[n]:Show();
self.texts[n]:Show();
local itemID = GetItemInfoInstant(gemLink);
if GemDataProvider:IsItemPrimordialStone(itemID) then
local itemLevel = GetDetailedItemLevelInfo(gemLink);
if itemLevel and gemEffect then
gemEffect = string.gsub(gemEffect, "\n", "\n".."|CFFFFD100"..itemLevel.."|r ", 1);
end
end
else
self.texts[n]:SetTextColor(0.5, 0.5, 0.5);
self.icons[n]:Show();
self.borders[n]:Hide();
self.texts[n]:Show();
end
self.texts[n]:SetText(gemEffect);
if not gemEffect then
self:GetParent():QueryData();
end
return self.texts[n]:GetWrappedWidth() or 0
end
function NarciEquipmentTooltipGemFrameMixin:UpdateAnchor()
local p = self:GetParent();
end