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.
171 lines
4.0 KiB
171 lines
4.0 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\Backdrop.lua
|
|
* Author.: StormFX
|
|
|
|
'Backdrop' Region
|
|
|
|
* See Skins\Default.lua for region defaults.
|
|
|
|
]]
|
|
|
|
local _, Core = ...
|
|
|
|
----------------------------------------
|
|
-- Lua API
|
|
---
|
|
|
|
local error, type = error, type
|
|
|
|
----------------------------------------
|
|
-- Internal
|
|
---
|
|
|
|
-- @ Skins\Default
|
|
local Default = Core.DEFAULT_SKIN.Backdrop
|
|
|
|
-- @ Core\Utility
|
|
local GetColor, GetSize, GetTexCoords = Core.GetColor, Core.GetSize, Core.GetTexCoords
|
|
local GetTypeSkin, SetPoints = Core.GetTypeSkin, Core.SetPoints
|
|
|
|
-- @ Core\Regions\Mask
|
|
local SkinMask = Core.SkinMask
|
|
|
|
----------------------------------------
|
|
-- Locals
|
|
---
|
|
|
|
local DEF_COLOR = Default.Color
|
|
local DEF_TEXTURE = Default.Texture
|
|
|
|
local Cache = {}
|
|
|
|
----------------------------------------
|
|
-- Functions
|
|
---
|
|
|
|
-- Removes the 'Backdrop' region from a button.
|
|
local function RemoveBackdrop(Region, Button)
|
|
Region = Region or Button.__MSQ_Backdrop
|
|
|
|
if Region then
|
|
Region:Hide()
|
|
|
|
if Button.__MSQ_Backdrop then
|
|
-- Remove the button mask.
|
|
local ButtonMask = Button.__MSQ_Mask
|
|
|
|
if ButtonMask and Region.__MSQ_ButtonMask then
|
|
Region:RemoveMaskTexture(ButtonMask)
|
|
Region.__MSQ_ButtonMask = nil
|
|
end
|
|
|
|
Region:SetTexture()
|
|
|
|
Cache[#Cache + 1] = Region
|
|
Button.__MSQ_Backdrop = nil
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Skins or creates the 'Backdrop' region of a button.
|
|
local function AddBackdrop(Region, Button, Skin, Color, xScale, yScale)
|
|
Button.FloatingBG = Region
|
|
Region = Region or Button.__MSQ_Backdrop
|
|
|
|
if not Region then
|
|
local i = #Cache
|
|
|
|
if i > 0 then
|
|
Region = Cache[i]
|
|
Cache[i] = nil
|
|
else
|
|
Region = Button:CreateTexture()
|
|
end
|
|
|
|
Button.__MSQ_Backdrop = Region
|
|
end
|
|
|
|
Region:SetParent(Button)
|
|
Color = Color or Skin.Color
|
|
|
|
local Atlas = Skin.Atlas
|
|
local UseAtlasSize = Skin.UseAtlasSize
|
|
|
|
if Skin.UseColor then
|
|
Region:SetTexture()
|
|
Region:SetVertexColor(1, 1, 1, 1)
|
|
Region:SetColorTexture(GetColor(Color or DEF_COLOR))
|
|
elseif Atlas then
|
|
Region:SetAtlas(Atlas, UseAtlasSize)
|
|
Region:SetVertexColor(GetColor(Color or DEF_COLOR))
|
|
else
|
|
Region:SetTexture(Skin.Texture or DEF_TEXTURE)
|
|
Region:SetTexCoord(GetTexCoords(Skin.TexCoords))
|
|
Region:SetVertexColor(GetColor(Color or DEF_COLOR))
|
|
end
|
|
|
|
Region:SetBlendMode(Skin.BlendMode or "BLEND")
|
|
Region:SetDrawLayer(Skin.DrawLayer or "BACKGROUND", Skin.DrawLevel or -1)
|
|
|
|
if not UseAtlasSize then
|
|
Region:SetSize(GetSize(Skin.Width, Skin.Height, xScale, yScale, Button))
|
|
end
|
|
|
|
SetPoints(Region, Button, Skin, nil, Skin.SetAllPoints)
|
|
Region:Show()
|
|
|
|
-- Mask
|
|
SkinMask(Region, Button, Skin, xScale, yScale)
|
|
end
|
|
|
|
----------------------------------------
|
|
-- Core
|
|
---
|
|
|
|
-- Sets the color of the 'Backdrop' region.
|
|
function Core.SetBackdropColor(Region, Button, Skin, Color)
|
|
Region = Region or Button.__MSQ_Backdrop
|
|
|
|
if Region then
|
|
Skin = GetTypeSkin(Button, Button.__MSQ_bType, Skin)
|
|
Color = Color or Skin.Color
|
|
|
|
if Skin.UseColor then
|
|
Region:SetColorTexture(GetColor(Color or DEF_COLOR))
|
|
else
|
|
Region:SetVertexColor(GetColor(Color or DEF_COLOR))
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Add or removes a 'Backdrop' region.
|
|
function Core.SkinBackdrop(Enabled, Region, Button, Skin, Color, xScale, yScale)
|
|
local bType = Button.__MSQ_bType
|
|
Skin = GetTypeSkin(Button, bType, Skin)
|
|
|
|
if Enabled and not Skin.Hide then
|
|
AddBackdrop(Region, Button, Skin, Color, xScale, yScale)
|
|
else
|
|
RemoveBackdrop(Region, Button)
|
|
end
|
|
end
|
|
|
|
----------------------------------------
|
|
-- API
|
|
---
|
|
|
|
-- Retrieves the 'Backdrop' region of a button.
|
|
function Core.API:GetBackdrop(Button)
|
|
if type(Button) ~= "table" then
|
|
if Core.Debug then
|
|
error("Bad argument to API method 'GetBackdrop'. 'Button' must be a button object.", 2)
|
|
end
|
|
return
|
|
end
|
|
|
|
return Button.FloatingBG or Button.__MSQ_Backdrop
|
|
end
|
|
|