diff options
author | Federico Mena Quintero <federico@gnome.org> | 2023-03-22 11:51:11 -0600 |
---|---|---|
committer | Marge Bot <marge-bot@gnome.org> | 2023-03-23 01:41:14 +0000 |
commit | 2b1cb3bac41dd0b3afff44c544bf5e00f40eb879 (patch) | |
tree | 226b59895b7979fed26e9ee08f3e59c25cf69e9b | |
parent | d20cc4733981bebb3a6a56d44fea692d72b179e6 (diff) | |
download | librsvg-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.rs | 7 | ||||
-rw-r--r-- | src/image.rs | 13 | ||||
-rw-r--r-- | src/layout.rs | 1 |
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. |