annotate Dock.lua @ 50:c3166f700438

dock beacons and text fader cleaned up fixed OnLeave ending at mouseOverDock false and causing beacons to stick fixed a nil argument in dock framescript
author Nenue
date Tue, 05 Jan 2016 01:37:29 -0500
parents 2bf7eb1844cb
children 0a9a6740ea5d
rev   line source
Nenue@50 1 --- Devian - Dock.lua
Nenue@32 2 -- @file-author@
Nenue@32 3 -- @project-revision@ @project-hash@
Nenue@32 4 -- @file-revision@ @file-hash@
Nenue@32 5 -- Created: 12/26/2015 12:32 PM
Nenue@50 6 -- Docking and arrangement calls
Nenue@32 7
Nenue@32 8 local D = LibStub("AceAddon-3.0"):GetAddon("Devian")
Nenue@50 9 local ceil, floor, sqrt, pairs, GetScreenWidth, GetScreenHeight = math.ceil, math.floor, math.sqrt, pairs, GetScreenWidth, GetScreenHeight
Nenue@50 10 local UIFrameFadeIn, UIFrameFadeOut = UIFrameFadeIn, UIFrameFadeOut
Nenue@47 11 local db
Nenue@32 12
Nenue@32 13 --- Spaces each frame evenly across the screen.
Nenue@32 14 function D:DistributeFrames() --
Nenue@50 15 local max = self.num_channels
Nenue@50 16 local num_side = ceil(sqrt(max))
Nenue@50 17 local w = GetScreenWidth() / num_side
Nenue@50 18 local h = GetScreenHeight() / num_side
Nenue@50 19 for i, frame in pairs(D.console) do
Nenue@50 20 local dx = (i-1) % num_side
Nenue@50 21 local dy = floor((i-1) / num_side)
Nenue@50 22 frame.width = w
Nenue@50 23 frame.height = h
Nenue@50 24 frame.x = dx * w
Nenue@50 25 frame.y = -(dy * h)
Nenue@50 26 frame:Save()
Nenue@50 27 end
Nenue@32 28 end
Nenue@32 29
Nenue@32 30 --- Place all frames stacked beneath the primary frame.
Nenue@32 31 function D:StackFrames()
Nenue@32 32 local last
Nenue@50 33 for _, frame in pairs(self.console) do
Nenue@32 34 if last then
Nenue@32 35 frame.x = last.x
Nenue@32 36 frame.y = last.y - 20
Nenue@32 37 else
Nenue@32 38 frame.x = (GetScreenWidth()-frame:GetWidth())/2
Nenue@32 39 frame.y = 0
Nenue@32 40 end
Nenue@32 41 frame:Save()
Nenue@32 42 last = frame
Nenue@32 43 end
Nenue@32 44 end
Nenue@32 45
Nenue@32 46
Nenue@50 47 --- Space everything and set the dock size
Nenue@46 48 function D:UpdateDock()
Nenue@47 49 local pad_offset = 12
Nenue@47 50 local draw_offset = pad_offset
Nenue@47 51 for i = 1, #self.dock.buttons do
Nenue@47 52 local d = self.dock.buttons[i]
Nenue@47 53 d:SetPoint('TOPLEFT', DevianDock, 'TOPLEFT', draw_offset, 0)
Nenue@47 54 draw_offset= draw_offset + d:GetWidth() + pad_offset
Nenue@47 55 end
Nenue@50 56 self.dock:SetWidth(draw_offset)
Nenue@50 57 end
Nenue@46 58
Nenue@50 59 --- Updates region visibility as needed
Nenue@50 60 local getFadeInArgs = function(sign, region)
Nenue@50 61 --print('Dvn', region)
Nenue@50 62 local db = D.db
Nenue@50 63 local alph = region:GetAlpha()
Nenue@50 64 local a = (db[sign..'_alpha_on'] - alph)
Nenue@50 65 local b = (db[sign..'_alpha_on']-db[sign..'_alpha_off'])
Nenue@50 66 local dur = (a / b) * db[sign..'_fade_in']
Nenue@50 67 return dur, alph, db[sign..'_alpha_on']
Nenue@50 68 end
Nenue@50 69
Nenue@50 70 local getFadeOutArgs = function(sign, region)
Nenue@50 71 local db = D.db
Nenue@50 72 local alph = region:GetAlpha()
Nenue@50 73 local a = (alph - db[sign..'_alpha_off'])
Nenue@50 74 local b = (db[sign..'_alpha_on']-db[sign..'_alpha_off'])
Nenue@50 75 local dur = (a / b) * db[sign..'_fade_out']
Nenue@50 76 return dur, alph, db[sign..'_alpha_off']
Nenue@50 77 end
Nenue@50 78
Nenue@50 79 function D.UpdateBeacon(beacon)
Nenue@50 80 local db = D.db
Nenue@50 81 local isActive = (beacon.raised or beacon.selected)
Nenue@50 82 if isActive then
Nenue@50 83 UIFrameFadeIn(beacon, getFadeInArgs('dock_button', beacon))
Nenue@50 84 end
Nenue@50 85 if beacon.showName or isActive then
Nenue@50 86 UIFrameFadeIn(beacon.caption, getFadeInArgs('dock_button', beacon.caption))
Nenue@50 87 end
Nenue@50 88
Nenue@50 89 if not isActive then
Nenue@50 90 UIFrameFadeOut(beacon, getFadeOutArgs('dock_button', beacon))
Nenue@50 91 end
Nenue@50 92 if (not beacon.showName) and (not isActive) then
Nenue@50 93 UIFrameFadeOut(beacon.caption,getFadeOutArgs('dock_button', beacon.caption))
Nenue@50 94 end
Nenue@47 95 end
Nenue@47 96
Nenue@47 97 --- Dock interactions
Nenue@47 98 function D.DockHighlight(beacon)
Nenue@47 99 db = D.db
Nenue@47 100 local self = D.dock
Nenue@47 101 local mouseOverDock
Nenue@47 102 if self:IsMouseOver() then
Nenue@47 103 mouseOverDock = true
Nenue@47 104 end
Nenue@47 105
Nenue@47 106 if beacon and beacon:IsMouseOver() then
Nenue@47 107 mouseOverDock = true
Nenue@47 108 if not beacon.raised then
Nenue@47 109 beacon.raised = true
Nenue@50 110 D.UpdateBeacon(beacon)
Nenue@46 111 end
Nenue@47 112 elseif beacon.raised and beacon.index ~= db.current_channel then
Nenue@47 113 beacon.raised = nil
Nenue@50 114 D.UpdateBeacon(beacon)
Nenue@47 115 end
Nenue@46 116
Nenue@47 117 if mouseOverDock then
Nenue@50 118 -- Raise it up
Nenue@47 119 if not self.raised then
Nenue@47 120 self.raised = true
Nenue@50 121 UIFrameFadeIn(self, getFadeInArgs('dock', self))
Nenue@46 122 end
Nenue@47 123 elseif self.raised then
Nenue@50 124 -- Drop it down
Nenue@47 125 self.raised = nil
Nenue@50 126 UIFrameFadeOut(self, getFadeOutArgs('dock', self))
Nenue@46 127 end
Nenue@47 128
Nenue@46 129 end