mirror of
https://github.com/typst/typst
synced 2025-05-13 20:46:23 +08:00
Merge af67206bdfe3a39c6ebc367b69fb038e8d2d579f into 9b09146a6b5e936966ed7ee73bce9dd2df3810ae
This commit is contained in:
commit
f60cfc94d8
@ -1,6 +1,8 @@
|
||||
use typst_library::diag::{bail, SourceResult};
|
||||
use typst_library::engine::Engine;
|
||||
use typst_library::foundations::{Content, Packed, Resolve, StyleChain, StyledElem};
|
||||
use typst_library::foundations::{
|
||||
Content, Packed, Resolve, Smart, StyleChain, StyledElem,
|
||||
};
|
||||
use typst_library::introspection::{Locator, SplitLocator};
|
||||
use typst_library::layout::{
|
||||
Abs, AlignElem, Axes, Axis, Dir, FixedAlignment, Fr, Fragment, Frame, HElem, Point,
|
||||
@ -27,6 +29,8 @@ pub fn layout_stack(
|
||||
let spacing = elem.spacing(styles);
|
||||
let mut deferred = None;
|
||||
|
||||
let align = elem.align(styles);
|
||||
|
||||
for child in &elem.children {
|
||||
match child {
|
||||
StackChild::Spacing(kind) => {
|
||||
@ -52,7 +56,15 @@ pub fn layout_stack(
|
||||
layouter.layout_spacing(kind);
|
||||
}
|
||||
|
||||
layouter.layout_block(engine, block, styles)?;
|
||||
if let Smart::Custom(alignment) = align {
|
||||
layouter.layout_block(
|
||||
engine,
|
||||
&block.clone().aligned(alignment),
|
||||
styles,
|
||||
)?;
|
||||
} else {
|
||||
layouter.layout_block(engine, block, styles)?;
|
||||
}
|
||||
deferred = spacing;
|
||||
}
|
||||
}
|
||||
|
@ -2,8 +2,10 @@ use std::fmt::{self, Debug, Formatter};
|
||||
|
||||
use crate::diag::SourceResult;
|
||||
use crate::engine::Engine;
|
||||
use crate::foundations::{cast, elem, Content, NativeElement, Packed, Show, StyleChain};
|
||||
use crate::layout::{BlockElem, Dir, Spacing};
|
||||
use crate::foundations::{
|
||||
cast, elem, Content, NativeElement, Packed, Show, Smart, StyleChain,
|
||||
};
|
||||
use crate::layout::{Alignment, BlockElem, Dir, Spacing};
|
||||
|
||||
/// Arranges content and spacing horizontally or vertically.
|
||||
///
|
||||
@ -42,6 +44,11 @@ pub struct StackElem {
|
||||
/// Spacing to insert between items where no explicit spacing was provided.
|
||||
pub spacing: Option<Spacing>,
|
||||
|
||||
/// How to align the items.
|
||||
///
|
||||
/// If set to `{auto}`, the outer alignment is used.
|
||||
pub align: Smart<Alignment>,
|
||||
|
||||
/// The children to stack along the axis.
|
||||
#[variadic]
|
||||
pub children: Vec<StackChild>,
|
||||
|
BIN
tests/ref/stack-align.png
Normal file
BIN
tests/ref/stack-align.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.7 KiB |
@ -89,3 +89,10 @@ World! 🌍
|
||||
// Error: 3-40 stack spacing is infinite
|
||||
stack(spacing: infinite-length)[A][B]
|
||||
})
|
||||
|
||||
--- stack-align ---
|
||||
#set align(center)
|
||||
#set stack(align: end)
|
||||
#stack[I][am][aligned][to][the][right!]
|
||||
#stack(align: auto)[I][am][aligned][to][the][center!]
|
||||
#stack(dir: rtl, align: horizon)[Aligned \ at][horizon.]
|
||||
|
Loading…
x
Reference in New Issue
Block a user