skin: align questlog to pixel perfect positions

This commit is contained in:
shagu
2019-03-05 08:37:28 +01:00
parent 41278b808a
commit e0bf944e44
+229 -160
View File
@@ -2,185 +2,254 @@ pfUI:RegisterSkin("QuestLogFrame", function ()
local border = tonumber(pfUI_config.appearance.border.default)
local bpad = border > 1 and border - 1 or 1
hooksecurefunc("QuestLog_OnShow", function()
QuestLogFrame:ClearAllPoints()
QuestLogFrame:SetPoint("TOPLEFT", 10, -104)
end, 1)
StripTextures(QuestLogFrame, true)
CreateBackdrop(QuestLogFrame, nil, nil, .75)
QuestLogFrame:SetWidth(353)
QuestLogFrame:SetHeight(480)
EnableMovable(QuestLogFrame)
SkinCloseButton(QuestLogFrameCloseButton, QuestLogFrame, -6, -6)
QuestLogFrame:DisableDrawLayer("BACKGROUND")
StripTextures(EmptyQuestLogFrame)
QuestLogTitleText:ClearAllPoints()
QuestLogTitleText:SetPoint("TOP", 0, -10)
QuestLogNoQuestsText:ClearAllPoints()
QuestLogNoQuestsText:SetPoint("TOP", QuestLogFrame, 0, -100)
SkinButton(QuestLogFrameAbandonButton)
QuestLogFrameAbandonButton:ClearAllPoints()
QuestLogFrameAbandonButton:SetPoint("BOTTOMLEFT", QuestLogFrame, "BOTTOMLEFT", 10, 10)
SkinButton(QuestFramePushQuestButton)
QuestFramePushQuestButton:ClearAllPoints()
QuestFramePushQuestButton:SetPoint("LEFT", QuestLogFrameAbandonButton, "RIGHT", 2*bpad, 0)
SkinButton(QuestFrameExitButton)
QuestFrameExitButton:ClearAllPoints()
QuestFrameExitButton:SetPoint("LEFT", QuestFramePushQuestButton, "RIGHT", 2*bpad, 0)
StripTextures(QuestLogListScrollFrame)
SkinScrollbar(QuestLogListScrollFrameScrollBar)
StripTextures(QuestLogDetailScrollFrame)
SkinScrollbar(QuestLogDetailScrollFrameScrollBar)
StripTextures(QuestLogExpandButtonFrame)
StripTextures(QuestLogCollapseAllButton)
SkinCollapseButton(QuestLogCollapseAllButton, true)
QuestLogCollapseAllButton:ClearAllPoints()
QuestLogCollapseAllButton:SetPoint("BOTTOMLEFT", QuestLogTitle1, "TOPLEFT", 2, 2)
for i = 1, QUESTS_DISPLAYED do
SkinCollapseButton(_G["QuestLogTitle"..i])
end
for i = 1, MAX_OBJECTIVES do
local button = _G["QuestLogItem"..i]
StripTextures(button)
CreateBackdrop(button, nil, true, .5)
local itemButton = CreateFrame("Button", button:GetName().."ItemButton", button)
itemButton:SetWidth(37)
itemButton:SetHeight(37)
itemButton:SetPoint("LEFT", 2, 0)
itemButton.icon = itemButton:CreateTexture("ARTWORK")
itemButton.icon:SetTexture(_G[button:GetName().."IconTexture"]:GetTexture())
SkinButton(itemButton, nil, nil, nil, itemButton.icon, true)
itemButton.text = itemButton:CreateFontString("Status", "LOW", "GameFontNormal")
itemButton.text:SetFontObject(GameFontWhite)
itemButton.text:SetPoint("BOTTOMRIGHT", -4, 1)
itemButton.text:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
end
hooksecurefunc("QuestLog_UpdateQuestDetails", function()
for i = 1, MAX_OBJECTIVES do
local button = _G["QuestLogItem"..i]
if button:IsShown() then
local itemButton = _G[button:GetName().."ItemButton"]
local texture = _G[button:GetName().."IconTexture"]:GetTexture()
local numItems = _G[button:GetName().."Count"]:GetText() or 1
itemButton.icon:SetTexture(texture)
itemButton.text:SetText(tonumber(numItems) > 1 and numItems)
_G[button:GetName().."Count"]:SetText()
end
end
end, 1)
local texture = "StationeryTest"
if date("%m%d") == "0223" then texture = "Stationery_Val" end
local tex_Left = QuestLogDetailScrollFrame:CreateTexture("BACKGROUND")
tex_Left:SetTexture("Interface\\Stationery\\"..texture.."1")
tex_Left:SetPoint("TOPLEFT", 0, 0)
local tex_Right = QuestLogDetailScrollFrame:CreateTexture("BACKGROUND")
tex_Right:SetTexture("Interface\\Stationery\\"..texture.."2")
tex_Right:SetPoint("LEFT", tex_Left, "RIGHT", 0, 0)
-- Custom stuff for Extended QuestLogFrame
_G.QUESTS_DISPLAYED = 23
_G.MAX_WATCHABLE_QUESTS = 20 -- TODO
local QuestLogFrameExpandButton = CreateFrame("Button", "QuestLogFrameExpandButton", QuestLogFrame, "UIPanelButtonTemplate")
SkinButton(QuestLogFrameExpandButton)
QuestLogFrameExpandButton:SetWidth(77)
QuestLogFrameExpandButton:SetHeight(21)
QuestLogFrameExpandButton:SetText(">>>")
QuestLogFrameExpandButton:SetPoint("BOTTOMRIGHT", QuestLogFrame, "BOTTOMRIGHT", -10, 10)
QuestLogFrameExpandButton:SetScript("OnClick", function()
if QuestLogDetailScrollFrame:IsShown() then
QuestLogDetailScrollFrame:Hide()
QuestLogDetailScrollFrame.hidden = true
do -- quest frame
hooksecurefunc("QuestLog_OnShow", function()
QuestLogFrame:ClearAllPoints()
QuestLogFrame:SetPoint("TOPLEFT", 10, -104)
end, 1)
QuestLogFrame:SetWidth(676)
QuestLogFrame:SetHeight(440)
QuestLogFrame:DisableDrawLayer("BACKGROUND")
StripTextures(QuestLogFrame, true)
CreateBackdrop(QuestLogFrame, nil, nil, .75)
EnableMovable(QuestLogFrame)
QuestLogTitleText:ClearAllPoints()
QuestLogTitleText:SetPoint("TOP", 0, -10)
SkinCloseButton(QuestLogFrameCloseButton, QuestLogFrame, -6, -6)
QuestLogNoQuestsText:ClearAllPoints()
QuestLogNoQuestsText:SetPoint("TOP", QuestLogFrame, 0, -100)
local QuestLogFrameLevelsCheckButton = CreateFrame("CheckButton", "QuestLogFrameLevelsCheckButton", QuestLogFrame, "UICheckButtonTemplate")
QuestLogFrameLevelsCheckButton:SetChecked(C.questlog.showQuestLevels == "1" and true or nil)
QuestLogFrameLevelsCheckButton:SetPoint("LEFT", QuestLogCollapseAllButton, "RIGHT", 0, 1)
QuestLogFrameLevelsCheckButton:SetScript("OnClick", function()
C.questlog.showQuestLevels = C.questlog.showQuestLevels == "1" and "0" or "1"
QuestLog_Update()
end)
SkinCheckbox(QuestLogFrameLevelsCheckButton, 23)
QuestLogFrameLevelsCheckButtonText:SetText(T["Quest Levels"])
QuestLogQuestCount:ClearAllPoints()
QuestLogQuestCount:SetPoint("TOPRIGHT", -10, -30)
CreateBackdrop(QuestLogTrack)
QuestLogTrack:SetHeight(8)
QuestLogTrack:SetWidth(8)
QuestLogTrack:ClearAllPoints()
QuestLogTrack:SetPoint("RIGHT", QuestLogQuestCount, "LEFT", -5, 0)
HookScript(QuestLogTrack, "OnShow", function()
QuestLogTrackTitle:Hide()
QuestLogTrackTracking:SetTexture(.8,.8,.8,1)
end)
SkinButton(QuestLogFrameAbandonButton)
QuestLogFrameAbandonButton:ClearAllPoints()
QuestLogFrameAbandonButton:SetPoint("BOTTOMLEFT", QuestLogFrame, "BOTTOMLEFT", 5, 5)
QuestLogFrameAbandonButton:SetWidth(98)
SkinButton(QuestFramePushQuestButton)
QuestFramePushQuestButton:ClearAllPoints()
QuestFramePushQuestButton:SetPoint("LEFT", QuestLogFrameAbandonButton, "RIGHT", 5, 0)
QuestFramePushQuestButton:SetWidth(98)
SkinButton(QuestFrameExitButton)
QuestFrameExitButton:ClearAllPoints()
QuestFrameExitButton:SetPoint("LEFT", QuestFramePushQuestButton, "RIGHT", 5, 0)
QuestFrameExitButton:SetWidth(99)
local QuestLogFrameExpandButton = CreateFrame("Button", "QuestLogFrameExpandButton", QuestLogFrame, "UIPanelButtonTemplate")
SkinArrowButton(QuestLogFrameExpandButton, "LEFT", 21)
SetAllPointsOffset(QuestLogFrameExpandButton.icon, QuestLogFrameExpandButton, 6)
QuestLogFrameExpandButton:SetPoint("LEFT", QuestFrameExitButton, "RIGHT", 5, 0)
QuestLogFrameExpandButton:SetScript("OnClick", function()
if QuestLogDetailScrollFrame:IsShown() then
QuestLogDetailScrollFrame:Hide()
QuestLogDetailScrollFrame.hidden = true
else
QuestLogDetailScrollFrame:Show()
QuestLogDetailScrollFrame.hidden = nil
end
end)
HookScript(QuestLogDetailScrollFrame, "OnHide", function()
SkinArrowButton(QuestLogFrameExpandButton, "RIGHT", 21)
QuestLogDetailScrollFrame:Hide()
QuestLogFrame:SetWidth(340)
end)
HookScript(QuestLogDetailScrollFrame, "OnShow", function()
SkinArrowButton(QuestLogFrameExpandButton, "LEFT", 21)
QuestLogDetailScrollFrame:Show()
QuestLogDetailScrollFrame.hidden = false
end
end)
QuestLogFrame:SetWidth(676)
QuestLog_UpdateQuestDetails()
end)
EmptyQuestLogFrame:SetScript("OnShow", function() QuestLogFrameExpandButton:Disable() end)
EmptyQuestLogFrame:SetScript("OnHide", function() QuestLogFrameExpandButton:Enable() end)
for i = 7, QUESTS_DISPLAYED do
local b = CreateFrame("Button", "QuestLogTitle"..i, QuestLogFrame, "QuestLogTitleButtonTemplate")
b:SetID(i)
b:SetPoint("TOPLEFT", _G["QuestLogTitle"..(i-1)], "BOTTOMLEFT", 0, 1)
SkinCollapseButton(_G["QuestLogTitle"..i])
EmptyQuestLogFrame:SetScript("OnShow", function() QuestLogFrameExpandButton:Disable() end)
EmptyQuestLogFrame:SetScript("OnHide", function() QuestLogFrameExpandButton:Enable() end)
StripTextures(EmptyQuestLogFrame)
end
QuestLogListScrollFrame:SetHeight(350)
QuestLogDetailScrollFrame:ClearAllPoints()
QuestLogDetailScrollFrame:SetPoint("TOPLEFT", QuestLogListScrollFrame, "TOPRIGHT", 30, 0)
QuestLogDetailScrollFrame:SetHeight(350)
QuestLogDetailScrollChildFrame:SetHeight(350)
QuestLogDetailScrollFrame:SetScript("OnHide", function()
QuestLogFrame:SetWidth(353)
QuestLogFrameExpandButton:SetText(">>>")
end)
QuestLogDetailScrollFrame:SetScript("OnShow", function()
QuestLogFrame:SetWidth(680)
QuestLogFrameExpandButton:SetText("<<<")
if QuestLogQuestTitle:GetText() == "Quest title" then
QuestLog_UpdateQuestDetails()
end
end)
do -- left pane
StripTextures(QuestLogListScrollFrame)
SkinScrollbar(QuestLogListScrollFrameScrollBar)
StripTextures(QuestLogExpandButtonFrame) -- ?
StripTextures(QuestLogCollapseAllButton)
SkinCollapseButton(QuestLogCollapseAllButton, true)
-- collapse buttons
QuestLogCollapseAllButton:ClearAllPoints()
QuestLogCollapseAllButton:SetPoint("BOTTOMLEFT", QuestLogTitle1, "TOPLEFT", -6, 4)
for i = 1, QUESTS_DISPLAYED do SkinCollapseButton(_G["QuestLogTitle"..i]) end
local QuestLogFrameLevelsCheckButton = CreateFrame("CheckButton", "QuestLogFrameLevelsCheckButton", QuestLogFrame, "UICheckButtonTemplate")
QuestLogFrameLevelsCheckButton:SetChecked(pfUI_config.questlog.showQuestLevels)
QuestLogFrameLevelsCheckButton:SetPoint("BOTTOMLEFT", QuestLogCollapseAllButton, "TOPLEFT", 0, 10)
QuestLogFrameLevelsCheckButton:SetScript("OnClick", function()
pfUI_config.questlog.showQuestLevels = not pfUI_config.questlog.showQuestLevels
QuestLog_Update()
end)
QuestLogFrameLevelsCheckButtonText:SetText(T["Show quest levels"])
SkinCheckbox(QuestLogFrameLevelsCheckButton, 24)
-- quest list backdrop
local backdrop = CreateFrame("Frame", nil, QuestLogFrame)
CreateBackdrop(backdrop, nil, nil, .75)
backdrop.backdrop:SetPoint("TOPLEFT", QuestLogListScrollFrame, "TOPLEFT", -5, 5)
backdrop.backdrop:SetPoint("BOTTOMRIGHT", QuestLogListScrollFrame, "BOTTOMRIGHT", 26, -5)
QuestLogTitle1:ClearAllPoints()
QuestLogTitle1:SetPoint("TOPLEFT", QuestLogListScrollFrame, "TOPLEFT", 0, 0)
hooksecurefunc("QuestLog_Update", function()
if QuestLogCollapseAllButton.collapsed or QuestLogDetailScrollFrame.hidden then
QuestLogDetailScrollFrame:Hide()
-- add additional scroll entries
for i = 7, QUESTS_DISPLAYED do
local b = CreateFrame("Button", "QuestLogTitle"..i, QuestLogFrame, "QuestLogTitleButtonTemplate")
b:SetID(i)
b:SetPoint("TOPLEFT", _G["QuestLogTitle"..(i-1)], "BOTTOMLEFT", 0, 1)
SkinCollapseButton(_G["QuestLogTitle"..i])
end
local numEntries = GetNumQuestLogEntries()
local questIndex, text, level, questTag, isHeader
QuestLogListScrollFrame:SetPoint("TOPLEFT", 10, -54)
QuestLogListScrollFrame:SetHeight(350)
for i=1, QUESTS_DISPLAYED do
-- update tracked quest marks
_G["QuestLogTitle"..i.."Check"]:ClearAllPoints()
_G["QuestLogTitle"..i.."Check"]:SetPoint("RIGHT", _G["QuestLogTitle"..i], "LEFT", 24, 0)
hooksecurefunc("QuestLog_Update", function()
local numEntries = GetNumQuestLogEntries()
local questIndex, text, level, questTag, isHeader
-- update quest level
if QuestLogFrameLevelsCheckButton:GetChecked() then
questIndex = i + FauxScrollFrame_GetOffset(QuestLogListScrollFrame)
if questIndex <= numEntries then
text, level, questTag, isHeader = GetQuestLogTitle(questIndex)
if not isHeader then
_G["QuestLogTitle"..i]:SetText(" ".."["..(questTag and level.."+" or level).."] "..text)
if QuestLogDetailScrollFrame.hidden then
QuestLogDetailScrollFrame:Hide()
end
for i=1, QUESTS_DISPLAYED do
-- update tracked quest marks
_G["QuestLogTitle"..i.."Check"]:ClearAllPoints()
_G["QuestLogTitle"..i.."Check"]:SetPoint("RIGHT", _G["QuestLogTitle"..i], "LEFT", 24, 0)
-- update quest level
if C.questlog.showQuestLevels == "1" then
questIndex = i + FauxScrollFrame_GetOffset(QuestLogListScrollFrame)
if questIndex <= numEntries then
text, level, questTag, isHeader = GetQuestLogTitle(questIndex)
if not isHeader then
_G["QuestLogTitle"..i]:SetText(" ".."["..(questTag and level.."+" or level).."] "..text)
end
end
end
end
end, 1)
end
do -- right pane
StripTextures(QuestLogDetailScrollFrame)
SkinScrollbar(QuestLogDetailScrollFrameScrollBar)
QuestLogDetailScrollFrame:ClearAllPoints()
QuestLogDetailScrollFrame:SetPoint("TOPLEFT", QuestLogListScrollFrame, "TOPRIGHT", 35, 0)
QuestLogDetailScrollFrame:SetHeight(376)
QuestLogDetailScrollChildFrame:SetHeight(376)
-- quest log backdrop
CreateBackdrop(QuestLogDetailScrollFrame, nil, nil, .75)
QuestLogDetailScrollFrame.backdrop:SetPoint("TOPLEFT", -5, 5)
QuestLogDetailScrollFrame.backdrop:SetPoint("BOTTOMRIGHT", 26, -5)
-- skin item buttons
for i = 1, MAX_OBJECTIVES do
local button = _G["QuestLogItem"..i]
StripTextures(button)
CreateBackdrop(button, nil, true, .5)
local itemButton = CreateFrame("Button", button:GetName().."ItemButton", button)
itemButton:SetWidth(37)
itemButton:SetHeight(37)
itemButton:SetPoint("LEFT", 2, 0)
itemButton.icon = itemButton:CreateTexture("ARTWORK")
itemButton.icon:SetTexture(_G[button:GetName().."IconTexture"]:GetTexture())
SkinButton(itemButton, nil, nil, nil, itemButton.icon, true)
itemButton.text = itemButton:CreateFontString("Status", "LOW", "GameFontNormal")
itemButton.text:SetFontObject(GameFontWhite)
itemButton.text:SetPoint("BOTTOMRIGHT", -4, 1)
itemButton.text:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
end
end, 1)
QuestFrameExitButton:Hide()
hooksecurefunc("QuestLog_UpdateQuestDetails", function()
for i = 1, MAX_OBJECTIVES do
local button = _G["QuestLogItem"..i]
if button:IsShown() then
local itemButton = _G[button:GetName().."ItemButton"]
local texture = _G[button:GetName().."IconTexture"]:GetTexture()
local numItems = _G[button:GetName().."Count"]:GetText() or 1
tex_Left:SetHeight(QuestLogDetailScrollFrame:GetHeight())
tex_Right:SetHeight(QuestLogDetailScrollFrame:GetHeight())
itemButton.icon:SetTexture(texture)
itemButton.text:SetText(tonumber(numItems) > 1 and numItems)
_G[button:GetName().."Count"]:SetText()
end
end
end, 1)
do -- overwrite colors
hooksecurefunc("QuestLog_UpdateQuestDetails", function()
for i=1, GetNumQuestLeaderBoards() do
local string = _G["QuestLogObjective"..i]
if not string._SetTextColor then
string._SetTextColor = string.SetTextColor
string.SetTextColor = function() return end
end
local text, type, finished = GetQuestLogLeaderBoard(i)
if finished then
string:_SetTextColor(.4, 1, .4)
else
string:_SetTextColor(.4, .4, .4)
end
end
local reqmoney = GetQuestLogRequiredMoney()
if reqmoney > 0 then
if reqmoney > GetMoney() then
QuestLogRequiredMoneyText:SetTextColor(1, .4, .4);
else
QuestLogRequiredMoneyText:SetTextColor(.4, 1, .4);
end
end
end)
local titles = { QuestLogQuestTitle, QuestLogDescriptionTitle, QuestLogRewardTitleText }
for _, string in pairs(titles) do
if not string._SetTextColor then
string._SetTextColor = string.SetTextColor
string.SetTextColor = function() return end
end
string:_SetTextColor(1,1,.2,1)
string:SetShadowColor(0,0,0,0)
end
local texts = { QuestLogObjectivesText, QuestLogTimerText, QuestLogQuestDescription,
QuestLogItemChooseText, QuestLogItemReceiveText, QuestLogSpellLearnText }
for _, string in pairs(texts) do
if not string._SetTextColor then
string._SetTextColor = string.SetTextColor
string.SetTextColor = function() return end
end
string:_SetTextColor(1,1,1,1)
end
end
end
end)