summaryrefslogtreecommitdiff
path: root/crates
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2024-02-15 11:07:07 +0100
committerGitHub <noreply@github.com>2024-02-15 10:07:07 +0000
commit1d78c3ed436d70ef4fe05930903bc4b0402161b6 (patch)
tree3736973c66c4f54b0264584367479ccc73352d65 /crates
parentaabb4b5ecf67a5b51b0e550f0b06087465f4ba75 (diff)
Fix `h` and `v` in stack (#3423)
Diffstat (limited to 'crates')
-rw-r--r--crates/typst/src/layout/stack.rs19
1 files changed, 17 insertions, 2 deletions
diff --git a/crates/typst/src/layout/stack.rs b/crates/typst/src/layout/stack.rs
index e1c26625..caa78264 100644
--- a/crates/typst/src/layout/stack.rs
+++ b/crates/typst/src/layout/stack.rs
@@ -4,8 +4,8 @@ use crate::diag::SourceResult;
use crate::engine::Engine;
use crate::foundations::{cast, elem, Content, Packed, Resolve, StyleChain, StyledElem};
use crate::layout::{
- Abs, AlignElem, Axes, Axis, Dir, FixedAlignment, Fr, Fragment, Frame, LayoutMultiple,
- Point, Regions, Size, Spacing,
+ Abs, AlignElem, Axes, Axis, Dir, FixedAlignment, Fr, Fragment, Frame, HElem,
+ LayoutMultiple, Point, Regions, Size, Spacing, VElem,
};
use crate::util::{Get, Numeric};
@@ -60,6 +60,7 @@ impl LayoutMultiple for Packed<StackElem> {
regions: Regions,
) -> SourceResult<Fragment> {
let mut layouter = StackLayouter::new(self.dir(styles), regions, styles);
+ let axis = layouter.dir.axis();
// Spacing to insert before the next block.
let spacing = self.spacing(styles);
@@ -72,6 +73,20 @@ impl LayoutMultiple for Packed<StackElem> {
deferred = None;
}
StackChild::Block(block) => {
+ // Transparently handle `h`.
+ if let (Axis::X, Some(h)) = (axis, block.to_packed::<HElem>()) {
+ layouter.layout_spacing(*h.amount());
+ deferred = None;
+ continue;
+ }
+
+ // Transparently handle `v`.
+ if let (Axis::Y, Some(v)) = (axis, block.to_packed::<VElem>()) {
+ layouter.layout_spacing(*v.amount());
+ deferred = None;
+ continue;
+ }
+
if let Some(kind) = deferred {
layouter.layout_spacing(kind);
}