Files
coa-elvui/ElvUI_AddOnSkins/Skins/Addons/chatBar.lua
T

188 lines
5.4 KiB
Lua

local E, L, V, P, G = unpack(ElvUI)
local S = E:GetModule("Skins")
local AS = E:GetModule("AddOnSkins")
if not AS:IsAddonLODorEnabled("ChatBar") then return end
local _G = _G
local abs = math.abs
-- ChatBar 3.1
S:AddCallbackForAddon("ChatBar", "ChatBar", function()
if not E.private.addOnSkins.ChatBar then return end
local db = E.db.addOnSkins
if ChatBar_ButtonScale then
ChatBar_ButtonScale = 1
end
ChatBar_UpdateArt = E.noop
ChatBar_Toggle_LargeButtons = E.noop
ChatBarFrameBackground:SetOutside()
ChatBarFrameBackground:SetTemplate("Transparent")
for i = 1, 20 do
local button = _G["ChatBarFrameButton" .. i]
local center = _G["ChatBarFrameButton" .. i .. "Center"]
local highlight = _G["ChatBarFrameButton" .. i .. "Highlight"]
local flash = _G["ChatBarFrameButton" .. i .. "Flash"]
button:StripTextures()
button:SetTemplate()
button:SetScale(1)
button:Size(db.chatBarSize)
center:SetInside()
highlight:SetInside()
flash:SetInside()
center:SetTexture(1, 1, 1)
highlight:SetTexture(1, 1, 1, 0.5)
flash:SetTexture(1, 1, 1, 0.5)
highlight:SetBlendMode("MOD")
flash:SetTexture("MOD")
end
ChatBarFrame:SetScript("OnUpdate", function(self, elapsed)
if self.slidingEnabled and self.isSliding and self.velocity and self.endsize then
local currSize = ChatBar_GetSize()
if abs(currSize - self.endsize) < ConstantSnapLimit then
ChatBar_SetSize(self.endsize)
ChatBarFrame.isSliding = nil
self.velocity = 0
if ChatBar_VerticalDisplay_Sliding or ChatBar_AlternateDisplay_Sliding or ChatBar_LargeButtons_Sliding then
if ChatBar_VerticalDisplay_Sliding then
ChatBar_VerticalDisplay_Sliding = nil
ChatBar_Toggle_VerticalButtonOrientation()
elseif ChatBar_AlternateDisplay_Sliding then
ChatBar_AlternateDisplay_Sliding = nil
ChatBar_Toggle_AlternateButtonOrientation()
elseif ChatBar_LargeButtons_Sliding then
ChatBar_LargeButtons_Sliding = nil
ChatBar_UpdateButtons()
end
ChatBar_UpdateOrientationPoint()
else
ChatBar_UpdateOrientationPoint(true)
end
else
local desiredVelocity = ConstantVelocityModifier * (self.endsize - currSize)
local acceleration = ConstantJerk * (desiredVelocity - self.velocity)
self.velocity = self.velocity + acceleration * elapsed
ChatBar_SetSize(currSize + self.velocity * elapsed)
end
local frame
for i = 1, CHAT_BAR_MAX_BUTTONS do
frame = _G["ChatBarFrameButton" .. i]
if currSize >= (i * (db.chatBarSize + db.chatBarSpacing) - db.chatBarSpacing) then
frame:Show()
else
frame:Hide()
end
end
elseif self.count then
if self.count > CHAT_BAR_UPDATE_DELAY then
self.count = nil
ChatBarFrame.slidingEnabled = true
ChatBar_UpdateButtons()
else
self.count = self.count + 1
end
end
end)
function ChatBar_UpdateButtonOrientation()
local button = ChatBarFrameButton1
button:ClearAllPoints()
button.Text:ClearAllPoints()
button.Text:SetPoint(db.chatBarTextPoint, button, db.chatBarTextPoint, db.chatBarTextXOffset, db.chatBarTextYOffset)
if ChatBar_VerticalDisplay then
if ChatBar_AlternateOrientation then
button:SetPoint("TOP", "ChatBarFrame", "TOP", 0, -db.chatBarSpacing)
else
button:SetPoint("BOTTOM", "ChatBarFrame", "BOTTOM", 0, db.chatBarSpacing)
end
else
if ChatBar_AlternateOrientation then
button:SetPoint("RIGHT", "ChatBarFrame", "RIGHT", -db.chatBarSpacing, 0)
else
button:SetPoint("LEFT", "ChatBarFrame", "LEFT", db.chatBarSpacing, 0)
end
end
for i = 2, CHAT_BAR_MAX_BUTTONS do
button = _G["ChatBarFrameButton"..i]
button:ClearAllPoints()
button.Text:ClearAllPoints()
button.Text:SetPoint(db.chatBarTextPoint, button, db.chatBarTextPoint, db.chatBarTextXOffset, db.chatBarTextYOffset)
if ChatBar_VerticalDisplay then
if ChatBar_AlternateOrientation then
button:SetPoint("TOP", "ChatBarFrameButton"..(i-1), "BOTTOM", 0, -db.chatBarSpacing)
else
button:SetPoint("BOTTOM", "ChatBarFrameButton"..(i-1), "TOP", 0, db.chatBarSpacing)
end
else
if ChatBar_AlternateOrientation then
button:SetPoint("RIGHT", "ChatBarFrameButton"..(i-1), "LEFT", -db.chatBarSpacing, 0)
else
button:SetPoint("LEFT", "ChatBarFrameButton"..(i-1), "RIGHT", db.chatBarSpacing, 0)
end
end
end
end
hooksecurefunc("ChatBar_UpdateButtons", function()
local i, buttonIndex = 1, 1
if not ChatBar_HideAllButtons then
while ChatBar_ChatTypes[i] and buttonIndex <= 20 do
if ChatBar_ChatTypes[i].show() then
_G["ChatBarFrameButton" .. buttonIndex]:Size(db.chatBarSize)
_G["ChatBarFrameButton" .. buttonIndex]:SetAlpha(1)
buttonIndex = buttonIndex + 1
end
i = i + 1
end
end
local size = (buttonIndex - 1) * (db.chatBarSize + db.chatBarSpacing) + db.chatBarSpacing
if ChatBar_VerticalDisplay then
ChatBarFrame:SetWidth(db.chatBarSize + (db.chatBarSpacing * 2))
if ChatBarFrame:GetTop() then
ChatBar_StartSlidingTo(size)
else
ChatBarFrame:SetHeight(size)
end
else
ChatBarFrame:SetHeight(db.chatBarSize + (db.chatBarSpacing * 2))
if ChatBarFrame:GetRight() then
ChatBar_StartSlidingTo(size)
else
ChatBarFrame:SetWidth(size)
end
end
while buttonIndex <= 20 do
_G["ChatBarFrameButton" .. buttonIndex]:SetAlpha(0)
buttonIndex = buttonIndex + 1
end
end)
ChatBar_UpdateButtonOrientation()
E:GetModule("Tooltip"):HookScript(ChatBarFrameTooltip, "OnShow", "SetStyle")
end)