# HG changeset patch # User Nenue # Date 1469744876 14400 # Node ID 07ef62fe201f4cb04e4141eed3ed91032c6a4909 # Parent f253baf6022d1a705f4df03c5ec3cdff38a17f92 Re-write of BuffFrame module: - uses secure hooks on blizzard BuffFrame.lua functions to determine needed action - make use of built-in table behavior to reduce unnecessary frame updates diff -r f253baf6022d -r 07ef62fe201f BuffFrame/BuffButton.lua --- a/BuffFrame/BuffButton.lua Fri Jul 08 18:01:49 2016 -0400 +++ b/BuffFrame/BuffButton.lua Thu Jul 28 18:27:56 2016 -0400 @@ -131,9 +131,9 @@ guide.info = {} -- UnitAura cache if i == consolidatedPosition then - guide.legend:SetTexture(1,1,0,0.5) + guide.legend:SetColorTexture(1,1,0,0.5) else - guide.legend:SetTexture(legend.r, legend.g, legend.b, legend.a) + guide.legend:SetColorTexture(legend.r, legend.g, legend.b, legend.a) end guide.idText:SetText(i) -- needs to reflect the current position @@ -274,18 +274,18 @@ end if debuffBorder then - deco.background:SetTexture(debuffBorder:GetVertexColor()) + deco.background:SetColorTexture(debuffBorder:GetVertexColor()) debuffBorder:Hide() else if guide.info.caster == 'player' then print(guide.info.caster) - deco.background:SetTexture(unpack(c.PlayerColor)) + deco.background:SetColorTexture(unpack(c.PlayerColor)) elseif buffData.isBossDebuff then print(guide.info.isBossDebuff) - deco.background:SetTexture(unpack(c.BossColor)) + deco.background:SetColorTexture(unpack(c.BossColor)) else print(guide.info.caster) - deco.background:SetTexture(unpack(c.Color)) + deco.background:SetColorTexture(unpack(c.Color)) end end diff -r f253baf6022d -r 07ef62fe201f BuffFrame/BuffFrame.lua --- a/BuffFrame/BuffFrame.lua Fri Jul 08 18:01:49 2016 -0400 +++ b/BuffFrame/BuffFrame.lua Thu Jul 28 18:27:56 2016 -0400 @@ -43,7 +43,7 @@ Aura:RegisterEvent("GROUP_ROSTER_UPDATE") Aura:RegisterEvent("PLAYER_SPECIALIZATION_CHANGED") hooksecurefunc("BuffFrame_UpdateAllBuffAnchors", Aura.PostBuffAnchors) - hooksecurefunc("RaidBuffTray_Update", Aura.UpdateRaidBuffs) + --hooksecurefunc("RaidBuffTray_Update", Aura.UpdateRaidBuffs) end function Aura:OnUpdate () diff -r f253baf6022d -r 07ef62fe201f BuffFrame/Constants.lua --- a/BuffFrame/Constants.lua Fri Jul 08 18:01:49 2016 -0400 +++ b/BuffFrame/Constants.lua Thu Jul 28 18:27:56 2016 -0400 @@ -43,16 +43,6 @@ drawCount = {}, anchorTemplate = 'VeneerAnchorTemplate', } -Aura.displays.ConsolidatedBuff = { - legendColor = {0.5, 0.5, 0.5, legendAlpha}, - maxIcons = 9, - actualIcons = function() return select(2, GetRaidBuffInfo()) end, - buffName = 'ConsolidatedBuff', - anchorTemplate = 'VeneerConsolidatedBuffsAnchor', - buffTemplate = 'VeneerRaidBuffTemplate', - drawCount = {}, - filters = 'HELPFUL', -} ----------------------- -- RaidBuff visual args diff -r f253baf6022d -r 07ef62fe201f BuffFrame/RaidBuffTray.lua --- a/BuffFrame/RaidBuffTray.lua Fri Jul 08 18:01:49 2016 -0400 +++ b/BuffFrame/RaidBuffTray.lua Thu Jul 28 18:27:56 2016 -0400 @@ -41,7 +41,7 @@ local styleset = Aura.BuffStyles[style] if not path or path == '' then print('path is nil/empty') - icon:SetTexture(1, 1, 1, 1) + icon:SetColorTexture(1, 1, 1, 1) icon:SetVertexColor(unpack(styleset.Color)) else icon:SetTexture(path or icon:GetTexture()) @@ -203,6 +203,8 @@ local missingTypes = {} local raidBuffsInitialized Aura.UpdateRaidBuffs = function() + --[[ + local c = Aura.displays.ConsolidatedBuff.conf local anchor = _G[c.Parent..'Anchor'] @@ -327,6 +329,8 @@ missingBuffs[i]:Hide() end end + + ]] end vn.UpdateMissingBuffs = function() diff -r f253baf6022d -r 07ef62fe201f Config/Config.lua --- a/Config/Config.lua Fri Jul 08 18:01:49 2016 -0400 +++ b/Config/Config.lua Thu Jul 28 18:27:56 2016 -0400 @@ -397,9 +397,9 @@ vn.ToggleGuides = function(_, self) vn.Conf.GuidesMode = (not vn.Conf.GuidesMode) if vn.Conf.GuidesMode then - self:GetNormalTexture():SetTexture(0.94, 0.21, 0.21, 1) + self:GetNormalTexture():SetColorTexture(0.94, 0.21, 0.21, 1) else - self:GetNormalTexture():SetTexture(0, 0, 0, 1) + self:GetNormalTexture():SetColorTexture(0, 0, 0, 1) end vn.UpdateConfigLayers() diff -r f253baf6022d -r 07ef62fe201f Modules/BuffFrame.lua --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Modules/BuffFrame.lua Thu Jul 28 18:27:56 2016 -0400 @@ -0,0 +1,315 @@ +-- Veneer +-- BuffFrame.lua +-- Created: 7/27/2016 8:08 PM +-- %file-revision% +-- +local PLUGIN_NAME = 'BuffFrame' +local plugin = {} +local vn, print = LibStub("LibKraken").register(VeneerController, plugin) + + + +local buttons = {} +local buffTypes = { + { + name = 'buff', + pattern = 'BuffButton(%d)', + filters = 'HELPFUL', + }, + { + name = 'debuff', + pattern = 'DebuffButton(%d)', + filters = 'HARMFUL', + }, + { + name = 'tempenchant', + pattern = 'TempEnchant(%d)', + filters = 'TEMPENCHANT' + } +} + +local textureMapping = { + [1] = 16, --Main hand + [2] = 17, --Off-hand + [3] = 18, --Ranged +} + +local tickCounter = {} +local aurasCache = {} +local skinnedFrames = {} +local pendingFrames = {} +local anchors = {} +local expirationCache = {} + +local VeneerButton_OnHide = function(self) + self:SetScript('OnDragStart', self.StartMoving) + self:SetScript('OnDragStop', self.StopMovingOrSizing) + self:SetMovable(true) + self:EnableMouse(true) + self:RegisterForDrag('LeftButton') +end +local VeneerButton_OnShow = function(self) + self:SetScript('OnDragStart', self.StartMoving) + self:SetScript('OnDragStop', self.StopMovingOrSizing) + self:SetMovable(true) + self:EnableMouse(true) + self:RegisterForDrag('LeftButton') +end + + +local GetVeneer = function(frame) + local name = frame:GetName() + if not _G[name..'Veneer'] then + + local veneer = CreateFrame('Frame', name..'Veneer', UIParent) + veneer:SetAllPoints(frame) + veneer.bg = veneer:CreateTexture() + veneer.bg:SetColorTexture(0,1,0,0.5) + veneer.bg:SetAllPoints(veneer) + veneer.bg:Hide() + veneer:Hide() + + veneer:SetScript('OnShow', VeneerButton_OnShow) + veneer:SetScript('OnHide', VeneerButton_OnHide) + + local position = tonumber(name:match("%d")) + if position == 1 then + veneer:Show() + end + + veneer.progress = CreateFrame('Frame', name .. 'VeneerProgress', veneer) + veneer.progress:Hide() + veneer.progress:SetPoint('BOTTOMLEFT', veneer, 'BOTTOMLEFT', 3, -6) + veneer.progress:SetPoint('TOPRIGHT', veneer, 'BOTTOMRIGHT', -3, -1) + + veneer.progress.bg = veneer.progress:CreateTexture(nil, 'BACKGROUND') + veneer.progress.bg:SetColorTexture(0,0,0,0.5) + veneer.progress.bg:SetAllPoints(veneer.progress) + + veneer.progress.fg = veneer.progress:CreateTexture(nil, 'ARTWORK') + veneer.progress.fg:SetColorTexture(0,1,0,1) + veneer.progress.fg:SetPoint('BOTTOMLEFT', 1,1) + veneer.progress.fg:SetPoint('TOP', 0, -1) + + veneer.progress.status = veneer.progress:CreateFontString() + veneer.progress.status:SetFontObject(VeneerNumberFont) + veneer.progress.status:SetPoint('TOP') + + end + + + return _G[name..'Veneer'] +end + +local UpdateVeneer = function (frame, duration, expires) + local veneer = GetVeneer(frame) + + if expires and duration then + veneer.progress:Show() + + local startTime = (expires - duration) + local endTime = expires or 0 + print('|cFF0088FF'..frame:GetName()..'|r', 'has expiration', startTime, 'to', endTime, 'over', duration, 'frame', veneer.progress:GetWidth()) + veneer.progress:SetScript('OnUpdate', function(self) + local w = floor(veneer.progress:GetWidth()+.5) + local t = GetTime() + local progress = (t - startTime) / duration + if t >= endTime or not frame:IsVisible() then + veneer.startTime = nil + self:SetScript('OnUpdate', nil) + self:Hide() + else + self.fg:SetWidth(w - ceil(w * progress) - 2) + end + end) + end + + + + veneer:Show() +end + + +-- Associates skinning elements with said button +local SkinFrame = function(name) + local frame = _G[name ] + if skinnedFrames[frame] then + print('|cFFFF4400Attempting to skin a frame that already went through.|r') + return + end + + local icon = _G[name .. 'Icon'] + local border = _G[name .. 'Border'] + local duration = _G[name .. 'Duration'] + local slot = frame:GetID() or 0 + + tickCounter[frame] = (tickCounter[frame] or 0) + 1 + + + print(tickCounter[frame], frame:GetName(), '|cFFFFFF00'..slot..'|r') + skinnedFrames[frame] = frame + frame:SetSize(48,48) + icon:SetTexCoord(0,1,0,1) + if border then + border:SetSize(50,50) + end + if duration then + duration:ClearAllPoints() + duration:SetPoint('BOTTOM') + duration:SetFontObject(VeneerNumberFont) + duration:SetDrawLayer('OVERLAY') + + end + + GetVeneer(frame) + + anchors[frame] = veneer + print('Initializing', name) +end + + +--- Provides the number of changed indices for use in deciding between partial and full veneer updates +local CacheCheck = function(frame, ...) + aurasCache[frame] = aurasCache[frame] or {} + local hasChange = 0 + local numVals = select('#',...) + for i = 1, numVals do + local arg = select(i, ...) + if aurasCache[frame][i] ~= arg then + hasChange = hasChange + 1 + end + aurasCache[frame][i] = arg + end + return hasChange +end + +local AuraButton_Update = function(name, index, filter) + local bName = name..index + local frame = _G[bName] + if frame and frame:IsVisible() then + tickCounter[frame] = (tickCounter[frame] or 0) + 1 + local cacheDiff = CacheCheck(frame, UnitAura(frame.unit, frame:GetID(), frame.filter)) + -- did something change? + if (cacheDiff >= 1) or not skinnedFrames[frame] then + print(frame:GetName(), 'diff:', cacheDiff) + tinsert(pendingFrames, frame) + end + + + if frame.expirationTime ~= expirationCache[name] then + print('|cFFBBFF00expirationTime|r', name, frame.expirationTime) + expirationCache[name] = frame.expirationTime + print(unpack(aurasCache[frame])) + UpdateVeneer(frame, aurasCache[frame][6], aurasCache[frame][7]) + end + + -- is it a new button? + if not skinnedFrames[frame] then + SkinFrame(bName) + end + end +end + +local BuffFrame_UpdateAllBuffAnchors = function() + local todo = {} + if #pendingFrames >= 1 then + + print('|cFFBBFF00AllBuffAnchors|r', #pendingFrames) + while pendingFrames[1] do + local frame = tremove(pendingFrames) + tinsert(todo, frame:GetName()) + + UpdateVeneer(frame) + + + end + print(table.concat(todo, ', ')) + end + --BuffButton1 + --DebuffButton1 + TempEnchant1:SetPoint('TOPRIGHT', BuffButton1, 'TOPRIGHT', BuffButton1:GetWidth()+4, 0) +end + +local AuraButton_UpdateDuration = function(frame, timeLeft) + local ts = '' + if timeLeft > 3600 then + ts = ts .. floor(timeLeft/3600) .. ':' + timeLeft = mod(timeLeft, 3600) + end + if timeLeft > 60 then + ts = ts .. floor(timeLeft/60) .. '\'' + timeLeft = mod(timeLeft, 60) + end + ts = ts .. floor(timeLeft)..'"' + + frame.duration:SetText(ts) + frame.duration:SetVertexColor(1,1,1) + +end + +local visibility = {} +local TempEnchantButton_OnHide = function(self) + local isVisible = self:IsVisible() + if isVisible ~= visibility[self] then + print('|cFFFFFF00HIDE|r', self:GetName()) + visibility[self] = isVisible + end +end + +-- Obtains the first instance of Tenchant use + +local TemporaryEnchantFrame_Update = function(...) + local numVals = select('#', ...) + local numItems = numVals / 4 + if numItems >= 1 then + for itemIndex = numItems, 1, -1 do + local frame = _G['TempEnchant'..itemIndex] + local hasEnchant, timeRemaining, enchantCharges = select((4 * (itemIndex -1)) + 1, ...) + + + if hasEnchant then + local endTime = floor(GetTime()*1000) + timeRemaining + + + --print(endTime) + if endTime ~= expirationCache[frame] then + if expirationCache[frame] then + print(endTime, expirationCache[frame], endTime - expirationCache[frame]) + end + expirationCache[frame] = endTime + print('push tempenchant timer update', timeRemaining / 1000, GetTime()+(timeRemaining/1000)) + UpdateVeneer(frame, timeRemaining/1000, GetTime()+(timeRemaining/1000)) + end + else + GetVeneer(frame):Hide() + end + + end + + end + +end + +local BuffFrame_Update = function(...) + --print('Time for udpate!', ...) +end + + +hooksecurefunc("BuffFrame_Update", BuffFrame_Update) +hooksecurefunc("AuraButton_UpdateDuration", AuraButton_UpdateDuration) +hooksecurefunc("AuraButton_Update", AuraButton_Update) +hooksecurefunc("BuffFrame_UpdateAllBuffAnchors", BuffFrame_UpdateAllBuffAnchors) +hooksecurefunc("TemporaryEnchantFrame_Update", TemporaryEnchantFrame_Update) + +-- The TempEnchant frames are hardcoded in the base FrameXML, so get them now +for i = 1, 3 do + + SkinFrame('TempEnchant'..i) + hooksecurefunc(_G['TempEnchant'..i], "Hide", TempEnchantButton_OnHide) + + +end + +plugin.init = function () + plugin.db = vn.db[PLUGIN_NAME] +end \ No newline at end of file diff -r f253baf6022d -r 07ef62fe201f ObjectiveTracker/ExperienceBar.lua --- a/ObjectiveTracker/ExperienceBar.lua Fri Jul 08 18:01:49 2016 -0400 +++ b/ObjectiveTracker/ExperienceBar.lua Thu Jul 28 18:27:56 2016 -0400 @@ -38,7 +38,7 @@ self:RegisterEvent('PLAYER_XP_UPDATE') self:RegisterEvent('PLAYER_LEVEL_UP') self:RegisterEvent('PLAYER_UPDATE_RESTING') - self.statusbg:SetTexture(0,0,0,.25) + self.statusbg::SetColorTexture(0,0,0,.25) self:Show() end @@ -46,7 +46,7 @@ self:UnregisterEvent('PLAYER_XP_UPDATE') self:UnregisterEvent('PLAYER_LEVEL_UP') self:UnregisterEvent('PLAYER_UPDATE_RESTING') - self.statusbg:SetTexture(0.5,0.5,0.5,0.5) + self.statusbg::SetColorTexture(0.5,0.5,0.5,0.5) self:Hide() end @@ -83,9 +83,9 @@ end if IsResting() then - self.statusbg:SetTexture(.2,.8,.2,.5) + self.statusbg::SetColorTexture(.2,.8,.2,.5) else - self.statusbg:SetTexture(0,0,0,.25) + self.statusbg::SetColorTexture(0,0,0,.25) end self.xpText:SetText(xp .. '/'.. xpmax .. (rest and (' ('..tostring(rest)..')') or '')) end diff -r f253baf6022d -r 07ef62fe201f ObjectiveTracker/Layout.lua --- a/ObjectiveTracker/Layout.lua Fri Jul 08 18:01:49 2016 -0400 +++ b/ObjectiveTracker/Layout.lua Thu Jul 28 18:27:56 2016 -0400 @@ -255,7 +255,7 @@ block.title:SetPoint('TOP', block, 'TOP', 0, -titleSpacing) block.title:SetPoint('LEFT', block, 'LEFT', titleIndent, 0) block.title:SetTextColor(unpack(titleColor)) - block.titlebg:SetTexture(1,1,1,1) + block.titlebg:SetColorTexture(1,1,1,1) block.titlebg:SetGradientAlpha(unpack(titlebg)) block.titlebg:SetPoint('TOP', block, 'TOP', 0, 0) block.titlebg:SetPoint('BOTTOM', block.title, 'BOTTOM', 0, -titleSpacing) @@ -265,7 +265,7 @@ block.status:SetPoint('LEFT', block.titlebg, 'LEFT', textIndent, 0) block.statusbg:SetPoint('TOP', block.titlebg, 'BOTTOM', 0, 0) block.statusbg:SetPoint('BOTTOM', block, 'BOTTOM', 0, 0) - block.statusbg:SetTexture(1,1,1,1) + block.statusbg:SetColorTexture(1,1,1,1) block.statusbg:SetGradientAlpha(unpack(textbg)) block.statusbg:SetBlendMode(textBlend) block.SelectionOverlay:SetGradientAlpha(unpack(selectionbg)) diff -r f253baf6022d -r 07ef62fe201f ObjectiveTracker/ObjectiveStyle.lua --- a/ObjectiveTracker/ObjectiveStyle.lua Fri Jul 08 18:01:49 2016 -0400 +++ b/ObjectiveTracker/ObjectiveStyle.lua Thu Jul 28 18:27:56 2016 -0400 @@ -451,14 +451,14 @@ a1, a2, a3, a4 = unpack(value.MinColor) b1, b2, b3, b4 = unpack(value.MaxColor) region:SetVertexColor(1,1,1) - region:SetTexture(1,1,1,1) + region::SetColorTexture(1,1,1,1) region:SetGradientAlpha(o, a1, a2, a3, a4, b1, b2, b3, b4) end sb.Background = function(region, value) print('|cFF0088FFBackground|r', unpack(value)) region:SetVertexColor(1,1,1) -- reset - region:SetTexture(unpack(value)) + region::SetColorTexture(unpack(value)) end sb.BackgroundComplex = function (region, value) local left, tile, right = value.Left, value.Tile, value.Right diff -r f253baf6022d -r 07ef62fe201f ObjectiveTracker/ObjectiveTracker.xml --- a/ObjectiveTracker/ObjectiveTracker.xml Fri Jul 08 18:01:49 2016 -0400 +++ b/ObjectiveTracker/ObjectiveTracker.xml Thu Jul 28 18:27:56 2016 -0400 @@ -324,21 +324,6 @@ - - - diff -r f253baf6022d -r 07ef62fe201f TimeManager/TimeManager.lua --- a/TimeManager/TimeManager.lua Fri Jul 08 18:01:49 2016 -0400 +++ b/TimeManager/TimeManager.lua Thu Jul 28 18:27:56 2016 -0400 @@ -56,7 +56,6 @@ -- runs once per ui load clock.OnEnable = function(self) self:SetParent(_G.UIParent) - self:SetPoint('TOPRIGHT', _G.UIParent, 'TOPRIGHT', -100, -2) self:SetScript('OnUpdate', clock.OnUpdate) self:Show() self.time:SetText('Clock stuff') diff -r f253baf6022d -r 07ef62fe201f TimeManager/TimeManager.xml --- a/TimeManager/TimeManager.xml Fri Jul 08 18:01:49 2016 -0400 +++ b/TimeManager/TimeManager.xml Thu Jul 28 18:27:56 2016 -0400 @@ -2,9 +2,10 @@ ..\FrameXML\UI.xsd"> - + + self.drag = true self.toggle = true Veneer.RegisterModuleFrame(self, 'Clock') @@ -34,10 +35,6 @@ - - - -