Skip to content

Commit

Permalink
move fader code to helpers
Browse files Browse the repository at this point in the history
  • Loading branch information
Tuller committed Nov 19, 2017
1 parent 725e37b commit 519f251
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 34 deletions.
34 changes: 2 additions & 32 deletions core/frame.lua
Original file line number Diff line number Diff line change
Expand Up @@ -377,37 +377,8 @@ function Frame:IsDockedFocus()
return false
end


--[[ Fading ]]--

local function fader_Create(parent)
local fadeGroup = parent:CreateAnimationGroup()
fadeGroup:SetLooping('NONE')
fadeGroup:SetScript('OnFinished', function(self) parent:SetAlpha(self.targetAlpha) end)

local fade = fadeGroup:CreateAnimation('Alpha')
fade:SetSmoothing('IN_OUT')

return function(targetAlpha, duration)
if fadeGroup:IsPlaying() then
fadeGroup:Pause()
end

fadeGroup.targetAlpha = targetAlpha
fade:SetFromAlpha(parent:GetAlpha())
fade:SetToAlpha(targetAlpha)
fade:SetDuration(duration)
fadeGroup:Play()
end
end

local Fade = setmetatable({}, {__index = function(t, parent)
local fade = fader_Create(parent)
t[parent] = fade
return fade
end})


--fades the frame from the current opacity setting
--to the expected setting
function Frame:Fade()
Expand All @@ -419,14 +390,13 @@ function Frame:Fade()
return
end

Fade[self](self:GetExpectedAlpha(), 0.1)
Addon:Fade(self, self:GetExpectedAlpha(), 0.1)

if Addon:IsLinkedOpacityEnabled() then
self:ForDocked('Fade')
end
end


--[[ Visibility ]]--

function Frame:ShowFrame()
Expand Down Expand Up @@ -874,4 +844,4 @@ end

--[[ exports ]]--

Addon.Frame = Frame
Addon.Frame = Frame
46 changes: 44 additions & 2 deletions core/helpers.lua
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
-- functions I call at least three times
-- functions I call at least three(ish) times

local AddonName = ...
local Addon = _G[AddonName]
Expand Down Expand Up @@ -38,4 +38,46 @@ function Addon:CreateNameGenerator(prefix)
id = id + 1
return ('%s_%s_%d'):format(AddonName, prefix, id)
end
end
end

-- A functional way to fade a frame from one opacity to another without constantly
-- creating new animation groups for the frame
do
local faders = {}

local function fader_OnFinished(self)
self:GetParent():SetAlpha(self.toAlpha)
end

local function fader_Create(parent)
local animation = parent:CreateAnimationGroup()
animation:SetLooping('NONE')
animation:SetScript('OnFinished', fader_OnFinished)

local fade = animation:CreateAnimation('Alpha')
fade:SetSmoothing('IN_OUT')

return function(toAlpha, duration)
if animation:IsPlaying() then
animation:Pause()
end

fade:SetFromAlpha(parent:GetAlpha())
fade:SetToAlpha(toAlpha)
fade:SetDuration(duration)

animation.toAlpha = toAlpha
animation:Play()
end
end

function Addon:Fade(frame, toAlpha, duration)
local fade = faders[frame]

if not fade then
fade = fader_Create(frame)
end

fade(toAlpha, duration)
end
end

0 comments on commit 519f251

Please sign in to comment.