if not WeakAuras.IsLibsOK ( ) then return end
local AddonName , OptionsPrivate = ...
local L = WeakAuras.L
local GetAtlasInfo = C_Texture and C_Texture.GetAtlasInfo or GetAtlasInfo
local function IsAtlas ( input )
return type ( input ) == " string " and GetAtlasInfo ( input ) ~= nil
end
local function createOptions ( id , data )
local options = {
__title = L [ " Texture Settings " ] ,
__order = 1 ,
texture = {
type = " input " ,
width = WeakAuras.doubleWidth - 0.15 ,
name = L [ " Texture " ] ,
order = 1
} ,
chooseTexture = {
type = " execute " ,
name = L [ " Choose " ] ,
width = 0.15 ,
order = 1.1 ,
func = function ( )
OptionsPrivate.OpenTexturePicker ( data , { } , {
texture = " texture " ,
color = " color " ,
auraRotation = " rotation " ,
mirror = " mirror " ,
blendMode = " blendMode "
} , OptionsPrivate.Private . texture_types ) ;
end ,
imageWidth = 24 ,
imageHeight = 24 ,
control = " WeakAurasIcon " ,
image = " Interface \\ AddOns \\ WeakAuras \\ Media \\ Textures \\ browse " ,
} ,
color = {
type = " color " ,
width = WeakAuras.normalWidth ,
name = L [ " Color " ] ,
hasAlpha = true ,
order = 2
} ,
desaturate = {
type = " toggle " ,
width = WeakAuras.normalWidth ,
name = L [ " Desaturate " ] ,
order = 3 ,
} ,
alpha = {
type = " range " ,
control = " WeakAurasSpinBox " ,
width = WeakAuras.normalWidth ,
name = L [ " Alpha " ] ,
order = 4 ,
min = 0 ,
max = 1 ,
bigStep = 0.01 ,
isPercent = true
} ,
blendMode = {
type = " select " ,
width = WeakAuras.normalWidth ,
name = L [ " Blend Mode " ] ,
order = 5 ,
values = OptionsPrivate.Private . blend_types
} ,
rotation = {
type = " range " ,
control = " WeakAurasSpinBox " ,
width = WeakAuras.normalWidth ,
name = L [ " Rotation " ] ,
min = 0 ,
max = 360 ,
step = 1 ,
bigStep = 3 ,
order = 6 ,
} ,
mirror = {
type = " toggle " ,
width = WeakAuras.normalWidth ,
name = L [ " Mirror " ] ,
order = 7 ,
} ,
legacyZoomOut = {
type = " toggle " ,
width = WeakAuras.normalWidth ,
name = L [ " Legacy Zoom Out " ] ,
desc = L [ " Rotating a texture around arbitary angles used to require a zoom out. This is no longer required, this option only exist for compatibility with previous behaviour. " ] ,
order = 8 ,
hidden = IsAtlas ( data.texture )
} ,
textureWrapMode = {
type = " select " ,
width = WeakAuras.normalWidth ,
name = L [ " Texture Wrap " ] ,
order = 9 ,
values = OptionsPrivate.Private . texture_wrap_types ,
hidden = IsAtlas ( data.texture )
} ,
endHeader = {
type = " header " ,
order = 100 ,
name = " " ,
} ,
} ;
return {
texture = options ,
position = OptionsPrivate.commonOptions . PositionOptions ( id , data ) ,
} ;
end
local function createThumbnail ( )
local borderframe = CreateFrame ( " Frame " , nil , UIParent ) ;
borderframe : SetWidth ( 32 ) ;
borderframe : SetHeight ( 32 ) ;
local border = borderframe : CreateTexture ( nil , " OVERLAY " ) ;
border : SetAllPoints ( borderframe ) ;
border : SetTexture ( " Interface \\ BUTTONS \\ UI-Quickslot2.blp " ) ;
border : SetTexCoord ( 0.2 , 0.8 , 0.2 , 0.8 ) ;
local texture = borderframe : CreateTexture ( ) ;
borderframe.texture = texture ;
texture : SetPoint ( " CENTER " , borderframe , " CENTER " ) ;
return borderframe ;
end
local function modifyThumbnail ( parent , region , data , fullModify , size )
size = size or 30 ;
if ( data.height > data.width ) then
local scale = data.width / data.height ;
region.texture : SetWidth ( scale * size )
region.texture : SetHeight ( size ) ;
else
local scale = data.height / data.width ;
region.texture : SetWidth ( size )
region.texture : SetHeight ( scale * size )
end
WeakAuras.SetTextureOrAtlas ( region.texture , data.texture , data.textureWrapMode , data.textureWrapMode ) ;
region.texture : SetVertexColor ( data.color [ 1 ] , data.color [ 2 ] , data.color [ 3 ] , data.color [ 4 ] ) ;
region.texture : SetBlendMode ( data.blendMode )
region.texture : SetRotation ( ( data.rotation / 180 ) * math.pi )
local ulx , uly , llx , lly , urx , ury , lrx , lry = 0 , 0 , 0 , 1 , 1 , 0 , 1 , 1
if ( data.mirror ) then
region.texture : SetTexCoord ( urx , ury , lrx , lry , ulx , uly , llx , lly )
else
region.texture : SetTexCoord ( ulx , uly , llx , lly , urx , ury , lrx , lry )
end
end
local function createIcon ( )
local data = {
height = 40 ,
width = 40 ,
texture = " Interface \\ Addons \\ WeakAuras \\ PowerAurasMedia \\ Auras \\ Aura3 " ,
color = { 1 , 1 , 1 , 1 } ,
blendMode = " ADD " ,
rotate = true ;
rotation = 0 ;
} ;
local thumbnail = createThumbnail ( ) ;
modifyThumbnail ( UIParent , thumbnail , data , nil , 36 )
return thumbnail ;
end
local templates = {
{
title = L [ " Default " ] ,
data = {
} ;
} ,
{
title = L [ " Star " ] ,
data = {
texture = " 241049 " , -- Spells\\T_Star3
blendMode = " ADD " ,
width = 200 ,
height = 200 ,
discrete_rotation = 0 ,
}
} ,
{
title = L [ " Leaf " ] ,
data = {
texture = " 166606 " , -- Spells\\Nature_Rune_128
blendMode = " ADD " ,
width = 200 ,
height = 200 ,
discrete_rotation = 0 ,
}
} ,
{
title = L [ " Hawk " ] ,
data = {
texture = " 165609 " , -- Spells\\Aspect_Hawk
blendMode = " ADD " ,
width = 200 ,
height = 200 ,
discrete_rotation = 0 ,
}
} ,
{
title = L [ " Low Mana " ] ,
data = {
texture = " Interface \\ Addons \\ WeakAuras \\ PowerAurasMedia \\ Auras \\ Aura70 " ,
blendMode = " ADD " ,
width = 200 ,
height = 200 ,
discrete_rotation = 0 ,
}
} ,
}
if WeakAuras.IsClassic ( ) then
table.remove ( templates , 2 )
end
WeakAuras.RegisterRegionOptions ( " texture " , createOptions , createIcon , L [ " Texture " ] , createThumbnail , modifyThumbnail ,
L [ " Shows a custom texture " ] , templates ) ;