144 lines
5.5 KiB
Lua
144 lines
5.5 KiB
Lua
|
local E, L, V, P, G = unpack(select(2, ...)) --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
|
||
|
local NP = E:GetModule('NamePlates')
|
||
|
|
||
|
local ipairs = ipairs
|
||
|
local CreateFrame = CreateFrame
|
||
|
local UIWidgetSetLayoutDirection = Enum.UIWidgetSetLayoutDirection
|
||
|
local UIWidgetLayoutDirection = Enum.UIWidgetLayoutDirection
|
||
|
|
||
|
function NP:Construct_WidgetContainer(nameplate)
|
||
|
local WidgetContainer = CreateFrame('Frame', nil, nameplate, 'UIWidgetContainerNoResizeTemplate')
|
||
|
WidgetContainer:Point('BOTTOM', nameplate, 'TOP')
|
||
|
WidgetContainer:Hide()
|
||
|
|
||
|
return WidgetContainer
|
||
|
end
|
||
|
|
||
|
function NP.Widget_DefaultLayout(widgetContainerFrame, sortedWidgets)
|
||
|
local horizontalRowContainer = nil
|
||
|
local horizontalRowHeight = 0
|
||
|
local horizontalRowWidth = 0
|
||
|
local totalWidth = 0
|
||
|
local totalHeight = 0
|
||
|
|
||
|
widgetContainerFrame.horizontalRowContainerPool:ReleaseAll()
|
||
|
|
||
|
for index, widgetFrame in ipairs(sortedWidgets) do
|
||
|
widgetFrame:ClearAllPoints()
|
||
|
|
||
|
if widgetFrame.Bar and not widgetFrame.Bar.backdrop then
|
||
|
widgetFrame.Bar:CreateBackdrop('Transparent')
|
||
|
end
|
||
|
|
||
|
local widgetSetUsesVertical = widgetContainerFrame.widgetSetLayoutDirection == UIWidgetSetLayoutDirection.Vertical
|
||
|
local widgetUsesVertical = widgetFrame.layoutDirection == UIWidgetLayoutDirection.Vertical
|
||
|
|
||
|
local useOverlapLayout = widgetFrame.layoutDirection == UIWidgetLayoutDirection.Overlap
|
||
|
local useVerticalLayout = widgetUsesVertical or (widgetFrame.layoutDirection == UIWidgetLayoutDirection.Default and widgetSetUsesVertical)
|
||
|
|
||
|
if useOverlapLayout then
|
||
|
-- This widget uses overlap layout
|
||
|
|
||
|
if index == 1 then
|
||
|
if widgetSetUsesVertical then
|
||
|
widgetFrame:Point(widgetContainerFrame.verticalAnchorPoint, widgetContainerFrame)
|
||
|
else
|
||
|
widgetFrame:Point(widgetContainerFrame.horizontalAnchorPoint, widgetContainerFrame)
|
||
|
end
|
||
|
else
|
||
|
local relative = sortedWidgets[index - 1]
|
||
|
if widgetSetUsesVertical then
|
||
|
widgetFrame:Point(widgetContainerFrame.verticalAnchorPoint, relative, widgetContainerFrame.verticalAnchorPoint, 0, 0)
|
||
|
else
|
||
|
widgetFrame:Point(widgetContainerFrame.horizontalAnchorPoint, relative, widgetContainerFrame.horizontalAnchorPoint, 0, 0)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local width, height = widgetFrame:GetSize()
|
||
|
if width > totalWidth then
|
||
|
totalWidth = width
|
||
|
end
|
||
|
if height > totalHeight then
|
||
|
totalHeight = height
|
||
|
end
|
||
|
|
||
|
widgetFrame:SetParent(widgetContainerFrame)
|
||
|
elseif useVerticalLayout then
|
||
|
if index == 1 then
|
||
|
widgetFrame:Point(widgetContainerFrame.verticalAnchorPoint, widgetContainerFrame)
|
||
|
else
|
||
|
local relative = horizontalRowContainer or sortedWidgets[index - 1]
|
||
|
widgetFrame:Point(widgetContainerFrame.verticalAnchorPoint, relative, widgetContainerFrame.verticalRelativePoint, 0, widgetContainerFrame.verticalAnchorYOffset)
|
||
|
|
||
|
if horizontalRowContainer then
|
||
|
horizontalRowContainer:Size(horizontalRowWidth, horizontalRowHeight)
|
||
|
totalWidth = totalWidth + horizontalRowWidth
|
||
|
totalHeight = totalHeight + horizontalRowHeight
|
||
|
horizontalRowHeight = 0
|
||
|
horizontalRowWidth = 0
|
||
|
horizontalRowContainer = nil
|
||
|
end
|
||
|
|
||
|
totalHeight = totalHeight + widgetContainerFrame.verticalAnchorYOffset
|
||
|
end
|
||
|
|
||
|
widgetFrame:SetParent(widgetContainerFrame)
|
||
|
|
||
|
local width, height = widgetFrame:GetSize()
|
||
|
if width > totalWidth then
|
||
|
totalWidth = width
|
||
|
end
|
||
|
totalHeight = totalHeight + height
|
||
|
else
|
||
|
local forceNewRow = widgetFrame.layoutDirection == UIWidgetLayoutDirection.HorizontalForceNewRow
|
||
|
local needNewRowContainer = not horizontalRowContainer or forceNewRow
|
||
|
if needNewRowContainer then
|
||
|
if horizontalRowContainer then
|
||
|
--horizontalRowContainer:Layout()
|
||
|
horizontalRowContainer:Size(horizontalRowWidth, horizontalRowHeight)
|
||
|
totalWidth = totalWidth + horizontalRowWidth
|
||
|
totalHeight = totalHeight + horizontalRowHeight
|
||
|
horizontalRowHeight = 0
|
||
|
horizontalRowWidth = 0
|
||
|
end
|
||
|
|
||
|
local newHorizontalRowContainer = widgetContainerFrame.horizontalRowContainerPool:Acquire()
|
||
|
newHorizontalRowContainer:Show()
|
||
|
|
||
|
if index == 1 then
|
||
|
newHorizontalRowContainer:Point(widgetContainerFrame.verticalAnchorPoint, widgetContainerFrame, widgetContainerFrame.verticalAnchorPoint)
|
||
|
else
|
||
|
local relative = horizontalRowContainer or sortedWidgets[index - 1]
|
||
|
newHorizontalRowContainer:Point(widgetContainerFrame.verticalAnchorPoint, relative, widgetContainerFrame.verticalRelativePoint, 0, widgetContainerFrame.verticalAnchorYOffset)
|
||
|
|
||
|
totalHeight = totalHeight + widgetContainerFrame.verticalAnchorYOffset
|
||
|
end
|
||
|
widgetFrame:Point('TOPLEFT', newHorizontalRowContainer)
|
||
|
widgetFrame:SetParent(newHorizontalRowContainer)
|
||
|
|
||
|
horizontalRowWidth = horizontalRowWidth + widgetFrame:GetWidth()
|
||
|
horizontalRowContainer = newHorizontalRowContainer
|
||
|
else
|
||
|
local relative = sortedWidgets[index - 1]
|
||
|
widgetFrame:SetParent(horizontalRowContainer)
|
||
|
widgetFrame:Point(widgetContainerFrame.horizontalAnchorPoint, relative, widgetContainerFrame.horizontalRelativePoint, widgetContainerFrame.horizontalAnchorXOffset, 0)
|
||
|
|
||
|
horizontalRowWidth = horizontalRowWidth + widgetFrame:GetWidth() + widgetContainerFrame.horizontalAnchorXOffset
|
||
|
end
|
||
|
|
||
|
local widgetHeight = widgetFrame:GetHeight()
|
||
|
if widgetHeight > horizontalRowHeight then
|
||
|
horizontalRowHeight = widgetHeight
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
if horizontalRowContainer then
|
||
|
horizontalRowContainer:Size(horizontalRowWidth, horizontalRowHeight)
|
||
|
totalWidth = totalWidth + horizontalRowWidth
|
||
|
totalHeight = totalHeight + horizontalRowHeight
|
||
|
end
|
||
|
|
||
|
widgetContainerFrame:Size(totalWidth, totalHeight)
|
||
|
end
|