Mercurial > wow > buffalo2
comparison ObjectiveStyle.lua @ 14:ed642234f017
ObjectiveFrame
- implement proper tracker name text
- expanded tracker prototypes to cover "objective lines" formatting and accommodation of widget variables
- implement the progress bars for bonus objectives
ObjectiveStyle
- moved `UpdateWrapperStyle` over and renamed it to fit semantics
- change the formula for block.`height` to measure non-widget content only
- allows widgets to position relative to text
- size FontString `status` to match block.`height`
- full block height is acquired by adding block.`height` and block.`attachmentHeight` which is calculated during objective parsing
ObjectiveWidgets
- use string keys for generated widgets to deal with multiple objectives under the same questID, and maybe dungeon objectives
- wrapper buttons use a common code path
- specialized handlers for wheel scrolling moved over to fit semantics
author | Nenue |
---|---|
date | Mon, 04 Apr 2016 03:16:22 -0400 |
parents | 9455693fc290 |
children | 880828018bf4 |
comparison
equal
deleted
inserted
replaced
13:9455693fc290 | 14:ed642234f017 |
---|---|
3 local print = B.print('SetStyle') | 3 local print = B.print('SetStyle') |
4 ------------------------------------------------------------- | 4 ------------------------------------------------------------- |
5 --- Deals with swapping between different color palettes | 5 --- Deals with swapping between different color palettes |
6 --- | 6 --- |
7 | 7 |
8 local itemButtonSize, itemButtonSpacing = 36, 1 | |
9 local wrapperPosition = {'RIGHT', UIParent, 'RIGHT', -84, 0} | |
10 local titleFont, textFont = [[Interface\Addons\SharedMedia_MyMedia\font\ArchivoNarrow-Bold.ttf]], [[Interface\Addons\SharedMedia_MyMedia\font\ArchivoNarrow-Regular.ttf]] | 8 local titleFont, textFont = [[Interface\Addons\SharedMedia_MyMedia\font\ArchivoNarrow-Bold.ttf]], [[Interface\Addons\SharedMedia_MyMedia\font\ArchivoNarrow-Regular.ttf]] |
11 local titleSize, textSize = 15, 15 | 9 local titleSize, textSize = 16, 15 |
12 local titleOutline, textOutline = "OUTLINE", "OUTLINE" | 10 local titleOutline, textOutline = "OUTLINE", "OUTLINE" |
13 local titleSpacing, textSpacing = 4, 3 | 11 local titleSpacing, textSpacing = 3, 1 |
14 local unpack, type, pairs, tconcat = unpack, type, pairs, table.concat | 12 local unpack, type, pairs, tconcat = unpack, type, pairs, table.concat |
15 local wrapperMaxWidth, wrapperMaxHeight = 280, 490 -- these are the hard bounds, actual *Height variables are changed | |
16 local wrapperHeadFont, wrapperHeadSize, wrapperHeadOutline = [[Interface\Addons\SharedMedia_MyMedia\font\ArchivoNarrow-Bold.ttf]], 16, 'NONE' | 13 local wrapperHeadFont, wrapperHeadSize, wrapperHeadOutline = [[Interface\Addons\SharedMedia_MyMedia\font\ArchivoNarrow-Bold.ttf]], 16, 'NONE' |
17 local headerFont, headerSize, headerHeight = [[Interface\Addons\SharedMedia_MyMedia\font\ArchivoNarrow-Bold.ttf]], 18, 24 | 14 local headerFont, headerSize = [[Interface\Addons\SharedMedia_MyMedia\font\ArchivoNarrow-Bold.ttf]], 24 |
18 local headerOutline, headerColor, headerSpacing = 'OUTLINE', {1,1,1,1}, 2 | 15 local headerOutline, headerSpacing = 'OUTLINE', 2 |
19 | 16 |
20 | 17 |
21 mod.defaults.ObjectiveWrapper = { | 18 mod.defaults.Wrapper = { |
22 ObjectiveTrackerFloat = {'BOTTOM', 'RIGHT'}, | 19 WrapperPoint = 'TOPRIGHT', |
23 ObjectiveTrackerParent = 'DebuffButton', | 20 WrapperFloatX = -25, |
24 ObjectiveTrackerSize = {250, 600}, | 21 WrapperFloatV = 'TOP', |
25 ObjectiveWrapperParent = '', | 22 WrapperFloatY = -200, |
23 | |
24 WrapperWidth = 270, | |
25 WrapperHeight = 600, | |
26 } | 26 } |
27 mod.defaults.Tracker = { | |
28 HeaderHeight = 24, | |
29 } | |
30 | |
27 mod.defaults.Style = { | 31 mod.defaults.Style = { |
28 Format = { | 32 Format = { |
29 Frame = { | 33 Frame = { |
30 Width = 270, | 34 Width = 270, |
31 }, | 35 }, |
32 title = { | 36 title = { |
33 Indent = 0 | 37 Indent = 0, |
38 Spacing = 0, | |
34 }, | 39 }, |
35 status = { | 40 status = { |
36 Indent = 5 | 41 Indent = 5, |
42 Spacing = 0, | |
37 } | 43 } |
38 }, | 44 }, |
39 FontBank = { | 45 FontBank = { |
40 ['Normal'] = _G.VeneerCriteriaFontNormal, | 46 ['Normal'] = _G.VeneerCriteriaFontNormal, |
41 ['Progress'] = _G.VeneerCriteriaFontProgress, | 47 ['Progress'] = _G.VeneerCriteriaFontProgress, |
44 }, | 50 }, |
45 Normal = { | 51 Normal = { |
46 title = { | 52 title = { |
47 TextColor = {1, 1, 1, 1}, | 53 TextColor = {1, 1, 1, 1}, |
48 Width = 270, | 54 Width = 270, |
55 Spacing = 0, | |
56 Indent = 2, | |
49 }, | 57 }, |
50 titlebg = { | 58 titlebg = { |
51 Background = {0, 0, 0, 1}, | 59 Background = {0, 0, 0, 1}, |
52 Width = 270, | 60 Width = 270, |
53 }, | 61 }, |
54 status = { | 62 status = { |
55 Width = 270, | 63 Width = 270, |
64 Spacing = 0, | |
56 }, | 65 }, |
57 statusbg = { | 66 statusbg = { |
58 Width = 270, | 67 Width = 270, |
59 }, | 68 }, |
60 Frame = { | 69 Frame = { |
61 Width = 270, | 70 Width = 270, |
62 } | 71 } |
63 }, | 72 }, |
64 Wrapper = { | 73 Wrapper = { |
65 Frame = { | 74 Frame = { |
66 Point = {wrapperPosition}, | |
67 MaxSize = {wrapperMaxWidth, wrapperMaxHeight}, | |
68 BackgroundComplex = {Left = {'', 0, 0.4, 0,1, 100}, Right={'', 0.6,1,0,1}, Tile = {'', 0.4,.6,0,1, 100}}, }, | 75 BackgroundComplex = {Left = {'', 0, 0.4, 0,1, 100}, Right={'', 0.6,1,0,1}, Tile = {'', 0.4,.6,0,1, 100}}, }, |
69 title = { | 76 title = { |
70 Font = {wrapperHeadFont, wrapperHeadSize, wrapperHeadOutline}, | 77 Font = {wrapperHeadFont, wrapperHeadSize, wrapperHeadOutline}, |
71 Spacing = 4,} | 78 Spacing = 4,} |
72 }, | 79 }, |
73 Tracker = { | 80 Tracker = { |
74 Normal = { | 81 Normal = { |
75 title = { | 82 title = { |
76 Font = {headerFont, headerSize, headerOutline}, Spacing = headerSpacing, | 83 Font = {headerFont, headerSize, headerOutline}, Spacing = headerSpacing, |
84 Indent = 2, | |
85 TextColor = {1, .9, .2, 1}, | |
77 }, | 86 }, |
78 titlebg = { | 87 titlebg = { |
79 Gradient = {MinColor = {0,0,0,0.7}, MaxColor = {0,0,0,.35}}, | 88 Gradient = {MinColor = {0,0,0,0.25}, MaxColor = {0,0,0,.15}}, |
80 } | 89 } |
81 } | 90 } |
82 }, | 91 }, |
83 TrackerBlock = { | 92 TrackerBlock = { |
84 Normal = { | 93 Normal = { |
85 titlebg = { | 94 titlebg = { |
86 Gradient = { MinColor = {0.2, .4, 1, 0.45}, MaxColor = {.7, 0, 0.9, .19}}, | 95 Indent = 2, |
96 Gradient = { MinColor = {0.2, .4, 1, 0}, MaxColor = {.7, 0, 0.9, .14}}, | |
87 }, | 97 }, |
88 title = { | 98 title = { |
99 TextColor = {1,1,1,0.5}, | |
89 Font = {titleFont, titleSize, titleOutline}, | 100 Font = {titleFont, titleSize, titleOutline}, |
90 Spacing = titleSpacing, | 101 Spacing = titleSpacing, |
91 }, | 102 }, |
92 status = { | 103 status = { |
93 Font = {textFont, textSize, textOutline}, Spacing = textSpacing, | 104 TextColor = {1,1,1,0.5}, |
105 Font = {textFont, textSize, textOutline}, | |
106 Spacing = textSpacing, | |
94 }, | 107 }, |
95 statusbg = { | 108 statusbg = { |
96 Gradient = { MinColor = {0.2, .4, 1, 0.25}, MaxColor = {.7, 0, 0.9, .12}}, | 109 Gradient = { MinColor = {0.2, .4, 1, 0}, MaxColor = {.7, 0, 0.9, .11}}, |
97 } | 110 } |
98 }, | 111 }, |
99 Super = { | 112 Super = { |
100 title = { | 113 title = { |
114 TextColor = {1,1,1,1}, | |
101 Font = {titleFont, titleSize, titleOutline}, | 115 Font = {titleFont, titleSize, titleOutline}, |
102 Spacing = titleSpacing, BackgroundFullWidth = true | 116 Spacing = titleSpacing, BackgroundFullWidth = true |
103 }, | 117 }, |
104 titlebg = { | 118 titlebg = { |
105 Gradient = { MinColor = {0, .7, .6, .8}, MaxColor = {0, .7, .6, 0.2}}, | 119 Gradient = { MinColor = {0, .7, .6, .45}, MaxColor = {0, .7, .6, 0.23}}, |
106 }, | 120 }, |
107 status = { | 121 status = { |
108 Font = {textFont, textSize, textOutline}, Spacing = textSpacing, | 122 TextColor = {1,1,1,1}, |
123 Font = {textFont, textSize, textOutline}, | |
124 Spacing = textSpacing, | |
109 }, | 125 }, |
110 statusbg = { | 126 statusbg = { |
111 Gradient = { MinColor = {0, .7, .6, 0.5}, MaxColor = {0, .7, .6, 0.1} }, | 127 Gradient = { MinColor = {0, .7, .6, 0.40}, MaxColor = {0, .7, .6, 0.23} }, |
112 }, | 128 }, |
113 }, | 129 }, |
114 MouseDown = { | 130 MouseDown = { |
115 title = { | 131 title = { |
116 Font = {titleFont, titleSize, titleOutline}, | 132 Font = {titleFont, titleSize, titleOutline}, |
127 Gradient = { MinColor = {0.2, .4, 1, 1}, MaxColor = {0.2, .4, 1, .2}, }, | 143 Gradient = { MinColor = {0.2, .4, 1, 1}, MaxColor = {0.2, .4, 1, .2}, }, |
128 } | 144 } |
129 }, | 145 }, |
130 Complete = { | 146 Complete = { |
131 title = { | 147 title = { |
148 TextColor = {1,1,1,0.5}, | |
132 Font = {titleFont, titleSize, titleOutline}, Spacing = titleSpacing, | 149 Font = {titleFont, titleSize, titleOutline}, Spacing = titleSpacing, |
133 }, | 150 }, |
134 titlebg = { | 151 titlebg = { |
135 Gradient = { MinColor = {0, 1, 0, 0.34}, MaxColor = {0, 1, 0, .17}, }, | 152 Gradient = { MinColor = {0, 1, 0, 0.34}, MaxColor = {0, 1, 0, .17}, }, |
136 }, | 153 }, |
137 status = { | 154 status = { |
155 TextColor = {1,1,1,0.5}, | |
138 Font = {textFont, textSize, textOutline}, Spacing = textSpacing, | 156 Font = {textFont, textSize, textOutline}, Spacing = textSpacing, |
139 }, | 157 }, |
140 statusbg = { | 158 statusbg = { |
141 Gradient = { MinColor = {0, 1, 0, .25}, MaxColor = {0, 1, 0, 0.12}, }, | 159 Gradient = { MinColor = {0, 1, 0, .25}, MaxColor = {0, 1, 0, 0.12}, }, |
142 } | 160 } |
201 local style_cache = mod.BlockStyleCache | 219 local style_cache = mod.BlockStyleCache |
202 mod.regions = {} | 220 mod.regions = {} |
203 mod.regionStyles = {} | 221 mod.regionStyles = {} |
204 mod.SetBlockStyle = function(frame, frameType, ...) | 222 mod.SetBlockStyle = function(frame, frameType, ...) |
205 -- var names intended to reflect argument order | 223 -- var names intended to reflect argument order |
224 print('|cFFFFFF00'..frame:GetName()..'|r') | |
206 --@debug@ | 225 --@debug@ |
207 local c = mod.defaults.Normal | 226 local c = mod.defaults.Normal |
208 local style_list = {... } | 227 local style_list = {... } |
209 local styleName = frameType .. '-' .. table.concat(style_list,'') | 228 local styleName = frameType .. '-' .. table.concat(style_list,'') |
210 | 229 |
263 else | 282 else |
264 print(' |cFFFFFFFF' .. k ..'|r =', tostring(v)) | 283 print(' |cFFFFFFFF' .. k ..'|r =', tostring(v)) |
265 end | 284 end |
266 end | 285 end |
267 style_cache[styleName] = style | 286 style_cache[styleName] = style |
268 else | |
269 print('Cache hit: ', styleName) | |
270 end | 287 end |
271 | 288 |
272 local style = style_cache[styleName] | 289 local style = style_cache[styleName] |
273 | 290 |
274 if not style_cache_func[styleName] then | 291 if not style_cache_func[styleName] then |
312 code = code .. "\nend" | 329 code = code .. "\nend" |
313 local result = assert(loadstring(code)) | 330 local result = assert(loadstring(code)) |
314 print('storing style func', styleName, result()) | 331 print('storing style func', styleName, result()) |
315 style_cache_func[styleName] = result() | 332 style_cache_func[styleName] = result() |
316 | 333 |
317 else | |
318 print('Cache function hit:', styleName) | |
319 end | 334 end |
320 style_cache_func[styleName](frame) | 335 style_cache_func[styleName](frame) |
321 | 336 |
322 --- Hardcoding the sizing vars for sanity | 337 --- Hardcoding the sizing vars for sanity |
323 local normalSettings = mod.defaults.Style.Format | 338 local normalSettings = mod.defaults.Style.Format |
324 frame.titleHeight = frame.title and (frame.title:GetStringHeight() + frame.title.spacing*2) or 0 | 339 frame.titleHeight = frame.title and (frame.title:GetStringHeight() + (frame.title.spacing or 0)*2) or 0 |
325 frame.statusHeight = frame.status and (frame.status:GetStringHeight() + frame.status.spacing*2 + frame.attachmentHeight) or 0 | 340 frame.statusHeight = frame.status and (frame.status:GetStringHeight() + (frame.status.spacing or 0)*2) or 0 |
326 frame.height = frame.titleHeight + frame.statusHeight | 341 frame.height = frame.titleHeight + frame.statusHeight + (frame.attachmentHeight or 0) |
327 frame.width = normalSettings.Frame.Width | 342 frame.width = normalSettings.Frame.Width |
328 frame.statusWidth = frame.width - normalSettings.status.Indent | 343 frame.statusWidth = frame.width - normalSettings.status.Indent |
329 frame.titleWidth = frame.width - normalSettings.title.Indent | 344 frame.titleWidth = frame.width - normalSettings.title.Indent |
330 | 345 |
331 if frame.status then | 346 if frame.status then |
332 print('status ', frame.statusHeight, normalSettings.status.Indent, 0) | 347 print('status ', frame.statusHeight, normalSettings.status.Indent, 0, 'statusbg', frame.statusHeight) |
333 frame.status:SetPoint('LEFT', frame, 'LEFT', normalSettings.status.Indent, 0) | 348 frame.status:SetPoint('LEFT', frame, 'LEFT', normalSettings.status.Indent, 0) |
334 frame.status:SetHeight(frame.statusHeight) | 349 frame.status:SetHeight(frame.statusHeight) |
335 if frame.statusbg then | 350 if frame.statusbg then |
336 | 351 |
337 print('statusbg', frame.statusHeight) | 352 frame.statusbg:SetHeight(frame.statusHeight + (frame.attachmentHeight or 0)) |
338 frame.statusbg:SetHeight(frame.statusHeight) | |
339 frame.statusbg:SetWidth(frame.width) | 353 frame.statusbg:SetWidth(frame.width) |
340 end | 354 end |
341 end | 355 end |
342 if frame.title then | 356 if frame.title then |
343 print('title ',frame.titleHeight, normalSettings.title.Indent) | 357 print('title ',frame.titleHeight, normalSettings.title.Indent, 'titlebg',frame.titleHeight) |
344 frame.title:SetPoint('LEFT', frame, 'LEFT', normalSettings.title.Indent) | 358 frame.title:SetPoint('LEFT', frame, 'LEFT', normalSettings.title.Indent) |
345 frame.title:SetHeight(frame.titleHeight) | 359 frame.title:SetHeight(frame.titleHeight) |
346 if frame.titlebg then | 360 if frame.titlebg then |
347 print('titlebg',frame.titleHeight) | |
348 frame.titlebg:SetHeight(frame.titleHeight) | 361 frame.titlebg:SetHeight(frame.titleHeight) |
349 frame.titlebg:SetWidth(frame.width) | 362 frame.titlebg:SetWidth(frame.width) |
350 end | 363 end |
351 end | 364 end |
365 frame:SetSize(frame.width, frame.height) | |
352 print('sizing frame', frame.width, frame.height) | 366 print('sizing frame', frame.width, frame.height) |
353 frame:SetSize(frame.width, frame.height) | |
354 print(frame:GetSize()) | |
355 --[[ | 367 --[[ |
356 local titleSpacing, titleSpacing2 = c.Title.Spacing, (c.Title.Spacing * 2) | 368 local titleSpacing, titleSpacing2 = c.Title.Spacing, (c.Title.Spacing * 2) |
357 local textSpacing, textSpacing2 = c.Text.Spacing, (c.Text.Spacing * 2) | 369 local textSpacing, textSpacing2 = c.Text.Spacing, (c.Text.Spacing * 2) |
358 | 370 |
359 block.title:SetSpacing(titleSpacing) | 371 block.title:SetSpacing(titleSpacing) |
377 block.width = blockWidth | 389 block.width = blockWidth |
378 block.height = blockHeight | 390 block.height = blockHeight |
379 --]] | 391 --]] |
380 --print(' |cFF00FFFF'..block:GetName()..'|r:|cFF0088FFSetStyle|r(', blockWidth, 'x', blockHeight, '(textH', textHeight,', titleH', titleHeight, ')') | 392 --print(' |cFF00FFFF'..block:GetName()..'|r:|cFF0088FFSetStyle|r(', blockWidth, 'x', blockHeight, '(textH', textHeight,', titleH', titleHeight, ')') |
381 end | 393 end |
394 local segments = {'Left', 'Right', 'Tile' } | |
395 local Wrapper = _G.VeneerObjectiveWrapper | |
396 mod.UpdateWrapperStyle = function() | |
397 local c = mod.Conf.Wrapper | |
398 --Wrapper:ClearAllPoints() | |
399 --Wrapper:SetPoint(c.WrapperPoint, UIParent, c.WrapperPoint, c.WrapperFloatX, c.WrapperFloatY) | |
400 end | |
401 | |
402 mod.Tracker.SetBlockTags = function(block, info) | |
403 if info.isComplete then | |
404 block.mainStyle = 'Complete' | |
405 end | |
406 if info.superTracked then | |
407 block.subStyle = 'Super' | |
408 elseif info.isDaily then | |
409 block.subStyle = 'Daily' | |
410 end | |
411 end | |
412 local unitLevel = UnitLevel('player') | |
413 mod.Quest.SetBlockTags = function(block, info) | |
414 | |
415 mod.Tracker.SetBlockTags(block, info) | |
416 if info.level then | |
417 local levelDiff = unitLevel - info.level | |
418 if levelDiff > 9 then | |
419 block.title:SetTextColor(0.7, 0.7, 0.7, 1) | |
420 elseif levelDiff > 1 then | |
421 block.title:SetTextColor(0.5, 1, 0.5, 1) | |
422 elseif levelDiff < -1 then | |
423 block.title:SetTextColor(1, 0.4, 0.25, 1) | |
424 elseif levelDiff < -4 then | |
425 block.title:SetTextColor(1, 0, 0, 1) | |
426 else | |
427 block.title:SetTextColor(1,1,1,1) | |
428 end | |
429 end | |
430 end | |
431 mod.Cheevs.SetBlockTags = function(block, info) | |
432 mod.Tracker.SetBlockTags(block, info) | |
433 end | |
382 | 434 |
383 --- Argument containers | 435 --- Argument containers |
384 local o = "" -- text flag | 436 local o -- text flag |
385 local a1, a2, a3, a4, b1, b2, b3, b4 = 0,0,0,1, 0,0,0,1 -- color1, color2 | 437 local a1, a2, a3, a4, b1, b2, b3, b4 -- color1, color2 |
386 local f1, f2, f3 = "", 0, "" -- font | 438 local f1, f2, f3 -- font |
387 local w1, w2 = 0, 0 -- size | 439 local w1, w2 -- size |
388 local p1, p2, p3, x, y = "", "", "", 0, 0 -- path/point args | 440 local p1, p2, p3, x, y -- path/point args |
389 mod.SetBlockAttribute = {} | 441 mod.SetBlockAttribute = {} |
390 local sb = mod.SetBlockAttribute | 442 local sb = mod.SetBlockAttribute |
391 local print = B.print('Attribute') | 443 local print = B.print('Attribute') |
392 sb.Gradient = function(region, value) | 444 sb.Gradient = function(region, value) |
393 print('|cFF8844FFGradient|r', region:GetName(), unpack(value)) | 445 print('|cFF8844FFGradient|r', region:GetName(), unpack(value)) |
413 print('|cFFFFFF00Font|r', f1, f2, f3) | 465 print('|cFFFFFF00Font|r', f1, f2, f3) |
414 region:SetFont(f1, f2, f3) | 466 region:SetFont(f1, f2, f3) |
415 end | 467 end |
416 | 468 |
417 sb.Spacing = function(region, value) | 469 sb.Spacing = function(region, value) |
418 print('FontSpacing', value) | 470 print('FontSpacing', region:GetName(), value) |
419 region:SetSpacing(value) | 471 region:SetSpacing(value) |
420 region.spacing = value | 472 region.spacing = value |
421 end | 473 end |
422 | 474 |
423 sb.TextColor = function(region, value) | 475 sb.TextColor = function(region, value) |
445 end | 497 end |
446 sb.Size = function(region, value) | 498 sb.Size = function(region, value) |
447 w1, w2 = unpack(value) | 499 w1, w2 = unpack(value) |
448 region:SetSize(w1, w2) | 500 region:SetSize(w1, w2) |
449 end | 501 end |
502 |