You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
180 lines
4.0 KiB
180 lines
4.0 KiB
|
5 years ago
|
--[[
|
||
|
|
|
||
|
|
This file is part of 'Masque', an add-on for World of Warcraft. For bug reports,
|
||
|
|
suggestions and license information, please visit https://github.com/SFX-WoW/Masque.
|
||
|
|
|
||
|
|
* File...: Core\Button.lua
|
||
|
|
* Author.: StormFX, JJSheets
|
||
|
|
|
||
|
|
Button-Skinning API
|
||
|
|
|
||
|
|
]]
|
||
|
|
|
||
|
|
local _, Core = ...
|
||
|
|
|
||
|
|
----------------------------------------
|
||
|
|
-- Lua
|
||
|
|
---
|
||
|
|
|
||
|
|
local pairs, type = pairs, type
|
||
|
|
|
||
|
|
----------------------------------------
|
||
|
|
-- Internal
|
||
|
|
---
|
||
|
|
|
||
|
|
-- @ Skins\Skins
|
||
|
|
local Skins = Core.Skins
|
||
|
|
|
||
|
|
-- @ Skins\Regions
|
||
|
|
local RegTypes = Core.RegTypes
|
||
|
|
|
||
|
|
-- @ Core\Utility
|
||
|
|
local GetScale = Core.GetScale
|
||
|
|
|
||
|
|
-- @ Core\Regions\*
|
||
|
|
local SkinBackdrop, SkinCooldown, SkinFrame = Core.SkinBackdrop, Core.SkinCooldown, Core.SkinFrame
|
||
|
|
local SkinGloss, SkinIcon, SkinIconBorder = Core.SkinGloss, Core.SkinIcon, Core.SkinIconBorder
|
||
|
|
local SkinMask, SkinNewItem, SkinNormal = Core.SkinMask, Core.SkinNewItem, Core.SkinNormal
|
||
|
|
local SkinQuestBorder, SkinShadow, SkinText = Core.SkinQuestBorder, Core.SkinShadow, Core.SkinText
|
||
|
|
local SkinTexture, UpdateSpellAlert = Core.SkinTexture, Core.UpdateSpellAlert
|
||
|
|
|
||
|
|
----------------------------------------
|
||
|
|
-- Locals
|
||
|
|
---
|
||
|
|
|
||
|
|
local __Empty = {}
|
||
|
|
|
||
|
|
----------------------------------------
|
||
|
|
-- Core
|
||
|
|
---
|
||
|
|
|
||
|
|
-- Applies a skin to a button and its associated layers.
|
||
|
|
function Core.SkinButton(Button, Regions, SkinID, Backdrop, Shadow, Gloss, Colors, Pulse)
|
||
|
|
if not Button then return end
|
||
|
|
|
||
|
|
local bType = Button.__MSQ_bType
|
||
|
|
local Skin, Disabled
|
||
|
|
|
||
|
|
if SkinID then
|
||
|
|
Skin = Skins[SkinID] or Skins.Classic
|
||
|
|
else
|
||
|
|
local Addon = Button.__MSQ_Addon or false
|
||
|
|
Skin = Skins[Addon] or Skins.Default
|
||
|
|
Disabled = true
|
||
|
|
Pulse = true
|
||
|
|
end
|
||
|
|
|
||
|
|
Button.__MSQ_Enabled = (not Disabled and true) or nil
|
||
|
|
Button.__MSQ_Shape = Skin.Shape
|
||
|
|
|
||
|
|
if Disabled or type(Colors) ~= "table" then
|
||
|
|
Colors = __Empty
|
||
|
|
end
|
||
|
|
|
||
|
|
local xScale, yScale = GetScale(Button)
|
||
|
|
|
||
|
|
-- Mask
|
||
|
|
local Mask = Skin.Mask
|
||
|
|
|
||
|
|
if Mask then
|
||
|
|
SkinMask(nil, Button, Mask, xScale, yScale)
|
||
|
|
end
|
||
|
|
|
||
|
|
-- Backdrop
|
||
|
|
local FloatingBG = Button.FloatingBG or Regions.Backdrop
|
||
|
|
|
||
|
|
if Disabled then
|
||
|
|
Backdrop = (FloatingBG and true) or false
|
||
|
|
end
|
||
|
|
|
||
|
|
SkinBackdrop(Backdrop, FloatingBG, Button, Skin.Backdrop, Colors.Backdrop, xScale, yScale)
|
||
|
|
|
||
|
|
-- Icon
|
||
|
|
local Icon = Regions.Icon
|
||
|
|
|
||
|
|
if Icon then
|
||
|
|
SkinIcon(Icon, Button, Skin.Icon, xScale, yScale)
|
||
|
|
end
|
||
|
|
|
||
|
|
-- Shadow
|
||
|
|
Shadow = (Shadow and not Disabled) or false
|
||
|
|
SkinShadow(Shadow, Button, Skin.Shadow, Colors.Shadow, xScale, yScale)
|
||
|
|
|
||
|
|
-- Normal
|
||
|
|
local Normal = Regions.Normal
|
||
|
|
|
||
|
|
if Normal ~= false then
|
||
|
|
SkinNormal(Normal, Button, Skin.Normal, Colors.Normal, xScale, yScale)
|
||
|
|
end
|
||
|
|
|
||
|
|
-- FontStrings and Textures
|
||
|
|
local Layers = RegTypes[bType] or RegTypes.Legacy
|
||
|
|
|
||
|
|
for Layer, Info in pairs(Layers) do
|
||
|
|
if Info.Iterate then
|
||
|
|
local Region = Regions[Layer]
|
||
|
|
local Type = Info.Type
|
||
|
|
|
||
|
|
if Region then
|
||
|
|
if Type == "FontString" then
|
||
|
|
SkinText(Layer, Region, Button, Skin[Layer], xScale, yScale)
|
||
|
|
else
|
||
|
|
SkinTexture(Layer, Region, Button, Skin[Layer], Colors[Layer], xScale, yScale)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
-- IconBorder
|
||
|
|
local IconBorder = Regions.IconBorder
|
||
|
|
|
||
|
|
if IconBorder then
|
||
|
|
SkinIconBorder(IconBorder, Button, Skin.IconBorder, xScale, yScale)
|
||
|
|
end
|
||
|
|
|
||
|
|
-- Gloss
|
||
|
|
Gloss = (Gloss and not Disabled) or false
|
||
|
|
SkinGloss(Gloss, Button, Skin.Gloss, Colors.Gloss, xScale, yScale)
|
||
|
|
|
||
|
|
-- NewItem
|
||
|
|
local NewItem = Regions.NewItem
|
||
|
|
|
||
|
|
if NewItem then
|
||
|
|
SkinNewItem(NewItem, Button, Skin.NewItem, xScale, yScale)
|
||
|
|
end
|
||
|
|
|
||
|
|
-- QuestBorder
|
||
|
|
local QuestBorder = Regions.QuestBorder
|
||
|
|
|
||
|
|
if QuestBorder then
|
||
|
|
SkinQuestBorder(QuestBorder, Button, Skin.QuestBorder, xScale, yScale)
|
||
|
|
end
|
||
|
|
|
||
|
|
-- Cooldown
|
||
|
|
local Cooldown = Regions.Cooldown
|
||
|
|
|
||
|
|
if Cooldown then
|
||
|
|
SkinCooldown(Cooldown, Button, Skin.Cooldown, Colors.Cooldown, xScale, yScale, Pulse)
|
||
|
|
end
|
||
|
|
|
||
|
|
-- ChargeCooldown
|
||
|
|
local Charge = Regions.ChargeCooldown or Button.chargeCooldown
|
||
|
|
local ChargeSkin = Skin.ChargeCooldown
|
||
|
|
|
||
|
|
Button.__MSQ_ChargeSkin = ChargeSkin
|
||
|
|
|
||
|
|
if Charge then
|
||
|
|
SkinCooldown(Charge, Button, ChargeSkin, nil, xScale, yScale, Pulse)
|
||
|
|
end
|
||
|
|
|
||
|
|
-- AutoCastShine
|
||
|
|
local Shine = Regions.AutoCastShine
|
||
|
|
|
||
|
|
if Shine then
|
||
|
|
SkinFrame(Shine, Button, Skin.AutoCastShine, xScale, yScale)
|
||
|
|
end
|
||
|
|
|
||
|
|
-- SpellAlert
|
||
|
|
UpdateSpellAlert(Button)
|
||
|
|
end
|