Files
Questie-X/Modules/Tracker/TrackerBaseFrame.lua
T
Narcasung c09d30b832 Apply local fixes on top of upstream: tracker desync/drag/title, map icon zoom offset
- Compat/HBD.lua: fix world map pin offset math to account for zoom addons
  (e.g. Magnify) rescaling an ancestor frame instead of WorldMapButton itself;
  cull pins that fall outside the scroll frame's viewport when zoomed
- Compat/Compat.lua: add a short TTL to the chat-parsed objective progress
  cache so a stale entry can't be reapplied to an unrelated quest
- Modules/QuestieLearner.lua: re-point QuestiePlayer.currentQuestlog at the
  rebuilt quest table after invalidating QuestieDB's quest cache, fixing
  Tracker freezing on stale objective progress
- Modules/Tracker/QuestieTracker.lua: fall back to a formatted quest name
  when QuestieDB has no title for a quest (e.g. custom server quests)
- Modules/Tracker/TrackerBaseFrame.lua: force baseFrame movability on drag
  start instead of trusting the async-refreshed IsMovable() state
- Modules/Tracker/TrackerHeaderFrame.lua: wire up drag on the tracker icon
- Modules/Quest/QuestEventHandler.lua: force a full quest log reconciliation
  when the native quest log is opened

Squashed from prior commit-by-commit history to rebuild this working copy
on a clean fork of aron-w/Questie-X (restores the native GitHub fork link).
Per-fix rationale is preserved in project memory
(project_tracker_fixes.md, project_map_icon_offset.md).
2026-07-15 01:02:15 +02:00

587 lines
25 KiB
Lua

