Quantcast

skin wa

rawoil [09-28-21 - 03:23]
skin wa
Filename
rSkin/modules/WeakAuras.lua
rSkin/rSkin.toc
diff --git a/rSkin/modules/WeakAuras.lua b/rSkin/modules/WeakAuras.lua
new file mode 100644
index 0000000..7657243
--- /dev/null
+++ b/rSkin/modules/WeakAuras.lua
@@ -0,0 +1,101 @@
+local A, L = ...
+
+-- credit: ndui
+local pairs, unpack = pairs, unpack
+local buttonConfig = rLib.CopyTable(rButtonTemplate_Zork_ActionButtonConfig)
+buttonConfig.backdrop.bgColor = buttonConfig.backdrop.backgroundColor
+buttonConfig.backdrop.edgeColor = buttonConfig.backdrop.borderColor
+buttonConfig.backdrop.inset = 3
+
+local function IconBgOnUpdate(self)
+	self:SetAlpha(self.__icon:GetAlpha())
+	if self.__shadow then
+		self.__shadow:SetAlpha(self.__icon:GetAlpha())
+	end
+end
+
+local function UpdateIconTexCoord(icon)
+	if icon.isCutting then return end
+	icon.isCutting = true
+
+	local width, height = icon:GetSize()
+	if width ~= 0 and height ~= 0 then
+		local left, right, top, bottom = unpack(buttonConfig.icon.texCoord) -- normal icon
+		local ratio = width/height
+		if ratio > 1 then -- fat icon
+			local offset = (1 - 1/ratio) / 2
+			top = top + offset
+			bottom = bottom - offset
+		elseif ratio < 1 then -- thin icon
+			local offset = (1 - ratio) / 2
+			left = left + offset
+			bottom = bottom - offset
+		end
+		icon:SetTexCoord(left, right, top, bottom)
+	end
+
+	icon.isCutting = nil
+end
+
+local function SkinWeakAuras(f, fType)
+	if fType == "icon" then
+		if not f.styled then
+			UpdateIconTexCoord(f.icon)
+			hooksecurefunc(f.icon, "SetTexCoord", UpdateIconTexCoord)
+			f.bg = L.CreateBackdrop(f, nil, buttonConfig.backdrop)
+			f.bg:SetFrameLevel(0)
+			f.bg.__icon = f.icon
+			f.bg:HookScript("OnUpdate", IconBgOnUpdate)
+
+			f.styled = true
+		end
+	elseif fType == "aurabar" then
+		if not f.styled then
+			f.bg = L.CreateBackdrop(f.bar)
+			f.bg:SetFrameLevel(0)
+			UpdateIconTexCoord(f.icon)
+			hooksecurefunc(f.icon, "SetTexCoord", UpdateIconTexCoord)
+			f.iconFrame:SetAllPoints(f.icon) -- needs review
+
+			f.styled = true
+		end
+	end
+end
+
+local function ReskinWA()
+    if not IsAddOnLoaded("WeakAuras") then return end
+
+	local regionTypes = WeakAuras.regionTypes
+	local CreateIcon, ModifyIcon = regionTypes.icon.create, regionTypes.icon.modify
+	local CreateAuraBar, ModifyAuraBar = regionTypes.aurabar.create, regionTypes.aurabar.modify
+
+	regionTypes.icon.create = function(parent, data)
+		local region = CreateIcon(parent, data)
+		SkinWeakAuras(region, "icon")
+		return region
+	end
+
+	regionTypes.aurabar.create = function(parent)
+		local region = CreateAuraBar(parent)
+		SkinWeakAuras(region, "aurabar")
+		return region
+	end
+
+	regionTypes.icon.modify = function(parent, region, data)
+		ModifyIcon(parent, region, data)
+		SkinWeakAuras(region, "icon")
+	end
+
+	regionTypes.aurabar.modify = function(parent, region, data)
+		ModifyAuraBar(parent, region, data)
+		SkinWeakAuras(region, "aurabar")
+	end
+
+	for _, regions in pairs(WeakAuras.regions) do
+		if regions.regionType == "icon" or regions.regionType == "aurabar" then
+			SkinWeakAuras(regions.region, regions.regionType)
+		end
+	end
+end
+
+rSkin:RegisterSkin("WeakAuras", ReskinWA)
\ No newline at end of file
diff --git a/rSkin/rSkin.toc b/rSkin/rSkin.toc
index a18827f..a6978a6 100644
--- a/rSkin/rSkin.toc
+++ b/rSkin/rSkin.toc
@@ -9,4 +9,5 @@ init.lua
 modules\ls_Toasts.lua
 modules\Details.lua
 modules\BigWigs.lua
-modules\DBM.lua
\ No newline at end of file
+modules\DBM.lua
+modules\WeakAuras.lua
\ No newline at end of file