addon/Addon/Code/QuestFrame.lua
Roman Jaroš 7a12abeda3
All checks were successful
forgejo/Czech Quests/addon/pipeline/head This commit looks good
Improve QuestFrame font handling
2025-03-08 22:57:39 +01:00

168 lines
No EOL
5.1 KiB
Lua
Executable file

local _, addon = ...
local QuestFrame = CreateFrame("Frame", "CzechQuestsQuestFrame", UIParent, "BackdropTemplate")
QuestFrame:Hide()
addon.QuestFrame = QuestFrame
function QuestFrame:CreateHeader()
local font = addon.API.CreateCzechFont(
self,
CzechQuestsAddon_Store.config.QUEST_HEADER_FONT_NAME,
CzechQuestsAddon_Store.config.QUEST_HEADER_FONT_SIZE
)
font:SetWidth(self:GetWidth() - 20)
return font;
end
function QuestFrame:CreateText()
local font = addon.API.CreateCzechFont(
self,
CzechQuestsAddon_Store.config.QUEST_TEXT_FONT_NAME,
CzechQuestsAddon_Store.config.QUEST_TEXT_FONT_SIZE
)
font:SetWidth(self:GetWidth() - 20)
return font;
end
function QuestFrame:Init()
-- Default style
self:SetSize(300, 200)
self:SetBackdrop({ edgeFile = "Interface/Tooltips/UI-Tooltip-Border", edgeSize = 8 })
-- Background Parchment texture
self.Texture = self:CreateTexture(nil, "BACKGROUND", nil, -1);
self.Texture:SetAllPoints(true)
self.Texture:SetHorizTile(true)
-- Create fonts
self.Title = self:CreateHeader()
self.Text1 = self:CreateText()
self.Header = self:CreateHeader()
self.Text2 = self:CreateText()
-- Load settings
self:UpdateSettings()
end
function QuestFrame:UpdateSettings()
addon.API.UpdateCzechFont(
self.Title,
CzechQuestsAddon_Store.config.QUEST_HEADER_FONT_NAME,
CzechQuestsAddon_Store.config.QUEST_HEADER_FONT_SIZE
)
addon.API.UpdateCzechFont(
self.Text1,
CzechQuestsAddon_Store.config.QUEST_TEXT_FONT_NAME,
CzechQuestsAddon_Store.config.QUEST_TEXT_FONT_SIZE
)
addon.API.UpdateCzechFont(
self.Header,
CzechQuestsAddon_Store.config.QUEST_HEADER_FONT_NAME,
CzechQuestsAddon_Store.config.QUEST_HEADER_FONT_SIZE
)
addon.API.UpdateCzechFont(
self.Text2,
CzechQuestsAddon_Store.config.QUEST_TEXT_FONT_NAME,
CzechQuestsAddon_Store.config.QUEST_TEXT_FONT_SIZE
)
if not CzechQuestsAddon_Store.config.QUEST_TEXTURE_ALPHA_ONLY_MOVING then
self.Texture:SetAlpha(CzechQuestsAddon_Store.config.QUEST_TEXTURE_ALPHA / 100)
end
end
function QuestFrame:SetTextColor(r, g, b, a)
self.Title:SetTextColor(r, g, b, a)
self.Header:SetTextColor(r, g, b, a)
self.Text1:SetTextColor(r, g, b, a)
self.Text2:SetTextColor(r, g, b, a)
end
function QuestFrame:ApplyTheme()
if (WOW_PROJECT_ID == WOW_PROJECT_CLASSIC) then
self.Texture:SetTexture("Interface/QUESTFRAME/QuestBG");
if CzechQuestsAddon_Store.config.QUEST_DARK_MODE then
self:SetBackdropColor(0, 0, 0, 1)
self.Texture:SetColorTexture(0, 0, 0, 1)
self:SetTextColor(255, 255, 255, 1)
else
self.Texture:SetTexCoord(0, .58, 0.005, 0.66)
self:SetTextColor(0, 0, 0, 1)
end
else
self.Texture:SetTexture("Interface/QUESTFRAME/QuestBackgroundParchment");
self.Texture:SetTexCoord(0, .01, 0, 0.4)
self:SetTextColor(0, 0, 0, 1)
local questTextContrast = C_CVar.GetCVar("questTextContrast")
if questTextContrast == "1" then
-- Brown
self.Texture:SetTexCoord(0, .01, .4, .8)
elseif questTextContrast == "2" or questTextContrast == "3" then
-- Gray
self.Texture:SetColorTexture(255, 255, 255, 1)
elseif questTextContrast == "4" then
-- Black
self.Texture:SetColorTexture(0, 0, 0, 1)
self:SetTextColor(255, 255, 255, 1)
end
end
end
function QuestFrame:ResetFontText()
self.Title:SetText("")
self.Text1:SetText("")
self.Header:SetText("")
self.Text2:SetText("")
end
function QuestFrame:SetData(name, text1, header, text2, parentFrame, yOffset, xOffset)
-- Reset previously values
self:ResetFontText()
self:ApplyTheme()
-- Set parent
self:SetParent(parentFrame)
-- set text to labels
self.Title:SetText(name or "")
self.Text1:SetText(text1 or "")
self.Header:SetText(header or "")
self.Text2:SetText(text2 or "")
-- apply text positions
self.Title:SetPoint("TOPLEFT", self, "TOPLEFT", 10, -10)
self.Text1:SetPoint("TOPLEFT", self.Title, "BOTTOMLEFT", 0, -5)
self.Header:SetPoint("TOPLEFT", self.Text1, "BOTTOMLEFT", 0, -20)
self.Text2:SetPoint("TOPLEFT", self.Header, "BOTTOMLEFT", 0, -5)
-- apply frame position
self:SetPoint("TOPLEFT", parentFrame, "TOPRIGHT", xOffset, yOffset)
self:Show()
-- wait for font render before calculate height
local height = self.Title:GetStringHeight()
if height == 0 then
C_Timer.After(0.5, function()
self:CalculateHeight()
end)
else
self:CalculateHeight()
end
end
function QuestFrame:CalculateHeight()
local height = 0;
local heights = {
self.Title:GetHeight(),
self.Text1:GetHeight(),
self.Header:GetHeight(),
self.Text2:GetHeight(),
10
}
for _, value in ipairs(heights) do
height = height + value + 10
end
self:SetHeight(height)
end