[librsvg: 1/8] Handle::get_bbox_for_element() - Factor out duplicated code
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg: 1/8] Handle::get_bbox_for_element() - Factor out duplicated code
- Date: Mon, 26 Aug 2019 12:52:37 +0000 (UTC)
commit 577dcfdb8019e3e180a253bbd8b1b811e45941e6
Author: Federico Mena Quintero <federico gnome org>
Date: Mon Aug 26 11:40:58 2019 +0300
Handle::get_bbox_for_element() - Factor out duplicated code
rsvg_internals/src/handle.rs | 58 +++++++++++++++++++-------------------------
1 file changed, 25 insertions(+), 33 deletions(-)
---
diff --git a/rsvg_internals/src/handle.rs b/rsvg_internals/src/handle.rs
index 99d6f4d4..81042bbd 100644
--- a/rsvg_internals/src/handle.rs
+++ b/rsvg_internals/src/handle.rs
@@ -8,6 +8,7 @@ use libc;
use locale_config::{LanguageRange, Locale};
use crate::allowed_url::{AllowedUrl, Href};
+use crate::bbox::BoundingBox;
use crate::c_api::{RsvgDimensionData, RsvgPositionData, SizeCallback};
use crate::dpi::Dpi;
use crate::drawing_ctx::{DrawingCtx, RsvgRectangle};
@@ -368,15 +369,12 @@ impl Handle {
res
}
- /// Returns (ink_rect, logical_rect)
- pub fn get_geometry_for_element(
+ fn get_bbox_for_element(
&self,
- id: Option<&str>,
+ node: &RsvgNode,
dpi: Dpi,
is_testing: bool,
- ) -> Result<(RsvgRectangle, RsvgRectangle), RenderingError> {
- let node = self.get_node_or_root(id)?;
-
+ ) -> Result<BoundingBox, RenderingError> {
let target = ImageSurface::create(cairo::Format::Rgb24, 1, 1)?;
let cr = cairo::Context::new(&target);
@@ -397,9 +395,20 @@ impl Handle {
is_testing,
);
- draw_ctx.draw_node_from_stack(&CascadedValues::new_from_node(&node), &node, false)?;
+ draw_ctx.draw_node_from_stack(&CascadedValues::new_from_node(node), node, false)?;
+ Ok(draw_ctx.get_bbox().clone())
+ }
- let bbox = draw_ctx.get_bbox();
+ /// Returns (ink_rect, logical_rect)
+ pub fn get_geometry_for_element(
+ &self,
+ id: Option<&str>,
+ dpi: Dpi,
+ is_testing: bool,
+ ) -> Result<(RsvgRectangle, RsvgRectangle), RenderingError> {
+ let node = self.get_node_or_root(id)?;
+
+ let bbox = self.get_bbox_for_element(&node, dpi, is_testing)?;
let mut ink_rect = bbox
.ink_rect
@@ -436,31 +445,7 @@ impl Handle {
let node = self.get_node_or_root(id)?;
- // Measure the element
-
- let target = ImageSurface::create(cairo::Format::Rgb24, 1, 1)?;
- let measure_cr = cairo::Context::new(&target);
-
- let viewport = cairo::Rectangle {
- x: 0.0,
- y: 0.0,
- width: 1.0,
- height: 1.0,
- };
-
- let mut draw_ctx = DrawingCtx::new(
- self.svg.clone(),
- None,
- &measure_cr,
- &viewport,
- dpi,
- true,
- is_testing,
- );
-
- draw_ctx.draw_node_from_stack(&CascadedValues::new_from_node(&node), &node, false)?;
-
- let bbox = draw_ctx.get_bbox();
+ let bbox = self.get_bbox_for_element(&node, dpi, is_testing)?;
if bbox.ink_rect.is_none() || bbox.rect.is_none() {
// Nothing to draw
@@ -487,6 +472,13 @@ impl Handle {
cr.scale(factor, factor);
cr.translate(-ink_r.x, -ink_r.y);
+ let viewport = cairo::Rectangle {
+ x: 0.0,
+ y: 0.0,
+ width: 1.0,
+ height: 1.0,
+ };
+
let mut draw_ctx = DrawingCtx::new(
self.svg.clone(),
None,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]