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

640 lines
20 KiB
Lua

local E, L, V, P, G = unpack(ElvUI)
local S = E:GetModule("Skins")
local AS = E:GetModule("AddOnSkins")
if not AS:IsAddonLODorEnabled("DBM-Core") then return end
local _G = _G
local unpack = unpack
local find, gsub = string.find, string.gsub
local CreateFrame = CreateFrame
local hooksecurefunc = hooksecurefunc
-- Deadly Boss Mods 4.52 r4442
-- https://www.curseforge.com/wow/addons/deadly-boss-mods/files/447605
S:AddCallbackForAddon("DBM-Core", "DBM-Core", function()
if not E.private.addOnSkins.DBM then return end
local backportVersion = DBM.ReleaseRevision > 7000
local backportVersion2 = DBM.ReleaseRevision >= 20220412000000 -- 9.2.14
local function createIconOverlay(id, parent)
local frame = CreateFrame("Frame", "$parentIcon" .. id .. "Overlay", parent)
frame:SetTemplate()
if id == 1 then
if E.db.addOnSkins.DBMSkinHalf then
frame:Point("BOTTOMRIGHT", parent, "BOTTOMLEFT", -10 * (E.Border + E.Spacing), 0)
else
frame:Point("RIGHT", parent, "LEFT", -(E.Border + E.Spacing), 0)
end
elseif E.db.addOnSkins.DBMSkinHalf then
frame:Point("BOTTOMLEFT", parent, "BOTTOMRIGHT", 10 * (E.Border + E.Spacing), 0)
else
frame:Point("LEFT", parent, "RIGHT", (E.Border + E.Spacing), 0)
end
local backdroptex = frame:CreateTexture(nil, "BORDER")
backdroptex:SetTexture("Interface\\Icons\\Spell_Nature_WispSplode")
backdroptex:SetInside(frame)
backdroptex:SetTexCoord(unpack(E.TexCoords))
return frame
end
local function applyStyle(self)
local db = E.db.addOnSkins
local frame = self.frame
local frameName = frame:GetName()
local bar = _G[frameName .. "Bar"]
local background = _G[frameName .. "BarBackground"]
local icon1 = _G[frameName .. "BarIcon1"]
local icon2 = _G[frameName .. "BarIcon2"]
local name = _G[frameName .. "BarName"]
local timer = _G[frameName .. "BarTimer"]
local spark = _G[frameName .. "BarSpark"]
local scale = self.enlarged and self.owner.options.HugeScale or self.owner.options.Scale
local barWidth = (self.enlarged and self.owner.options.HugeWidth or self.owner.options.Width) * scale
local barHeight = (backportVersion2 and (self.enlarged and self.owner.options.HugeHeight or self.owner.options.Height) or db.dbmBarHeight) * scale
local fontSize = db.dbmFontSize * scale
background:Hide()
spark:Hide()
frame._SetPoint = frame.SetPoint
self._bar = bar
self._icon1 = icon1
self._icon2 = icon2
self._name = name
self._timer = timer
self._font = E.LSM:Fetch("font", db.dbmFont)
if not icon1.overlay then
icon1.overlay = createIconOverlay(1, frame)
icon1:SetTexCoord(unpack(E.TexCoords))
icon1:SetParent(icon1.overlay)
icon1:SetInside(icon1.overlay)
end
if not icon2.overlay then
icon2.overlay = createIconOverlay(2, frame)
icon2:SetTexCoord(unpack(E.TexCoords))
icon2:SetParent(icon2.overlay)
icon2:SetInside(icon2.overlay)
end
frame:SetScale(1)
frame:SetTemplate(db.dbmTemplate)
bar:SetInside(frame)
frame:Size(barWidth, db.DBMSkinHalf and barHeight / 3 or barHeight)
bar:Size(barWidth, barHeight)
icon1.overlay:Size(barHeight)
icon2.overlay:Size(barHeight)
name:ClearAllPoints()
timer:ClearAllPoints()
if db.DBMSkinHalf then
if not self.owner.options.BarYOffset or self.owner.options.BarYOffset < 20 then
self.owner.options.BarYOffset = 20
end
if not self.owner.options.HugeBarYOffset or self.owner.options.HugeBarYOffset < 20 then
self.owner.options.HugeBarYOffset = 20
end
name:Point("BOTTOMLEFT", frame, "TOPLEFT", 0, 3)
if backportVersion then
name:Point("BOTTOMRIGHT", timer, "BOTTOMLEFT")
end
timer:Point("BOTTOMRIGHT", frame, "TOPRIGHT", 1, 3)
else
name:Point("LEFT", 5, 0)
if backportVersion then
name:Point("RIGHT", timer, "LEFT")
end
timer:Point("RIGHT", -5, 0)
end
if not backportVersion then
name:SetFont(self._font, fontSize, db.dbmFontOutline)
timer:SetFont(self._font, fontSize, db.dbmFontOutline)
end
if self.owner.options.IconLeft then
icon1.overlay:Show()
else
icon1.overlay:Hide()
end
if self.owner.options.IconRight then
icon2.overlay:Show()
else
icon2.overlay:Hide()
end
end
local function skinBars(self)
local db = E.db.addOnSkins
for bar in self:GetBarIterator() do
if not bar.injected then
hooksecurefunc(bar, "Update", function()
local sparkEnabled = DBT.Options.Spark
if not (db.DBMSkinHalf and sparkEnabled) then return end
local spark = _G[bar.frame:GetName().."BarSpark"]
spark:SetSize(12, ((bar.enlarged and DBT.Options.HugeHeight or DBT.Options.Height) * 3) - 2)
local a, b, c, d = spark:GetPoint()
spark:SetPoint(a, b, c, d, 0)
end)
hooksecurefunc(bar, "ApplyStyle", function()
local frame = bar.frame
local tbar = _G[frame:GetName().."Bar"]
local icon1 = _G[frame:GetName().."BarIcon1"]
local icon2 = _G[frame:GetName().."BarIcon2"]
local name = _G[frame:GetName().."BarName"]
local timer = _G[frame:GetName().."BarTimer"]
local iconSize = (bar.enlarged and DBT.Options.HugeHeight or DBT.Options.Height) * db.dbmIconSize
if db.DBMSkinHalf then
iconSize = iconSize * 2
end
if not icon1.overlay then
icon1.overlay = createIconOverlay(1, frame)
icon1:SetTexCoord(unpack(E.TexCoords))
icon1:SetParent(icon1.overlay)
icon1:SetInside(icon1.overlay)
end
icon1.overlay:SetSize(iconSize, iconSize)
if not icon2.overlay then
icon2.overlay = createIconOverlay(2, frame)
icon2:SetTexCoord(unpack(E.TexCoords))
icon2:SetParent(icon2.overlay)
icon2:SetInside(icon2.overlay)
end
icon2.overlay:SetSize(iconSize, iconSize)
frame:SetTemplate(db.dbmTemplate)
tbar:SetInside(frame)
name:ClearAllPoints()
name:SetWidth(165)
name:SetHeight(8)
name:SetJustifyH("LEFT")
name:SetShadowColor(0, 0, 0, 0)
timer:ClearAllPoints()
timer:SetJustifyH("RIGHT")
timer:SetShadowColor(0, 0, 0, 0)
if db.DBMSkinHalf then
name:SetPoint("BOTTOMLEFT", frame, "TOPLEFT", 0, 3)
name:SetPoint("BOTTOMRIGHT", timer, "BOTTOMLEFT") -- truncation
timer:SetPoint("BOTTOMRIGHT", frame, "TOPRIGHT", -1, 1)
else
name:SetPoint("LEFT", frame, "LEFT", 4, 0)
name:SetPoint("RIGHT", timer, "LEFT") -- truncation
timer:SetPoint("RIGHT", frame, "RIGHT", -4, 0)
end
if DBT.Options.IconLeft then icon1.overlay:Show() else icon1.overlay:Hide() end
if DBT.Options.IconRight then icon2.overlay:Show() else icon2.overlay:Hide() end
bar.injected = true
end)
bar:ApplyStyle()
end
end
end
local function correctPoint(self, p1, a, p2, x, y)
self._SetPoint(self, p1, a, p2, x, y - 40)
self.SetPoint = nil
end
local function preUpdate(self, elapsed)
if (self.timer - elapsed > 0) and self.moving == "move" and self.moveElapsed <= 0.5 and self.owner.options.ExpandUpwards then
self.frame.SetPoint = correctPoint
end
end
local function setPosition(self)
if self.moving == "enlarge" then return end
local enlarged = self.enlarged
local expandUpwards = backportVersion and (enlarged and self.owner.options.ExpandUpwardsLarge or self.owner.options.ExpandUpwards) or self.owner.options.ExpandUpwards
local anchor = (self.prev and self.prev.frame) or (self.enlarged and self.owner.secAnchor) or self.owner.mainAnchor
self.frame:ClearAllPoints()
if expandUpwards then
self.frame:SetPoint("BOTTOM", anchor, "TOP", self.owner.options[enlarged and "HugeBarXOffset" or "BarXOffset"], self.owner.options[enlarged and "HugeBarYOffset" or "BarYOffset"])
else
self.frame:SetPoint("TOP", anchor, "BOTTOM", self.owner.options[enlarged and "HugeBarXOffset" or "BarXOffset"], -self.owner.options[enlarged and "HugeBarYOffset" or "BarYOffset"])
end
end
local function moveToNextPosition(self, oldX, oldY)
if self.moving == "enlarge" then return end
local enlarged = self.enlarged
local expandUpwards = backportVersion and (enlarged and self.owner.options.ExpandUpwardsLarge or self.owner.options.ExpandUpwards) or self.owner.options.ExpandUpwards
local newAnchor = (self.prev and self.prev.frame) or (self.enlarged and self.owner.secAnchor) or self.owner.mainAnchor
oldX = oldX or (self.frame:GetRight() - self.frame:GetWidth() / 2)
if expandUpwards then
oldY = oldY or self.frame:GetTop() + self.owner.options[enlarged and "HugeBarYOffset" or "BarYOffset"]
else
oldY = oldY or self.frame:GetTop() - self.owner.options[enlarged and "HugeBarYOffset" or "BarYOffset"]
end
self.frame:ClearAllPoints()
if expandUpwards then
self.movePoint = "BOTTOM"
self.moveRelPoint = "TOP"
self.frame:SetPoint("BOTTOM", newAnchor, "TOP", self.owner.options[enlarged and "HugeBarXOffset" or "BarXOffset"], self.owner.options[enlarged and "HugeBarYOffset" or "BarYOffset"])
else
self.movePoint = "TOP"
self.moveRelPoint = "BOTTOM"
self.frame:SetPoint("TOP", newAnchor, "BOTTOM", self.owner.options[enlarged and "HugeBarXOffset" or "BarXOffset"], -self.owner.options[enlarged and "HugeBarYOffset" or "BarYOffset"])
end
local newX = self.frame:GetRight() - self.frame:GetWidth() / 2
local newY = self.frame:GetTop()
self.moveAnchor = newAnchor
self.moveOffsetX = -(newX - oldX)
self.moveOffsetY = -(newY - oldY)
self.moveElapsed = 0
if self.owner.options.BarStyle ~= "NoAnim" then
self.frame:ClearAllPoints()
self.frame:SetPoint(self.movePoint, newAnchor, self.moveRelPoint, self.moveOffsetX, self.moveOffsetY)
self.moving = "move"
end
end
local function enlarge(self)
local newAnchor = (self.owner.hugeBars.last and self.owner.hugeBars.last.frame) or self.owner.secAnchor
local oldX = self.frame:GetRight() - self.frame:GetWidth() / 2
local oldY = self.frame:GetTop()
local enlarged = self.enlarged
local expandUpwards = backportVersion and (enlarged and self.owner.options.ExpandUpwardsLarge or self.owner.options.ExpandUpwards) or self.owner.options.ExpandUpwards
self.frame:ClearAllPoints()
if expandUpwards then
self.movePoint = "BOTTOM"
self.moveRelPoint = "TOP"
self.frame:SetPoint("BOTTOM", newAnchor, "TOP", self.owner.options[enlarged and "HugeBarXOffset" or "BarXOffset"], self.owner.options[enlarged and "HugeBarYOffset" or "BarYOffset"])
else
self.movePoint = "TOP"
self.moveRelPoint = "BOTTOM"
self.frame:SetPoint("TOP", newAnchor, "BOTTOM", self.owner.options[enlarged and "HugeBarXOffset" or "BarXOffset"], -self.owner.options[enlarged and "HugeBarYOffset" or "BarYOffset"])
end
local newX = self.frame:GetRight() - self.frame:GetWidth() / 2
local newY = self.frame:GetTop()
self.moving = self.owner.options.BarStyle == "NoAnim" and "nextEnlarge" or "enlarge"
self.moveAnchor = newAnchor
self.moveOffsetX = -(newX - oldX)
self.moveOffsetY = -(newY - oldY)
self.moveElapsed = 0
self.frame:ClearAllPoints()
self.frame:SetPoint("TOP", newAnchor, "BOTTOM", self.moveOffsetX, self.moveOffsetY)
end
local function animateEnlarge(self, elapsed)
self.moveElapsed = self.moveElapsed + elapsed
if self.moveElapsed < 1 then
local options = self.owner.options
local newX = self.moveOffsetX + (options.HugeBarXOffset - self.moveOffsetX) * (self.moveElapsed / 1)
local newY = self.moveOffsetY + (options.HugeBarYOffset - self.moveOffsetY) * (self.moveElapsed / 1)
local newWidth = options.Width + (options.HugeWidth - options.Width) * (self.moveElapsed / 1)
local newScale = options.Scale + (options.HugeScale - options.Scale) * (self.moveElapsed / 1)
self.frame:ClearAllPoints()
self.frame:SetPoint(self.movePoint, self.moveAnchor, self.moveRelPoint, newX, newY)
local db = E.db.addOnSkins
local width = newWidth
local iconHeight = db.dbmBarHeight * newScale
local height = (db.DBMSkinHalf and iconHeight / 3) or iconHeight
local fontSize = db.dbmFontSize * newScale
self.frame:Size(width, height)
self._bar:Size(width, height)
self._icon1.overlay:Size(iconHeight)
self._icon2.overlay:Size(iconHeight)
self._name:SetFont(self._font, fontSize, db.dbmFontOutline)
self._timer:SetFont(self._font, fontSize, db.dbmFontOutline)
else
self.moving = nil
self.enlarged = true
self.owner.hugeBars:Append(self)
self:ApplyStyle()
self:SetPosition()
end
end
if backportVersion2 then
hooksecurefunc(DBT, "CreateBar", skinBars)
else
S:SecureHook(DBT, "CreateBar", function(self)
local hooked
for bar in pairs(self.bars) do
if not hooked then
local mt = getmetatable(bar).__index
hooksecurefunc(mt, "ApplyStyle", applyStyle)
if not backportVersion then
S:Hook(mt, "Update", preUpdate)
end
mt.SetPosition = setPosition
mt.MoveToNextPosition = moveToNextPosition
mt.Enlarge = enlarge
mt.AnimateEnlarge = animateEnlarge
hooked = true
end
bar:ApplyStyle()
bar:SetPosition()
end
S:Unhook(DBT, "CreateBar")
end)
end
local function SkinBoss()
local db = E.db.addOnSkins
local count = 1
local bar = _G["DBM_BossHealth_Bar_" .. count]
local barName, background, progress, name, timer
local point1, anchor, point2
while bar do
point1, anchor, point2 = bar:GetPoint()
if not point1 then return end
barName = bar:GetName()
background = _G[barName .. "BarBorder"]
progress = _G[barName .. "Bar"]
name = _G[barName .. "BarName"]
timer = _G[barName .. "BarTimer"]
bar:ClearAllPoints()
bar:Height(db.dbmBarHeight)
bar:SetTemplate("Transparent")
background:SetNormalTexture(nil)
progress:SetStatusBarTexture(E.media.normTex)
progress:ClearAllPoints()
progress:SetInside(bar)
name:ClearAllPoints()
name:Point("LEFT", bar, "LEFT", 4, 0)
name:SetFont(E.LSM:Fetch("font", db.dbmFont), db.dbmFontSize, db.dbmFontOutline)
timer:ClearAllPoints()
timer:Point("RIGHT", bar, "RIGHT", -4, 0)
timer:SetFont(E.LSM:Fetch("font", db.dbmFont), db.dbmFontSize, db.dbmFontOutline)
if DBM.Options.HealthFrameGrowUp then
bar:Point(point1, anchor, point2, 0, count == 1 and 8 or 4)
else
bar:Point(point1, anchor, point2, 0, -(count == 1 and 8 or 4))
end
count = count + 1
bar = _G["DBM_BossHealth_Bar_" .. count]
end
end
hooksecurefunc(DBM.BossHealth, "Show", SkinBoss)
hooksecurefunc(DBM.BossHealth, "AddBoss", SkinBoss)
hooksecurefunc(DBM.BossHealth, "UpdateSettings", SkinBoss)
S:SecureHook(DBM.RangeCheck, "Show", function(self)
if not DBMRangeCheck then return end
DBMRangeCheck:SetTemplate("Transparent")
E:GetModule("Tooltip"):HookScript(DBMRangeCheck, "OnShow", "SetStyle")
S:Unhook(self, "Show")
end)
if backportVersion then
S:RawHook(DBM, "AddWarning", function(self, text, ...)
if find(text, " |T") then
text = gsub(text, "(:12:12)", ":18:18:0:0:64:64:5:59:5:59")
end
return S.hooks[DBM].AddWarning(self, text, ...)
end)
else
S:RawHook("RaidNotice_AddMessage", function(noticeFrame, textString, colorInfo)
if find(textString, " |T") then
textString = gsub(textString, "(:12:12)", ":18:18:0:0:64:64:5:59:5:59")
end
return S.hooks.RaidNotice_AddMessage(noticeFrame, textString, colorInfo)
end, true)
end
if DBM.ShowUpdateReminder then
S:SecureHook(DBM, "ShowUpdateReminder", function(self)
DBMUpdateReminder:SetTemplate("Transparent")
DBMUpdateReminder:EnableMouse(true)
local editBox, button = DBMUpdateReminder:GetChildren()
local left, right, middle = select(6, DBMUpdateReminder:GetChildren():GetRegions())
left:Hide()
right:Hide()
middle:Hide()
editBox:Height(22)
S:HandleEditBox(editBox)
S:HandleButton(button)
S:Unhook(self, "ShowUpdateReminder")
end)
end
end)
S:AddCallbackForAddon("DBM-GUI", "DBM-GUI", function()
if not E.private.addOnSkins.DBM then return end
local backportVersion2 = DBM.ReleaseRevision >= 20220412000000 -- 9.2.14
DBM_GUI_OptionsFrame:SetTemplate("Transparent")
DBM_GUI_OptionsFrameHeader:Point("TOP", 0, 7)
DBM_GUI_OptionsFrameHeader:Hide()
DBM_GUI_OptionsFramePanelContainer:SetTemplate("Transparent")
if backportVersion2 then
for i = 1, #DBM_GUI.tabs do -- can be variable
S:HandleTab(_G["DBM_GUI_OptionsFrameTab" .. i])
end
else
S:HandleTab(DBM_GUI_OptionsFrameTab1)
S:HandleTab(DBM_GUI_OptionsFrameTab2)
end
DBM_GUI_OptionsFrameTab1:Point("BOTTOMLEFT", backportVersion2 and DBM_GUI_OptionsFrameList or DBM_GUI_OptionsFrameBossMods, "TOPLEFT", 6, -4)
DBM_GUI_OptionsFrameTab1Text:SetPoint("CENTER", 0, 0)
DBM_GUI_OptionsFrameTab2Text:SetPoint("CENTER", 0, 0)
S:HandleScrollBar(DBM_GUI_OptionsFramePanelContainerFOVScrollBar)
DBM_GUI_OptionsFramePanelContainerFOVScrollBar:Point("TOPRIGHT", 18, -16)
DBM_GUI_OptionsFramePanelContainerFOVScrollBar:Point("BOTTOMRIGHT", 18, 14)
S:HandleButton(DBM_GUI_OptionsFrameOkay)
if DBM_GUI_OptionsFrameWebsiteButton then
S:HandleButton(DBM_GUI_OptionsFrameWebsiteButton)
end
if backportVersion2 then
for _, button in ipairs(DBM_GUI_OptionsFrameList.buttons) do
S:HandleCollapseTexture(button.toggle)
end
end
S:SecureHookScript(DBM_GUI_OptionsFrame, "OnShow", function(self)
if backportVersion2 then
DBM_GUI_OptionsFrameList:StripTextures()
DBM_GUI_OptionsFrameList:SetTemplate("Transparent")
S:HandleScrollBar(DBM_GUI_OptionsFrameListListScrollBar)
DBM_GUI_OptionsFrameListListScrollBar:Point("TOPRIGHT", 1, -18)
DBM_GUI_OptionsFrameListListScrollBar:Point("BOTTOMLEFT", 7, 18)
else
DBM_GUI_OptionsFrameBossMods:StripTextures()
DBM_GUI_OptionsFrameBossMods:SetTemplate("Transparent")
DBM_GUI_OptionsFrameBossModsList:StripTextures()
S:HandleScrollBar(DBM_GUI_OptionsFrameBossModsListScrollBar)
DBM_GUI_OptionsFrameBossModsListScrollBar:Point("TOPRIGHT", 1, -18)
DBM_GUI_OptionsFrameBossModsListScrollBar:Point("BOTTOMLEFT", 7, 18)
for _, button in ipairs(DBM_GUI_OptionsFrameBossMods.buttons) do
S:HandleCollapseExpandButton(button.toggle, "auto")
button.toggle:Point("TOPLEFT", 3, 0)
end
DBM_GUI_OptionsFrameDBMOptions:StripTextures()
DBM_GUI_OptionsFrameDBMOptions:SetTemplate("Transparent")
DBM_GUI_OptionsFrameDBMOptionsList:StripTextures()
S:HandleScrollBar(DBM_GUI_OptionsFrameDBMOptionsListScrollBar)
DBM_GUI_OptionsFrameDBMOptionsListScrollBar:Point("TOPRIGHT", 1, -18)
DBM_GUI_OptionsFrameDBMOptionsListScrollBar:Point("BOTTOMLEFT", 7, 18)
for _, button in ipairs(DBM_GUI_OptionsFrameDBMOptions.buttons) do
S:HandleCollapseExpandButton(button.toggle, "auto")
button.toggle:Point("TOPLEFT", 3, 0)
end
end
S:Unhook(self, "OnShow")
end)
--[[
hooksecurefunc(DBM_GUI_OptionsFrame, "DisplayButton", function(self, button, element)
button.toggle:Point("LEFT", 8 * element.depth - 5, 2);
end)
--]]
S:RawHook(DBM_GUI, "CreateNewPanel", function(self, ...)
local panel = S.hooks[DBM_GUI].CreateNewPanel(self, ...)
local PanelPrototype = getmetatable(panel).__index
hooksecurefunc(PanelPrototype, "CreateArea", function(this)
this.areas[#this.areas].frame:SetTemplate("Transparent", nil, true)
this.areas[#this.areas].frame:SetBackdropColor(0, 0, 0, 0)
end)
--[[
S:RawHook(PanelPrototype, "CreateCheckButton", function(this, name, autoplace, ...)
local button = S.hooks[PanelPrototype].CreateCheckButton(this, name, autoplace, ...)
if button then
S:HandleCheckBox(button, true)
if autoplace then
local _, lastObj = button:GetPoint()
if lastObj.mytype == "checkbutton" then
button:Point("TOPLEFT", lastObj, "BOTTOMLEFT", 0, -7)
end
end
return button
end
end)
S:RawHook(PanelPrototype, "CreateEditBox", function(this, ...)
local editbox = S.hooks[PanelPrototype].CreateEditBox(this, ...)
S:HandleEditBox(editbox)
return editbox
end)
S:RawHook(PanelPrototype, "CreateSlider", function(this, ...)
local slider = S.hooks[PanelPrototype].CreateSlider(this, ...)
S:HandleSliderFrame(slider)
return slider
end)
S:RawHook(PanelPrototype, "CreateButton", function(this, ...)
local button = S.hooks[PanelPrototype].CreateButton(this, ...)
S:HandleButton(button)
return button
end)
--]]
S:Unhook(DBM_GUI, "CreateNewPanel")
return panel
end)
--[[
DBM_GUI_DropDown:SetTemplate("Transparent")
local dropdownArrowColor = {1, 0.8, 0}
S:RawHook(DBM_GUI, "CreateDropdown", function(self, ...)
local dropdown = S.hooks[DBM_GUI].CreateDropdown(self, ...)
local frameName = dropdown:GetName()
local button = _G[frameName.."Button"]
local text = _G[frameName.."Text"]
dropdown:StripTextures()
dropdown:SetTemplate()
dropdown:Size(dropdown:GetWidth(), 20)
if button then
S:HandleNextPrevButton(button, "down", dropdownArrowColor)
button:ClearAllPoints()
button:Point("RIGHT", dropdown, "RIGHT", -3, 0)
button:Size(16)
end
if text then
text:ClearAllPoints()
text:Point("RIGHT", button, "LEFT", -3, 0)
end
return dropdown
end)
--]]
end)