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 |