mirror of
https://github.com/typst/typst
synced 2025-05-14 17:15:28 +08:00
Setter method
This commit is contained in:
parent
e14e804789
commit
2e87808cdd
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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, ®ions);
|
let frames = node.layout(ctx, ®ions);
|
||||||
@ -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);
|
||||||
|
@ -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());
|
||||||
|
Loading…
x
Reference in New Issue
Block a user