Mercurial > wow > devian
diff Dock.lua @ 58:0a9a6740ea5d v2.1
- 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
author | Nenue |
---|---|
date | Tue, 12 Jan 2016 04:50:37 -0500 |
parents | c3166f700438 |
children | 516ceb31703d |
line wrap: on
line diff
--- 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