参考 › 函数参考 › UI

UI.condition_layout.layoutIconRows

依赖项

调用方式

UI.condition_layout.layoutIconRows(content, children, width)

记录依赖项 UI.condition_layout.layoutIconRows,然后按该名称调用。带命名空间的调用不会传入 self:请使用冒号调用,或自行传入该对象。

作用

Lays out the "RM-IconRows" container: an icon on the left, vertically centered beside the rows of fields, and an optional side widget (marked with the side user data) that sits beside the last row when there is room and below the rows when there is not. Positions every child under content.

参数

名称类型作用
contenttableFrame the children are positioned in.
childrentableChild widgets: the icon first, then the field rows, and at most one side widget.
widthnumberAvailable width in pixels.

返回值

1numberThe total height used, in pixels; 0 when there is no icon or no row.

版本

内置辅助函数在每个版本上都会注册。不同的是它们读取的游戏 API;某个 API 缺失时,辅助函数会改用后备方案,或返回 nil 并附上原因。

它不直接读取任何游戏 API。

插件如何调用它

依赖项

源码

UI/condition_layout.lua,第 56 行。在游戏中为只读;“复制”会生成一份可编辑的副本。

UI.condition_layout.layoutIconRows(content, children, width)
    local icon,side,rows=children[1],nil,{}
    for index=2,#children do
        local child=children[index]
        if child.GetUserData and child:GetUserData('side') then side=child else rows[#rows+1]=child end
    end
    if not icon or #rows==0 then return 0 end
    local iconWidth=icon.frame:GetWidth() or 0
    local left=iconWidth+ICON_ROWS_GAP
    local fieldWidth=math.max(1,width-left)
    local sideWidth=side and math.ceil(side.label and side.label:GetStringWidth() or 0)+30 or 0
    local inline=side~=nil and fieldWidth-sideWidth-ICON_ROWS_GAP>=ICON_ROWS_MINIMUM
    local y,bottom=0,0
    for index,row in ipairs(rows) do
        local rowWidth=fieldWidth
        local last=index==#rows
        if last and inline then rowWidth=fieldWidth-sideWidth-ICON_ROWS_GAP end
        row:SetWidth(math.max(1,rowWidth))
        row.frame:ClearAllPoints();row.frame:SetPoint('TOPLEFT',content,'TOPLEFT',left,-y)
        local height=row.frame:GetHeight() or 0
        if last and side and inline then
            side:SetWidth(sideWidth);side.frame:ClearAllPoints()
            side.frame:SetPoint('BOTTOMLEFT',content,'TOPLEFT',left+rowWidth+ICON_ROWS_GAP,-(y+height))
        end
        bottom=y+height;y=y+height+ICON_ROWS_GAP
    end
    local iconHeight=icon.frame:GetHeight() or 0
    icon.frame:ClearAllPoints();icon.frame:SetPoint('TOPLEFT',content,'TOPLEFT',0,-math.max(0,(bottom-iconHeight)/2))
    local total=math.max(bottom,iconHeight)
    if side and not inline then
        side:SetWidth(math.max(1,math.min(sideWidth,fieldWidth)));side.frame:ClearAllPoints();side.frame:SetPoint('TOPLEFT',content,'TOPLEFT',left,-(total+ICON_ROWS_GAP))
        total=total+ICON_ROWS_GAP+(side.frame:GetHeight() or 0)
    end
    return total

返回函数参考