Files
pfUI/modules/map.lua
T
shagu 0214eebf36 core: switch from mousedown to drag functions
Due to crashes/freezes while moving some frames, one possible
reason could be that pfUI was using OnMouseDown and OnMouseUp
to run its frame-moving code. I have noticed better performance
when using the intended functions, OnDragStart and OnDragStop
to move frames.

This commit changes every occurrence of such functions and splits
drag and click into seperate functions where required.
2022-05-07 21:35:52 +02:00

140 lines
4.5 KiB
Lua

pfUI:RegisterModule("map", "vanilla:tbc", function ()
table.insert(UISpecialFrames, "WorldMapFrame")
local function UpdateTooltipScale()
-- load scale data
local tooltipscale = tonumber(C.appearance.worldmap.tooltipsize)
local scale = WorldMapFrame:GetScale()
-- apply tooltip scale
if tooltipscale > 0 then
WorldMapTooltip:SetScale(tooltipscale/scale)
else
WorldMapTooltip:SetScale(1)
end
end
-- register config update handler
pfUI.map = { UpdateConfig = UpdateTooltipScale }
function _G.ToggleWorldMap()
if WorldMapFrame:IsShown() then
WorldMapFrame:Hide()
else
WorldMapFrame:Show()
end
end
C.position["WorldMapFrame"] = C.position["WorldMapFrame"] or { alpha = 1.0, scale = 0.7 }
C.position["WorldMapFrame"].parent = nil
local alpha = C.position["WorldMapFrame"].alpha
local scale = C.position["WorldMapFrame"].scale
local pfMapLoader = CreateFrame("Frame")
pfMapLoader:RegisterEvent("PLAYER_ENTERING_WORLD")
pfMapLoader:SetScript("OnEvent", function()
-- do not load if other map addon is loaded
if Cartographer then return end
if METAMAP_TITLE then return end
UIPanelWindows["WorldMapFrame"] = { area = "center" }
WorldMapFrame:SetMovable(true)
WorldMapFrame:EnableMouse(true)
WorldMapFrame:RegisterForDrag("LeftButton")
WorldMapFrame:SetScript("OnShow", function()
-- default events
UpdateMicroButtons()
PlaySound("igQuestLogOpen")
CloseDropDownMenus()
SetMapToCurrentZone()
WorldMapFrame_PingPlayerPosition()
-- customize
this:EnableKeyboard(false)
this:EnableMouseWheel(1)
end)
WorldMapFrame:SetScript("OnMouseWheel", function()
if IsShiftKeyDown() then
alpha = clamp(WorldMapFrame:GetAlpha() + arg1/10, 0.1, 1.0)
WorldMapFrame:SetAlpha(alpha)
end
if IsControlKeyDown() then
scale = clamp(WorldMapFrame:GetScale() + arg1/10, 0.1, 2.0)
WorldMapFrame:SetScale(scale)
UpdateTooltipScale()
end
SaveMovable(this, true)
end)
WorldMapFrame:SetScript("OnDragStart",function()
WorldMapFrame:StartMoving()
end)
WorldMapFrame:SetScript("OnDragStop",function()
WorldMapFrame:StopMovingOrSizing()
SaveMovable(this, true)
end)
WorldMapFrame:SetAlpha(alpha)
WorldMapFrame:SetScale(scale)
UpdateTooltipScale()
WorldMapFrame:ClearAllPoints()
WorldMapFrame:SetPoint("CENTER", UIParent, "CENTER", 0, 0)
WorldMapFrame:SetWidth(WorldMapButton:GetWidth() + 15)
WorldMapFrame:SetHeight(WorldMapButton:GetHeight() + 55)
LoadMovable(WorldMapFrame)
-- skin
WorldMapFrameCloseButton:SetPoint("TOPRIGHT", WorldMapFrame, "TOPRIGHT", 0, 0)
CreateBackdrop(WorldMapFrame)
CreateBackdropShadow(WorldMapFrame)
BlackoutWorld:Hide()
StripTextures(WorldMapFrame)
SkinButton(WorldMapZoomOutButton)
SkinCloseButton(WorldMapFrameCloseButton, WorldMapFrame, -3, -3)
SkinDropDown(WorldMapContinentDropDown)
SkinDropDown(WorldMapZoneDropDown)
if WorldMapZoneMinimapDropDown then
SkinDropDown(WorldMapZoneMinimapDropDown)
end
local point, anchor, anchorPoint, x, y = WorldMapZoneDropDown:GetPoint()
WorldMapZoneDropDown:ClearAllPoints()
WorldMapZoneDropDown:SetPoint(point, anchor, anchorPoint, x+8, y)
-- coordinates
if not WorldMapButton.coords then
WorldMapButton.coords = CreateFrame("Frame", "pfWorldMapButtonCoords", WorldMapButton)
WorldMapButton.coords.text = WorldMapButton.coords:CreateFontString(nil, "OVERLAY")
WorldMapButton.coords.text:SetPoint("BOTTOMRIGHT", WorldMapButton, "BOTTOMRIGHT", -10, 10)
WorldMapButton.coords.text:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
WorldMapButton.coords.text:SetTextColor(1, 1, 1)
WorldMapButton.coords.text:SetJustifyH("RIGHT")
WorldMapButton.coords:SetScript("OnUpdate", function()
local width = WorldMapButton:GetWidth()
local height = WorldMapButton:GetHeight()
local mx, my = WorldMapButton:GetCenter()
local scale = WorldMapButton:GetEffectiveScale()
local x, y = GetCursorPosition()
mx = (( x / scale ) - ( mx - width / 2)) / width * 100
my = (( my + height / 2 ) - ( y / scale )) / height * 100
if MouseIsOver(WorldMapButton) then
WorldMapButton.coords.text:SetText(string.format('%.1f / %.1f', mx, my))
else
WorldMapButton.coords.text:SetText("")
end
end)
end
end)
end)