# HG changeset patch # User Nenue # Date 1452592237 18000 # Node ID 0a9a6740ea5d38a2493455054c76d1df5c2b9231 # Parent 0d29679417454d26e17efc6f59ec384a95018c17 - Discarded use of blizzard functions never meant for the wild (http://forums.wowace.com/showthread.php?t=20397) - Fixed dock buttons not highlighting properly - Fixed dock buttons not dropping after selection change - Mouse input is disabled during player movement diff -r 0d2967941745 -r 0a9a6740ea5d Devian.lua --- a/Devian.lua Fri Jan 08 10:15:09 2016 -0500 +++ b/Devian.lua Tue Jan 12 04:50:37 2016 -0500 @@ -322,9 +322,11 @@ if channel.width < 250 then prefix = string.sub(prefix, 0,2) end - channel.out:AddMessage('|cFF'.. pcolor..prefix ..'|r ' .. message) - UIFrameFadeIn(D.dock.buttons[id], db.dock_onshow_fade_time, db.dock_onshow_fade_from, db.dock_onshow_fade_to) - UIFrameFadeIn(D.dock.buttons[id].caption, db.dock_onshow_fade_time, db.dock_onshow_fade_from, db.dock_onshow_fade_to) + channel.out:AddMessage('|cFF'.. pcolor..prefix ..'|r ' .. message, 0.8, 0.8, 0.8, nil, nil, prefix, GetTime()) + if not D.dock.buttons[id].newMessage then + D.dock.buttons[id].newMessage = true + D.UpdateBeacon(D.dock.buttons[id]) + end end wipe(buffer) end @@ -360,16 +362,16 @@ for k, v in pairs(self.console) do if v.enabled then v.preAlpha = v:GetAlpha() - UIFrameFadeOut(v, db.movement_fade_time, v.preAlpha, 0) - UIFrameFadeOut(v.out, db.movement_fade_time, v.preAlpha, 0) + v:SetAlpha(0) + v:EnableMouse(false) end end end) self:RegisterEvent('PLAYER_STOPPED_MOVING', function() for k, v in pairs(self.console) do if v.enabled then - UIFrameFadeIn(v, db.movement_fade_time, v:GetAlpha(), v.alpha) - UIFrameFadeIn(v.out, db.movement_fade_time, v:GetAlpha(), v.alpha) + v:SetAlpha(v.preAlpha) + v:EnableMouse(true) end end end) diff -r 0d2967941745 -r 0a9a6740ea5d Devian.xml --- a/Devian.xml Fri Jan 08 10:15:09 2016 -0500 +++ b/Devian.xml Tue Jan 12 04:50:37 2016 -0500 @@ -74,7 +74,8 @@ + setAllPoints="true" + parentArray="_msg"> @@ -310,19 +311,17 @@ self.console:Save() + --print(self:GetName(),'got mouse') Devian.DockHighlight(self) - - Devian.DockHighlight(self) - - - + + diff -r 0d2967941745 -r 0a9a6740ea5d Dock.lua --- a/Dock.lua Fri Jan 08 10:15:09 2016 -0500 +++ b/Dock.lua Tue Jan 12 04:50:37 2016 -0500 @@ -76,54 +76,92 @@ return dur, alph, db[sign..'_alpha_off'] end +local function queueFade (self, duration, from, to) + self:SetAlpha(to) +end + function D.UpdateBeacon(beacon) local db = D.db - local isActive = (beacon.raised or beacon.selected) + local isActive = (beacon.raised or beacon.selected or beacon.newMessage) if isActive then - UIFrameFadeIn(beacon, getFadeInArgs('dock_button', beacon)) + --print(beacon:GetName(), 'active, fade in') + queueFade(beacon, getFadeInArgs('dock_button', beacon)) end + if beacon.showName or isActive then - UIFrameFadeIn(beacon.caption, getFadeInArgs('dock_button', beacon.caption)) + --print(beacon:GetName(), 'show name, fade in name') + queueFade(beacon.caption, getFadeInArgs('dock_button', beacon.caption)) end if not isActive then - UIFrameFadeOut(beacon, getFadeOutArgs('dock_button', beacon)) + queueFade(beacon, getFadeOutArgs('dock_button', beacon)) end + if (not beacon.showName) and (not isActive) then - UIFrameFadeOut(beacon.caption,getFadeOutArgs('dock_button', beacon.caption)) + --print(beacon:GetName(), 'no name no active, fade out') + queueFade(beacon.caption,getFadeOutArgs('dock_button', beacon.caption)) end end ---- Dock interactions +local function FrameFade(frame) + if not D.fader then + D.fader = CreateFrame('Frame', 'DevianFaderFrame', UIParent):CreateAnimationGroup('fader'):CreateAnimation('Alpha', 'FadeIn') + end +end + +--- Dock interaction framescript function D.DockHighlight(beacon) db = D.db local self = D.dock - local mouseOverDock + local mouseOverDock = false if self:IsMouseOver() then mouseOverDock = true end - if beacon and beacon:IsMouseOver() then + if beacon then + --print(beacon:GetName(), ' highlighter got beacon') mouseOverDock = true if not beacon.raised then + --print(beacon:GetName(), ' beacon not raised') beacon.raised = true D.UpdateBeacon(beacon) + + -- IsMouseOver can still return false during its frame's OnEnter + beacon.inc = 0 + beacon:SetScript('OnUpdate', function(self) + if not self:IsMouseOver() then + self.inc = self.inc + 1 + --print(self:GetName(),self.inc) + if self.inc > 10 then + --print(self:GetName(), 'lost mouseover, terminating OnUpdate') + self.raised = nil + D.UpdateBeacon(self) + self:SetScript('OnUpdate', nil) + end + end + end) end elseif beacon.raised and beacon.index ~= db.current_channel then beacon.raised = nil D.UpdateBeacon(beacon) + --beacon:SetScript('OnUpdate', nil) end if mouseOverDock then -- Raise it up if not self.raised then - self.raised = true - UIFrameFadeIn(self, getFadeInArgs('dock', self)) + + self.raised = true + queueFade(self, getFadeInArgs('dock', self)) end elseif self.raised then -- Drop it down self.raised = nil - UIFrameFadeOut(self, getFadeOutArgs('dock', self)) + queueFade(self, getFadeOutArgs('dock', self)) + for k, v in pairs(self.buttons) do + v.raised = nil + D.UpdateBeacon(v) + end end end \ No newline at end of file diff -r 0d2967941745 -r 0a9a6740ea5d UI.lua --- a/UI.lua Fri Jan 08 10:15:09 2016 -0500 +++ b/UI.lua Tue Jan 12 04:50:37 2016 -0500 @@ -73,6 +73,7 @@ -- update dock buttons local beacon = D.dock.buttons[c.index] beacon.selected = true + beacon.newMessage = nil D.UpdateBeacon(beacon) for _, part in pairs(c.border) do @@ -89,6 +90,8 @@ bc.title:SetTextColor(unpack(db.backborder)) local beacon = D.dock.buttons[bc.index] + beacon.raised = nil + beacon.showName = nil beacon.selected = nil D.UpdateBeacon(beacon)