---@class TrackerBaseFrame
local TrackerBaseFrame = QuestieLoader:CreateModule("TrackerBaseFrame")
-------------------------
--Import QuestieTracker modules.
-------------------------
---@type QuestieTracker
local QuestieTracker = QuestieLoader:ImportModule("QuestieTracker")
---@type TrackerFadeTicker
local TrackerFadeTicker = QuestieLoader:ImportModule("TrackerFadeTicker")
-------------------------
--Import Questie modules.
-------------------------
---@type QuestieCombatQueue
local QuestieCombatQueue = QuestieLoader:ImportModule("QuestieCombatQueue")
---@type l10n
local l10n = QuestieLoader:ImportModule("l10n")
--- COMPATIBILITY ---
local C_Timer = QuestieCompat.C_Timer
local BackdropTemplateMixin = not QuestieCompat.Is335 and BackdropTemplateMixin
local WatchFrame = QuestWatchFrame or WatchFrame
local baseFrame, sizer, sizerSetPoint, sizerSetPointY, sizerLine1, sizerLine2, sizerLine3
local updateTimer
TrackerBaseFrame.IsInitialized = false
TrackerBaseFrame.isSizing = false
TrackerBaseFrame.isMoving = false
local _OnEnter, _SetSizerTooltip
function TrackerBaseFrame.Initialize()
baseFrame = CreateFrame("Frame", "Questie_BaseFrame", UIParent, BackdropTemplateMixin and "BackdropTemplate")
baseFrame:SetClampedToScreen(true) -- We don't want this frame to be able to move off screen at all!
baseFrame:SetFrameStrata("MEDIUM")
baseFrame:SetFrameLevel(0)
baseFrame:SetSize(25, 25)
baseFrame:EnableMouse(true)
baseFrame:SetMovable(true)
baseFrame:SetResizable(true)
baseFrame:SetScript("OnMouseDown", TrackerBaseFrame.OnDragStart)
baseFrame:SetScript("OnMouseUp", TrackerBaseFrame.OnDragStop)
baseFrame:SetScript("OnEnter", TrackerFadeTicker.Unfade)
baseFrame:SetScript("OnLeave", TrackerFadeTicker.Fade)
baseFrame:SetBackdrop({
bgFile = "Interface\\Tooltips\\UI-Tooltip-Background",
edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border",
tile = true,
edgeSize = 16,
insets = { left = 4, right = 4, top = 4, bottom = 4 },
})
baseFrame:SetBackdropColor(0, 0, 0, 0)
baseFrame:SetBackdropBorderColor(1, 1, 1, 0)
local QuestieTrackerLoc = Questie.db.profile.TrackerLocation
if QuestieTrackerLoc and (QuestieTrackerLoc[1] == "BOTTOMLEFT" or QuestieTrackerLoc[1] == "BOTTOMRIGHT") then
sizerSetPoint = "TOPRIGHT"
sizerSetPointY = -4
else
sizerSetPoint = "BOTTOMRIGHT"
sizerSetPointY = 4
end
sizer = CreateFrame("Frame", "Questie_Sizer", baseFrame)
sizer:SetPoint(sizerSetPoint, 0, 0)
sizer:SetWidth(25)
sizer:SetHeight(25)
sizer:SetAlpha(0)
sizer:EnableMouse(true)
sizer:SetScript("OnMouseDown", TrackerBaseFrame.OnResizeStart)
sizer:SetScript("OnMouseUp", TrackerBaseFrame.OnResizeStop)
sizer:SetScript("OnEnter", _OnEnter)
sizer:SetScript("OnLeave", function(self)
if GameTooltip:IsShown() then
GameTooltip:Hide()
GameTooltip._SizerToolTip = nil
end
TrackerFadeTicker.Fade(self)
end)
baseFrame.sizer = sizer
sizerLine1 = sizer:CreateTexture(nil, "BACKGROUND")
sizerLine1:SetWidth(14)
sizerLine1:SetHeight(14)
sizerLine1:SetPoint(sizerSetPoint, -4, sizerSetPointY)
sizerLine1:SetTexture("Interface\\Tooltips\\UI-Tooltip-Border")
local x = 0.1 * 14 / 17
if QuestieTrackerLoc and (QuestieTrackerLoc[1] == "BOTTOMLEFT" or QuestieTrackerLoc[1] == "BOTTOMRIGHT") then
sizerLine1:SetTexCoord(1 / 32, 0.5 + x, 1 / 32 - x, 0.5, 1 / 32 + x, 0.5, 1 / 32, 0.5 - x)
else
sizerLine1:SetTexCoord(1 / 32 - x, 0.5, 1 / 32, 0.5 + x, 1 / 32, 0.5 - x, 1 / 32 + x, 0.5)
end
sizerLine2 = sizer:CreateTexture(nil, "BACKGROUND")
sizerLine2:SetWidth(11)
sizerLine2:SetHeight(11)
sizerLine2:SetPoint(sizerSetPoint, -4, sizerSetPointY)
sizerLine2:SetTexture("Interface\\Tooltips\\UI-Tooltip-Border")
x = 0.1 * 11 / 17
if QuestieTrackerLoc and (QuestieTrackerLoc[1] == "BOTTOMLEFT" or QuestieTrackerLoc[1] == "BOTTOMRIGHT") then
sizerLine2:SetTexCoord(1 / 32, 0.5 + x, 1 / 32 - x, 0.5, 1 / 32 + x, 0.5, 1 / 32, 0.5 - x)
else
sizerLine2:SetTexCoord(1 / 32 - x, 0.5, 1 / 32, 0.5 + x, 1 / 32, 0.5 - x, 1 / 32 + x, 0.5)
end
sizerLine3 = sizer:CreateTexture(nil, "BACKGROUND")
sizerLine3:SetWidth(8)
sizerLine3:SetHeight(8)
sizerLine3:SetPoint(sizerSetPoint, -4, sizerSetPointY)
sizerLine3:SetTexture("Interface\\Tooltips\\UI-Tooltip-Border")
x = 0.1 * 8 / 17
if QuestieTrackerLoc and (QuestieTrackerLoc[1] == "BOTTOMLEFT" or QuestieTrackerLoc[1] == "BOTTOMRIGHT") then
sizerLine3:SetTexCoord(1 / 32, 0.5 + x, 1 / 32 - x, 0.5, 1 / 32 + x, 0.5, 1 / 32, 0.5 - x)
else
sizerLine3:SetTexCoord(1 / 32 - x, 0.5, 1 / 32, 0.5 + x, 1 / 32, 0.5 - x, 1 / 32 + x, 0.5)
end
if Questie.db.profile.TrackerLocation then
-- we need to pcall this because it can error if something like MoveAnything is used to move the tracker
local result, reason = pcall(baseFrame.SetPoint, baseFrame, unpack(Questie.db.profile.TrackerLocation))
if (not result) then
Questie.db.profile.TrackerLocation = nil
print(l10n("Error: Questie tracker in invalid location, resetting..."))
Questie:Debug(Questie.DEBUG_CRITICAL, "Resetting reason:", reason)
if WatchFrame then
local result2, _ = pcall(baseFrame.SetPoint, baseFrame, unpack({ WatchFrame:GetPoint() }))
Questie.db.profile.trackerSetpoint = "TOPLEFT"
if (not result2) then
Questie.db.profile.TrackerLocation = nil
TrackerBaseFrame:SetSafePoint()
end
else
TrackerBaseFrame:SetSafePoint()
end
end
else
if WatchFrame then
local result, reason = pcall(baseFrame.SetPoint, baseFrame, unpack({ WatchFrame:GetPoint() }))
Questie.db.profile.trackerSetpoint = "TOPLEFT"
if not result then
Questie.db.profile.TrackerLocation = nil
print(l10n("Error: Questie tracker in invalid location, resetting..."))
Questie:Debug(Questie.DEBUG_CRITICAL, "Resetting reason:", reason)
TrackerBaseFrame:SetSafePoint()
end
else
TrackerBaseFrame:SetSafePoint()
end
end
baseFrame:Hide()
baseFrame.isSizing = false
baseFrame.isMoving = false
TrackerBaseFrame.IsInitialized = true
TrackerBaseFrame.baseFrame = baseFrame
return baseFrame
end
function TrackerBaseFrame:Update()
if Questie.db.char.isTrackerExpanded and QuestieTracker:HasQuest() then
if Questie.db.profile.trackerBackdropEnabled then
if Questie.db.profile.trackerBorderEnabled then
if not Questie.db.profile.trackerBackdropFader then
baseFrame:SetBackdropColor(0, 0, 0, Questie.db.profile.trackerBackdropAlpha)
baseFrame:SetBackdropBorderColor(1, 1, 1, Questie.db.profile.trackerBackdropAlpha)
else
baseFrame:SetBackdropColor(0, 0, 0, 0)
baseFrame:SetBackdropBorderColor(1, 1, 1, 0)
end
else
if not Questie.db.profile.trackerBackdropFader then
baseFrame:SetBackdropColor(0, 0, 0, Questie.db.profile.trackerBackdropAlpha)
else
baseFrame:SetBackdropColor(0, 0, 0, 0)
end
baseFrame:SetBackdropBorderColor(1, 1, 1, 0)
end
else
baseFrame:SetBackdropColor(0, 0, 0, 0)
baseFrame:SetBackdropBorderColor(1, 1, 1, 0)
end
if Questie.db.profile.moveHeaderToBottom then
-- Move Sizer to Top Right corner
sizer:ClearAllPoints()
sizer:SetPoint("TOPRIGHT", 0, 0)
sizerLine1:ClearAllPoints()
sizerLine1:SetPoint("TOPRIGHT", -4, -4)
local x = 0.1 * 14 / 17
sizerLine1:SetTexCoord(1 / 32, 0.5 + x, 1 / 32 - x, 0.5, 1 / 32 + x, 0.5, 1 / 32, 0.5 - x)
sizerLine2:ClearAllPoints()
sizerLine2:SetPoint("TOPRIGHT", -4, -4)
x = 0.1 * 11 / 17
sizerLine2:SetTexCoord(1 / 32, 0.5 + x, 1 / 32 - x, 0.5, 1 / 32 + x, 0.5, 1 / 32, 0.5 - x)
sizerLine3:ClearAllPoints()
sizerLine3:SetPoint("TOPRIGHT", -4, -4)
x = 0.1 * 8 / 17
sizerLine3:SetTexCoord(1 / 32, 0.5 + x, 1 / 32 - x, 0.5, 1 / 32 + x, 0.5, 1 / 32, 0.5 - x)
else
-- Move Sizer to Bottom Right corner
sizer:ClearAllPoints()
sizer:SetPoint("BOTTOMRIGHT", 0, 0)
sizerLine1:ClearAllPoints()
sizerLine1:SetPoint("BOTTOMRIGHT", -4, 4)
local x = 0.1 * 14 / 17
sizerLine1:SetTexCoord(1 / 32 - x, 0.5, 1 / 32, 0.5 + x, 1 / 32, 0.5 - x, 1 / 32 + x, 0.5)
sizerLine2:ClearAllPoints()
sizerLine2:SetPoint("BOTTOMRIGHT", -4, 4)
x = 0.1 * 11 / 17
sizerLine2:SetTexCoord(1 / 32 - x, 0.5, 1 / 32, 0.5 + x, 1 / 32, 0.5 - x, 1 / 32 + x, 0.5)
sizerLine3:ClearAllPoints()
sizerLine3:SetPoint("BOTTOMRIGHT", -4, 4)
x = 0.1 * 8 / 17
sizerLine3:SetTexCoord(1 / 32 - x, 0.5, 1 / 32, 0.5 + x, 1 / 32, 0.5 - x, 1 / 32 + x, 0.5)
end
if Questie.db.profile.sizerHidden then
baseFrame.sizer:SetAlpha(0)
end
else
baseFrame.sizer:SetAlpha(0)
baseFrame:SetBackdropColor(0, 0, 0, 0)
baseFrame:SetBackdropBorderColor(1, 1, 1, 0)
end
-- Enables Click-Through when the tracker is locked
if IsControlKeyDown() or (not Questie.db.profile.trackerLocked) then
QuestieCombatQueue:Queue(function()
baseFrame:EnableMouse(true)
baseFrame:SetMovable(true)
baseFrame:SetResizable(true)
end)
else
QuestieCombatQueue:Queue(function()
baseFrame:EnableMouse(false)
baseFrame:SetMovable(false)
baseFrame:SetResizable(false)
end)
end
QuestieTracker:UpdateDurabilityFrame()
QuestieTracker:UpdateVoiceOverFrame()
end
function TrackerBaseFrame:SetSafePoint()
if TrackerBaseFrame.isMoving ~= true and TrackerBaseFrame.isResizing ~= true then
Questie:Debug(Questie.DEBUG_DEVELOP, "[TrackerBaseFrame:SetSafePoint]")
else
Questie:Debug(Questie.DEBUG_DEVELOP, "[TrackerBaseFrame:SetSafePoint] - Frame is moving or resizing! --> Exiting.")
return
end
local xOff, yOff = baseFrame:GetWidth() / 2, baseFrame:GetHeight() / 2
local trackerSetPoint = Questie.db.profile.trackerSetpoint
local resetCords = { ["BOTTOMLEFT"] = { x = -xOff, y = -yOff }, ["BOTTOMRIGHT"] = { x = xOff, y = -yOff }, ["TOPLEFT"] = { x = -xOff, y = yOff }, ["TOPRIGHT"] = { x = xOff, y = yOff } }
baseFrame:ClearAllPoints()
if trackerSetPoint then
baseFrame:SetPoint(trackerSetPoint, UIParent, "CENTER", resetCords[trackerSetPoint].x, resetCords[trackerSetPoint].y)
Questie.db.profile.TrackerLocation = { trackerSetPoint, "UIParent", "CENTER", resetCords[trackerSetPoint].x, resetCords[trackerSetPoint].y }
end
QuestieTracker:Update()
end
function TrackerBaseFrame.ShrinkToMinSize(minSize)
baseFrame:SetHeight(minSize)
end
---@param button string @The mouse button that is pressed when dragging starts
function TrackerBaseFrame.OnDragStart(frame, button)
if GameTooltip:IsShown() then
GameTooltip:Hide()
GameTooltip._SizerToolTip = nil
end
if InCombatLockdown() or IsShiftKeyDown() or IsAltKeyDown() then
Questie:Debug(Questie.DEBUG_DEVELOP, "[TrackerBaseFrame:OnDragStart] - In Combat or shift key or alt key detected! --> Exiting.")
return
else
if (IsControlKeyDown() and Questie.db.profile.trackerLocked and not ChatEdit_GetActiveWindow()) or not Questie.db.profile.trackerLocked then
if TrackerBaseFrame.isMoving ~= false or TrackerBaseFrame.isSizing == true then
Questie:Debug(Questie.DEBUG_DEVELOP, "[TrackerBaseFrame:OnDragStart] - Frame is already moving or frame is already resizing! --> Exiting.")
return
end
else
Questie:Debug(Questie.DEBUG_DEVELOP, "[TrackerBaseFrame:OnDragStart] - Tracker is Locked. Use CTRL Key. --> Exiting.")
return
end
end
if TrackerBaseFrame.isMoving ~= true and TrackerBaseFrame.isSizing ~= true then
if IsMouseButtonDown(button) and button ~= "MiddleButton" then
if (IsControlKeyDown() and Questie.db.profile.trackerLocked and not ChatEdit_GetActiveWindow()) or not Questie.db.profile.trackerLocked then
-- Force movability here instead of trusting baseFrame:IsMovable(), which is
-- only refreshed asynchronously by TrackerBaseFrame:Update() on unrelated
-- tracker events and is almost never in sync with the live Ctrl/lock state
-- already checked above at the moment of an actual drag attempt.
baseFrame:SetMovable(true)
Questie:Debug(Questie.DEBUG_DEVELOP, "[TrackerBaseFrame:OnDragStart] - Dragging Started.")
TrackerBaseFrame.isMoving = true
TrackerBaseFrame.baseFrame.isMoving = true
baseFrame:StartMoving()
TrackerBaseFrame:Update()
end
end
end
end
local function _UpdateTrackerPosition()
if TrackerBaseFrame.isMoving ~= true and TrackerBaseFrame.isResizing ~= true then
Questie:Debug(Questie.DEBUG_DEVELOP, "[TrackerBaseFrame:UpdateTrackerPosition]")
else
Questie:Debug(Questie.DEBUG_DEVELOP, "[TrackerBaseFrame:UpdateTrackerPosition] - Frame is moving or resizing! --> Exiting.")
return
end
local xLeft, yTop, xRight, yBottom = baseFrame:GetLeft(), baseFrame:GetTop(), baseFrame:GetRight(), baseFrame:GetBottom()
local trackerSetPoint = Questie.db.profile.trackerSetpoint
baseFrame:ClearAllPoints()
if trackerSetPoint == "BOTTOMLEFT" then
baseFrame:SetPoint("BOTTOMLEFT", UIParent, xLeft, yBottom)
Questie.db.profile.TrackerLocation = { "BOTTOMLEFT", "UIParent", "BOTTOMLEFT", xLeft, yBottom }
elseif trackerSetPoint == "BOTTOMRIGHT" then
baseFrame:SetPoint("BOTTOMRIGHT", UIParent, -(GetScreenWidth() - xRight), yBottom)
Questie.db.profile.TrackerLocation = { "BOTTOMRIGHT", "UIParent", "BOTTOMRIGHT", -(GetScreenWidth() - xRight), yBottom }
elseif trackerSetPoint == "TOPRIGHT" then
baseFrame:SetPoint("TOPRIGHT", UIParent, -(GetScreenWidth() - xRight), -(GetScreenHeight() - yTop))
Questie.db.profile.TrackerLocation = { "TOPRIGHT", "UIParent", "TOPRIGHT", -(GetScreenWidth() - xRight), -(GetScreenHeight() - yTop) }
else
baseFrame:SetPoint("TOPLEFT", UIParent, xLeft, -(GetScreenHeight() - yTop))
Questie.db.profile.TrackerLocation = { "TOPLEFT", "UIParent", "TOPLEFT", xLeft, -(GetScreenHeight() - yTop) }
end
C_Timer.After(0.12, function()
QuestieCombatQueue:Queue(function()
QuestieTracker:Update()
end)
end)
end
function TrackerBaseFrame.OnDragStop(frame, button)
if IsShiftKeyDown() or IsAltKeyDown() then
Questie:Debug(Questie.DEBUG_DEVELOP, "[TrackerBaseFrame:OnDragStop] - Shift key or alt key detected! --> Exiting.")
return
else
if TrackerBaseFrame.isMoving ~= true or TrackerBaseFrame.isSizing == true then
Questie:Debug(Questie.DEBUG_DEVELOP, "[TrackerBaseFrame:OnDragStop] - Frame isn't moving or frame is resizing! --> Exiting.")
return
end
end
if TrackerBaseFrame.isMoving ~= false and TrackerBaseFrame.isSizing ~= true then
Questie:Debug(Questie.DEBUG_DEVELOP, "[TrackerBaseFrame:OnDragStop] - Dragging Stopped.")
TrackerBaseFrame.isMoving = false
TrackerBaseFrame.baseFrame.isMoving = false
baseFrame:StopMovingOrSizing()
QuestieCombatQueue:Queue(_UpdateTrackerPosition)
end
end
---@param button string @The mouse button that is pressed when resize starts
function TrackerBaseFrame.OnResizeStart(frame, button)
if GameTooltip:IsShown() then
GameTooltip:Hide()
GameTooltip._SizerToolTip = nil
end
if InCombatLockdown() or IsAltKeyDown() then
Questie:Debug(Questie.DEBUG_DEVELOP, "[TrackerBaseFrame:OnResizeStart] - In Combat or alt key detected! --> Exiting.") -- TODO: Why is the alt key a problem?
return
else
if (IsControlKeyDown() and Questie.db.profile.trackerLocked and not ChatEdit_GetActiveWindow()) or not Questie.db.profile.trackerLocked then
if TrackerBaseFrame.isSizing ~= false or TrackerBaseFrame.isMoving == true then
Questie:Debug(Questie.DEBUG_DEVELOP, "[TrackerBaseFrame:OnResizeStart] - Frame is already resizing or frame is moving! --> Exiting.")
return
end
else
Questie:Debug(Questie.DEBUG_DEVELOP, "[TrackerBaseFrame:OnResizeStart] - Tracker is Locked. Use CTRL Key. --> Exiting.")
return
end
end
if TrackerBaseFrame.isSizing ~= true and TrackerBaseFrame.isMoving ~= true then
if IsMouseButtonDown(button) and button ~= "MiddleButton" then
if (IsControlKeyDown() and Questie.db.profile.trackerLocked and not ChatEdit_GetActiveWindow()) or not Questie.db.profile.trackerLocked then
if baseFrame:IsResizable() then
if button == "LeftButton" then
Questie:Debug(Questie.DEBUG_DEVELOP, "[TrackerBaseFrame:OnResizeStart] - Sizing Started.")
TrackerBaseFrame.isSizing = true
TrackerBaseFrame.baseFrame.isSizing = true
updateTimer = C_Timer.NewTicker(0.12, function()
local QuestieTrackerLoc = Questie.db.profile.TrackerLocation
if QuestieTrackerLoc == nil then
updateTimer:Cancel()
return
end
Questie.db.profile.TrackerWidth = baseFrame:GetWidth()
Questie.db.profile.TrackerHeight = baseFrame:GetHeight()
-- This keeps the trackers SetPoint "clamped" to the players desired location
-- while the tracker lines expand and shrink due to Text Wrapping.
baseFrame:StopMovingOrSizing()
baseFrame:ClearAllPoints()
baseFrame:SetPoint(QuestieTrackerLoc[1], QuestieTrackerLoc[2], QuestieTrackerLoc[3], QuestieTrackerLoc[4], QuestieTrackerLoc[5])
------------------------------------------------------------------------------
-- This switches ON the Tracker Background and Border and switches OFF
-- the Tracker Fader to make it easier to see the Trackers boundaries.
Questie.db.profile.trackerBackdropEnabled = true
Questie.db.profile.trackerBorderEnabled = true
Questie.db.profile.trackerBackdropFader = false
------------------------------------------------------------------------------
if QuestieTrackerLoc and (QuestieTrackerLoc[1] == "BOTTOMLEFT" or QuestieTrackerLoc[1] == "BOTTOMRIGHT") then
baseFrame:StartSizing("TOPRIGHT")
else
baseFrame:StartSizing("BOTTOMRIGHT")
end
QuestieTracker:Update()
end)
end
else
Questie:Debug(Questie.DEBUG_DEVELOP, "[TrackerBaseFrame:OnResizeStart] - Frame is not resizable!")
end
if button == "RightButton" then
Questie:Debug(Questie.DEBUG_DEVELOP, "[TrackerBaseFrame:OnResizeStart] - Resetting Sizer mode.")
Questie.db.profile.TrackerWidth = 0
Questie.db.profile.TrackerHeight = 0
end
end
end
end
end
---@param button string @The mouse button that is pressed when resize stops
function TrackerBaseFrame.OnResizeStop(frame, button)
if IsAltKeyDown() then
Questie:Debug(Questie.DEBUG_DEVELOP, "[TrackerBaseFrame:OnResizeStop] - Alt key detected! --> Exiting.") -- TODO: Why is the alt key a problem?
return
else
if TrackerBaseFrame.isSizing ~= true or TrackerBaseFrame.isMoving == true then
if button == "LeftButton" or button == "MiddleButton" then
Questie:Debug(Questie.DEBUG_DEVELOP, "[TrackerBaseFrame:OnResizeStop] - Frame isn't resizing or frame is moving! --> Exiting.")
return
end
if button == "RightButton" then
Questie:Debug(Questie.DEBUG_DEVELOP, "[TrackerBaseFrame:OnResizeStop] - Sizer mode reset. Updating Tracker.")
QuestieCombatQueue:Queue(function()
QuestieTracker:Update()
end)
return
end
end
end
if TrackerBaseFrame.isSizing ~= false and TrackerBaseFrame.isMoving ~= true then
Questie:Debug(Questie.DEBUG_DEVELOP, "[TrackerBaseFrame:OnResizeStop] - Sizing Stopped.")
TrackerBaseFrame.isSizing = false
TrackerBaseFrame.baseFrame.isSizing = false
-- This returns the players desired Background, Border and Fader to the correct setting
Questie.db.profile.trackerBackdropEnabled = Questie.db.profile.currentBackdropEnabled
Questie.db.profile.trackerBorderEnabled = Questie.db.profile.currentBorderEnabled
Questie.db.profile.trackerBackdropFader = Questie.db.profile.currentBackdropFader
baseFrame:StopMovingOrSizing()
updateTimer:Cancel()
QuestieCombatQueue:Queue(_UpdateTrackerPosition)
end
end
function TrackerBaseFrame:OnProfileChange()
local QuestieTrackerLoc = Questie.db.profile.TrackerLocation
if (not baseFrame) and Questie.db.profile.trackerEnabled then
-- The Tracker was disabled and is now enabled
QuestieTracker:Enable()
return
elseif baseFrame and (not Questie.db.profile.trackerEnabled) then
-- The Tracker was enabled and is now disabled
QuestieTracker:Disable()
return
end
if QuestieTrackerLoc then
baseFrame:ClearAllPoints()
baseFrame:SetPoint(QuestieTrackerLoc[1], QuestieTrackerLoc[2], QuestieTrackerLoc[3], QuestieTrackerLoc[4], QuestieTrackerLoc[5])
C_Timer.After(0.12, function()
QuestieCombatQueue:Queue(function()
QuestieTracker:Update()
end)
end)
else
_UpdateTrackerPosition()
end
end
_OnEnter = function(self)
if InCombatLockdown() then
if GameTooltip:IsShown() then
GameTooltip:Hide()
return
end
end
-- Set initial tooltip
if not Questie.db.profile.sizerHidden then
GameTooltip._owner = self
GameTooltip:SetOwner(self, "ANCHOR_CURSOR")
_SetSizerTooltip()
-- Update tooltip
GameTooltip._SizerToolTip = _SetSizerTooltip
end
TrackerFadeTicker.Unfade(self)
end
_SetSizerTooltip = function()
-- Set Sizer mode
local trackerSizeMode
if Questie.db.profile.TrackerHeight == 0 then
trackerSizeMode = Questie:Colorize(l10n("Auto"), "green")
else
trackerSizeMode = Questie:Colorize(l10n("Manual"), "orange")
end
if IsShiftKeyDown() then
GameTooltip:ClearLines()
GameTooltip:AddLine(Questie:Colorize(l10n("Sizer Mode") .. ": ", "white") .. trackerSizeMode)
if Questie.db.profile.trackerLocked then
GameTooltip:AddLine(Questie:Colorize(l10n("Ctrl + Left Click + Hold") .. ": ", "gray") .. l10n("Resize Tracker"))
GameTooltip:AddLine(Questie:Colorize(l10n("Ctrl + Right Click") .. ": ", "gray") .. l10n("Reset Sizer"))
else
GameTooltip:AddLine(Questie:Colorize(l10n("Left Click + Hold") .. ": ", "gray") .. l10n("Resize Tracker"))
GameTooltip:AddLine(Questie:Colorize(l10n("Right Click") .. ": ", "gray") .. l10n("Reset Sizer"))
end
GameTooltip:AddLine(" ")
GameTooltip:AddLine(Questie:Colorize(l10n("NOTE") .. ": ", "red") .. l10n("The Tracker Height Ratio\nis ignored while in Manual mode"))
GameTooltip:Show()
else
GameTooltip:ClearLines()
GameTooltip:AddLine(Questie:Colorize(l10n("Sizer Mode") .. ": ", "white") .. trackerSizeMode)
GameTooltip:AddLine(Questie:Colorize("(" .. l10n("Hold Shift") .. ")", "gray"))
GameTooltip:Show()
end
end