# HG changeset patch
# User Nenue
# Date 1459581565 14400
# Node ID f03c75f63566e09ef2551ed221f751c76632226b
# Parent 2698173edd40728b31ef182b778f5bce4d4255c3
ObjectiveStyle & ObjectiveFrame
- abstract aesthetic details away from ObjectiveFrame
- revise SetBlockStyle into a more general algorithm for every frame
- implement caching of resolved attribute combinations
- use loadstring functions to store resolved attributes and call upon those when, for example, a MouseUp leads a tracker block to restore its original style
diff -r 2698173edd40 -r f03c75f63566 ObjectiveCore.lua
--- a/ObjectiveCore.lua Fri Apr 01 14:54:01 2016 -0400
+++ b/ObjectiveCore.lua Sat Apr 02 03:19:25 2016 -0400
@@ -32,6 +32,11 @@
local Scroller = Wrapper.scrollArea
local Scroll = _G.VeneerObjectiveScroll
+--- Baseline defaults
+mod.defaults = {
+
+}
+
--- list used to make things happen
mod.orderedNames = {[1] = 'AutoQuest', [2] = 'Quest', [3] = 'Cheevs'}
diff -r 2698173edd40 -r f03c75f63566 ObjectiveFrame.lua
--- a/ObjectiveFrame.lua Fri Apr 01 14:54:01 2016 -0400
+++ b/ObjectiveFrame.lua Sat Apr 02 03:19:25 2016 -0400
@@ -4,11 +4,11 @@
-- @file-revision@ @file-hash@
-- Created: 3/30/2016 12:49 AM
local B = select(2,...).frame
+local mod = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame')
local ipairs, max, min, unpack, floor, pairs, tostring, type = ipairs, max, min, unpack, floor, pairs, tostring, type
local IsResting, UnitXP, UnitXPMax, GetXPExhaustion = IsResting, UnitXP, UnitXPMax, GetXPExhaustion
local UnitLevel, IsQuestWatched, UIParent = UnitLevel, IsQuestWatched, UIParent
local CreateFrame = CreateFrame
-local mod = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame')
local print = B.print('Objectives')
--------------------------------------------------------------------
--- Global frame layout
@@ -26,7 +26,7 @@
local scrollWidth, scrollHeight
local previousBlock
local currentBlock
---- todo: map these into config table when its sorted out
+--- todo: source these from config
local itemButtonSize, itemButtonSpacing = 36, 1
local titleFont, textFont = [[Interface\Addons\SharedMedia_MyMedia\font\ArchivoNarrow-Bold.ttf]], [[Interface\Addons\SharedMedia_MyMedia\font\ArchivoNarrow-Regular.ttf]]
local titleSize, textSize = 15, 15
@@ -40,110 +40,13 @@
local wrapperPosition = {'RIGHT', UIParent, 'RIGHT', -84, 0}
--- These are mostly aesthetic choices so it lives here
-mod.defaults = {
- ObjectiveTrackerAnchor = {'BOTTOM', 'RIGHT'},
- ObjectiveTrackerParent = 'DebuffButton',
- ObjectiveTrackerSize = {250, 600},
- ObjectiveWrapperParent = '',
- WrapperStyle = {
- Header = {
- Background = {Left = '', Right = '', Tile = ''},
- BackgroundCrop = {Left = {0, 0.4, 0,1}, Right={0.6,1,0,1}, Tile = {0.4,.6,0,1,}},
- BackgroundScale = {Left = 100, Right = 100},
- Font = {wrapperHeadFont, wrapperHeadSize, wrapperHeadOutline}
- }
- },
- ObjectiveHeaderStyle = {
- Normal = {
- Gradient = {MinColor = {.05,.15,0.5,0.7}, MaxColor = {.05,.15,0.5,.35}},
- Font = {headerFont, headerSize, headerOutline}, Spacing = headerSpacing,
- }
- },
- ObjectiveTrackerStyle = {
- Normal = {
- Title = {
- Gradient = { MinColor = {0.2, .4, 1, 0.45}, MaxColor = {.7, 0, 0.9, .19}},
- Font = {titleFont, titleSize, titleOutline}, Spacing = titleSpacing,
- },
- Text = {
- Gradient = { MinColor = {0.2, .4, 1, 0.25}, MaxColor = {.7, 0, 0.9, .12}},
- Font = {textFont, textSize, textOutline}, Spacing = textSpacing,
- },
- },
- Super = {
- Title = {
- Gradient = { MinColor = {0, .7, .6, .8}, MaxColor = {0, .7, .6, 0.2}},
- Font = {titleFont, titleSize, titleOutline},
- Spacing = titleSpacing, BackgroundFullWidth = true
- },
- Text = {
- Gradient = { MinColor = {0, .7, .6, 0.5}, MaxColor = {0, .7, .6, 0.1} },
- Font = {textFont, textSize, textOutline}, Spacing = textSpacing,
- },
- },
- Active = {
- Title = {
- Gradient = { MinColor = {0.2, .4, 1, 1}, MaxColor = {0.2, .4, 1, .4}, },
- Font = {titleFont, titleSize, titleOutline},
- Spacing = titleSpacing,
- BackgroundFullWidth = true
- },
- Text = {
- Gradient = { MinColor = {0.2, .4, 1, 1}, MaxColor = {0.2, .4, 1, .2}, },
- Font = {textFont, textSize, textOutline},
- Spacing = textSpacing,
- BackgroundFullWidth = true
- }
- },
- Complete = {
- Title = {
- Gradient = { MinColor = {0, 1, 0, 0.34}, MaxColor = {0, 1, 0, .17}, },
- Font = {titleFont, titleSize, titleOutline}, Spacing = titleSpacing,
- BackgroundFullWidth = true
- },
- Text = {
- Gradient = { MinColor = {0, 1, 0, .25}, MaxColor = {0, 1, 0, 0.12}, },
- Font = {textFont, textSize, textOutline}, Spacing = textSpacing,
- BackgroundFullWidth = true
- }
- },
- CheevNormal = {
- Title = {
- Gradient = { MinColor = {0.2, .4, 1, 0.45}, MaxColor = {.7, 0, 0.9, .19}},
- Font = {titleFont, titleSize, titleOutline}, Spacing = titleSpacing,
- },
- Text = {
- Gradient = { MinColor = {0.2, .4, 1, 0.25}, MaxColor = {.7, 0, 0.9, .12}},
- Font = {textFont, textSize, textOutline}, Spacing = textSpacing,
- },
- },
- CheevComplete = {
-
- Title = {
- Gradient = { MinColor = {0.2, .4, 1, 0.45}, MaxColor = {.7, 0, 0.9, .19}},
- Font = {titleFont, titleSize, titleOutline}, Spacing = titleSpacing,
- },
- Text = {
- Gradient = { MinColor = {0.2, .4, 1, 0.25}, MaxColor = {.7, 0, 0.9, .12}},
- Font = {textFont, textSize, textOutline}, Spacing = textSpacing,
- },
- }
- }
-}
-
-local FontBank = {
- ['Normal'] = VeneerCriteriaFontNormal,
- ['Progress'] = VeneerCriteriaFontProgress,
- ['Complete'] = VeneerCriteriaFontComplete,
- ['Failed'] = VeneerCriteriaFontFailed,
-}
local Scroller_OnShow = function()
Wrapper.watchMoneyReasons = 0;
mod.UpdateWrapper()
mod.SetEvents()
- for i, region in ipairs(Wrapper.header) do
+ for i, region in ipairs(Wrapper.headerComplex) do
region:Show()
end
end
@@ -152,7 +55,7 @@
local self = Wrapper
Wrapper:UnregisterAllEvents()
Wrapper:SetScript('OnEvent', nil)
- for i, region in ipairs(Wrapper.header) do
+ for i, region in ipairs(Wrapper.headerComplex) do
region:Hide()
end
end
@@ -183,9 +86,6 @@
mod.InitializeTrackers = function()
- local c = mod.defaults.ObjectiveHeaderStyle.Normal
- local g1, g2, g3, g4 = unpack(c.Gradient.MinColor)
- local h1, h2, h3, h4 = unpack(c.Gradient.MaxColor)
for i, name in ipairs(orderedNames) do
if not mod.orderedHandlers[i] then
@@ -193,19 +93,16 @@
local handler = mod[name]
local tracker = CreateFrame('Frame', 'Veneer'..name..'Tracker', Scroll, 'VeneerTrackerTemplate')
- tracker.header:SetText(handler.name)
- tracker.header:SetHeight(headerHeight)
- tracker.header:SetFont(unpack(c.Font))
- tracker.header:SetTextColor(unpack(headerColor))
-
- tracker.headerbg:SetGradientAlpha('HORIZONTAL', g1, g2 ,g3, g4, h1, h2, h3, h4)
- tracker.headerbg:SetHeight(headerHeight)
+ tracker.title:SetText(name)
+ mod.SetBlockStyle(tracker, 'Tracker', 'Normal')
handler.Tracker = tracker
mod.orderedTrackers[i] = tracker
mod.namedTrackers[name] = tracker
mod.indexedTrackers[handler] = tracker
print('created new tracker frames for new handler')
+
+
end
end
end
@@ -301,80 +198,18 @@
end
end
-mod.UpdateReputation = function(self)
-end
---- Argument containers
-local a1, a2, a3, a4, b1, b2, b3, b4, f1, f2, f3, w1, w2
-mod.SetBlockStyle = function(block, name)
- -- var names intended to reflect argument order
- --@debug@
- local c = mod.defaults.ObjectiveTrackerStyle[name]
- --@end-debug@
- --[===[@non-debug
- local c = mod.Conf
- --@end-non-debug]===]
- a1, a2, a3, a4 = unpack(c.Title.Gradient.MinColor)
- b1, b2, b3, b4 = unpack(c.Title.Gradient.MaxColor)
- block.titlebg:SetGradientAlpha('HORIZONTAL', a1, a2, a3, a4, b1, b2, b3, b4)
-
- a1, a2, a3, a4 = unpack(c.Text.Gradient.MinColor)
- b1, b2, b3, b4 = unpack(c.Text.Gradient.MaxColor)
- block.bg:SetGradientAlpha('HORIZONTAL', a1, a2, a3, a4, b1, b2, b3, b4)
-
- f1, f2, f3 = unpack(c.Title.Font)
- block.title:SetFont(f1, f2, f3)
-
- f1, f2 ,f3 = unpack(c.Text.Font)
- block.objectives:SetFont(f1,f2,f3)
-
- w1 = Wrapper:GetWidth()
- w2 = (c.Title.BackgroundFullWidth and w1 or block.title:GetStringWidth())
-
- local titleSpacing, titleSpacing2 = c.Title.Spacing, (c.Title.Spacing * 2)
- local textSpacing, textSpacing2 = c.Text.Spacing, (c.Text.Spacing * 2)
-
- if block.info.isTrivial then
- block.title:SetTextColor(0.7, 0.7, 0.7, 1)
- elseif block.info.isComplete then
- block.title:SetTextColor(1,1,1,1)
- else
- block.title:SetTextColor(0,.7,1,1)
- end
- block.title:SetSpacing(titleSpacing)
- block.objectives:SetSpacing(textSpacing)
- block.objectives:SetWordWrap(true)
-
- local titleHeight, textHeight = block.title:GetStringHeight(), block.objectives:GetStringHeight() + block.attachmentHeight
- local blockHeight = titleHeight + titleSpacing2 + textHeight + textSpacing2
- local blockWidth = wrapperMaxWidth
-
- block.titlebg:SetSize(min(w1, w2), titleHeight + titleSpacing2)
- block.bg:SetSize(w1, textHeight + textSpacing2)
- block:SetSize(blockWidth, blockHeight)
-
- block.title:SetPoint('TOPLEFT', block.titlebg, 'TOPLEFT', 0, -titleSpacing)
- block.objectives:SetPoint('TOPLEFT', block.titlebg, 'BOTTOMLEFT', textIndent, -textSpacing)
-
- -- store
- block.titleHeight = titleHeight
- block.textHeight = textHeight
- block.width = blockWidth
- block.height = blockHeight
-
- print(' |cFF00FFFF'..block:GetName()..'|r:|cFF0088FFSetStyle|r(', blockWidth, 'x', blockHeight, '(textH', textHeight,', titleH', titleHeight, ')')
-end
local segments = {'Left', 'Right', 'Tile'}
mod.UpdateWrapperStyle = function()
- local c = mod.defaults.WrapperStyle
- for _, segment in ipairs(segments) do
- Wrapper['Background'..segment]:SetAtlas(c.Header.Background[segment])
- Wrapper['Background'..segment]:SetTexCoord(unpack(c.Header.BackgroundCrop[segment]))
- if c.Header.BackgroundScale[segment] then
- Wrapper['Background'..segment]:SetWidth(c.Header.BackgroundScale[segment])
+ --[[for _, segment in ipairs(segments) do
+ local texture, a1, a2, a3, a4, width = unpack(mod.defaults.Style.Wrapper.BackgroundComplex[segment])
+ Wrapper['Background'..segment]:SetAtlas(texture)
+ Wrapper['Background'..segment]:SetTexCoord(a1, a2, a3, a4)
+ if width then
+ Wrapper['Background'..segment]:SetWidth(width)
end
- end
+ end]]
end
--- Updates the selected block frame to display the given info batch
@@ -383,20 +218,19 @@
-- @param info the reference returned by the GetXInfo functions
-- REMEMBER: t.info and questData[questID] are the same table
mod.UpdateTrackerBlock = function (handler, blockIndex, info)
+ local print = B.print('ObjectiveBlockParse')
print(' |cFF00FFFFUpdateTrackerBlock('..blockIndex..'|r')
if not blockIndex or not info then
return
end
+ local mainStyle = 'Normal'
+ local subStyle
local tracker = handler.Tracker
local t = handler:GetBlock(blockIndex)
if previousBlock then
- if blockIndex == 1 then
- t:SetPoint('TOPLEFT', previousBlock, 'TOPLEFT', 0, -headerHeight)
- else
- t:SetPoint('TOPLEFT', previousBlock, 'BOTTOMLEFT', 0, 0)
- end
+ t:SetPoint('TOPLEFT', previousBlock, 'BOTTOMLEFT', 0, 0)
t:SetPoint('RIGHT', tracker,'RIGHT', 0, 0)
end
--print(t:GetName(), t:GetSize())
@@ -421,38 +255,38 @@
t.attachmentHeight = 0
if info.isComplete then
- t.objectives:Show()
- t.objectives:SetText(info.completionText)
+ t.status:Show()
+ t.status:SetText(info.completionText)
elseif info.numObjectives >= 1 then
t.attachmentHeight = textSpacing
- t.objectives:Show()
- print(' - objective lines:', info.numObjectives, 'can wrap:', t.objectives:CanWordWrap())
+ t.status:Show()
+ print(' - objective lines:', info.numObjectives, 'can wrap:', t.status:CanWordWrap())
local text = ''
--- todo: implement objective displays
-- in an accumulator loop, call upon handler for the appropriate display frame, each defining:
- -- * height of whatever display widget is involved in conveying the task
- -- * number of non-wrapped text lines to account for line space; may be discarded depending on things
- -- * boolean that determines listening for money events or not
- t.attachmentHeight, text = mod.UpdateObjectives(t, info, text)
+ -- * height - height of whatever display widget is involved in conveying the task
+ -- * lines - number of non-wrapped text lines to account for line space; may be discarded depending on things
+ -- * money - boolean that determines listening for money events or not
+ -- * progress - number ranging 0 to 2 indicating none/partial/full completion respectively
+ text = mod.UpdateObjectives(t, info, text)
- t.objectives:SetText(text)
- t.objectives:SetWordWrap(true)
-
-
+ t.status:SetText(text)
+ t.status:SetWordWrap(true)
elseif info.description then
- t.objectives:SetText(info.description)
- t.objectives:SetWordWrap(true)
+ t.status:SetText(info.description)
+ t.status:SetWordWrap(true)
else
- t.objectives:SetText(nil)
+ t.status:SetText(nil)
end
- local style = 'Normal'
+
if info.isComplete then
- style = 'Complete'
- elseif info.superTracked then
- style = 'Super'
+ mainStyle = 'Complete'
+ end
+ if info.superTracked then
+ subStyle = 'Super'
end
if info.specialItem and not info.itemButton then
@@ -468,7 +302,7 @@
end
--- metrics are calculated in SetStyle
- t:SetStyle(style)
+ t:SetStyle('TrackerBlock', handler.name, mainStyle, subStyle)
t:Show()
print(' |cFF00FFFF)|r -> ', t, t:GetHeight())
@@ -476,11 +310,14 @@
end
mod.UpdateObjectives = function(block, info, text)
+ local print = B.print('ObjectiveBlockParse')
+
local attachmentHeight = block.attachmentHeight
if info.description then
print(' -- has description text:', select('#', info.description), info.description)
text = info.description
end
+ local completionScore, completionMax = 0, 0
for o, obj in ipairs(info.objectives) do
--- achievement criteria
if obj.flags then
@@ -500,11 +337,21 @@
print('obj.type =', obj.type)
print(' ** qtyStr:', obj.quantityString, 'qty:', obj.quantity, 'assetID:', obj.assetID)
obj.widget = mod.SetWidget(obj, info)
+ if obj.finished then
+ obj.progress = 2
+ elseif obj.quantity > 0 then
+ obj.progress = 1
+ else
+ obj.progress = 0
+ end
+
+
--- none of the above (most quests)
else
local line = obj.text
local color = '00FFFF'
if obj.finished then
+ obj.progress = 2
color = 'FFFFFF'
elseif obj.type == 'monster' then
color = 'FFFF00'
@@ -522,10 +369,16 @@
obj.widget:SetPoint('TOPLEFT', block.objectives, 'BOTTOMLEFT', 0, -attachmentHeight)
print('have a widget, height is', obj.widget.height)
attachmentHeight = attachmentHeight + obj.widget.height
+ completionScore = completionScore + obj.progress
+ completionMax = completionMax + 2
end
end
- return attachmentHeight, text
+
+ block.completionScore = completionScore / completionMax
+ block.attachmentHeight = attachmentHeight
+
+ return text
end
mod.UpdateTracker = function(handler)
@@ -535,7 +388,7 @@
local trackerHeight = headerHeight
local w = 300
- previousBlock = handler.Tracker
+ previousBlock = tracker.title
local numWatched = handler.GetNumWatched()
local numBlocks = handler.numBlocks
local actualBlocks = 0
@@ -546,6 +399,7 @@
if info then
local currentBlock = mod.UpdateTrackerBlock(handler, blockIndex, info)
previousBlock = currentBlock
+ print('|cFF00FF00'..currentBlock:GetName()..'|r', currentBlock.height)
trackerHeight = trackerHeight + currentBlock.height
numBlocks = max(numBlocks, watchIndex)
actualBlocks = actualBlocks + 1
@@ -596,7 +450,7 @@
if handler.actualBlocks >= 1 then
local tracker = handler.Tracker
print('setting', handler.Tracker, 'to anchor to offset', -scrollHeight)
- tracker:SetParent(Scroll) -- this doesn't do anything that relativeTo doesn't
+ tracker:SetParent(Scroll)
tracker:SetPoint('TOPLEFT', Scroll, 'TOPLEFT', 0, - scrollHeight)
tracker:SetSize(wrapperWidth, tracker.height)
print('adding ', tracker.height)
@@ -623,11 +477,11 @@
headerHeight = floor(headerHeight+.5)
if wrapperBlocks >= 1 then
- for i, region in ipairs(Wrapper.header) do
+ for i, region in ipairs(Wrapper.headerComplex) do
region:Show()
end
else
- for i, region in ipairs(Wrapper.header) do
+ for i, region in ipairs(Wrapper.headerComplex) do
region:Hide()
end
return
@@ -639,6 +493,10 @@
print('|cFFFFFF00params:|r wrapper:', wrapperWidth, 'x', wrapperHeight)
print('|cFFFFFF00params:|r header:', headerHeight)
+ mod.SetBlockStyle(Scroller, 'Scroller', 'Normal')
+ mod.SetBlockStyle(Scroller, 'Scroll', 'Normal')
+ mod.SetBlockStyle(Wrapper, 'Wrapper', 'Normal')
+
Scroller:SetSize(wrapperWidth, wrapperHeight)
Scroller:SetPoint('TOPLEFT', Wrapper, 'TOPLEFT', 0, -headerHeight)
Scroller:SetPoint('BOTTOMRIGHT', Wrapper, 'BOTTOMRIGHT')
diff -r 2698173edd40 -r f03c75f63566 ObjectiveStyle.lua
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ObjectiveStyle.lua Sat Apr 02 03:19:25 2016 -0400
@@ -0,0 +1,440 @@
+local B = select(2,...).frame
+local mod = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame')
+local print = B.print('SetStyle')
+-------------------------------------------------------------
+--- Deals with swapping between different color palettes
+---
+
+local itemButtonSize, itemButtonSpacing = 36, 1
+local wrapperPosition = {'RIGHT', UIParent, 'RIGHT', -84, 0}
+local titleFont, textFont = [[Interface\Addons\SharedMedia_MyMedia\font\ArchivoNarrow-Bold.ttf]], [[Interface\Addons\SharedMedia_MyMedia\font\ArchivoNarrow-Regular.ttf]]
+local titleSize, textSize = 15, 15
+local titleOutline, textOutline = "OUTLINE", "OUTLINE"
+local titleSpacing, textSpacing = 4, 3
+local textIndent = 5
+local wrapperMaxWidth, wrapperMaxHeight = 280, 490 -- these are the hard bounds, actual *Height variables are changed
+local wrapperHeadFont, wrapperHeadSize, wrapperHeadOutline = [[Interface\Addons\SharedMedia_MyMedia\font\ArchivoNarrow-Bold.ttf]], 16, 'NONE'
+local headerFont, headerSize, headerHeight = [[Interface\Addons\SharedMedia_MyMedia\font\ArchivoNarrow-Bold.ttf]], 18, 24
+local headerOutline, headerColor, headerSpacing = 'OUTLINE', {1,1,1,1}, 2
+
+mod.defaults.ObjectiveWrapper = {
+ ObjectiveTrackerFloat = {'BOTTOM', 'RIGHT'},
+ ObjectiveTrackerParent = 'DebuffButton',
+ ObjectiveTrackerSize = {250, 600},
+ ObjectiveWrapperParent = '',
+}
+mod.defaults.Style = {
+ FontBank = {
+ ['Normal'] = _G.VeneerCriteriaFontNormal,
+ ['Progress'] = _G.VeneerCriteriaFontProgress,
+ ['Complete'] = _G.VeneerCriteriaFontComplete,
+ ['Failed'] = _G.VeneerCriteriaFontFailed,
+ },
+ Normal = {
+ title = {
+ TextColor = {1, 1, 1, 1},
+ Width = 270,
+ },
+ titlebg = {
+ Background = {0, 0, 0, 1},
+ Width = 270,
+ },
+ status = {
+ Width = 270,
+ },
+ statusbg = {
+ Width = 270,
+ },
+ Frame = {
+ Width = 270,
+ }
+ },
+ Wrapper = {
+ Frame = {
+ Point = {wrapperPosition},
+ MaxSize = {wrapperMaxWidth, wrapperMaxHeight},
+ BackgroundComplex = {Left = {'', 0, 0.4, 0,1, 100}, Right={'', 0.6,1,0,1}, Tile = {'', 0.4,.6,0,1, 100}}, },
+ title = {
+ Font = {wrapperHeadFont, wrapperHeadSize, wrapperHeadOutline},
+ Spacing = 4,}
+ },
+ Tracker = {
+ Normal = {
+ title = {
+ Font = {headerFont, headerSize, headerOutline}, Spacing = headerSpacing,
+ },
+ titlebg = {
+ Gradient = {MinColor = {0,0,0,0.7}, MaxColor = {0,0,0,.35}},
+ }
+ }
+ },
+ TrackerBlock = {
+ Normal = {
+ titlebg = {
+ Gradient = { MinColor = {0.2, .4, 1, 0.45}, MaxColor = {.7, 0, 0.9, .19}},
+ },
+ title = {
+ Font = {titleFont, titleSize, titleOutline},
+ Spacing = titleSpacing,
+ },
+ status = {
+ Font = {textFont, textSize, textOutline}, Spacing = textSpacing,
+ },
+ statusbg = {
+ Gradient = { MinColor = {0.2, .4, 1, 0.25}, MaxColor = {.7, 0, 0.9, .12}},
+ }
+ },
+ Super = {
+ title = {
+ Font = {titleFont, titleSize, titleOutline},
+ Spacing = titleSpacing, BackgroundFullWidth = true
+ },
+ titlebg = {
+ Gradient = { MinColor = {0, .7, .6, .8}, MaxColor = {0, .7, .6, 0.2}},
+ },
+ status = {
+ Font = {textFont, textSize, textOutline}, Spacing = textSpacing,
+ },
+ statusbg = {
+ Gradient = { MinColor = {0, .7, .6, 0.5}, MaxColor = {0, .7, .6, 0.1} },
+ },
+ },
+ MouseDown = {
+ title = {
+ Font = {titleFont, titleSize, titleOutline},
+ Spacing = titleSpacing,
+ },
+ titlebg = {
+ Gradient = { MinColor = {0.2, .4, 1, 1}, MaxColor = {0.2, .4, 1, .4}, },
+ BackgroundFullWidth = true,
+ },
+ status = {
+ Font = {textFont, textSize, textOutline},
+ Spacing = textSpacing,
+ },
+ statusbg = {
+ BackgroundFullWidth = true,
+ Gradient = { MinColor = {0.2, .4, 1, 1}, MaxColor = {0.2, .4, 1, .2}, },
+ }
+ },
+ Complete = {
+ title = {
+ Font = {titleFont, titleSize, titleOutline}, Spacing = titleSpacing,
+ },
+ titlebg = {
+ Gradient = { MinColor = {0, 1, 0, 0.34}, MaxColor = {0, 1, 0, .17}, },
+ BackgroundFullWidth = true
+ },
+ status = {
+ Font = {textFont, textSize, textOutline}, Spacing = textSpacing,
+ },
+ statusbg = {
+ Gradient = { MinColor = {0, 1, 0, .25}, MaxColor = {0, 1, 0, 0.12}, },
+ BackgroundFullWidth = true
+ }
+ },
+ Cheev = {
+ Normal = {
+
+ title = {
+ Font = {titleFont, titleSize, titleOutline},
+ Spacing = titleSpacing,
+ },
+ titlebg = {
+ Gradient = { MinColor = {0.2, .4, 1, 0.45}, MaxColor = {.7, 0, 0.9, .19}},
+
+ },
+ status = {
+ Font = {textFont, textSize, textOutline},
+ Spacing = textSpacing,
+ },
+ statusbg = {
+ Gradient = { MinColor = {0.2, .4, 1, 0.25}, MaxColor = {.7, 0, 0.9, .12}},
+ },
+ },
+ Complete = {
+ title = {
+ Font = {titleFont, titleSize, titleOutline},
+ Spacing = titleSpacing,
+ },
+ titlebg = {
+ Gradient = { MinColor = {0.2, .4, 1, 0.45}, MaxColor = {.7, 0, 0.9, .19}},
+ },
+ status = {
+ Font = {textFont, textSize, textOutline},
+ Spacing = textSpacing,
+ },
+ statusbg = {
+ Gradient = { MinColor = {0.2, .4, 1, 0.25}, MaxColor = {.7, 0, 0.9, .12}},
+ },
+ },
+ }
+ }
+}
+
+local style_cache_func = {}
+local block_vars = {
+ ['titleSize'] = {'titleWidth', 'titleHeight'},
+ ['FrameSize'] = {'width', 'height'}
+}
+local attrib_vars = {
+ ['Font'] = {'height'},
+}
+
+mod.BlockStyleCache = {}
+local style_cache = mod.BlockStyleCache
+mod.regions = {}
+mod.regionStyles = {}
+mod.SetBlockStyle = function(frame, frameType, ...)
+ -- var names intended to reflect argument order
+ --@debug@
+ local c = mod.defaults.Normal
+ local style_list = {... }
+ local styleName = frameType .. '-' .. table.concat(style_list,'')
+
+ if not style_cache[styleName] then
+ local style = {}
+
+ if mod.defaults.Style[frameType] then
+ print(' setting style class |cFF00FFFF'..frameType)
+ else
+ print(' resorting to class Normal (missing |cFFFF8800'.. frameType..'|r)')
+ end
+ local normal = mod.defaults.Style.Normal
+ local root = mod.defaults.Style[frameType] or normal
+ for i, className in ipairs(style_list) do
+ local class = root[className] or normal[className] or root
+ if root[className] then
+
+ print(' SubClass |cFF0088FF'.. className .. '|r')
+ elseif normal[className] then
+ print(' SubClass Normal.|cFFFF0088'..className..'|r')
+ else
+ print(' SubClass Normal')
+ end
+ for elementName, element in pairs(class) do
+ if not elementName:match('^%u') then
+ print(' scanning Element |cFF8800FF'.. elementName ..'|r')
+ if not style[elementName] then
+ style[elementName] = {}
+ end
+ for key, value in pairs(element) do
+ if mod.SetBlockAttribute[key] then
+ print(' |cFF00FF00'..elementName..'|r.|cFF00FFFF'..key..' =', (type(value) == 'table' and ('{'..table.concat(value,', ')..'}') or tostring(value)))
+ style[elementName][key] = value
+ end
+
+ end
+ end
+
+ end
+
+ end
+
+ for k, elements in pairs(mod.defaults.Style.Normal) do
+ if not style[k] and type(elements) ~= 'table' then
+ style[k] = elements
+ end
+ end
+
+
+ print('result for: ', frame:GetName())
+ for k,v in pairs(style) do
+ if type(v) == 'table' and not k:match('^%u') then
+ for kk, vv in pairs(v) do
+ print(' |cFFFFFF00'..k..'|r.|cFF00FF00'..kk..'|r =', tostring(vv))
+ end
+ else
+ print(' |cFFFFFFFF' .. k ..'|r =', tostring(v))
+ end
+ end
+ style_cache[styleName] = style
+ else
+ print('Cache hit: ', styleName)
+ end
+
+ local style = style_cache[styleName]
+
+ if not style_cache_func[styleName] then
+ local code =
+ "return function (frame)\n"..
+ " local func = Veneer.ObjectiveTracker.SetBlockAttribute\n"..
+ " local cache = Veneer.ObjectiveTracker.BlockStyleCache" ..
+ " print('CacheFunc', '|cFFFFFF00SET|r "..styleName.." |cFFFFFF00ON|r', frame:GetName()) "
+
+ for elementName, styleset in pairs(style) do
+ code = code ..
+ "\n if frame['"..elementName.."'] then"
+
+ for attributeName, value in pairs(styleset) do
+ if mod.SetBlockAttribute[attributeName] then
+ print(' '..elementName..':'.. attributeName ..'(', value, ')')
+
+
+ --mod.SetBlockAttribute[attributeName](region, value)
+ code = code .. "\n print('CacheFunc', ' applying', '|cFF00FFFF" .. attributeName .. "|r to', '|cFF0088FF"..elementName.."|r', cache['"..styleName.."']['"..elementName.."']['".. attributeName .."'])" ..
+ "\n\n func['" .. attributeName .. "'](frame['"..elementName.."'],"..
+ " cache['"..styleName.."']['"..elementName.."']['".. attributeName .."'])"
+
+ --- Set any frame.blah variables used in Updates
+ if block_vars[elementName .. attributeName] then
+ print('|cFF008800BVar|r', elementName..attributeName)
+ for i, blockKey in ipairs(block_vars[elementName .. attributeName]) do
+ print(' assigning |cFF008800'..blockKey..'|r')
+ frame[blockKey] = (type(value) == 'table') and value[i] or value
+ end
+ end
+
+ end
+ end
+ code = code ..
+ "\n else"..
+ "\n print('CacheFunc', ' |cFFFF4400missing', frame:GetName()..'."..elementName.."')"..
+ "\n end"
+ end
+ code = code .. "\nend"
+ local result = assert(loadstring(code))
+ print('storing style func', styleName, result())
+ style_cache_func[styleName] = result()
+
+ else
+ print('Cache function hit:', styleName)
+ end
+ style_cache_func[styleName](frame)
+
+
+ --print("Generated func = function()\n",code, "\nend")
+ --local cache_func[styleName] = loadstring(code)
+
+ -- todo: remove hardcode and rely on attribute handler
+ if frame.status then
+ frame.status:SetWidth(270)
+ end
+ if frame.title then
+ frame.title:SetWidth(270)
+ end
+
+
+ frame.titleHeight = frame.title and (frame.title:GetStringHeight() + frame.title.spacing*2) or 0
+ frame.statusHeight = frame.status and (frame.status:GetStringHeight() + frame.status.spacing*2 + frame.attachmentHeight) or 0
+ frame.height = frame.titleHeight + frame.statusHeight
+ frame.width = 270
+
+
+ if frame.status then
+ print('status ', frame.statusHeight)
+ frame.status:SetHeight(frame.statusHeight)
+ if frame.statusbg then
+
+ print('statusbg', frame.statusHeight)
+ frame.statusbg:SetHeight(frame.statusHeight)
+ frame.statusbg:SetWidth(frame.width)
+ end
+ end
+ if frame.title then
+ print('title ',frame.titleHeight)
+ frame.title:SetHeight(frame.titleHeight)
+ if frame.titlebg then
+ print('titlebg',frame.titleHeight)
+ frame.titlebg:SetHeight(frame.titleHeight)
+ frame.titlebg:SetWidth(frame.width)
+ end
+ end
+ print('sizing frame', frame.width, frame.height)
+ frame:SetSize(frame.width, frame.height)
+ print(frame:GetSize())
+ --[[
+ local titleSpacing, titleSpacing2 = c.Title.Spacing, (c.Title.Spacing * 2)
+ local textSpacing, textSpacing2 = c.Text.Spacing, (c.Text.Spacing * 2)
+
+ block.title:SetSpacing(titleSpacing)
+ block.objectives:SetSpacing(textSpacing)
+ block.objectives:SetWordWrap(true)
+
+ local titleHeight, textHeight = block.title:GetStringHeight(), block.objectives:GetStringHeight() + block.attachmentHeight
+ local blockHeight = titleHeight + titleSpacing2 + textHeight + textSpacing2
+ local blockWidth = wrapperMaxWidth
+
+ block.titlebg:SetSize(min(w1, w2), titleHeight + titleSpacing2)
+ block.bg:SetSize(w1, textHeight + textSpacing2)
+ block:SetSize(blockWidth, blockHeight)
+
+ block.title:SetPoint('TOPLEFT', block.titlebg, 'TOPLEFT', 0, -titleSpacing)
+ block.objectives:SetPoint('TOPLEFT', block.titlebg, 'BOTTOMLEFT', textIndent, -textSpacing)
+
+ -- store
+ block.titleHeight = titleHeight
+ block.textHeight = textHeight
+ block.width = blockWidth
+ block.height = blockHeight
+ --]]
+ --print(' |cFF00FFFF'..block:GetName()..'|r:|cFF0088FFSetStyle|r(', blockWidth, 'x', blockHeight, '(textH', textHeight,', titleH', titleHeight, ')')
+end
+
+--- Argument containers
+local o = "" -- text flag
+local a1, a2, a3, a4, b1, b2, b3, b4 = 0,0,0,1, 0,0,0,1 -- color1, color2
+local f1, f2, f3 = "", 0, "" -- font
+local w1, w2 = 0, 0 -- size
+local p1, p2, p3, x, y = "", "", "", 0, 0 -- path/point args
+mod.SetBlockAttribute = {}
+local sb = mod.SetBlockAttribute
+local print = B.print('Attribute')
+sb.Gradient = function(region, value)
+ print('|cFF8844FFGradient|r', region:GetName(), unpack(value))
+ o = 'HORIZONTAL'
+ a1, a2, a3, a4 = unpack(value.MinColor)
+ b1, b2, b3, b4 = unpack(value.MaxColor)
+ region:SetVertexColor(1,1,1)
+ region:SetTexture(1,1,1,1)
+ region:SetGradientAlpha(o, a1, a2, a3, a4, b1, b2, b3, b4)
+end
+
+sb.Background = function(region, value)
+ print('|cFF0088FFBackground|r', unpack(value))
+ region:SetVertexColor(1,1,1) -- reset
+ region:SetTexture(unpack(value))
+end
+sb.BackgroundComplex = function (region, value)
+ local left, tile, right = value.Left, value.Tile, value.Right
+
+end
+sb.Font = function(region, value)
+ f1, f2, f3 = unpack(value)
+ print('|cFFFFFF00Font|r', f1, f2, f3)
+ region:SetFont(f1, f2, f3)
+end
+
+sb.Spacing = function(region, value)
+ print('FontSpacing', value)
+ region:SetSpacing(value)
+ region.spacing = value
+end
+
+sb.TextColor = function(region, value)
+ a1, a2, a3, a4 = unpack(value)
+ print('TextColor', a1, a2, a3, a4)
+ region:SetTextColor(a1, a2, a3, a4)
+end
+sb.Texture = function(region, value)
+
+ p1, a1, a2, a3, a4 = unpack(value)
+ print('Texture', p1, a1, a2, a3, a4)
+ region:SetTexture(p1)
+ if a1 then
+ region:SetTexCoord(a1, a2, a3, a4)
+ end
+end
+sb.Width = function(region, value)
+ w1 = value
+ region:SetWidth(w1)
+end
+
+sb.Height = function(region, value)
+ w2 = value
+ region:SetHeight(w2)
+end
+sb.Size = function(region, value)
+ w1, w2 = unpack(value)
+ region:SetSize(w1, w2)
+end
\ No newline at end of file
diff -r 2698173edd40 -r f03c75f63566 ObjectiveTracker.xml
--- a/ObjectiveTracker.xml Fri Apr 01 14:54:01 2016 -0400
+++ b/ObjectiveTracker.xml Sat Apr 02 03:19:25 2016 -0400
@@ -19,6 +19,10 @@
+
+
+
+
@@ -44,10 +48,10 @@
-
-
-
-
+
+
+
+
@@ -84,7 +88,11 @@
-->
-
+
+
+
+
+
@@ -96,11 +104,11 @@
-
+
-
+
@@ -114,7 +122,7 @@
-
+
@@ -133,7 +141,7 @@
-
+
@@ -167,7 +175,7 @@
-
+
@@ -181,7 +189,7 @@
-
+
@@ -194,13 +202,11 @@
-
+
-
-
@@ -217,7 +223,7 @@
-
+
@@ -250,8 +256,8 @@
-
-
+
+
@@ -267,9 +273,9 @@
-
+
-
+
@@ -288,6 +294,7 @@
+
\ No newline at end of file
diff -r 2698173edd40 -r f03c75f63566 ObjectiveUI.lua
--- a/ObjectiveUI.lua Fri Apr 01 14:54:01 2016 -0400
+++ b/ObjectiveUI.lua Sat Apr 02 03:19:25 2016 -0400
@@ -40,7 +40,7 @@
end
Tracker.OnMouseDown = function(self, button)
- self:SetStyle('Active')
+ self:SetStyle('TrackeBlock','MouseDown')
print(IsModifiedClick("CHATLINK"), IsModifiedClick("QUESTWATCHTOGGLE"))
print(self.info.title)
end
@@ -82,7 +82,7 @@
end
Cheevs.OnMouseUp = function(self, button)
Tracker.OnMouseUp(self, button)
- self:SetStyle('CheevNormal')
+ self:SetStyle('TrackerBlock', 'Cheev', 'CheevNormal')
end
Cheevs.Link = function(self)
local achievementLink = GetAchievementLink(self.info.cheevID);