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.
345 lines
11 KiB
345 lines
11 KiB
local E, L, V, P, G = unpack(ElvUI)
|
|
local S = E:GetModule('Skins')
|
|
|
|
local _G = _G
|
|
local next, unpack = next, unpack
|
|
|
|
local GetItemInfo = GetItemInfo
|
|
local PlayerHasToy = PlayerHasToy
|
|
local hooksecurefunc = hooksecurefunc
|
|
local GetItemQualityColor = GetItemQualityColor
|
|
local C_Heirloom_PlayerHasHeirloom = C_Heirloom.PlayerHasHeirloom
|
|
|
|
local QUALITY_7_R, QUALITY_7_G, QUALITY_7_B = GetItemQualityColor(7)
|
|
|
|
local function toyTextColor(text, r, g, b)
|
|
if r == 0.33 and g == 0.27 and b == 0.2 then
|
|
text:SetTextColor(0.4, 0.4, 0.4)
|
|
elseif r == 1 and g == 0.82 and b == 0 then
|
|
text:SetTextColor(0.9, 0.9, 0.9)
|
|
end
|
|
end
|
|
|
|
local function petNameColor(iconBorder, r, g, b)
|
|
local parent = iconBorder:GetParent()
|
|
if not parent.name then return end
|
|
|
|
if parent.isDead and parent.isDead:IsShown() then
|
|
parent.name:SetTextColor(0.9, 0.3, 0.3)
|
|
elseif r and parent.owned then
|
|
parent.name:SetTextColor(r, g, b)
|
|
else
|
|
parent.name:SetTextColor(0.4, 0.4, 0.4)
|
|
end
|
|
end
|
|
|
|
local function mountNameColor(object)
|
|
local button = object:GetParent()
|
|
local name = button.name
|
|
|
|
if name:GetFontObject() == _G.GameFontDisable then
|
|
name:SetTextColor(0.4, 0.4, 0.4)
|
|
else
|
|
if button.background then
|
|
local _, g, b = button.background:GetVertexColor()
|
|
if g == 0 and b == 0 then
|
|
name:SetTextColor(0.9, 0.3, 0.3)
|
|
return
|
|
end
|
|
end
|
|
|
|
name:SetTextColor(0.9, 0.9, 0.9)
|
|
end
|
|
end
|
|
|
|
local function selectedTextureShow(texture) -- used for pets/mounts
|
|
local parent = texture:GetParent()
|
|
parent.backdrop:SetBackdropBorderColor(1, .8, .1)
|
|
parent.icon.backdrop:SetBackdropBorderColor(1, .8, .1)
|
|
end
|
|
|
|
local function selectedTextureHide(texture) -- used for pets/mounts
|
|
local parent = texture:GetParent()
|
|
if not parent.hovered then
|
|
local r, g, b = unpack(E.media.bordercolor)
|
|
parent.backdrop:SetBackdropBorderColor(r, g, b)
|
|
parent.icon.backdrop:SetBackdropBorderColor(r, g, b)
|
|
end
|
|
|
|
if parent.petList then
|
|
petNameColor(parent.iconBorder, parent.iconBorder:GetVertexColor())
|
|
end
|
|
end
|
|
|
|
local function buttonOnEnter(button)
|
|
local r, g, b = unpack(E.media.rgbvaluecolor)
|
|
local icon = button.icon or button.Icon
|
|
button.backdrop:SetBackdropBorderColor(r, g, b)
|
|
icon.backdrop:SetBackdropBorderColor(r, g, b)
|
|
button.hovered = true
|
|
end
|
|
|
|
local function buttonOnLeave(button)
|
|
local icon = button.icon or button.Icon
|
|
if button.selected or (button.SelectedTexture and button.SelectedTexture:IsShown()) then
|
|
button.backdrop:SetBackdropBorderColor(1, .8, .1)
|
|
icon.backdrop:SetBackdropBorderColor(1, .8, .1)
|
|
else
|
|
local r, g, b = unpack(E.media.bordercolor)
|
|
button.backdrop:SetBackdropBorderColor(r, g, b)
|
|
icon.backdrop:SetBackdropBorderColor(r, g, b)
|
|
end
|
|
button.hovered = nil
|
|
end
|
|
|
|
local function JournalScrollButtons(frame)
|
|
if not frame then return end
|
|
|
|
for _, bu in next, { frame.ScrollTarget:GetChildren() } do
|
|
if not bu.IsSkinned then
|
|
bu:StripTextures()
|
|
bu:CreateBackdrop('Transparent', nil, nil, true)
|
|
bu.backdrop:ClearAllPoints()
|
|
bu.backdrop:Point('TOPLEFT', bu, 0, -2)
|
|
bu.backdrop:Point('BOTTOMRIGHT', bu, 0, 2)
|
|
|
|
local icon = bu.icon or bu.Icon
|
|
icon:Size(40)
|
|
icon:Point('LEFT', -43, 0)
|
|
icon:SetTexCoord(unpack(E.TexCoords))
|
|
icon:CreateBackdrop('Transparent', nil, nil, true)
|
|
|
|
bu:HookScript('OnEnter', buttonOnEnter)
|
|
bu:HookScript('OnLeave', buttonOnLeave)
|
|
|
|
if bu.ProgressBar then
|
|
bu.ProgressBar:SetTexture(E.media.normTex)
|
|
bu.ProgressBar:SetVertexColor(0.251, 0.753, 0.251, 1) -- 0.0118, 0.247, 0.00392
|
|
end
|
|
|
|
bu.selectedTexture:SetTexture()
|
|
hooksecurefunc(bu.selectedTexture, 'Show', selectedTextureShow)
|
|
hooksecurefunc(bu.selectedTexture, 'Hide', selectedTextureHide)
|
|
|
|
if frame:GetParent() == _G.PetJournal then
|
|
bu.petList = true
|
|
bu.petTypeIcon:Point('TOPRIGHT', -1, -1)
|
|
bu.petTypeIcon:Point('BOTTOMRIGHT', -1, 1)
|
|
|
|
bu.dragButton.ActiveTexture:SetTexture(E.Media.Textures.White8x8)
|
|
bu.dragButton.ActiveTexture:SetVertexColor(0.9, 0.8, 0.1, 0.3)
|
|
|
|
S:HandleIconBorder(bu.iconBorder, nil, petNameColor)
|
|
elseif frame:GetParent() == _G.MountJournal then
|
|
bu.mountList = true
|
|
bu.factionIcon:SetDrawLayer('OVERLAY')
|
|
bu.factionIcon:Point('TOPRIGHT', -1, -1)
|
|
bu.factionIcon:Point('BOTTOMRIGHT', -1, 1)
|
|
|
|
bu.DragButton.ActiveTexture:SetTexture(E.Media.Textures.White8x8)
|
|
bu.DragButton.ActiveTexture:SetVertexColor(0.9, 0.8, 0.1, 0.3)
|
|
|
|
bu.favorite:SetTexture([[Interface\COMMON\FavoritesIcon]])
|
|
bu.favorite:Point('TOPLEFT', bu.DragButton, 'TOPLEFT' , -8, 8)
|
|
bu.favorite:Size(32)
|
|
|
|
hooksecurefunc(bu.name, 'SetFontObject', mountNameColor)
|
|
hooksecurefunc(bu.background, 'SetVertexColor', mountNameColor)
|
|
end
|
|
|
|
bu.IsSkinned = true
|
|
end
|
|
end
|
|
end
|
|
|
|
local function SkinMountFrame()
|
|
S:HandleButton(_G.MountJournalFilterButton)
|
|
|
|
_G.MountJournalFilterButton:ClearAllPoints()
|
|
_G.MountJournalFilterButton:Point('LEFT', _G.MountJournalSearchBox, 'RIGHT', 5, 0)
|
|
|
|
local MountJournal = _G.MountJournal
|
|
MountJournal:StripTextures()
|
|
MountJournal.MountDisplay:StripTextures()
|
|
MountJournal.MountDisplay.ShadowOverlay:StripTextures()
|
|
MountJournal.MountCount:StripTextures()
|
|
|
|
S:HandleIcon(MountJournal.MountDisplay.InfoButton.Icon, true)
|
|
|
|
S:HandleButton(_G.MountJournalMountButton)
|
|
S:HandleEditBox(_G.MountJournalSearchBox)
|
|
S:HandleTrimScrollBar(_G.MountJournal.ScrollBar)
|
|
S:HandleRotateButton(MountJournal.MountDisplay.ModelScene.RotateLeftButton)
|
|
S:HandleRotateButton(MountJournal.MountDisplay.ModelScene.RotateRightButton)
|
|
|
|
hooksecurefunc(MountJournal.ScrollBox, 'Update', JournalScrollButtons)
|
|
end
|
|
|
|
local function SkinPetFrame()
|
|
_G.PetJournalSummonButton:StripTextures()
|
|
S:HandleButton(_G.PetJournalSummonButton)
|
|
_G.PetJournalRightInset:StripTextures()
|
|
_G.PetJournalLeftInset:StripTextures()
|
|
|
|
local PetJournal = _G.PetJournal
|
|
PetJournal.PetCount:StripTextures()
|
|
S:HandleEditBox(_G.PetJournalSearchBox)
|
|
_G.PetJournalSearchBox:ClearAllPoints()
|
|
_G.PetJournalSearchBox:Point('TOPLEFT', _G.PetJournalLeftInset, 'TOPLEFT', (E.PixelMode and 13 or 10), -9)
|
|
S:HandleButton(_G.PetJournalFilterButton)
|
|
_G.PetJournalFilterButton:Height(E.PixelMode and 22 or 24)
|
|
_G.PetJournalFilterButton:ClearAllPoints()
|
|
_G.PetJournalFilterButton:Point('TOPRIGHT', _G.PetJournalLeftInset, 'TOPRIGHT', -5, -(E.PixelMode and 8 or 7))
|
|
S:HandleTrimScrollBar(_G.PetJournal.ScrollBar)
|
|
hooksecurefunc(PetJournal.ScrollBox, 'Update', JournalScrollButtons)
|
|
|
|
S:HandleRotateButton(_G.PetJournalPetCard.modelScene.RotateLeftButton)
|
|
S:HandleRotateButton(_G.PetJournalPetCard.modelScene.RotateRightButton)
|
|
|
|
_G.PetJournalPetCard:StripTextures()
|
|
_G.PetJournalPetCard.ShadowOverlay:StripTextures()
|
|
|
|
_G.PetJournalPetCardPetInfoIcon:SetTexCoord(unpack(E.TexCoords))
|
|
end
|
|
|
|
local function SkinToyFrame()
|
|
local ToyBox = _G.ToyBox
|
|
S:HandleEditBox(ToyBox.searchBox)
|
|
S:HandleButton(_G.ToyBoxFilterButton)
|
|
_G.ToyBoxFilterButton:Point('LEFT', ToyBox.searchBox, 'RIGHT', 2, 0)
|
|
|
|
ToyBox.iconsFrame:StripTextures()
|
|
S:HandleNextPrevButton(ToyBox.PagingFrame.NextPageButton, nil, nil, true)
|
|
S:HandleNextPrevButton(ToyBox.PagingFrame.PrevPageButton, nil, nil, true)
|
|
|
|
ToyBox.progressBar.border:Hide()
|
|
ToyBox.progressBar:DisableDrawLayer('BACKGROUND')
|
|
ToyBox.progressBar:SetStatusBarTexture(E.media.normTex)
|
|
ToyBox.progressBar:CreateBackdrop()
|
|
E:RegisterStatusBar(ToyBox.progressBar)
|
|
|
|
for i = 1, 18 do
|
|
local button = ToyBox.iconsFrame['spellButton'..i]
|
|
S:HandleItemButton(button, true)
|
|
|
|
button.iconTextureUncollected:SetTexCoord(unpack(E.TexCoords))
|
|
button.iconTextureUncollected:SetInside(button)
|
|
button.hover:SetAllPoints(button.iconTexture)
|
|
button.checked:SetAllPoints(button.iconTexture)
|
|
button.pushed:SetAllPoints(button.iconTexture)
|
|
button.cooldown:SetAllPoints(button.iconTexture)
|
|
|
|
hooksecurefunc(button.name, 'SetTextColor', toyTextColor)
|
|
hooksecurefunc(button.new, 'SetTextColor', toyTextColor)
|
|
E:RegisterCooldown(button.cooldown)
|
|
end
|
|
|
|
hooksecurefunc('ToySpellButton_UpdateButton', function(button)
|
|
if button.itemID and PlayerHasToy(button.itemID) then
|
|
local _, _, quality = GetItemInfo(button.itemID)
|
|
if quality then
|
|
local r, g, b = GetItemQualityColor(quality)
|
|
button.backdrop:SetBackdropBorderColor(r, g, b)
|
|
else
|
|
button.backdrop:SetBackdropBorderColor(0.9, 0.9, 0.9)
|
|
end
|
|
else
|
|
button.backdrop:SetBackdropBorderColor(unpack(E.media.bordercolor))
|
|
end
|
|
end)
|
|
end
|
|
|
|
local function SkinHeirloomFrame()
|
|
local HeirloomsJournal = _G.HeirloomsJournal
|
|
S:HandleEditBox(HeirloomsJournal.SearchBox)
|
|
HeirloomsJournal.iconsFrame:StripTextures()
|
|
|
|
S:HandleNextPrevButton(HeirloomsJournal.PagingFrame.NextPageButton, nil, nil, true)
|
|
S:HandleNextPrevButton(HeirloomsJournal.PagingFrame.PrevPageButton, nil, nil, true)
|
|
S:HandleDropDownBox(_G.HeirloomsJournalClassDropDown)
|
|
|
|
S:HandleButton(_G.HeirloomsJournal.FilterButton)
|
|
|
|
HeirloomsJournal.progressBar.border:Hide()
|
|
HeirloomsJournal.progressBar:DisableDrawLayer('BACKGROUND')
|
|
HeirloomsJournal.progressBar:SetStatusBarTexture(E.media.normTex)
|
|
HeirloomsJournal.progressBar:CreateBackdrop()
|
|
E:RegisterStatusBar(HeirloomsJournal.progressBar)
|
|
|
|
hooksecurefunc(HeirloomsJournal, 'UpdateButton', function(_, button)
|
|
if not button.IsSkinned then
|
|
S:HandleItemButton(button, true)
|
|
|
|
button.iconTextureUncollected:SetTexCoord(unpack(E.TexCoords))
|
|
button.iconTextureUncollected:SetInside(button)
|
|
button.iconTexture:SetDrawLayer('ARTWORK')
|
|
button.hover:SetAllPoints(button.iconTexture)
|
|
button.slotFrameCollected:SetAlpha(0)
|
|
button.slotFrameUncollected:SetAlpha(0)
|
|
button.special:SetJustifyH('RIGHT')
|
|
button.special:ClearAllPoints()
|
|
|
|
button.cooldown:SetAllPoints(button.iconTexture)
|
|
E:RegisterCooldown(button.cooldown)
|
|
|
|
button.IsSkinned = true
|
|
end
|
|
|
|
if C_Heirloom_PlayerHasHeirloom(button.itemID) then
|
|
button.name:SetTextColor(0.9, 0.9, 0.9)
|
|
button.special:SetTextColor(1, .82, 0)
|
|
button.backdrop:SetBackdropBorderColor(QUALITY_7_R, QUALITY_7_G, QUALITY_7_B)
|
|
else
|
|
button.name:SetTextColor(0.4, 0.4, 0.4)
|
|
button.special:SetTextColor(0.4, 0.4, 0.4)
|
|
button.backdrop:SetBackdropBorderColor(unpack(E.media.bordercolor))
|
|
end
|
|
end)
|
|
|
|
hooksecurefunc(HeirloomsJournal, 'LayoutCurrentPage', function()
|
|
for i=1, #HeirloomsJournal.heirloomHeaderFrames do
|
|
local header = HeirloomsJournal.heirloomHeaderFrames[i]
|
|
header:StripTextures()
|
|
header.text:FontTemplate(nil, 15, '')
|
|
header.text:SetTextColor(0.9, 0.9, 0.9)
|
|
end
|
|
end)
|
|
end
|
|
|
|
local function HandleTabs()
|
|
local tab = _G.CollectionsJournalTab1
|
|
local index, lastTab = 1, tab
|
|
while tab do
|
|
S:HandleTab(tab)
|
|
|
|
tab:ClearAllPoints()
|
|
|
|
if index == 1 then
|
|
tab:Point('TOPLEFT', _G.CollectionsJournal, 'BOTTOMLEFT', -10, 0)
|
|
else
|
|
tab:Point('TOPLEFT', lastTab, 'TOPRIGHT', -19, 0)
|
|
lastTab = tab
|
|
end
|
|
|
|
index = index + 1
|
|
tab = _G['CollectionsJournalTab'..index]
|
|
end
|
|
end
|
|
|
|
local function SkinCollectionsFrames()
|
|
S:HandlePortraitFrame(_G.CollectionsJournal)
|
|
|
|
HandleTabs()
|
|
|
|
SkinMountFrame()
|
|
SkinPetFrame()
|
|
SkinToyFrame()
|
|
SkinHeirloomFrame()
|
|
end
|
|
|
|
function S:Blizzard_Collections()
|
|
if not E.private.skins.blizzard.enable then return end
|
|
if E.private.skins.blizzard.collections then SkinCollectionsFrames() end
|
|
end
|
|
|
|
S:AddCallbackForAddon('Blizzard_Collections')
|
|
|