[librsvg] (#430): Use the dpi value in CairoRenderer
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg] (#430): Use the dpi value in CairoRenderer
- Date: Fri, 5 Apr 2019 00:21:43 +0000 (UTC)
commit 24b9a77df28ded7ea0f6ad3e25a2aefb9881678b
Author: Federico Mena Quintero <federico gnome org>
Date: Thu Apr 4 18:18:38 2019 -0600
(#430): Use the dpi value in CairoRenderer
The primitive functions in Handle now take a dpi argument.
As for the functions built on top of them:
- The functions called from the C API get the rhandle's dpi value.
- The librsvg_crate functions use the CairoRenderer's dpi as expected.
Fixes https://gitlab.gnome.org/GNOME/librsvg/issues/430
librsvg_crate/src/lib.rs | 13 +++++--------
rsvg_internals/src/c_api.rs | 8 ++++++--
rsvg_internals/src/handle.rs | 20 +++++++++++++-------
3 files changed, 24 insertions(+), 17 deletions(-)
---
diff --git a/librsvg_crate/src/lib.rs b/librsvg_crate/src/lib.rs
index 4565d12c..a08a9ab3 100644
--- a/librsvg_crate/src/lib.rs
+++ b/librsvg_crate/src/lib.rs
@@ -100,12 +100,7 @@ use glib::object::Cast;
use rsvg_internals::{Dpi, Handle, LoadFlags};
pub use rsvg_internals::{
- DefsLookupErrorKind,
- HrefError,
- Length,
- LengthUnit,
- LoadingError,
- RenderingError,
+ DefsLookupErrorKind, HrefError, Length, LengthUnit, LoadingError, RenderingError,
};
/// Struct for loading an [`SvgHandle`][SvgHandle].
@@ -400,7 +395,7 @@ impl<'a> CairoRenderer<'a> {
) -> Result<(cairo::Rectangle, cairo::Rectangle), RenderingError> {
self.handle
.0
- .get_geometry_for_element(id, viewport)
+ .get_geometry_for_element(id, viewport, self.dpi)
.map(|(i, l)| (i.into(), l.into()))
}
@@ -410,6 +405,8 @@ impl<'a> CairoRenderer<'a> {
id: Option<&str>,
viewport: &cairo::Rectangle,
) -> Result<(), RenderingError> {
- self.handle.0.render_element_to_viewport(cr, id, viewport)
+ self.handle
+ .0
+ .render_element_to_viewport(cr, id, viewport, self.dpi)
}
}
diff --git a/rsvg_internals/src/c_api.rs b/rsvg_internals/src/c_api.rs
index 650ff543..5d2f1579 100644
--- a/rsvg_internals/src/c_api.rs
+++ b/rsvg_internals/src/c_api.rs
@@ -905,7 +905,11 @@ pub unsafe extern "C" fn rsvg_rust_handle_get_geometry_for_element(
let id: Option<String> = from_glib_none(id);
- match rhandle.get_geometry_for_element(id.as_ref().map(String::as_str), &viewport.into()) {
+ match rhandle.get_geometry_for_element(
+ id.as_ref().map(String::as_str),
+ &viewport.into(),
+ rhandle.dpi.get(),
+ ) {
Ok((ink_rect, logical_rect)) => {
if !out_ink_rect.is_null() {
*out_ink_rect = ink_rect;
@@ -916,7 +920,7 @@ pub unsafe extern "C" fn rsvg_rust_handle_get_geometry_for_element(
}
true.to_glib()
- },
+ }
Err(e) => {
set_gerror(error, 0, &format!("{}", e));
diff --git a/rsvg_internals/src/handle.rs b/rsvg_internals/src/handle.rs
index 74920289..655e2f17 100644
--- a/rsvg_internals/src/handle.rs
+++ b/rsvg_internals/src/handle.rs
@@ -296,6 +296,7 @@ impl Handle {
&self,
cr: &cairo::Context,
viewport: &cairo::Rectangle,
+ dpi: Dpi,
node: Option<&RsvgNode>,
measuring: bool,
) -> DrawingCtx {
@@ -303,7 +304,7 @@ impl Handle {
self.svg.borrow().as_ref().unwrap().clone(),
cr,
viewport,
- self.dpi.get(),
+ dpi,
measuring,
self.is_testing.get(),
);
@@ -420,6 +421,7 @@ impl Handle {
fn get_node_geometry(
&self,
node: &RsvgNode,
+ dpi: Dpi,
) -> Result<(RsvgRectangle, RsvgRectangle), RenderingError> {
// This is just to start with an unknown viewport size
let viewport = cairo::Rectangle {
@@ -429,17 +431,18 @@ impl Handle {
height: 1.0,
};
- self.get_node_geometry_with_viewport(node, &viewport)
+ self.get_node_geometry_with_viewport(node, &viewport, dpi)
}
fn get_node_geometry_with_viewport(
&self,
node: &RsvgNode,
viewport: &cairo::Rectangle,
+ dpi: Dpi,
) -> 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, Some(node), true);
+ let mut draw_ctx = self.create_drawing_ctx_for_node(&cr, viewport, dpi, Some(node), true);
let root = self.get_root();
draw_ctx.draw_node_from_stack(&root.get_cascaded_values(), &root, false)?;
@@ -488,7 +491,7 @@ impl Handle {
}
}
- self.get_node_geometry(&node)
+ self.get_node_geometry(&node, self.dpi.get())
}
fn get_node_or_root(&self, id: Option<&str>) -> Result<RsvgNode, RenderingError> {
@@ -503,9 +506,10 @@ impl Handle {
&self,
id: Option<&str>,
viewport: &cairo::Rectangle,
+ dpi: Dpi,
) -> Result<(RsvgRectangle, RsvgRectangle), RenderingError> {
let node = self.get_node_or_root(id)?;
- self.get_node_geometry_with_viewport(&node, viewport)
+ self.get_node_geometry_with_viewport(&node, viewport, dpi)
}
fn lookup_node(&self, id: &str) -> Result<RsvgNode, DefsLookupErrorKind> {
@@ -566,7 +570,7 @@ impl Handle {
height: f64::from(dimensions.height),
};
- self.render_element_to_viewport(cr, id, &viewport)
+ self.render_element_to_viewport(cr, id, &viewport, self.dpi.get())
}
pub fn render_element_to_viewport(
@@ -574,6 +578,7 @@ impl Handle {
cr: &cairo::Context,
id: Option<&str>,
viewport: &cairo::Rectangle,
+ dpi: Dpi,
) -> Result<(), RenderingError> {
check_cairo_context(cr)?;
@@ -586,7 +591,8 @@ impl Handle {
let root = self.get_root();
cr.save();
- let mut draw_ctx = self.create_drawing_ctx_for_node(cr, viewport, node.as_ref(), false);
+ let mut draw_ctx =
+ self.create_drawing_ctx_for_node(cr, viewport, dpi, node.as_ref(), false);
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]