local E, L, V, P, G = unpack(select(2, ...)); --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB local S = E:GetModule('Skins') local _G = _G local pairs, select, unpack = pairs, select, unpack local CreateFrame = CreateFrame local hooksecurefunc = hooksecurefunc local WhoFrameColumn_SetWidth = WhoFrameColumn_SetWidth --Tab Regions local tabs = { 'LeftDisabled', 'MiddleDisabled', 'RightDisabled', 'Left', 'Middle', 'Right', } local function SkinFriendRequest(frame) if frame.isSkinned then return; end S:HandleButton(frame.DeclineButton, nil, true) S:HandleButton(frame.AcceptButton) frame.isSkinned = true end local function UpdateWhoSkins() _G.WhoListScrollFrame:StripTextures() end --Social Frame local function SkinSocialHeaderTab(tab) if not tab then return end for _, object in pairs(tabs) do local tex = _G[tab:GetName()..object] tex:SetTexture() end tab:GetHighlightTexture():SetTexture() tab.backdrop = CreateFrame('Frame', nil, tab, 'BackdropTemplate') tab.backdrop:SetTemplate() tab.backdrop:SetFrameLevel(tab:GetFrameLevel() - 1) tab.backdrop:Point('TOPLEFT', 3, -8) tab.backdrop:Point('BOTTOMRIGHT', -6, 0) end local function BattleNetFrame_OnEnter(button) if not button.backdrop then return end local bnetColor = _G.FRIENDS_BNET_NAME_COLOR button.backdrop:SetBackdropBorderColor(bnetColor.r, bnetColor.g, bnetColor.b) end local function BattleNetFrame_OnLeave(button) if not button.backdrop then return end button.backdrop:SetBackdropBorderColor(unpack(E.media.bordercolor)) end local function RAFRewards() for reward in _G.RecruitAFriendRewardsFrame.rewardPool:EnumerateActive() do S:HandleIcon(reward.Button.Icon) reward.Button.IconBorder:Kill() end end function S:FriendsFrame() if not (E.private.skins.blizzard.enable and E.private.skins.blizzard.friends) then return end S:HandleScrollBar(_G.FriendsListFrameScrollFrame.scrollBar, 5) S:HandleScrollBar(_G.WhoListScrollFrame.scrollBar, 5) local StripAllTextures = { 'FriendsTabHeaderTab1', 'FriendsTabHeaderTab2', 'WhoFrameColumnHeader1', 'WhoFrameColumnHeader2', 'WhoFrameColumnHeader3', 'WhoFrameColumnHeader4', 'AddFriendFrame', } local buttons = { 'FriendsFrameAddFriendButton', 'FriendsFrameSendMessageButton', 'WhoFrameWhoButton', 'WhoFrameAddFriendButton', 'WhoFrameGroupInviteButton', 'FriendsFrameIgnorePlayerButton', 'FriendsFrameUnsquelchButton', 'AddFriendEntryFrameAcceptButton', 'AddFriendEntryFrameCancelButton', 'AddFriendInfoFrameContinueButton', } for _, button in pairs(buttons) do S:HandleButton(_G[button]) end for _, object in pairs(StripAllTextures) do _G[object]:StripTextures() end local mainFrames = { 'WhoFrame', 'LFRQueueFrame', } for _, frame in pairs(mainFrames) do _G[frame]:StripTextures() end local FriendsFrame = _G.FriendsFrame S:HandlePortraitFrame(FriendsFrame) _G.WhoFrameListInset:StripTextures() _G.WhoFrameListInset.NineSlice:Hide() _G.WhoFrameEditBoxInset:StripTextures() _G.WhoFrameEditBoxInset.NineSlice:Hide() -- Kill the Portrait! for i = 1, FriendsFrame:GetNumRegions() do local region = select(i, FriendsFrame:GetRegions()) if region:IsObjectType('Texture') then region:SetTexture() region:SetAlpha(0) end end _G.IgnoreListFrame:StripTextures() S:HandleScrollBar(_G.IgnoreListFrameScrollFrame.scrollBar, 4) S:HandleDropDownBox(_G.FriendsFrameStatusDropDown, 70) _G.FriendsFrameStatusDropDown:ClearAllPoints() _G.FriendsFrameStatusDropDown:Point('TOPLEFT', FriendsFrame, 'TOPLEFT', 5, -24) local FriendsFrameBattlenetFrame = _G.FriendsFrameBattlenetFrame FriendsFrameBattlenetFrame:StripTextures() FriendsFrameBattlenetFrame:CreateBackdrop('Transparent') FriendsFrameBattlenetFrame.backdrop:SetAllPoints() local bnetColor = _G.FRIENDS_BNET_BACKGROUND_COLOR local button = CreateFrame('Button', nil, FriendsFrameBattlenetFrame) button:Point('TOPLEFT', FriendsFrameBattlenetFrame, 'TOPLEFT') button:Point('BOTTOMRIGHT', FriendsFrameBattlenetFrame, 'BOTTOMRIGHT') button:Size(FriendsFrameBattlenetFrame:GetSize()) button:CreateBackdrop() button.backdrop:SetBackdropColor(bnetColor.r, bnetColor.g, bnetColor.b, bnetColor.a) button.backdrop:SetBackdropBorderColor(unpack(E.media.bordercolor)) button:SetScript('OnClick', function() FriendsFrameBattlenetFrame.BroadcastFrame:ToggleFrame() end) button:SetScript('OnEnter', BattleNetFrame_OnEnter) button:SetScript('OnLeave', BattleNetFrame_OnLeave) FriendsFrameBattlenetFrame.BroadcastButton:Kill() -- We use the BattlenetFrame to enter a Status Message FriendsFrameBattlenetFrame.UnavailableInfoFrame:ClearAllPoints() FriendsFrameBattlenetFrame.UnavailableInfoFrame:Point('TOPLEFT', FriendsFrame, 'TOPRIGHT', 1, -18) FriendsFrameBattlenetFrame.BroadcastFrame:StripTextures() FriendsFrameBattlenetFrame.BroadcastFrame:CreateBackdrop('Transparent') FriendsFrameBattlenetFrame.BroadcastFrame.EditBox:StripTextures() FriendsFrameBattlenetFrame.BroadcastFrame:ClearAllPoints() FriendsFrameBattlenetFrame.BroadcastFrame:Point('TOPLEFT', FriendsFrame, 'TOPRIGHT', 3, -1) S:HandleEditBox(FriendsFrameBattlenetFrame.BroadcastFrame.EditBox) S:HandleButton(FriendsFrameBattlenetFrame.BroadcastFrame.UpdateButton) S:HandleButton(FriendsFrameBattlenetFrame.BroadcastFrame.CancelButton) S:HandleEditBox(_G.AddFriendNameEditBox) _G.AddFriendFrame:CreateBackdrop('Transparent') --Pending invites S:HandleButton(_G.FriendsListFrameScrollFrame.PendingInvitesHeaderButton) hooksecurefunc(_G.FriendsListFrameScrollFrame.invitePool, 'Acquire', function() for object in pairs(_G.FriendsListFrameScrollFrame.invitePool.activeObjects) do SkinFriendRequest(object) end end) --Who Frame _G.WhoFrame:HookScript('OnShow', UpdateWhoSkins) hooksecurefunc('FriendsFrame_OnEvent', UpdateWhoSkins) --Increase width of Level column slightly WhoFrameColumn_SetWidth(_G.WhoFrameColumnHeader3, 37) --Default is 32 for i = 1, 17 do local level = _G['WhoFrameButton'..i..'Level'] if level then level:Width(level:GetWidth() + 5) end end S:HandleDropDownBox(_G.WhoFrameDropDown, 120) --Bottom Tabs for i = 1, 4 do S:HandleTab(_G['FriendsFrameTab'..i]) end for i = 1, 3 do SkinSocialHeaderTab(_G['FriendsTabHeaderTab'..i]) end --View Friends BN Frame local FriendsFriendsFrame = _G.FriendsFriendsFrame FriendsFriendsFrame:StripTextures() FriendsFriendsFrame.ScrollFrameBorder:Hide() FriendsFriendsFrame:CreateBackdrop('Transparent') S:HandleDropDownBox(_G.FriendsFriendsFrameDropDown, 150) S:HandleButton(FriendsFriendsFrame.SendRequestButton) S:HandleButton(FriendsFriendsFrame.CloseButton) S:HandleScrollBar(_G.FriendsFriendsScrollFrame.scrollBar) --Quick join local QuickJoinFrame = _G.QuickJoinFrame local QuickJoinRoleSelectionFrame = _G.QuickJoinRoleSelectionFrame S:HandleScrollBar(_G.QuickJoinScrollFrame.scrollBar, 5) S:HandleButton(_G.QuickJoinFrame.JoinQueueButton) QuickJoinFrame.JoinQueueButton:Size(131, 21) --Match button on other tab QuickJoinFrame.JoinQueueButton:ClearAllPoints() QuickJoinFrame.JoinQueueButton:Point('BOTTOMRIGHT', QuickJoinFrame, 'BOTTOMRIGHT', -6, 4) _G.QuickJoinScrollFrameTop:SetTexture() _G.QuickJoinScrollFrameBottom:SetTexture() _G.QuickJoinScrollFrameMiddle:SetTexture() QuickJoinRoleSelectionFrame:StripTextures() QuickJoinRoleSelectionFrame:CreateBackdrop('Transparent') S:HandleButton(QuickJoinRoleSelectionFrame.AcceptButton) S:HandleButton(QuickJoinRoleSelectionFrame.CancelButton) S:HandleCloseButton(QuickJoinRoleSelectionFrame.CloseButton) S:HandleCheckBox(QuickJoinRoleSelectionFrame.RoleButtonTank.CheckButton) S:HandleCheckBox(QuickJoinRoleSelectionFrame.RoleButtonHealer.CheckButton) S:HandleCheckBox(QuickJoinRoleSelectionFrame.RoleButtonDPS.CheckButton) -- GameIcons for i = 1, _G.FRIENDS_TO_DISPLAY do local btn = _G['FriendsListFrameScrollFrameButton'..i] local icon = _G['FriendsListFrameScrollFrameButton'..i..'GameIcon'] icon:Size(22, 22) icon:SetTexCoord(.15, .85, .15, .85) icon:ClearAllPoints() icon:Point('RIGHT', btn, 'RIGHT', -24, 0) icon.SetPoint = E.noop end -- RecruitAFriend 8.2.5 local RAF = _G.RecruitAFriendFrame S:HandleButton(RAF.RecruitmentButton) -- /run RecruitAFriendFrame:ShowSplashScreen() local SplashFrame = RAF.SplashFrame S:HandleButton(SplashFrame.OKButton) if E.private.skins.parchmentRemoverEnable then SplashFrame.Background:SetColorTexture(unpack(E.media.bordercolor)) SplashFrame.PictureFrame:Hide() SplashFrame.Bracket_TopLeft:Hide() SplashFrame.Bracket_TopRight:Hide() SplashFrame.Bracket_BottomRight:Hide() SplashFrame.Bracket_BottomLeft:Hide() SplashFrame.PictureFrame_Bracket_TopLeft:Hide() SplashFrame.PictureFrame_Bracket_TopRight:Hide() SplashFrame.PictureFrame_Bracket_BottomRight:Hide() SplashFrame.PictureFrame_Bracket_BottomLeft:Hide() end local Claiming = RAF.RewardClaiming Claiming:StripTextures() Claiming:CreateBackdrop('Transparent') S:HandleIcon(Claiming.NextRewardButton.Icon) Claiming.NextRewardButton.CircleMask:Hide() Claiming.NextRewardButton.IconBorder:Kill() S:HandleButton(Claiming.ClaimOrViewRewardButton) local RecruitList = RAF.RecruitList RecruitList.Header:StripTextures() RecruitList.ScrollFrameInset:StripTextures() RecruitList.ScrollFrameInset:CreateBackdrop('Transparent') S:HandleScrollBar(RecruitList.ScrollFrame.Slider) -- Recruitment local Recruitment = _G.RecruitAFriendRecruitmentFrame Recruitment:StripTextures() Recruitment:CreateBackdrop('Transparent') S:HandleEditBox(Recruitment.EditBox) S:HandleButton(Recruitment.GenerateOrCopyLinkButton) S:HandleCloseButton(Recruitment.CloseButton) -- Rewards local Reward = _G.RecruitAFriendRewardsFrame Reward:StripTextures() Reward:CreateBackdrop('Transparent') S:HandleCloseButton(Reward.CloseButton) hooksecurefunc(Reward, 'UpdateRewards', RAFRewards) RAFRewards() -- Because it's loaded already. The securehook is for when it updates in game. Thanks for playing. end S:AddCallback('FriendsFrame')