5eaec81f02
Matches the Exiles fork-layout convention (each addon in its own folder).
135 lines
4.1 KiB
Lua
135 lines
4.1 KiB
Lua
local mod = Chatter:NewModule("All Edge resizing","AceHook-3.0")
|
|
local L = LibStub("AceLocale-3.0"):GetLocale("Chatter")
|
|
mod.modName = L["All Edge resizing"]
|
|
|
|
function mod:Info()
|
|
return L["Allows you to use the edge for resizing, instead of just the lower right corner."]
|
|
end
|
|
|
|
local anchorPoints = { "TopLeft", "TopRight", "BottomLeft", "BottomRight", "Top", "Right", "Left", "Bottom" }
|
|
|
|
function mod:OnInitialize()
|
|
|
|
end
|
|
|
|
local function ChatFrame_StartResizing(self)
|
|
local chatFrame = self:GetParent()
|
|
if chatFrame.isLocked then return end
|
|
if chatFrame.isDocked and chatFrame ~= DEFAULT_CHAT_FRAME then return end
|
|
chatFrame.resizing = 1
|
|
chatFrame:StartSizing(self.anchorPoint)
|
|
end
|
|
|
|
local function ChatFrame_StopResizing(self)
|
|
local chatFrame = self:GetParent()
|
|
chatFrame:StopMovingOrSizing()
|
|
if chatFrame == DEFAULT_CHAT_FRAME then
|
|
FCF_DockUpdate()
|
|
end
|
|
chatFrame.resizing = nil
|
|
FCF_SavePositionAndDimensions(chatFrame);
|
|
end
|
|
|
|
function mod:SetChatWindowLocked(index, locked, ...)
|
|
local f = _G["ChatFrame" .. index]
|
|
for _, v in ipairs(anchorPoints) do
|
|
local k = "resize" .. v
|
|
if f[k] then
|
|
f[k]:EnableMouse(not locked)
|
|
end
|
|
end
|
|
return self.hooks.SetChatWindowLocked(index, locked, ...)
|
|
end
|
|
|
|
function mod:MakeResizers(frame)
|
|
local f = frame
|
|
if not f.resizeTopLeft then
|
|
f.background = _G[("ChatFrame%dBackground"):format(frame:GetID())]
|
|
for _, v in ipairs(anchorPoints) do
|
|
local k = "resize" .. v
|
|
f[k] = CreateFrame("Button", "ChatFrame" .. frame:GetID() .. "Resize" .. v, f)
|
|
f[k].anchorPoint = v:upper()
|
|
f[k]:SetWidth(16)
|
|
f[k]:SetHeight(16)
|
|
f[k]:SetScript("OnMouseDown", ChatFrame_StartResizing)
|
|
f[k]:SetScript("OnMouseUp", ChatFrame_StopResizing)
|
|
LowerFrameLevel(f[k])
|
|
end
|
|
f.resizeTopLeft:SetPoint("TOPLEFT", f.background, -2, 2)
|
|
f.resizeTopRight:SetPoint("TOPRIGHT", f.background, 2, 2)
|
|
f.resizeBottomLeft:SetPoint("BOTTOMLEFT", f.background, -2, -3)
|
|
f.resizeBottomRight:SetPoint("BOTTOMRIGHT", f.background, 2, -3)
|
|
f.resizeTop:SetPoint("LEFT", f.resizeTopLeft, "RIGHT", 0, 0)
|
|
f.resizeTop:SetPoint("RIGHT", f.resizeTopRight, "LEFT", 0, 0)
|
|
f.resizeRight:SetPoint("TOP", f.resizeTopRight, "BOTTOM", 0, 0)
|
|
f.resizeRight:SetPoint("BOTTOM", f.resizeBottomRight, "TOP", 0, 0)
|
|
f.resizeBottom:SetPoint("LEFT", f.resizeBottomLeft, "RIGHT", 0, 0)
|
|
f.resizeBottom:SetPoint("RIGHT", f.resizeBottomRight, "LEFT", 0, 0)
|
|
f.resizeLeft:SetPoint("TOP", f.resizeTopLeft, "BOTTOM", 0, 0)
|
|
f.resizeLeft:SetPoint("BOTTOM", f.resizeBottomLeft, "TOP", 0, 0)
|
|
else
|
|
f.resizeTopLeft:Show()
|
|
f.resizeTopRight:Show()
|
|
f.resizeBottomLeft:Show()
|
|
f.resizeBottomRight:Show()
|
|
f.resizeTop:Show()
|
|
f.resizeTop:Show()
|
|
f.resizeRight:Show()
|
|
f.resizeRight:Show()
|
|
f.resizeBottom:Show()
|
|
f.resizeBottom:Show()
|
|
f.resizeLeft:Show()
|
|
f.resizeLeft:Show()
|
|
end
|
|
end
|
|
|
|
function mod:HideResizers(f)
|
|
f.resizeTopLeft:Hide()
|
|
f.resizeTopRight:Hide()
|
|
f.resizeBottomLeft:Hide()
|
|
f.resizeBottomRight:Hide()
|
|
f.resizeTop:Hide()
|
|
f.resizeTop:Hide()
|
|
f.resizeRight:Hide()
|
|
f.resizeRight:Hide()
|
|
f.resizeBottom:Hide()
|
|
f.resizeBottom:Hide()
|
|
f.resizeLeft:Hide()
|
|
f.resizeLeft:Hide()
|
|
end
|
|
|
|
function mod:OnEnable()
|
|
for i = 1, NUM_CHAT_WINDOWS do
|
|
local f = _G[("ChatFrame%d"):format(i)]
|
|
self:MakeResizers(f)
|
|
local b = _G[("ChatFrame%dResizeButton"):format(i)]
|
|
b:SetScript("OnShow", b.Hide)
|
|
b:Hide()
|
|
end
|
|
for index,name in ipairs(self.TempChatFrames) do
|
|
local f = _G[name]
|
|
self:MakeResizers(f)
|
|
local b = _G[("ChatFrame%dResizeButton"):format(f:GetID())]
|
|
b:SetScript("OnShow", b.Hide)
|
|
b:Hide()
|
|
end
|
|
self:RawHook("SetChatWindowLocked",true)
|
|
end
|
|
|
|
function mod:OnDisable()
|
|
for i = 1, NUM_CHAT_WINDOWS do
|
|
local f = _G["ChatFrame"..i]
|
|
self:HideResizers(f)
|
|
local b = _G[("ChatFrame%dResizeButton"):format(f:GetID())]
|
|
b:SetScript("OnShow", b.Show)
|
|
b:Show()
|
|
end
|
|
for index,name in ipairs(self.TempChatFrames) do
|
|
local f = _G[name]
|
|
self:HideResizers(f)
|
|
local b = _G[("ChatFrame%dResizeButton"):format(f:GetID())]
|
|
b:SetScript("OnShow", b.Show)
|
|
b:Show()
|
|
end
|
|
self:UnhookAll()
|
|
end |