initial commit
This commit is contained in:
143
Modules/Nameplates/Elements/WidgetContainer.lua
Normal file
143
Modules/Nameplates/Elements/WidgetContainer.lua
Normal file
@@ -0,0 +1,143 @@
|
||||
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
|
||||
Reference in New Issue
Block a user