[librsvg: 6/19] Move the implementation of render_cairo_sub to c_api
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg: 6/19] Move the implementation of render_cairo_sub to c_api
- Date: Wed, 29 Apr 2020 01:32:15 +0000 (UTC)
commit 57235eaeaad352837276f5e37da58f4e8c01c65a
Author: Federico Mena Quintero <federico gnome org>
Date: Thu Apr 23 18:03:24 2020 -0500
Move the implementation of render_cairo_sub to c_api
The internals will have just render_document, render_layer, etc. for
the new rendering API.
librsvg/c_api.rs | 23 +++++++++++++++--------
librsvg/pixbuf_utils.rs | 13 ++++++++++++-
rsvg_internals/src/handle.rs | 26 --------------------------
3 files changed, 27 insertions(+), 35 deletions(-)
---
diff --git a/librsvg/c_api.rs b/librsvg/c_api.rs
index 9819be33..673aca89 100644
--- a/librsvg/c_api.rs
+++ b/librsvg/c_api.rs
@@ -715,11 +715,20 @@ impl CHandle {
) -> Result<(), RenderingError> {
check_cairo_context(cr)?;
- let handle = self.get_handle_ref()?;
- let inner = self.inner.borrow();
- handle
- .render_cairo_sub(cr, id, inner.dpi, &inner.size_callback, inner.is_testing)
- .map_err(warn_on_invalid_id)
+ let dimensions = self.get_dimensions_sub(None)?;
+ if dimensions.width == 0 || dimensions.height == 0 {
+ // nothing to render
+ return Ok(());
+ }
+
+ let viewport = cairo::Rectangle {
+ x: 0.0,
+ y: 0.0,
+ width: f64::from(dimensions.width),
+ height: f64::from(dimensions.height),
+ };
+
+ self.render_layer(cr, id, &viewport)
}
fn get_pixbuf_sub(&self, id: Option<&str>) -> Result<Pixbuf, RenderingError> {
@@ -743,9 +752,7 @@ impl CHandle {
{
let cr = cairo::Context::new(&surface);
- handle
- .render_cairo_sub(&cr, id, dpi, &inner.size_callback, is_testing)
- .map_err(warn_on_invalid_id)?;
+ self.render_cairo_sub(&cr, id)?;
}
let surface = SharedImageSurface::wrap(surface, SurfaceType::SRgb)?;
diff --git a/librsvg/pixbuf_utils.rs b/librsvg/pixbuf_utils.rs
index 477a76c8..6d0d2d3f 100644
--- a/librsvg/pixbuf_utils.rs
+++ b/librsvg/pixbuf_utils.rs
@@ -171,7 +171,18 @@ fn render_to_pixbuf_at_size(
f64::from(width) / f64::from(dimensions.width),
f64::from(height) / f64::from(dimensions.height),
);
- handle.render_cairo_sub(&cr, None, dpi, &SizeCallback::default(), false)?;
+
+ let dimensions = handle.get_dimensions_sub(None, dpi, &SizeCallback::default(), false)?;
+ if !(dimensions.width == 0 || dimensions.height == 0) {
+ let viewport = cairo::Rectangle {
+ x: 0.0,
+ y: 0.0,
+ width: f64::from(dimensions.width),
+ height: f64::from(dimensions.height),
+ };
+
+ handle.render_document(&cr, &viewport, dpi, false)?;
+ }
}
let shared_surface = SharedImageSurface::wrap(surface, SurfaceType::SRgb)?;
diff --git a/rsvg_internals/src/handle.rs b/rsvg_internals/src/handle.rs
index c374578b..5cf244f9 100644
--- a/rsvg_internals/src/handle.rs
+++ b/rsvg_internals/src/handle.rs
@@ -390,32 +390,6 @@ impl Handle {
}
}
- pub fn render_cairo_sub(
- &self,
- cr: &cairo::Context,
- id: Option<&str>,
- dpi: Dpi,
- size_callback: &SizeCallback,
- is_testing: bool,
- ) -> Result<(), RenderingError> {
- check_cairo_context(cr)?;
-
- let dimensions = self.get_dimensions_sub(None, dpi, size_callback, is_testing)?;
- if dimensions.width == 0 || dimensions.height == 0 {
- // nothing to render
- return Ok(());
- }
-
- let viewport = cairo::Rectangle {
- x: 0.0,
- y: 0.0,
- width: f64::from(dimensions.width),
- height: f64::from(dimensions.height),
- };
-
- self.render_layer(cr, id, &viewport, dpi, is_testing)
- }
-
pub fn render_document(
&self,
cr: &cairo::Context,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]