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.

178 lines
5.8 KiB

local SLE, T, E, L, V, P, G = unpack(ElvUI_SLE)
local Sk = SLE.Skins
local S = E.Skins
--GLOBALS: CreateFrame
local _G = _G
Sk.additionalTextures = {}
local function GetElement(frame, element, useParent)
if useParent then frame = frame:GetParent() end
local child = frame[element]
if child then return child end
local name = frame:GetName()
if name then return _G[name..element] end
end
local function GetButton(frame, buttons)
for _, data in ipairs(buttons) do
if type(data) == 'string' then
local found = GetElement(frame, data)
if found then return found end
else -- has useParent
local found = GetElement(frame, data[1], data[2])
if found then return found end
end
end
end
local function ThumbStatus(frame)
if not frame.Thumb then
return
elseif not frame:IsEnabled() then
frame.Thumb.backdrop:SetBackdropColor(0.3, 0.3, 0.3)
return
end
local _, max = frame:GetMinMaxValues()
if max == 0 then
frame.Thumb.backdrop:SetBackdropColor(0.3, 0.3, 0.3)
else
frame.Thumb.backdrop:SetBackdropColor(unpack(E.media.rgbvaluecolor))
end
end
local function ThumbWatcher(frame)
hooksecurefunc(frame, 'Enable', ThumbStatus)
hooksecurefunc(frame, 'Disable', ThumbStatus)
hooksecurefunc(frame, 'SetEnabled', ThumbStatus)
hooksecurefunc(frame, 'SetMinMaxValues', ThumbStatus)
ThumbStatus(frame)
end
local upButtons = {'ScrollUpButton', 'UpButton', 'ScrollUp', {'scrollUp', true}, 'Back'}
local downButtons = {'ScrollDownButton', 'DownButton', 'ScrollDown', {'scrollDown', true}, 'Forward'}
local thumbButtons = {'ThumbTexture', 'thumbTexture', 'Thumb'}
function Sk:CreateUnderline(frame, texture, shadow, height)
if frame.SL_Underline then return end
local line = CreateFrame('Frame', nil, frame, 'BackdropTemplate')
line:SetPoint('BOTTOM', frame, -1, 1)
line:SetSize(frame:GetWidth(), height or 1)
line.Texture = line:CreateTexture(nil, 'OVERLAY')
line.Texture:SetTexture(texture)
if shadow then
if shadow == 'backdrop' then
line:CreateShadow()
else
line:CreateBackdrop()
end
end
line.Texture:SetAllPoints(line)
frame.SL_Underline = line
return frame.SL_Underline
end
function Sk:Media()
if E.private.skins.blizzard.enable and E.private.skins.blizzard.merchant and E.private.sle.skins.merchant.enable and E.private.sle.skins.merchant.style == 'List' then
for i = 1, 10 do
local button = _G['SLE_ListMerchantFrame_Button'..i]
if not button then break end
button.itemname:FontTemplate(E.LSM:Fetch('font', E.db.sle.skins.merchant.list.nameFont), E.db.sle.skins.merchant.list.nameSize, E.db.sle.skins.merchant.list.nameOutline)
button.iteminfo:FontTemplate(E.LSM:Fetch('font', E.db.sle.skins.merchant.list.subFont), E.db.sle.skins.merchant.list.subSize, E.db.sle.skins.merchant.list.subOutline)
end
end
end
function Sk:UpdateObjectiveFrameLogos()
local db = E.private.sle.skins.objectiveTracker
Sk:UpdateAdditionalTexture(Sk.additionalTextures['ScenarioLogo'], SLE.ScenarioBlockLogos[db.skinnedTextureLogo] or db.customTextureLogo)
Sk:UpdateAdditionalTexture(Sk.additionalTextures['ChallengeModeLogo'], SLE.ScenarioBlockLogos[db.skinnedTextureLogo] or db.customTextureLogo)
if Sk.additionalTextures['WarfrontLogo'] then
Sk:UpdateAdditionalTexture(Sk.additionalTextures['WarfrontLogo'], SLE.ScenarioBlockLogos[db.skinnedTextureLogo] or db.customTextureLogo)
end
end
function Sk:UpdateAdditionalTexture(textureObject, newTexture)
if textureObject then
textureObject:SetTexture(newTexture)
end
end
function Sk:ConvertScrollBarToThin(frame, thumbY, thumbX, template, thinWidth)
assert(frame, 'doesnt exist!')
if frame.backdrop then return end
local upButton, downButton = GetButton(frame, upButtons), GetButton(frame, downButtons)
local thumb = GetButton(frame, thumbButtons) or (frame.GetThumbTexture and frame:GetThumbTexture())
frame:StripTextures()
frame:CreateBackdrop(template or 'Transparent', nil, nil, nil, nil, nil, nil, nil, true)
frame.backdrop:SetPoint('TOP', upButton or frame, upButton and 'BOTTOM' or 'TOP', 0, 0)
frame.backdrop:SetPoint('BOTTOM', downButton or frame, upButton and 'TOP' or 'BOTTOM', 0, 0)
frame.backdrop:SetWidth(thinWidth or 8)
if frame.Background then frame.Background:Hide() end
if frame.ScrollUpBorder then frame.ScrollUpBorder:Hide() end
if frame.ScrollDownBorder then frame.ScrollDownBorder:Hide() end
local frameLevel = frame:GetFrameLevel()
if upButton then
S:HandleNextPrevButton(upButton, 'up')
upButton:SetFrameLevel(frameLevel + 2)
end
if downButton then
S:HandleNextPrevButton(downButton, 'down')
downButton:SetFrameLevel(frameLevel + 2)
end
if thumb and not thumb.backdrop then
thumb:SetTexture()
thumb:CreateBackdrop(nil, true, true, nil, nil, nil, nil, nil, frameLevel + 1)
if not frame.Thumb then
frame.Thumb = thumb
end
if thumb.backdrop then
if not thumbX then thumbX = 0 end
if not thumbY then thumbY = 0 end
thumb.backdrop:Point('TOPLEFT', thumb, thumbX, -thumbY)
thumb.backdrop:Point('BOTTOMRIGHT', thumb, -thumbX, thumbY)
if frame.SetEnabled then
ThumbWatcher(frame)
else
thumb.backdrop:SetBackdropColor(unpack(E.media.rgbvaluecolor))
end
end
thumb:SetWidth(thinWidth or 8)
end
end
function Sk:Initialize()
local LQT = LibStub("LibQTip-1.0", true)
if LQT then
hooksecurefunc(LQT, 'Acquire', function()
for _, Tooltip in LQT:IterateTooltips() do
if not Tooltip.isSkinned then
Tooltip.NineSlice:Kill()
Tooltip:CreateBackdrop('Transparent')
Tooltip.isSkinned = true
end
end
end)
end
function Sk:ForUpdateAll()
Sk:Update_ObjectiveTrackerUnderlinesVisibility()
Sk:Update_ObjectiveTrackerUnderlinesColor()
Sk:Media()
end
end
SLE:RegisterModule(Sk:GetName())