From d04cc61eee2b9519e82b7759a929314299cb4a34 Mon Sep 17 00:00:00 2001 From: Tetragramm <9815373+Tetragramm@users.noreply.github.com> Date: Sun, 8 Dec 2024 10:43:25 -0600 Subject: [PATCH] Add missing functions to the gradient object. (#5528) Co-authored-by: PgBiel <9021226+PgBiel@users.noreply.github.com> Co-authored-by: Laurenz --- .../typst-library/src/visualize/gradient.rs | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/crates/typst-library/src/visualize/gradient.rs b/crates/typst-library/src/visualize/gradient.rs index 2be7e3701..e16e5d88a 100644 --- a/crates/typst-library/src/visualize/gradient.rs +++ b/crates/typst-library/src/visualize/gradient.rs @@ -697,6 +697,8 @@ impl Gradient { } /// Returns the angle of this gradient. + /// + /// Returns `{none}` if the gradient is neither linear nor conic. #[func] pub fn angle(&self) -> Option { match self { @@ -706,6 +708,54 @@ impl Gradient { } } + /// Returns the center of this gradient. + /// + /// Returns `{none}` if the gradient is neither radial nor conic. + #[func] + pub fn center(&self) -> Option> { + match self { + Self::Linear(_) => None, + Self::Radial(radial) => Some(radial.center), + Self::Conic(conic) => Some(conic.center), + } + } + + /// Returns the radius of this gradient. + /// + /// Returns `{none}` if the gradient is not radial. + #[func] + pub fn radius(&self) -> Option { + match self { + Self::Linear(_) => None, + Self::Radial(radial) => Some(radial.radius), + Self::Conic(_) => None, + } + } + + /// Returns the focal-center of this gradient. + /// + /// Returns `{none}` if the gradient is not radial. + #[func] + pub fn focal_center(&self) -> Option> { + match self { + Self::Linear(_) => None, + Self::Radial(radial) => Some(radial.focal_center), + Self::Conic(_) => None, + } + } + + /// Returns the focal-radius of this gradient. + /// + /// Returns `{none}` if the gradient is not radial. + #[func] + pub fn focal_radius(&self) -> Option { + match self { + Self::Linear(_) => None, + Self::Radial(radial) => Some(radial.focal_radius), + Self::Conic(_) => None, + } + } + /// Sample the gradient at a given position. /// /// The position is either a position along the gradient (a [ratio] between