summaryrefslogtreecommitdiff
path: root/crates/typst-library/src/layout/transform.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/typst-library/src/layout/transform.rs')
-rw-r--r--crates/typst-library/src/layout/transform.rs14
1 files changed, 14 insertions, 0 deletions
diff --git a/crates/typst-library/src/layout/transform.rs b/crates/typst-library/src/layout/transform.rs
index 183df609..d153d97d 100644
--- a/crates/typst-library/src/layout/transform.rs
+++ b/crates/typst-library/src/layout/transform.rs
@@ -307,6 +307,20 @@ impl Transform {
Self { sx, sy, ..Self::identity() }
}
+ /// A scale transform at a specific position.
+ pub fn scale_at(sx: Ratio, sy: Ratio, px: Abs, py: Abs) -> Self {
+ Self::translate(px, py)
+ .pre_concat(Self::scale(sx, sy))
+ .pre_concat(Self::translate(-px, -py))
+ }
+
+ /// A rotate transform at a specific position.
+ pub fn rotate_at(angle: Angle, px: Abs, py: Abs) -> Self {
+ Self::translate(px, py)
+ .pre_concat(Self::rotate(angle))
+ .pre_concat(Self::translate(-px, -py))
+ }
+
/// A rotate transform.
pub fn rotate(angle: Angle) -> Self {
let cos = Ratio::new(angle.cos());