415 lines
9.3 KiB
Lua
415 lines
9.3 KiB
Lua
if not WeakAuras.IsLibsOK() then return end
|
|
local AddonName, Private = ...
|
|
|
|
local LCG = LibStub("LibCustomGlow-1.0")
|
|
local MSQ = LibStub("Masque", true);
|
|
local L = WeakAuras.L
|
|
|
|
local default = function(parentType)
|
|
local options = {
|
|
glow = false,
|
|
useGlowColor = false,
|
|
glowColor = {1, 1, 1, 1},
|
|
glowType = "buttonOverlay",
|
|
glowLines = 8,
|
|
glowFrequency = 0.25,
|
|
glowLength = 10,
|
|
glowThickness = 1,
|
|
glowScale = 1,
|
|
glowBorder = false,
|
|
glowXOffset = 0,
|
|
glowYOffset = 0,
|
|
}
|
|
if parentType == "aurabar" then
|
|
options["glowType"] = "Pixel"
|
|
options["anchor_area"] = "bar"
|
|
end
|
|
return options
|
|
end
|
|
|
|
local properties = {
|
|
glow = {
|
|
display = L["Visibility"],
|
|
setter = "SetVisible",
|
|
type = "bool",
|
|
defaultProperty = true
|
|
},
|
|
glowType = {
|
|
display =L["Type"],
|
|
setter = "SetGlowType",
|
|
type = "list",
|
|
values = Private.glow_types,
|
|
},
|
|
useGlowColor = {
|
|
display = L["Use Custom Color"],
|
|
setter = "SetUseGlowColor",
|
|
type = "bool"
|
|
},
|
|
glowColor = {
|
|
display = L["Custom Color"],
|
|
setter = "SetGlowColor",
|
|
type = "color"
|
|
},
|
|
glowLines = {
|
|
display = L["Lines & Particles"],
|
|
setter = "SetGlowLines",
|
|
type = "number",
|
|
min = 1,
|
|
softMax = 30,
|
|
bigStep = 1,
|
|
default = 4
|
|
},
|
|
glowFrequency = {
|
|
display = L["Frequency"],
|
|
setter = "SetGlowFrequency",
|
|
type = "number",
|
|
softMin = -2,
|
|
softMax = 2,
|
|
bigStep = 0.1,
|
|
default = 0.25
|
|
},
|
|
glowLength = {
|
|
display = L["Length"],
|
|
setter = "SetGlowLength",
|
|
type = "number",
|
|
min = 1,
|
|
softMax = 20,
|
|
bigStep = 1,
|
|
default = 10
|
|
},
|
|
glowThickness = {
|
|
display = L["Thickness"],
|
|
setter = "SetGlowThickness",
|
|
type = "number",
|
|
min = 1,
|
|
softMax = 20,
|
|
bigStep = 1,
|
|
default = 1
|
|
},
|
|
glowScale = {
|
|
display = L["Scale"],
|
|
setter = "SetGlowScale",
|
|
type = "number",
|
|
min = 0.05,
|
|
softMax = 10,
|
|
bigStep = 0.05,
|
|
default = 1,
|
|
isPercent = true
|
|
},
|
|
glowBorder = {
|
|
display = L["Border"],
|
|
setter = "SetGlowBorder",
|
|
type = "bool"
|
|
},
|
|
glowXOffset = {
|
|
display = L["X-Offset"],
|
|
setter = "SetGlowXOffset",
|
|
type = "number",
|
|
softMin = -100,
|
|
softMax = 100,
|
|
bigStep = 1,
|
|
default = 0
|
|
},
|
|
glowYOffset = {
|
|
display = L["Y-Offset"],
|
|
setter = "SetGlowYOffset",
|
|
type = "number",
|
|
softMin = -100,
|
|
softMax = 100,
|
|
bigStep = 1,
|
|
default = 0
|
|
},
|
|
}
|
|
|
|
local function glowStart(self, frame, color)
|
|
|
|
if frame:GetWidth() < 1 or frame:GetHeight() < 1 then
|
|
self.glowStop(frame)
|
|
return
|
|
end
|
|
|
|
if self.glowType == "buttonOverlay" then
|
|
self.glowStart(frame, color, self.glowFrequency, 0)
|
|
elseif self.glowType == "Pixel" then
|
|
self.glowStart(
|
|
frame,
|
|
color,
|
|
self.glowLines,
|
|
self.glowFrequency,
|
|
self.glowLength,
|
|
self.glowThickness,
|
|
self.glowXOffset,
|
|
self.glowYOffset,
|
|
self.glowBorder,
|
|
nil,
|
|
0
|
|
)
|
|
elseif self.glowType == "ACShine" then
|
|
self.glowStart(
|
|
frame,
|
|
color,
|
|
self.glowLines,
|
|
self.glowFrequency,
|
|
self.glowScale,
|
|
self.glowXOffset,
|
|
self.glowYOffset,
|
|
nil,
|
|
0
|
|
)
|
|
end
|
|
end
|
|
|
|
local funcs = {
|
|
SetVisible = function(self, visible)
|
|
local color
|
|
self.glow = visible
|
|
|
|
if self.useGlowColor then
|
|
color = self.glowColor
|
|
end
|
|
|
|
if MSQ and self.parentType == "icon" then
|
|
if (visible) then
|
|
self.__MSQ_Shape = self:GetParent().button.__MSQ_Shape
|
|
self:Show()
|
|
glowStart(self, self, color)
|
|
else
|
|
self.glowStop(self)
|
|
self:Hide()
|
|
end
|
|
elseif (visible) then
|
|
self:Show()
|
|
glowStart(self, self, color)
|
|
else
|
|
self.glowStop(self)
|
|
self:Hide()
|
|
end
|
|
end,
|
|
SetGlowType = function(self, newType)
|
|
newType = newType or "buttonOverlay"
|
|
if newType == self.glowType then
|
|
return
|
|
end
|
|
|
|
local isGlowing = self.glow
|
|
if isGlowing then
|
|
self:SetVisible(false)
|
|
end
|
|
|
|
if newType == "buttonOverlay" then
|
|
self.glowStart = LCG.ButtonGlow_Start
|
|
self.glowStop = LCG.ButtonGlow_Stop
|
|
if self.parentRegionType ~= "aurabar" then
|
|
self.parent:AnchorSubRegion(self, "area", "region")
|
|
end
|
|
elseif newType == "ACShine" then
|
|
self.glowStart = LCG.AutoCastGlow_Start
|
|
self.glowStop = LCG.AutoCastGlow_Stop
|
|
if self.parentRegionType ~= "aurabar" then
|
|
self.parent:AnchorSubRegion(self, "area")
|
|
end
|
|
elseif newType == "Pixel" then
|
|
self.glowStart = LCG.PixelGlow_Start
|
|
self.glowStop = LCG.PixelGlow_Stop
|
|
if self.parentRegionType ~= "aurabar" then
|
|
self.parent:AnchorSubRegion(self, "area")
|
|
end
|
|
end
|
|
self.glowType = newType
|
|
if isGlowing then
|
|
self:SetVisible(true)
|
|
end
|
|
end,
|
|
SetUseGlowColor = function(self, useGlowColor)
|
|
self.useGlowColor = useGlowColor
|
|
if self.glow then
|
|
self:SetVisible(true)
|
|
end
|
|
end,
|
|
SetGlowColor = function(self, r, g, b, a)
|
|
self.glowColor = {r, g, b, a}
|
|
if self.glow then
|
|
self:SetVisible(true)
|
|
end
|
|
end,
|
|
SetGlowLines = function(self, lines)
|
|
self.glowLines = lines
|
|
if self.glow then
|
|
if self.glowType == "ACShine" then -- workaround ACShine not updating numbers of dots
|
|
self:SetVisible(false)
|
|
end
|
|
self:SetVisible(true)
|
|
end
|
|
end,
|
|
SetGlowFrequency = function(self, frequency)
|
|
self.glowFrequency = frequency
|
|
if self.glow then
|
|
self:SetVisible(true)
|
|
end
|
|
end,
|
|
SetGlowLength = function(self, length)
|
|
self.glowLength = length
|
|
if self.glow then
|
|
self:SetVisible(true)
|
|
end
|
|
end,
|
|
SetGlowThickness = function(self, thickness)
|
|
self.glowThickness = thickness
|
|
if self.glow then
|
|
self:SetVisible(true)
|
|
end
|
|
end,
|
|
SetGlowScale = function(self, scale)
|
|
self.glowScale = scale
|
|
if self.glow then
|
|
self:SetVisible(true)
|
|
end
|
|
end,
|
|
SetGlowBorder = function(self, border)
|
|
self.glowBorder = border
|
|
if self.glow then
|
|
self:SetVisible(true)
|
|
end
|
|
end,
|
|
SetGlowXOffset = function(self, xoffset)
|
|
self.glowXOffset = xoffset
|
|
if self.glow then
|
|
self:SetVisible(true)
|
|
end
|
|
end,
|
|
SetGlowYOffset = function(self, yoffset)
|
|
self.glowYOffset = yoffset
|
|
if self.glow then
|
|
self:SetVisible(true)
|
|
end
|
|
end,
|
|
UpdateSize = function(self, ...)
|
|
if self.glow then
|
|
self:SetVisible(true)
|
|
end
|
|
end
|
|
}
|
|
|
|
local function create()
|
|
local region = CreateFrame("Frame", nil, UIParent)
|
|
|
|
for name, func in pairs(funcs) do
|
|
region[name] = func
|
|
end
|
|
|
|
return region
|
|
end
|
|
|
|
local function onAcquire(subRegion)
|
|
subRegion:Show()
|
|
end
|
|
|
|
local function onRelease(subRegion)
|
|
subRegion.glowType = nil
|
|
subRegion:Hide()
|
|
subRegion:ClearAllPoints()
|
|
subRegion:SetParent(UIParent)
|
|
end
|
|
|
|
local function modify(parent, region, parentData, data, first)
|
|
region:SetParent(parent)
|
|
region.parentRegionType = parentData.regionType
|
|
region.parent = parent
|
|
|
|
region.parentType = parentData.regionType
|
|
region.useGlowColor = data.useGlowColor
|
|
region.glowColor = data.glowColor
|
|
region.glowLines = data.glowLines
|
|
region.glowFrequency = data.glowFrequency
|
|
region.glowLength = data.glowLength
|
|
region.glowThickness = data.glowThickness
|
|
region.glowScale = data.glowScale
|
|
region.glowBorder = data.glowBorder
|
|
region.glowXOffset = data.glowXOffset
|
|
region.glowYOffset = data.glowYOffset
|
|
|
|
region:SetGlowType(data.glowType)
|
|
region:SetVisible(data.glow)
|
|
|
|
region:SetScript("OnSizeChanged", region.UpdateSize)
|
|
|
|
region.Anchor = function()
|
|
if parentData.regionType == "aurabar" then
|
|
parent:AnchorSubRegion(region, "area", data.anchor_area)
|
|
else
|
|
parent:AnchorSubRegion(region, "area", (data.glowType == "buttonOverlay" or data.glowType == "Proc") and "region")
|
|
end
|
|
end
|
|
end
|
|
|
|
-- This is used by the templates to add glow
|
|
function Private.getDefaultGlow(regionType)
|
|
if regionType == "aurabar" then
|
|
return {
|
|
["type"] = "subglow",
|
|
glow = false,
|
|
useGlowColor = false,
|
|
glowColor = {1, 1, 1, 1},
|
|
glowType = "Pixel",
|
|
glowLines = 8,
|
|
glowFrequency = 0.25,
|
|
glowLength = 10,
|
|
glowThickness = 1,
|
|
glowScale = 1,
|
|
glowBorder = false,
|
|
glowXOffset = 0,
|
|
glowYOffset = 0,
|
|
anchor_area = "bar"
|
|
}
|
|
else
|
|
return {
|
|
["type"] = "subglow",
|
|
glow = false,
|
|
useGlowColor = false,
|
|
glowColor = {1, 1, 1, 1},
|
|
glowType = "buttonOverlay",
|
|
glowLines = 8,
|
|
glowFrequency = 0.25,
|
|
glowLength = 10,
|
|
glowThickness = 1,
|
|
glowScale = 1,
|
|
glowBorder = false,
|
|
glowXOffset = 0,
|
|
glowYOffset = 0,
|
|
}
|
|
end
|
|
end
|
|
|
|
local supportedRegion = {
|
|
icon = true,
|
|
aurabar = true,
|
|
texture = true,
|
|
progresstexture = true,
|
|
empty = true,
|
|
}
|
|
local function supports(regionType)
|
|
return supportedRegion[regionType]
|
|
end
|
|
|
|
local function addDefaultsForNewAura(data)
|
|
if data.regionType == "icon" then
|
|
tinsert(data.subRegions, {
|
|
["type"] = "subglow",
|
|
glow = false,
|
|
useGlowColor = false,
|
|
glowColor = {1, 1, 1, 1},
|
|
glowType = "buttonOverlay",
|
|
glowLines = 8,
|
|
glowFrequency = 0.25,
|
|
glowLength = 10,
|
|
glowThickness = 1,
|
|
glowScale = 1,
|
|
glowBorder = false,
|
|
glowXOffset = 0,
|
|
glowYOffset = 0,
|
|
})
|
|
end
|
|
end
|
|
|
|
WeakAuras.RegisterSubRegionType("subglow", L["Glow"], supports, create, modify, onAcquire, onRelease, default, addDefaultsForNewAura, properties);
|