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.

318 lines
10 KiB

local E, L, V, P, G = unpack(ElvUI)
local S = E:GetModule('Skins')
local _G = _G
local next = next
local unpack, pairs = unpack, pairs
local hooksecurefunc = hooksecurefunc
local HasPetUI = HasPetUI
local GetNumFactions = GetNumFactions
local GetPetHappiness = GetPetHappiness
local GetInventoryItemQuality = GetInventoryItemQuality
local FauxScrollFrame_GetOffset = FauxScrollFrame_GetOffset
local GetItemQualityColor = (C_Item and C_Item.GetItemQualityColor) or GetItemQualityColor
local NUM_FACTIONS_DISPLAYED = NUM_FACTIONS_DISPLAYED
local CHARACTERFRAME_SUBFRAMES = CHARACTERFRAME_SUBFRAMES
local ResistanceCoords = {
{ 0.21875, 0.8125, 0.25, 0.32421875 }, --Arcane
{ 0.21875, 0.8125, 0.0234375, 0.09765625 }, --Fire
{ 0.21875, 0.8125, 0.13671875, 0.2109375 }, --Nature
{ 0.21875, 0.8125, 0.36328125, 0.4375}, --Frost
{ 0.21875, 0.8125, 0.4765625, 0.55078125}, --Shadow
}
local function ReputationFrameUpdate()
local factionOffset = FauxScrollFrame_GetOffset(_G.ReputationListScrollFrame)
local numFactions = GetNumFactions()
for i = 1, NUM_FACTIONS_DISPLAYED do
local factionIndex = factionOffset + i
if factionIndex <= numFactions then
local factionHeader = _G['ReputationHeader'..i]
if factionHeader.isCollapsed then
factionHeader:SetNormalTexture(E.Media.Textures.PlusButton)
else
factionHeader:SetNormalTexture(E.Media.Textures.MinusButton)
end
end
end
end
local function PaperDollItemSlotButtonUpdate(frame)
if not frame.SetBackdropBorderColor then return end
local id = frame:GetID()
local rarity = id and GetInventoryItemQuality('player', id)
if rarity and rarity > 1 then
local r, g, b = GetItemQualityColor(rarity)
frame:SetBackdropBorderColor(r, g, b)
else
frame:SetBackdropBorderColor(unpack(E.media.bordercolor))
end
end
local function HandleTabs()
local lastTab
for index, tab in next, { _G.CharacterFrameTab1, HasPetUI() and _G.CharacterFrameTab2 or nil, _G.CharacterFrameTab3, _G.CharacterFrameTab4, _G.CharacterFrameTab5 } do
tab:ClearAllPoints()
if index == 1 then
tab:Point('TOPLEFT', _G.CharacterFrame, 'BOTTOMLEFT', 1, 76)
else
tab:Point('TOPLEFT', lastTab, 'TOPRIGHT', -19, 0)
end
lastTab = tab
end
end
local function HandleHappiness(frame)
local happiness = GetPetHappiness()
local _, isHunterPet = HasPetUI()
if not (happiness and isHunterPet) then return end
local texture = frame:GetRegions()
if happiness == 1 then
texture:SetTexCoord(0.41, 0.53, 0.06, 0.30)
elseif happiness == 2 then
texture:SetTexCoord(0.22, 0.345, 0.06, 0.30)
elseif happiness == 3 then
texture:SetTexCoord(0.04, 0.15, 0.06, 0.30)
end
end
local function HandleResistanceFrame(frameName)
for i = 1, 5 do
local frame, icon, text = _G[frameName..i], _G[frameName..i]:GetRegions()
frame:Size(24)
frame:SetTemplate()
if i ~= 1 then
frame:ClearAllPoints()
frame:Point('TOP', _G[frameName..i - 1], 'BOTTOM', 0, -1)
end
if icon then
icon:SetInside()
icon:SetTexCoord(unpack(ResistanceCoords[i]))
icon:SetDrawLayer('ARTWORK')
end
if text then
text:SetDrawLayer('OVERLAY')
end
end
end
function S:CharacterFrame()
if not (E.private.skins.blizzard.enable and E.private.skins.blizzard.character) then return end
-- Character Frame
local CharacterFrame = _G.CharacterFrame
S:HandleFrame(CharacterFrame, true, nil, 11, -12, -32, 76)
S:HandleCloseButton(_G.CharacterFrameCloseButton, CharacterFrame.backdrop)
_G.PaperDollFrame:StripTextures()
for i = 1, #CHARACTERFRAME_SUBFRAMES do
S:HandleTab(_G['CharacterFrameTab'..i])
end
-- Seasonal
local runeButton = E.ClassicSOD and _G.RuneFrameControlButton
if runeButton then
S:HandleButton(runeButton, true)
if not runeButton.runeIcon then -- make then icon
runeButton.runeIcon = runeButton:CreateTexture(nil, 'ARTWORK')
runeButton.runeIcon:SetTexture(134419) -- Interface\Icons\INV_Misc_Rune_06
runeButton.runeIcon:SetTexCoord(unpack(E.TexCoords))
runeButton.runeIcon:SetInside(runeButton)
end
end
-- Reposition Tabs
hooksecurefunc('PetTab_Update', HandleTabs)
HandleTabs()
S:HandleRotateButton(_G.CharacterModelFrameRotateLeftButton)
_G.CharacterModelFrameRotateLeftButton:Point('TOPLEFT', 3, -3)
S:HandleRotateButton(_G.CharacterModelFrameRotateRightButton)
_G.CharacterModelFrameRotateRightButton:Point('TOPLEFT', _G.CharacterModelFrameRotateLeftButton, 'TOPRIGHT', 3, 0)
_G.CharacterAttributesFrame:StripTextures()
HandleResistanceFrame('MagicResFrame')
for _, slot in pairs({ _G.PaperDollItemsFrame:GetChildren() }) do
if slot:IsObjectType('Button') and slot.Count then
local name = slot:GetName()
local icon = _G[name..'IconTexture']
local cooldown = _G[name..'Cooldown']
slot:StripTextures()
slot:SetTemplate(nil, true, true)
slot:StyleButton()
S:HandleIcon(icon)
icon:SetInside()
if cooldown then
E:RegisterCooldown(cooldown)
end
end
end
hooksecurefunc('PaperDollItemSlotButton_Update', PaperDollItemSlotButtonUpdate)
-- PetPaperDollFrame
_G.PetPaperDollFrame:StripTextures()
S:HandleButton(_G.PetPaperDollCloseButton)
S:HandleRotateButton(_G.PetModelFrameRotateLeftButton)
_G.PetModelFrameRotateLeftButton:ClearAllPoints()
_G.PetModelFrameRotateLeftButton:Point('TOPLEFT', 3, -3)
S:HandleRotateButton(_G.PetModelFrameRotateRightButton)
_G.PetModelFrameRotateRightButton:ClearAllPoints()
_G.PetModelFrameRotateRightButton:Point('TOPLEFT', _G.PetModelFrameRotateLeftButton, 'TOPRIGHT', 3, 0)
_G.PetAttributesFrame:StripTextures()
_G.PetResistanceFrame:CreateBackdrop()
_G.PetResistanceFrame.backdrop:SetOutside(_G.PetMagicResFrame1, nil, nil, _G.PetMagicResFrame5)
HandleResistanceFrame('PetMagicResFrame')
_G.PetPaperDollFrameExpBar:StripTextures()
_G.PetPaperDollFrameExpBar:SetStatusBarTexture(E.media.normTex)
E:RegisterStatusBar(_G.PetPaperDollFrameExpBar)
_G.PetPaperDollFrameExpBar:CreateBackdrop()
local PetPaperDollPetInfo = _G.PetPaperDollPetInfo
PetPaperDollPetInfo:Point('TOPLEFT', _G.PetModelFrameRotateLeftButton, 'BOTTOMLEFT', 9, -3)
PetPaperDollPetInfo:GetRegions():SetTexCoord(0.04, 0.15, 0.06, 0.30)
PetPaperDollPetInfo:SetFrameLevel(_G.PetModelFrame:GetFrameLevel() + 2)
PetPaperDollPetInfo:CreateBackdrop()
PetPaperDollPetInfo:Size(24)
PetPaperDollPetInfo:RegisterEvent('UNIT_HAPPINESS')
PetPaperDollPetInfo:SetScript('OnEvent', HandleHappiness)
PetPaperDollPetInfo:SetScript('OnShow', HandleHappiness)
-- Reputation Frame
_G.ReputationFrame:StripTextures()
for i = 1, NUM_FACTIONS_DISPLAYED do
local factionBar = _G['ReputationBar'..i]
local factionHeader = _G['ReputationHeader'..i]
local factionName = _G['ReputationBar'..i..'FactionName']
local factionWar = _G['ReputationBar'..i..'AtWarCheck']
factionBar:StripTextures()
factionBar:CreateBackdrop()
factionBar:SetStatusBarTexture(E.media.normTex)
factionBar:Size(108, 13)
E:RegisterStatusBar(factionBar)
if i == 1 then
factionBar:Point('TOPLEFT', 190, -86)
end
factionName:Width(140)
factionName:Point('LEFT', factionBar, 'LEFT', -150, 0)
factionName.SetWidth = E.noop
factionHeader:GetNormalTexture():Size(14)
factionHeader:SetHighlightTexture(E.ClearTexture)
factionHeader:Point('TOPLEFT', factionBar, 'TOPLEFT', -175, 0)
factionWar:StripTextures()
factionWar:Point('LEFT', factionBar, 'RIGHT', 0, 0)
factionWar.Icon = factionWar:CreateTexture(nil, 'OVERLAY')
factionWar.Icon:Point('LEFT', 6, -8)
factionWar.Icon:Size(32)
factionWar.Icon:SetTexture([[Interface\Buttons\UI-CheckBox-SwordCheck]])
end
hooksecurefunc('ReputationFrame_Update', ReputationFrameUpdate)
_G.ReputationListScrollFrame:StripTextures()
S:HandleScrollBar(_G.ReputationListScrollFrameScrollBar)
_G.ReputationDetailFrame:StripTextures()
_G.ReputationDetailFrame:SetTemplate('Transparent')
_G.ReputationDetailFrame:Point('TOPLEFT', _G.ReputationFrame, 'TOPRIGHT', -31, -12)
S:HandleCloseButton(_G.ReputationDetailCloseButton)
_G.ReputationDetailCloseButton:Point('TOPRIGHT', 2, 2)
S:HandleCheckBox(_G.ReputationDetailAtWarCheckBox)
S:HandleCheckBox(_G.ReputationDetailInactiveCheckBox)
S:HandleCheckBox(_G.ReputationDetailMainScreenCheckBox)
-- Skill Frame
_G.SkillFrame:StripTextures()
_G.SkillFrameExpandButtonFrame:DisableDrawLayer('BACKGROUND')
_G.SkillFrameCollapseAllButton:GetNormalTexture():Size(15)
_G.SkillFrameCollapseAllButton:Point('LEFT', _G.SkillFrameExpandTabLeft, 'RIGHT', -40, -3)
_G.SkillFrameCollapseAllButton:SetHighlightTexture(E.ClearTexture)
S:HandleCollapseTexture(_G.SkillFrameCollapseAllButton, nil, true)
_G.SkillFrameCancelButton:Kill() -- Random duplicate close button
for i = 1, _G.SKILLS_TO_DISPLAY do
local bar = _G['SkillRankFrame'..i]
local label = _G['SkillTypeLabel'..i]
local border = _G['SkillRankFrame'..i..'Border']
local background = _G['SkillRankFrame'..i..'Background']
bar:CreateBackdrop()
bar:SetStatusBarTexture(E.media.normTex)
E:RegisterStatusBar(bar)
border:StripTextures()
background:SetTexture(nil)
label:GetNormalTexture():Size(14)
label:SetHighlightTexture(E.ClearTexture)
S:HandleCollapseTexture(label, nil, true)
end
_G.SkillListScrollFrame:StripTextures()
S:HandleScrollBar(_G.SkillListScrollFrameScrollBar)
_G.SkillDetailScrollFrame:StripTextures()
S:HandleScrollBar(_G.SkillDetailScrollFrameScrollBar)
_G.SkillDetailStatusBar:StripTextures()
_G.SkillDetailStatusBar:SetParent(_G.SkillDetailScrollFrame)
_G.SkillDetailStatusBar:CreateBackdrop()
_G.SkillDetailStatusBar:SetStatusBarTexture(E.media.normTex)
E:RegisterStatusBar(_G.SkillDetailStatusBar)
S:HandleCloseButton(_G.SkillDetailStatusBarUnlearnButton)
_G.SkillDetailStatusBarUnlearnButton:CreateBackdrop('Transparent')
_G.SkillDetailStatusBarUnlearnButton:Size(26)
_G.SkillDetailStatusBarUnlearnButton:Point('LEFT', _G.SkillDetailStatusBarBorder, 'RIGHT', 5, 0)
_G.SkillDetailStatusBarUnlearnButton:SetHitRectInsets(0, 0, 0, 0)
-- Honor Tab
_G.HonorFrame:StripTextures()
_G.HonorFrameProgressBar:StripTextures()
_G.HonorFrameProgressBar:Height(22)
_G.HonorFrameProgressBar:SetParent(_G.HonorFrame)
_G.HonorFrameProgressBar:CreateBackdrop()
_G.HonorFrameProgressBar:SetStatusBarTexture(E.media.normTex)
E:RegisterStatusBar(_G.HonorFrameProgressBar)
end
S:AddCallback('CharacterFrame')