mirror of
https://github.com/brues-code/pfUI.git
synced 2026-09-22 15:46:56 +00:00
193 lines
6.5 KiB
Lua
193 lines
6.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
|
|
|
|
-- hook SetMapToCurrentZone to allow suppression
|
|
local pfOrigSetMapToCurrentZone = _G.SetMapToCurrentZone
|
|
_G.SetMapToCurrentZone = function()
|
|
if C.appearance.worldmap.autozoneswitch == "0" and WorldMapFrame:IsShown() then return end
|
|
pfOrigSetMapToCurrentZone()
|
|
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")
|
|
|
|
-- make sure the hooks get only applied once
|
|
if not this.hooked then
|
|
this.hooked = true
|
|
|
|
HookScript(WorldMapFrame, "OnShow", function()
|
|
-- customize
|
|
this:EnableKeyboard(false)
|
|
this:EnableMouseWheel(1)
|
|
|
|
-- set back to default scale
|
|
WorldMapFrame:SetScale(scale or .85)
|
|
|
|
-- always switch to current zone when opening the map
|
|
pfOrigSetMapToCurrentZone()
|
|
end)
|
|
|
|
HookScript(WorldMapFrame, "OnMouseWheel", function()
|
|
if IsShiftKeyDown() then
|
|
alpha = clamp(WorldMapFrame:GetAlpha() + arg1/10, 0.1, 1.0)
|
|
WorldMapFrame:SetAlpha(alpha)
|
|
end
|
|
|
|
if IsControlKeyDown() then
|
|
local oldscale = WorldMapFrame:GetScale()
|
|
local point, rel, relpoint, offx, offy = WorldMapFrame:GetPoint()
|
|
scale = clamp(oldscale + arg1/10, 0.1, 2.0)
|
|
|
|
-- recalculate world frame position based on old and new scale
|
|
if point == "TOPLEFT" and relpoint == "TOPLEFT" then
|
|
offx = offx*oldscale/scale
|
|
offy = offy*oldscale/scale
|
|
WorldMapFrame:SetPoint(point, rel, relpoint, offx, offy)
|
|
end
|
|
|
|
WorldMapFrame:SetScale(scale)
|
|
UpdateTooltipScale()
|
|
end
|
|
|
|
SaveMovable(this, true)
|
|
end)
|
|
|
|
HookScript(WorldMapFrame, "OnDragStart", function()
|
|
WorldMapFrame:StartMoving()
|
|
end)
|
|
|
|
HookScript(WorldMapFrame, "OnDragStop",function()
|
|
WorldMapFrame:StopMovingOrSizing()
|
|
SaveMovable(this, true)
|
|
end)
|
|
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)
|
|
|
|
-- "Switch to current zone" toggle (left side of titlebar)
|
|
if not pfUI.map.autozoneswitch then
|
|
local btn = CreateFrame("CheckButton", "pfUI_map_autozoneswitch", WorldMapFrame, "UICheckButtonTemplate")
|
|
btn:SetNormalTexture("")
|
|
btn:SetPushedTexture("")
|
|
btn:SetHighlightTexture("")
|
|
btn.text = _G["pfUI_map_autozoneswitchText"]
|
|
CreateBackdrop(btn, nil, true)
|
|
btn:SetWidth(14)
|
|
btn:SetHeight(14)
|
|
btn:SetPoint("RIGHT", WorldMapContinentDropDown, "LEFT", -8, 2)
|
|
btn.text:ClearAllPoints()
|
|
btn.text:SetPoint("RIGHT", btn, "LEFT", -4, 1)
|
|
btn.text:SetJustifyH("RIGHT")
|
|
btn.text:SetText(T["Switch to current zone"])
|
|
btn:SetScript("OnShow", function()
|
|
this:SetChecked(C.appearance.worldmap.autozoneswitch == "1")
|
|
end)
|
|
btn:SetScript("OnClick", function()
|
|
if this:GetChecked() then
|
|
C.appearance.worldmap.autozoneswitch = "1"
|
|
pfOrigSetMapToCurrentZone()
|
|
else
|
|
C.appearance.worldmap.autozoneswitch = "0"
|
|
end
|
|
end)
|
|
pfUI.map.autozoneswitch = btn
|
|
end
|
|
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()
|
|
|
|
if mx and my then
|
|
mx = (( x / scale ) - ( mx - width / 2)) / width * 100
|
|
my = (( my + height / 2 ) - ( y / scale )) / height * 100
|
|
end
|
|
|
|
if mx and my and MouseIsOver(WorldMapButton) then
|
|
WorldMapButton.coords.text:SetText(string.format('%.1f / %.1f', mx, my))
|
|
else
|
|
WorldMapButton.coords.text:SetText("")
|
|
end
|
|
end)
|
|
end
|
|
end)
|
|
|
|
pfUI.map.loader = pfMapLoader
|
|
end) |