Mercurial > wow > devian
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)