summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFederico Mena Quintero <federico@gnome.org>2023-03-22 11:51:11 -0600
committerMarge Bot <marge-bot@gnome.org>2023-03-23 01:41:14 +0000
commit2b1cb3bac41dd0b3afff44c544bf5e00f40eb879 (patch)
tree226b59895b7979fed26e9ee08f3e59c25cf69e9b
parentd20cc4733981bebb3a6a56d44fea692d72b179e6 (diff)
downloadlibrsvg-2b1cb3bac41dd0b3afff44c544bf5e00f40eb879.tar.gz
Layer::Image - new variant for images
This moves the information for drawing images into the Layer enum, similar to basic shapes and text elements. Part-of: <https://gitlab.gnome.org/GNOME/librsvg/-/merge_requests/816>
-rw-r--r--src/drawing_ctx.rs7
-rw-r--r--src/image.rs13
-rw-r--r--src/layout.rs1
3 files changed, 15 insertions, 6 deletions
diff --git a/src/drawing_ctx.rs b/src/drawing_ctx.rs
index 9108dbc4..96ce7df5 100644
--- a/src/drawing_ctx.rs
+++ b/src/drawing_ctx.rs
@@ -1298,7 +1298,10 @@ impl DrawingCtx {
),
LayerKind::Text(text) => {
self.draw_text(&text, &layer.stacking_ctx, acquired_nodes, values, clipping)
- }
+ },
+ LayerKind::Image(image) => {
+ self.draw_image(&image, &layer.stacking_ctx, acquired_nodes, values, clipping)
+ },
}
}
@@ -1416,7 +1419,7 @@ impl DrawingCtx {
cr.paint()
}
- pub fn draw_image(
+ fn draw_image(
&mut self,
image: &Image,
stacking_ctx: &StackingContext,
diff --git a/src/image.rs b/src/image.rs
index 4ce6f1e1..781f32fb 100644
--- a/src/image.rs
+++ b/src/image.rs
@@ -9,7 +9,7 @@ use crate::drawing_ctx::DrawingCtx;
use crate::element::{set_attribute, ElementTrait};
use crate::error::*;
use crate::href::{is_href, set_href};
-use crate::layout::{self, StackingContext};
+use crate::layout::{self, Layer, LayerKind, StackingContext};
use crate::length::*;
use crate::node::{CascadedValues, Node, NodeBorrow};
use crate::parsers::ParseValue;
@@ -92,13 +92,13 @@ impl ElementTrait for Image {
let overflow = values.overflow();
- let image = layout::Image {
+ let image = Box::new(layout::Image {
surface,
is_visible,
rect,
aspect: self.aspect,
overflow,
- };
+ });
let elt = node.borrow_element();
let stacking_ctx = StackingContext::new(
@@ -109,6 +109,11 @@ impl ElementTrait for Image {
values,
);
- draw_ctx.draw_image(&image, &stacking_ctx, acquired_nodes, values, clipping)
+ let layer = Layer {
+ kind: LayerKind::Image(image),
+ stacking_ctx,
+ };
+
+ draw_ctx.draw_layer(&layer, acquired_nodes, values, clipping)
}
}
diff --git a/src/layout.rs b/src/layout.rs
index 7f19f15a..ac40ce95 100644
--- a/src/layout.rs
+++ b/src/layout.rs
@@ -65,6 +65,7 @@ pub struct Layer {
pub enum LayerKind {
Shape(Box<Shape>),
Text(Box<Text>),
+ Image(Box<Image>),
}
/// Stroke parameters in user-space coordinates.