Expand description

Layout utilities

For documentation of layout resolution, see the Layout trait.

Size units are physical (real) pixels. This applies to most of KAS.

Data types

SizeRules is the “heart” of widget layout, used to specify a widget’s size requirements. It provides various methods to compute derived rules and SizeRules::solve_seq, the “muscle” of the layout engine.

AxisInfo, Margins and Stretch are auxilliary data types.

Solvers

The RulesSolver and RulesSetter traits define interfaces for layout engines:

  • SingleSolver and SingleSetter are trivial implementations for single-child parents
  • RowSolver and RowSetter set out a row or column of children. These are parametrised over S: RowStorage allowing both efficient operation on a small fixed number of children with FixedRowStorage and operation on a over a Vec with DynRowStorage.
  • GridSolver and GridSetter set out children assigned to grid cells with optional cell-spans. This is the most powerful and flexible layout engine.

RowPositionSolver may be used with widgets set out by RowSetter to quickly locate children from a coord or rect.

Structs

Partial alignment information provided by the parent

Provides alignment information on both axes along with ideal size

Information on which axis is being resized

Variable-length grid storage

Variable-length row storage

Fixed-length grid storage

Fixed-length row storage

Frame size rules

Layout storage for frame layout

Per-child information

Grid dimensions

A RulesSetter for grids supporting cell-spans

A RulesSolver for grids supporting cell-spans

Logical (pre-scaling) pixel size

Margin sizes

Layout storage for alignment

Control over scaling

Allows efficient implementations of draw / event handlers based on the layout representation.

A RulesSetter for rows (and, without loss of generality, for columns).

A RulesSolver for rows (and, without loss of generality, for columns).

RulesSetter implementation for a fixed single-child layout

RulesSolver implementation for a fixed single-child layout

Widget sizing information

Size solver

Enums

Alignment of contents

Priority for stretching widgets beyond ideal size

Traits

Implementation generated by use of layout = .. property of #[widget]

Bound on GridSolver type parameters

Requirements of grid solver storage type

Requirements of row solver storage type

Temporary storage type.

Resolves a RulesSolver solution for each child

A SizeRules solver for layouts

Functions

Solve size rules for a widget