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')