2025-03-06 01:50:31 +02:00

99 lines
2.8 KiB
Markdown

# Druid Layout Component
## Description
The Layout component provides automatic positioning and sizing of UI elements based on predefined layout rules. It helps create responsive UIs that adapt to different screen sizes and orientations.
## Features
- Automatic positioning of nodes based on layout rules
- Support for different layout types (static, dynamic, fixed)
- Anchoring nodes to different parts of the screen
- Automatic adjustment when screen size changes
- Pivot-based positioning
- Margin and padding support
## Basic Usage
```lua
local layout = self.druid:new_layout("layout_node")
```
### Parameters
- **node**: The node or node_id of the layout container
## Layout Types
The Layout component supports several layout types:
- **Static Layout**: Fixed position relative to parent
- **Dynamic Layout**: Position based on parent size and node anchor
- **Fixed Layout**: Position based on screen size and node anchor
## Methods
```lua
-- Set layout type
layout:set_static_layout() -- Fixed position relative to parent
layout:set_dynamic_layout() -- Position based on parent size
layout:set_fixed_layout() -- Position based on screen size
-- Update layout size
layout:set_size(width, height)
-- Set node anchor (position relative to parent)
layout:set_anchor(anchor_type)
-- Available anchor types: ANCHOR.CENTER, ANCHOR.TOP, ANCHOR.BOTTOM, etc.
-- Set node pivot (position relative to node itself)
layout:set_pivot(pivot_type)
-- Available pivot types: PIVOT.CENTER, PIVOT.N, PIVOT.S, etc.
-- Set margins (distance from anchor point)
layout:set_margin(left, top, right, bottom)
-- Set padding (internal spacing)
layout:set_padding(left, top, right, bottom)
-- Manually update layout
layout:update()
-- Reset to initial state
layout:reset()
```
## Events
```lua
-- Subscribe to layout changes
layout.on_layout_change:subscribe(function(self)
print("Layout changed")
end)
```
## Example
```lua
-- Create a layout that anchors to the top right of the screen
local layout = self.druid:new_layout("panel")
layout:set_fixed_layout()
layout:set_anchor(druid.const.ANCHOR.TOP_RIGHT)
layout:set_pivot(druid.const.PIVOT.NE)
layout:set_margin(0, 50, 50, 0) -- 50px from top, 50px from right
-- Create a dynamic layout that centers in its parent
local layout = self.druid:new_layout("content")
layout:set_dynamic_layout()
layout:set_anchor(druid.const.ANCHOR.CENTER)
layout:set_pivot(druid.const.PIVOT.CENTER)
```
## Notes
- The layout component automatically adjusts when the screen size changes
- You can nest layouts to create complex UI structures
- The layout component works well with other components like Grid and Scroll
- For responsive UIs, use fixed layouts for screen-anchored elements and dynamic layouts for elements that should adapt to their parent's size
- The layout component respects the node's initial position as an offset from the calculated position