[librsvg/librsvg-2.48] Move the implementation of render_cairo_sub to c_api



commit a95a20eb6dee9763d067c786881ee7723b393d79
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 01944722..2e24776f 100644
--- a/librsvg/c_api.rs
+++ b/librsvg/c_api.rs
@@ -716,11 +716,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> {
@@ -744,9 +753,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 123a4264..f167ed50 100644
--- a/rsvg_internals/src/handle.rs
+++ b/rsvg_internals/src/handle.rs
@@ -399,32 +399,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]