64a310bc80
Adds the button to ElvUI's anchor/mover system, disables native dragging so it doesn't conflict, filters the now-broken "Reset Position" dropdown entry (scoped to this menu only), and raises the mover overlay above the minimap so it's grabbable in config mode.
100 lines
2.2 KiB
Lua
100 lines
2.2 KiB
Lua
local E, L, V, P, G = unpack(ElvUI)
|
|
local CoA = E:GetModule("CoA")
|
|
|
|
local BUTTON_NAME = "LayerPickerFrame"
|
|
|
|
do
|
|
local orig_AddButton = UIDropDownMenu_AddButton
|
|
UIDropDownMenu_AddButton = function(info, level)
|
|
if info and info.text == "Reset Position" and UIDROPDOWNMENU_INIT_MENU == LayerPickerFrameDropDown then
|
|
return
|
|
end
|
|
|
|
return orig_AddButton(info, level)
|
|
end
|
|
end
|
|
|
|
local function DisableDrag(button)
|
|
if button.CoADragDisabled then return end
|
|
button.CoADragDisabled = true
|
|
|
|
button:SetScript("OnDragStart", nil)
|
|
button:SetScript("OnDragStop", nil)
|
|
end
|
|
|
|
local function SetupMover(button)
|
|
if CoA.layerPickerMoverCreated then return end
|
|
|
|
local width, height = button:GetSize()
|
|
if width == 0 or height == 0 then return end
|
|
|
|
local left, bottom = button:GetLeft(), button:GetBottom()
|
|
if not left or not bottom then return end
|
|
|
|
CoA.layerPickerMoverCreated = true
|
|
|
|
local holder = CreateFrame("Frame", "CoA_LayerPickerHolder", E.UIParent)
|
|
holder:Size(width, height)
|
|
holder:Point("BOTTOMLEFT", E.UIParent, "BOTTOMLEFT", left, bottom)
|
|
|
|
E:CreateMover(holder, "CoA_LayerPickerMover", "Instance", nil, nil, nil, nil, nil, "CoA,skin,instance")
|
|
holder:SetAllPoints(_G["CoA_LayerPickerMover"])
|
|
_G["CoA_LayerPickerMover"]:SetFrameStrata("FULLSCREEN")
|
|
|
|
local function Anchor()
|
|
button:ClearAllPoints()
|
|
button:SetPoint("CENTER", holder, "CENTER")
|
|
end
|
|
|
|
if InCombatLockdown() then
|
|
CoA:RegisterEvent("PLAYER_REGEN_ENABLED", function()
|
|
Anchor()
|
|
CoA:UnregisterEvent("PLAYER_REGEN_ENABLED")
|
|
end)
|
|
else
|
|
Anchor()
|
|
end
|
|
end
|
|
|
|
local function SkinButton(button)
|
|
if button.CoASkinned then return end
|
|
button.CoASkinned = true
|
|
|
|
local name = button:GetName()
|
|
local text = _G[name.."Text"]
|
|
|
|
button:StripTextures(true)
|
|
button:CreateBackdrop("Default")
|
|
button:StyleButton()
|
|
|
|
if text then
|
|
text:FontTemplate()
|
|
end
|
|
end
|
|
|
|
local function TryHook()
|
|
local button = _G[BUTTON_NAME]
|
|
|
|
if button then
|
|
DisableDrag(button)
|
|
SetupMover(button)
|
|
|
|
if E.private.CoA.instance then
|
|
SkinButton(button)
|
|
end
|
|
end
|
|
|
|
return button ~= nil
|
|
end
|
|
|
|
function CoA:InitializeLayerPicker()
|
|
if TryHook() then return end
|
|
|
|
self.layerPickerTimer = self:ScheduleRepeatingTimer(function()
|
|
if TryHook() then
|
|
self:CancelTimer(self.layerPickerTimer)
|
|
self.layerPickerTimer = nil
|
|
end
|
|
end, 0.5)
|
|
end
|