diff options
author | Federico Mena Quintero <federico@gnome.org> | 2020-06-19 17:30:09 -0500 |
---|---|---|
committer | Federico Mena Quintero <federico@gnome.org> | 2020-10-02 11:53:58 -0500 |
commit | d2cd58018703d2c3ebb1351f3d9fe3785e9f2a46 (patch) | |
tree | a86f6949023e234d4e7f810746d799d35da8a12d | |
parent | e41bc137f66d3872d3d94803709fa1552213ceac (diff) | |
download | librsvg-d2cd58018703d2c3ebb1351f3d9fe3785e9f2a46.tar.gz |
Combine DrawingCtx::new and draw_from_stack into a single draw_tree function
The DrawingCtx is only used with those two functions from the toplevel
handle.rs. So, combine them into a single one that does not return a
DrawingCtx at all. This makes DrawingCtx an invisible detail
from the viewpoint of handle.rs, and should let us clean up the
creation of DrawingCtx more easily.
-rw-r--r-- | rsvg_internals/src/drawing_ctx.rs | 28 | ||||
-rw-r--r-- | rsvg_internals/src/handle.rs | 62 |
2 files changed, 60 insertions, 30 deletions
diff --git a/rsvg_internals/src/drawing_ctx.rs b/rsvg_internals/src/drawing_ctx.rs index 464cfacb..71da8650 100644 --- a/rsvg_internals/src/drawing_ctx.rs +++ b/rsvg_internals/src/drawing_ctx.rs @@ -145,8 +145,34 @@ pub struct DrawingCtx { testing: bool, } +/// The toplevel drawing routine. +/// +/// This creates a DrawingCtx internally and starts drawing at the specified `node`. +pub fn draw_tree( + limit_to_stack: Option<&Node>, + cr: &cairo::Context, + viewport: Rect, + dpi: Dpi, + measuring: bool, + testing: bool, + node: &Node, + acquired_nodes: &mut AcquiredNodes, + cascaded: &CascadedValues<'_>, +) -> Result<BoundingBox, RenderingError> { + let mut draw_ctx = DrawingCtx::new( + limit_to_stack, + cr, + viewport, + dpi, + measuring, + testing, + ); + + draw_ctx.draw_node_from_stack(node, acquired_nodes, cascaded, false) +} + impl DrawingCtx { - pub fn new( + fn new( limit_to_stack: Option<&Node>, cr: &cairo::Context, viewport: Rect, diff --git a/rsvg_internals/src/handle.rs b/rsvg_internals/src/handle.rs index d776cb96..c5a6bce2 100644 --- a/rsvg_internals/src/handle.rs +++ b/rsvg_internals/src/handle.rs @@ -7,7 +7,7 @@ use crate::bbox::BoundingBox; use crate::css::{Origin, Stylesheet}; use crate::document::{AcquiredNodes, Document}; use crate::dpi::Dpi; -use crate::drawing_ctx::DrawingCtx; +use crate::drawing_ctx::draw_tree; use crate::element::Element; use crate::error::{DefsLookupErrorKind, LoadingError, RenderingError}; use crate::node::{CascadedValues, Node, NodeBorrow}; @@ -117,13 +117,17 @@ impl Handle { let target = cairo::ImageSurface::create(cairo::Format::Rgb24, 1, 1)?; let cr = cairo::Context::new(&target); - let mut draw_ctx = DrawingCtx::new(Some(node), &cr, viewport, dpi, true, is_testing); - let bbox = draw_ctx.draw_node_from_stack( + let bbox = draw_tree( + Some(node), + &cr, + viewport, + dpi, + true, + is_testing, &root, &mut AcquiredNodes::new(&self.document), &CascadedValues::new_from_node(&root), - false, )?; let ink_rect = bbox.ink_rect.unwrap_or_default(); @@ -248,27 +252,22 @@ impl Handle { let root = self.document.root(); cr.save(); - let mut draw_ctx = DrawingCtx::new( + + let res = draw_tree( node.as_ref(), cr, Rect::from(*viewport), dpi, false, is_testing, + &root, + &mut AcquiredNodes::new(&self.document), + &CascadedValues::new_from_node(&root), ); - let res = draw_ctx - .draw_node_from_stack( - &root, - &mut AcquiredNodes::new(&self.document), - &CascadedValues::new_from_node(&root), - false, - ) - .map(|_bbox| ()); - cr.restore(); - res + res.map(|_bbox| ()) } fn get_bbox_for_element( @@ -279,13 +278,17 @@ impl Handle { ) -> Result<BoundingBox, RenderingError> { let target = cairo::ImageSurface::create(cairo::Format::Rgb24, 1, 1)?; let cr = cairo::Context::new(&target); - let mut draw_ctx = DrawingCtx::new(None, &cr, unit_rectangle(), dpi, true, is_testing); - draw_ctx.draw_node_from_stack( + draw_tree( + None, + &cr, + unit_rectangle(), + dpi, + true, + is_testing, node, &mut AcquiredNodes::new(&self.document), &CascadedValues::new_from_node(node), - false, ) } @@ -348,20 +351,21 @@ impl Handle { cr.scale(factor, factor); cr.translate(-ink_r.x0, -ink_r.y0); - let mut draw_ctx = DrawingCtx::new(None, &cr, unit_rectangle(), dpi, false, is_testing); - - let res = draw_ctx - .draw_node_from_stack( - &node, - &mut AcquiredNodes::new(&self.document), - &CascadedValues::new_from_node(&node), - false, - ) - .map(|_bbox| ()); + let res = draw_tree( + None, + &cr, + unit_rectangle(), + dpi, + false, + is_testing, + &node, + &mut AcquiredNodes::new(&self.document), + &CascadedValues::new_from_node(&node), + ); cr.restore(); - res + res.map(|_bbox| ()) } pub fn get_intrinsic_dimensions(&self) -> IntrinsicDimensions { |