Files
pfUI/modules/map.lua
T
shagu d08854f1b1 map: rework some parts of the map initialization
* make use of internal pfUI api functions
* create coord text string only once
* add frame to UISpecialFrames only once
* use a fixed anchor in SetPoint
* cache scale and alpha settings
2019-05-09 20:27:21 +02:00

114 lines
3.7 KiB
Lua

pfUI:RegisterModule("map", 20400, function ()
table.insert(UISpecialFrames, "WorldMapFrame")
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 }
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: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)
end
end)
WorldMapFrame:SetScript("OnMouseDown",function()
WorldMapFrame:StartMoving()
end)
WorldMapFrame:SetScript("OnMouseUp",function()
WorldMapFrame:StopMovingOrSizing()
SaveMovable(this)
end)
WorldMapFrame:SetMovable(true)
WorldMapFrame:EnableMouse(true)
WorldMapFrame:SetAlpha(alpha)
WorldMapFrame:SetScale(scale)
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)
BlackoutWorld:Hide()
StripTextures(WorldMapFrame)
SkinButton(WorldMapZoomOutButton)
SkinCloseButton(WorldMapFrameCloseButton, WorldMapFrame, -3, -3)
SkinDropDown(WorldMapContinentDropDown)
SkinDropDown(WorldMapZoneDropDown)
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)