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