You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

138 lines
4.6 KiB

--[[
Krowi's World Map Buttons License
Copyright ©2020 The contents of this library, excluding third-party resources, are
copyrighted to their authors with all rights reserved.
This library is free to use and the authors hereby grants you the following rights:
1. You may make modifications to this library for private use only, you
may not publicize any portion of this library. The only exception being you may
upload to the github website.
2. Do not modify the name of this library, including the library folders.
3. This copyright notice shall be included in all copies or substantial
portions of the Software.
All rights not explicitly addressed in this license are reserved by
the copyright holders.
]]
local lib = LibStub:NewLibrary('Krowi_WorldMapButtons-1.4', 6);
if not lib then
return;
end
local version = (GetBuildInfo());
local major = string.match(version, "(%d+)%.(%d+)%.(%d+)(%w?)");
lib.IsClassic = major == "1";
lib.IsTbcClassic = major == "2";
lib.IsWrathClassic = major == "3";
lib.HasNoOverlay = lib.IsClassic or lib.IsTbcClassic or lib.IsWrathClassic;
lib.IsDragonflight = major == "10";
lib.IsTheWarWithin = major == "11";
lib.IsMainline = lib.IsDragonflight or lib.IsTheWarWithin;
local AddButton;
local function Fix1_4_3Buttons()
if lib.HasNoOverlay then
for _, button in next, lib.Buttons do
button:SetParent(WorldMapFrame.ScrollContainer);
button:SetFrameStrata("TOOLTIP");
end
end
Fix1_4_3Buttons = function() end;
end
lib.XOffset, lib.YOffset = 4, -2;
function lib:SetOffsets(xOffset, yOffset)
self.XOffset = xOffset or self.XOffset;
self.YOffset = yOffset or self.YOffset;
end
function lib.SetPoints()
Fix1_4_3Buttons();
local xOffset = lib.XOffset;
for _, button in next, lib.Buttons do
if button:IsShown() then
button:SetPoint("TOPRIGHT", button.relativeFrame, -xOffset, lib.YOffset);
xOffset = xOffset + 32;
end
end
end
local function HookDefaultButtons()
if WorldMapFrame.overlayFrames == nil then
lib.HookedDefaultButtons = true;
return;
end
for _, f in next, WorldMapFrame.overlayFrames do
if WorldMapTrackingOptionsButtonMixin and f.OnLoad == WorldMapTrackingOptionsButtonMixin.OnLoad then
f.KrowiWorldMapButtonsIndex = #lib.Buttons;
tinsert(lib.Buttons, f);
end
if WorldMapTrackingPinButtonMixin and f.OnLoad == WorldMapTrackingPinButtonMixin.OnLoad then
f.KrowiWorldMapButtonsIndex = #lib.Buttons;
tinsert(lib.Buttons, f);
end
if WorldMapShowLegendButtonMixin and f.OnLoad == WorldMapShowLegendButtonMixin.OnLoad then
f.KrowiWorldMapButtonsIndex = #lib.Buttons;
tinsert(lib.Buttons, f);
end
end
lib.HookedDefaultButtons = true;
end
local function PatchWrathClassic()
if lib.HasNoOverlay and WorldMapFrame.RefreshOverlayFrames == nil then
WorldMapFrame.RefreshOverlayFrames = function()
end
end
PatchWrathClassic = function() end;
end
function AddButton(button)
local xOffset = 4 + lib.NumButtons * 32;
button:SetPoint("TOPRIGHT", WorldMapFrame:GetCanvasContainer(), "TOPRIGHT", -xOffset, -2);
button.relativeFrame = WorldMapFrame:GetCanvasContainer();
hooksecurefunc(WorldMapFrame, lib.HasNoOverlay and "OnMapChanged" or "RefreshOverlayFrames", function()
button:Refresh();
lib.SetPoints();
end);
tinsert(lib.Buttons, button);
return button;
end
function lib:Add(templateName, templateType)
if self.Buttons == nil then
self.Buttons = self.buttons or {}; -- 'Krowi_WorldMapButtons-1.4', 1 compatibility
if NumKrowi_WorldMapButtons then
NumKrowi_WorldMapButtons = NumKrowi_WorldMapButtons - 1; -- 'Krowi_WorldMapButtons-1.4', 1 compatibility
end
self.NumButtons = NumKrowi_WorldMapButtons or 0; -- 'Krowi_WorldMapButtons-1.4', 1 compatibility
end
if not self.HookedDefaultButtons then
HookDefaultButtons();
end
PatchWrathClassic();
self.NumButtons = self.NumButtons + 1;
local button = CreateFrame(templateType, "Krowi_WorldMapButtons" .. self.NumButtons, lib.HasNoOverlay and WorldMapFrame.ScrollContainer or WorldMapFrame, templateName);
if lib.HasNoOverlay then
button:SetFrameStrata("TOOLTIP");
end
return AddButton(button);
end