[librsvg: 10/90] DrawingCtx: Centralize the place where a viewport-sized surface gets created
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg: 10/90] DrawingCtx: Centralize the place where a viewport-sized surface gets created
- Date: Tue, 26 Mar 2019 19:12:54 +0000 (UTC)
commit 5951d00c98f04dad50c71f0f07fc7e8919e8a552
Author: Federico Mena Quintero <federico gnome org>
Date: Fri Mar 8 15:59:42 2019 -0600
DrawingCtx: Centralize the place where a viewport-sized surface gets created
We'll fix the truncation of the width/height later; at least this
function gives us a single place to fix that.
rsvg_internals/src/drawing_ctx.rs | 25 +++++++++++--------------
rsvg_internals/src/mask.rs | 5 +----
2 files changed, 12 insertions(+), 18 deletions(-)
---
diff --git a/rsvg_internals/src/drawing_ctx.rs b/rsvg_internals/src/drawing_ctx.rs
index 20d3802c..e4da7540 100644
--- a/rsvg_internals/src/drawing_ctx.rs
+++ b/rsvg_internals/src/drawing_ctx.rs
@@ -204,12 +204,16 @@ impl DrawingCtx {
self.cr = cr.clone();
}
- pub fn get_width(&self) -> f64 {
- self.rect.width
- }
+ pub fn create_surface_for_toplevel_viewport(
+ &self,
+ ) -> Result<cairo::ImageSurface, RenderingError> {
+ // This truncation may mean that we clip off the rightmost/bottommost row of pixels.
+ // See https://gitlab.gnome.org/GNOME/librsvg/issues/295
- pub fn get_height(&self) -> f64 {
- self.rect.height
+ let width = self.rect.width as i32;
+ let height = self.rect.height as i32;
+
+ Ok(cairo::ImageSurface::create(cairo::Format::ARgb32, width, height)?)
}
/// Gets the viewport that was last pushed with `push_view_box()`.
@@ -424,12 +428,7 @@ impl DrawingCtx {
&& enable_background == EnableBackground::Accumulate);
if needs_temporary_surface {
- let surface = cairo::ImageSurface::create(
- cairo::Format::ARgb32,
- self.rect.width as i32,
- self.rect.height as i32,
- )
- .map_err(|e| {
+ let surface = self.create_surface_for_toplevel_viewport().map_err(|e| {
original_cr.restore();
e
})?;
@@ -713,9 +712,7 @@ impl DrawingCtx {
}
pub fn get_snapshot(&self, surface: &cairo::ImageSurface) {
- /*
- let (x, y) = (self.rect.x, self.rect.y);
- */
+ // let (x, y) = (self.rect.x, self.rect.y);
let (x, y) = (0.0, 0.0);
// TODO: as far as I can tell this should not render elements past the last (topmost) one
diff --git a/rsvg_internals/src/mask.rs b/rsvg_internals/src/mask.rs
index 9048b786..08ac4819 100644
--- a/rsvg_internals/src/mask.rs
+++ b/rsvg_internals/src/mask.rs
@@ -56,10 +56,7 @@ impl NodeMask {
let cascaded = node.get_cascaded_values();
let values = cascaded.get();
- let width = draw_ctx.get_width() as i32;
- let height = draw_ctx.get_height() as i32;
-
- let surface = cairo::ImageSurface::create(cairo::Format::ARgb32, width, height)?;
+ let surface = draw_ctx.create_surface_for_toplevel_viewport()?;
let mask_units = CoordUnits::from(self.units.get());
let content_units = CoordUnits::from(self.content_units.get());
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]