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.
136 lines
3.5 KiB
136 lines
3.5 KiB
--[[
|
|
|
|
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\Regions\Mask.lua
|
|
* Author.: StormFX
|
|
|
|
Button/Region Mask
|
|
|
|
]]
|
|
|
|
local _, Core = ...
|
|
|
|
----------------------------------------
|
|
-- Lua API
|
|
---
|
|
|
|
local type = type
|
|
|
|
----------------------------------------
|
|
-- Internal
|
|
---
|
|
|
|
-- @ Core\Utility
|
|
local GetSize, SetPoints = Core.GetSize, Core.SetPoints
|
|
|
|
----------------------------------------
|
|
-- Core
|
|
---
|
|
|
|
-- Skins a button or region mask.
|
|
function Core.SkinMask(Region, Button, Skin, xScale, yScale)
|
|
local ButtonMask = Button.__MSQ_Mask or Button.IconMask
|
|
local CircleMask = Button.CircleMask
|
|
|
|
-- Disable the bag slot mask in 10.0 to enable custom masks.
|
|
if CircleMask then
|
|
local Icon = Button.icon
|
|
|
|
if Icon then
|
|
Icon:RemoveMaskTexture(CircleMask)
|
|
end
|
|
|
|
CircleMask:SetTexture()
|
|
end
|
|
|
|
-- Region
|
|
if Region then
|
|
local SkinMask = Skin.Mask
|
|
|
|
-- Button Mask
|
|
if Skin.UseMask and ButtonMask and not SkinMask then
|
|
if not Region.__MSQ_ButtonMask then
|
|
Region:AddMaskTexture(ButtonMask)
|
|
Region.__MSQ_ButtonMask = true
|
|
end
|
|
elseif ButtonMask then
|
|
Region:RemoveMaskTexture(ButtonMask)
|
|
Region.__MSQ_ButtonMask = nil
|
|
end
|
|
|
|
-- Region Mask
|
|
local RegionMask = Region.__MSQ_Mask
|
|
local Type = type(SkinMask)
|
|
|
|
if SkinMask then
|
|
if not RegionMask then
|
|
RegionMask = Button:CreateMaskTexture()
|
|
Region.__MSQ_Mask = RegionMask
|
|
end
|
|
|
|
if Type == "table" then
|
|
local Atlas, Texture = SkinMask.Atlas, SkinMask.Texture
|
|
|
|
if Atlas then
|
|
local UseAtlasSize = SkinMask.UseAtlasSize
|
|
|
|
ButtonMask:SetAtlas(Atlas, UseAtlasSize)
|
|
|
|
if not UseAtlasSize then
|
|
ButtonMask:SetSize(GetSize(SkinMask.Width, SkinMask.Height, xScale, yScale, Button))
|
|
end
|
|
|
|
SetPoints(RegionMask, Region, SkinMask, nil, SkinMask.SetAllPoints)
|
|
elseif Texture then
|
|
RegionMask:SetTexture(Texture, SkinMask.WrapH, SkinMask.WrapV)
|
|
RegionMask:SetSize(GetSize(SkinMask.Width, SkinMask.Height, xScale, yScale, Button))
|
|
SetPoints(RegionMask, Region, SkinMask, nil, SkinMask.SetAllPoints)
|
|
end
|
|
elseif Type == "string" then
|
|
RegionMask:SetTexture(SkinMask, "CLAMPTOBLACKADDITIVE", "CLAMPTOBLACKADDITIVE")
|
|
RegionMask:SetAllPoints(Region)
|
|
else
|
|
return
|
|
end
|
|
|
|
if not Region.__MSQ_RegionMask then
|
|
Region:AddMaskTexture(RegionMask)
|
|
Region.__MSQ_RegionMask = true
|
|
end
|
|
elseif Region.__MSQ_RegionMask then
|
|
Region:RemoveMaskTexture(RegionMask)
|
|
Region.__MSQ_RegionMask = nil
|
|
end
|
|
|
|
-- Button
|
|
else
|
|
ButtonMask = ButtonMask or Button:CreateMaskTexture()
|
|
Button.__MSQ_Mask = ButtonMask
|
|
|
|
local Type = type(Skin)
|
|
|
|
if Type == "table" then
|
|
local Atlas, Texture = Skin.Atlas, Skin.Texture
|
|
|
|
if Atlas then
|
|
local UseAtlasSize = Skin.UseAtlasSize
|
|
ButtonMask:SetAtlas(Atlas, UseAtlasSize)
|
|
|
|
if not UseAtlasSize then
|
|
ButtonMask:SetSize(GetSize(Skin.Width, Skin.Height, xScale, yScale, Button))
|
|
end
|
|
|
|
SetPoints(ButtonMask, Button, Skin, nil, Skin.SetAllPoints)
|
|
elseif Texture then
|
|
ButtonMask:SetTexture(Texture, Skin.WrapH, Skin.WrapV)
|
|
ButtonMask:SetSize(GetSize(Skin.Width, Skin.Height, xScale, yScale, Button))
|
|
SetPoints(ButtonMask, Button, Skin, nil, Skin.SetAllPoints)
|
|
end
|
|
elseif Type == "string" then
|
|
ButtonMask:SetTexture(Skin, "CLAMPTOBLACKADDITIVE", "CLAMPTOBLACKADDITIVE")
|
|
ButtonMask:SetAllPoints(Button)
|
|
end
|
|
end
|
|
end
|
|
|