diff options
| author | Laurenz <laurmaedje@gmail.com> | 2022-01-05 14:49:14 +0100 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2022-01-05 15:06:42 +0100 |
| commit | f7e8624b4cf31744d600167dd7f3a9d9d1626014 (patch) | |
| tree | 0941c8db497befc47a666d3d1384db4ab9fc5133 /src/library/image.rs | |
| parent | 4c81a5d43eabd959dbb500a8076f99f21bd037bd (diff) | |
Refactor
Diffstat (limited to 'src/library/image.rs')
| -rw-r--r-- | src/library/image.rs | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/src/library/image.rs b/src/library/image.rs index 2b91b2fc..c5cb9aeb 100644 --- a/src/library/image.rs +++ b/src/library/image.rs @@ -3,18 +3,13 @@ use std::io; use super::prelude::*; -use super::LinkNode; use crate::diag::Error; use crate::image::ImageId; /// `image`: An image. pub fn image(ctx: &mut EvalContext, args: &mut Args) -> TypResult<Value> { - let path = args.expect::<Spanned<EcoString>>("path to image file")?; - let width = args.named("width")?; - let height = args.named("height")?; - let fit = args.named("fit")?.unwrap_or_default(); - // Load the image. + let path = args.expect::<Spanned<EcoString>>("path to image file")?; let full = ctx.make_path(&path.v); let id = ctx.images.load(&full).map_err(|err| { Error::boxed(path.span, match err.kind() { @@ -23,6 +18,10 @@ pub fn image(ctx: &mut EvalContext, args: &mut Args) -> TypResult<Value> { }) })?; + let width = args.named("width")?; + let height = args.named("height")?; + let fit = args.named("fit")?.unwrap_or_default(); + Ok(Value::inline( ImageNode { id, fit }.pack().sized(Spec::new(width, height)), )) @@ -37,6 +36,12 @@ pub struct ImageNode { pub fit: ImageFit, } +#[properties] +impl ImageNode { + /// An URL the image should link to. + pub const LINK: Option<String> = None; +} + impl Layout for ImageNode { fn layout( &self, @@ -90,7 +95,7 @@ impl Layout for ImageNode { } // Apply link if it exists. - if let Some(url) = styles.get_ref(LinkNode::URL) { + if let Some(url) = styles.get_ref(Self::LINK) { frame.link(url); } |
