Setter method

This commit is contained in:
Laurenz 2021-06-17 14:32:24 +02:00
parent e14e804789
commit 2e87808cdd
3 changed files with 21 additions and 14 deletions

View File

@ -45,4 +45,9 @@ pub trait Get<Index> {
/// Borrow the component for the specified index mutably. /// Borrow the component for the specified index mutably.
fn get_mut(&mut self, index: Index) -> &mut Self::Component; fn get_mut(&mut self, index: Index) -> &mut Self::Component;
/// Convenience method for setting a component.
fn set(&mut self, index: Index, component: Self::Component) {
*self.get_mut(index) = component;
}
} }

View File

@ -188,8 +188,9 @@ impl<'a> GridLayouter<'a> {
let resolved = v.resolve(base.cross); let resolved = v.resolve(base.cross);
*rcol = resolved; *rcol = resolved;
linear += resolved; linear += resolved;
*self.constraints.base.get_mut(self.cross) = self.constraints
Some(self.regions.base.get(self.cross)); .base
.set(self.cross, Some(self.regions.base.get(self.cross)));
} }
TrackSizing::Fractional(v) => { TrackSizing::Fractional(v) => {
case = Case::Fitting; case = Case::Fitting;
@ -225,14 +226,15 @@ impl<'a> GridLayouter<'a> {
match case { match case {
Case::PurelyLinear => {} Case::PurelyLinear => {}
Case::Fitting => { Case::Fitting => {
*self.constraints.min.get_mut(self.cross) = Some(self.used.cross); self.constraints.min.set(self.cross, Some(self.used.cross));
} }
Case::Overflowing => { Case::Overflowing => {
*self.constraints.max.get_mut(self.cross) = Some(linear); self.constraints.max.set(self.cross, Some(linear));
} }
Case::Exact => { Case::Exact => {
*self.constraints.exact.get_mut(self.cross) = self.constraints
Some(self.regions.current.get(self.cross)); .exact
.set(self.cross, Some(self.regions.current.get(self.cross)));
} }
} }
} }
@ -321,7 +323,7 @@ impl<'a> GridLayouter<'a> {
TrackSizing::Linear(v) => { TrackSizing::Linear(v) => {
let base = self.regions.base.get(self.main); let base = self.regions.base.get(self.main);
if v.is_relative() { if v.is_relative() {
*self.constraints.base.get_mut(self.main) = Some(base); self.constraints.base.set(self.main, Some(base));
} }
let resolved = v.resolve(base); let resolved = v.resolve(base);
let frame = self.layout_single_row(ctx, resolved, y); let frame = self.layout_single_row(ctx, resolved, y);
@ -329,7 +331,7 @@ impl<'a> GridLayouter<'a> {
} }
TrackSizing::Fractional(v) => { TrackSizing::Fractional(v) => {
self.fr += v; self.fr += v;
*self.constraints.exact.get_mut(self.main) = Some(self.full); self.constraints.exact.set(self.main, Some(self.full));
self.lrows.push(Row::Fr(v, y)); self.lrows.push(Row::Fr(v, y));
} }
} }
@ -349,7 +351,7 @@ impl<'a> GridLayouter<'a> {
for (x, &rcol) in self.rcols.iter().enumerate() { for (x, &rcol) in self.rcols.iter().enumerate() {
if let Some(node) = self.cell(x, y) { if let Some(node) = self.cell(x, y) {
let cross = self.cross; let cross = self.cross;
self.regions.mutate(|size| *size.get_mut(cross) = rcol); self.regions.mutate(|size| size.set(cross, rcol));
let mut sizes = node let mut sizes = node
.layout(ctx, &self.regions) .layout(ctx, &self.regions)
@ -377,7 +379,7 @@ impl<'a> GridLayouter<'a> {
let len = frames.len(); let len = frames.len();
for (i, frame) in frames.into_iter().enumerate() { for (i, frame) in frames.into_iter().enumerate() {
if i + 1 != len { if i + 1 != len {
*self.constraints.exact.get_mut(self.main) = Some(self.full); self.constraints.exact.set(self.main, Some(self.full));
} }
self.push_row(ctx, frame); self.push_row(ctx, frame);
} }
@ -432,7 +434,7 @@ impl<'a> GridLayouter<'a> {
let mut pos = Gen::zero(); let mut pos = Gen::zero();
for (x, &rcol) in self.rcols.iter().enumerate() { for (x, &rcol) in self.rcols.iter().enumerate() {
if let Some(node) = self.cell(x, y) { if let Some(node) = self.cell(x, y) {
regions.mutate(|size| *size.get_mut(self.cross) = rcol); regions.mutate(|size| size.set(self.cross, rcol));
// Push the layouted frames into the individual output frames. // Push the layouted frames into the individual output frames.
let frames = node.layout(ctx, &regions); let frames = node.layout(ctx, &regions);
@ -456,7 +458,7 @@ impl<'a> GridLayouter<'a> {
while !self.regions.current.get(self.main).fits(length) while !self.regions.current.get(self.main).fits(length)
&& !self.regions.in_full_last() && !self.regions.in_full_last()
{ {
*self.constraints.max.get_mut(self.main) = Some(self.used.main + length); self.constraints.max.set(self.main, Some(self.used.main + length));
self.finish_region(ctx); self.finish_region(ctx);
} }
@ -470,7 +472,7 @@ impl<'a> GridLayouter<'a> {
// Determine the size of the region. // Determine the size of the region.
let length = if self.fr.is_zero() { self.used.main } else { self.full }; let length = if self.fr.is_zero() { self.used.main } else { self.full };
let size = self.to_size(length); let size = self.to_size(length);
*self.constraints.min.get_mut(self.main) = Some(length); self.constraints.min.set(self.main, Some(length));
// The frame for the region. // The frame for the region.
let mut output = Frame::new(size, size.height); let mut output = Frame::new(size, size.height);

View File

@ -77,7 +77,7 @@ impl<'a> StackLayouter<'a> {
let expand = regions.expand; let expand = regions.expand;
// Disable expansion on the main axis for children. // Disable expansion on the main axis for children.
*regions.expand.get_mut(main) = false; regions.expand.set(main, false);
if let Some(aspect) = stack.aspect { if let Some(aspect) = stack.aspect {
regions.current = regions.current.with_aspect(aspect.into_inner()); regions.current = regions.current.with_aspect(aspect.into_inner());