def layout(self, x, y): """ Lays out all Widgets within this layout. @param x X coordinate of lower left corner @param y Y coordinate of lower left corner """ Widget.layout(self, x, y) row_index = 0 placement = Widget() placement.y = y + self.height for row in self.content: col_index = 0 placement.x = x placement.height = self.max_heights[row_index] placement.y -= placement.height for cell in row: placement.width = self.max_widths[col_index] if cell is not None: if cell.is_expandable(): cell.expand(placement.width, placement.height) cell.layout(*GetRelativePoint(placement, self.anchor, cell, self.anchor, self.offset)) placement.x += placement.width col_index += 1 row_index += 1
def layout(self, x, y): """ Positions the Frame. @param x X coordinate of lower left corner @param y Y coordinate of lower left corner """ self.x, self.y = x, y self.frame.update(x, y, self.width, self.height) # In some cases the frame graphic element may allocate more space for # the content than the content actually fills, due to repeating # texture constraints. Always center the content. x, y, width, height = self.frame.get_content_region() interior = Widget(width, height) interior.x, interior.y = x, y x, y = GetRelativePoint(interior, self.anchor, self.content, self.anchor, self.content_offset) self.content.layout(x, y)