summaryrefslogtreecommitdiff
path: root/src/library/image.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2022-01-05 14:49:14 +0100
committerLaurenz <laurmaedje@gmail.com>2022-01-05 15:06:42 +0100
commitf7e8624b4cf31744d600167dd7f3a9d9d1626014 (patch)
tree0941c8db497befc47a666d3d1384db4ab9fc5133 /src/library/image.rs
parent4c81a5d43eabd959dbb500a8076f99f21bd037bd (diff)
Refactor
Diffstat (limited to 'src/library/image.rs')
-rw-r--r--src/library/image.rs19
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);
}