[librsvg] DrawingCtx::new() - take a node argument
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg] DrawingCtx::new() - take a node argument
- Date: Tue, 9 Apr 2019 16:44:09 +0000 (UTC)
commit 07c952c221ca3b6d8a05cffa345f14d347118664
Author: Federico Mena Quintero <federico gnome org>
Date: Thu Apr 4 19:20:32 2019 -0600
DrawingCtx::new() - take a node argument
This lets us remove Handle::create_drawing_ctx_for_node()
rsvg_internals/src/drawing_ctx.rs | 24 ++++++++++-----------
rsvg_internals/src/handle.rs | 45 ++++++++++++++++-----------------------
2 files changed, 29 insertions(+), 40 deletions(-)
---
diff --git a/rsvg_internals/src/drawing_ctx.rs b/rsvg_internals/src/drawing_ctx.rs
index 68e781d0..9ed6537b 100644
--- a/rsvg_internals/src/drawing_ctx.rs
+++ b/rsvg_internals/src/drawing_ctx.rs
@@ -20,14 +20,8 @@ use crate::node::{CascadedValues, NodeType, RsvgNode};
use crate::paint_server::{PaintServer, PaintSource};
use crate::pattern::NodePattern;
use crate::properties::{
- ClipRule,
- ComputedValues,
- EnableBackground,
- FillRule,
- ShapeRendering,
- StrokeDasharray,
- StrokeLinecap,
- StrokeLinejoin,
+ ClipRule, ComputedValues, EnableBackground, FillRule, ShapeRendering, StrokeDasharray,
+ StrokeLinecap, StrokeLinejoin,
};
use crate::rect::RectangleExt;
use crate::surface_utils::shared_surface::SharedImageSurface;
@@ -119,6 +113,7 @@ pub struct DrawingCtx {
impl DrawingCtx {
pub fn new(
svg: Rc<Svg>,
+ node: Option<&RsvgNode>,
cr: &cairo::Context,
viewport: &cairo::Rectangle,
dpi: Dpi,
@@ -163,7 +158,7 @@ impl DrawingCtx {
let mut view_box_stack = Vec::new();
view_box_stack.push(vbox);
- DrawingCtx {
+ let mut draw_ctx = DrawingCtx {
svg,
initial_affine,
rect,
@@ -177,7 +172,13 @@ impl DrawingCtx {
acquired_nodes: Rc::new(RefCell::new(Vec::new())),
measuring,
testing,
+ };
+
+ if let Some(node) = node {
+ draw_ctx.add_node_and_ancestors_to_stack(node);
}
+
+ draw_ctx
}
pub fn toplevel_viewport(&self) -> cairo::Rectangle {
@@ -409,10 +410,7 @@ impl DrawingCtx {
}
}
- fn clip_to_node(
- &mut self,
- clip_node: &Option<RsvgNode>,
- ) -> Result<(), RenderingError> {
+ fn clip_to_node(&mut self, clip_node: &Option<RsvgNode>) -> Result<(), RenderingError> {
if let Some(clip_node) = clip_node {
let orig_bbox = self.bbox;
diff --git a/rsvg_internals/src/handle.rs b/rsvg_internals/src/handle.rs
index afe78ae4..9c6a359b 100644
--- a/rsvg_internals/src/handle.rs
+++ b/rsvg_internals/src/handle.rs
@@ -297,30 +297,6 @@ impl Handle {
res
}
- fn create_drawing_ctx_for_node(
- &self,
- cr: &cairo::Context,
- viewport: &cairo::Rectangle,
- dpi: Dpi,
- node: Option<&RsvgNode>,
- measuring: bool,
- ) -> DrawingCtx {
- let mut draw_ctx = DrawingCtx::new(
- self.get_svg(),
- cr,
- viewport,
- dpi,
- measuring,
- self.is_testing.get(),
- );
-
- if let Some(node) = node {
- draw_ctx.add_node_and_ancestors_to_stack(node);
- }
-
- draw_ctx
- }
-
pub fn has_sub(&self, id: &str) -> Result<bool, RenderingError> {
self.check_is_loaded()?;
@@ -445,7 +421,15 @@ impl Handle {
) -> Result<(RsvgRectangle, RsvgRectangle), RenderingError> {
let target = ImageSurface::create(cairo::Format::Rgb24, 1, 1)?;
let cr = cairo::Context::new(&target);
- let mut draw_ctx = self.create_drawing_ctx_for_node(&cr, viewport, dpi, Some(node), true);
+ let mut draw_ctx = DrawingCtx::new(
+ self.get_svg(),
+ Some(node),
+ &cr,
+ viewport,
+ dpi,
+ true,
+ self.is_testing.get(),
+ );
let root = self.get_root();
draw_ctx.draw_node_from_stack(&root.get_cascaded_values(), &root, false)?;
@@ -591,8 +575,15 @@ impl Handle {
let root = self.get_root();
cr.save();
- let mut draw_ctx =
- self.create_drawing_ctx_for_node(cr, viewport, dpi, node.as_ref(), false);
+ let mut draw_ctx = DrawingCtx::new(
+ self.get_svg(),
+ node.as_ref(),
+ cr,
+ viewport,
+ dpi,
+ false,
+ self.is_testing.get(),
+ );
let res = draw_ctx.draw_node_from_stack(&root.get_cascaded_values(), &root, false);
cr.restore();
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]