[][src]Trait kas::layout::RulesSolver

pub trait RulesSolver {
    type Storage: Clone;
    type ChildInfo;
    pub fn for_child<CR: FnOnce(AxisInfo) -> SizeRules>(
        &mut self,
        storage: &mut Self::Storage,
        child_info: Self::ChildInfo,
        child_rules: CR
    );
pub fn finish(self, storage: &mut Self::Storage) -> SizeRules; }

A SizeRules solver for layouts

Typically, a solver is invoked twice, once for each axis, before the corresponding RulesSetter is invoked. This is managed by SolveCache.

Implementations require access to storage able to persist between multiple solver runs and a subsequent setter run. This storage is of type RulesSolver::Storage and is passed via reference to the constructor.

Associated Types

type Storage: Clone[src]

Type of storage

type ChildInfo[src]

Type required by RulesSolver::for_child (see implementation documentation)

Loading content...

Required methods

pub fn for_child<CR: FnOnce(AxisInfo) -> SizeRules>(
    &mut self,
    storage: &mut Self::Storage,
    child_info: Self::ChildInfo,
    child_rules: CR
)
[src]

Called once for each child. For most layouts the order is important.

pub fn finish(self, storage: &mut Self::Storage) -> SizeRules[src]

Called at the end to output SizeRules.

Note that this does not include margins!

Loading content...

Implementors

impl RulesSolver for SingleSolver[src]

type Storage = ()

type ChildInfo = ()

impl<CSR, RSR, S: GridStorage> RulesSolver for GridSolver<CSR, RSR, S> where
    CSR: AsRef<[(SizeRules, u32, u32)]> + AsMut<[(SizeRules, u32, u32)]>,
    RSR: AsRef<[(SizeRules, u32, u32)]> + AsMut<[(SizeRules, u32, u32)]>, 
[src]

type Storage = S

type ChildInfo = GridChildInfo

impl<S: RowStorage> RulesSolver for RowSolver<S>[src]

type Storage = S

type ChildInfo = usize

Loading content...