changeset 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 0d2967941745
children 5b1c570b1cfd
files Devian.lua Devian.xml Dock.lua UI.lua
diffstat 4 files changed, 66 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- 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)
--- 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 @@
     <FontString inherits="DevianFont" wordwrap="true"
                  justifyH="LEFT"
                  indented="true"
-                 setAllPoints="true">
+                 setAllPoints="true"
+                  parentArray="_msg">
       <FontHeight>
         <AbsValue val="13"/>
       </FontHeight>
@@ -310,19 +311,17 @@
         self.console:Save()
       </OnMouseDown>
       <OnEnter>
+        --print(self:GetName(),'got mouse')
         Devian.DockHighlight(self)
       </OnEnter>
-      <OnLeave>
-        Devian.DockHighlight(self)
-      </OnLeave>
     </Scripts>
     <Layers>
       <Layer level="OVERLAY">
       </Layer>
     </Layers>
     <Frames>
-      <Frame name="$parentText" parentKey="caption" alpha="0" blendMode="BLEND">
-        <Size x="200" y="30" />
+      <Frame name="$parentText" parentKey="caption" alpha="0" blendMode="BLEND" enableMouse="false">
+        <Size x="100" y="30" />
         <Anchors>
           <Anchor point="BOTTOM" relativePoint="BOTTOM" x="0" y="0" />
         </Anchors>
--- 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
--- 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)