[librsvg: 1/2] Conditionally use cairo backend surface types
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg: 1/2] Conditionally use cairo backend surface types
- Date: Mon, 8 Feb 2021 23:52:30 +0000 (UTC)
commit d02a55151f49fc91945c0d864cf3853f1282dfe9
Author: Sven Neumann <sven svenfoo org>
Date: Fri Feb 5 19:15:50 2021 +0100
Conditionally use cairo backend surface types
build.rs | 2 +-
src/bin/rsvg-convert.rs | 24 ++++++++++++++++++++++++
2 files changed, 25 insertions(+), 1 deletion(-)
---
diff --git a/build.rs b/build.rs
index 52081685..25ffaa9b 100644
--- a/build.rs
+++ b/build.rs
@@ -98,7 +98,7 @@ fn check_for_cairo_surface_backend(backend: &str) {
}
fn check_for_cairo_surface_backends() {
- let backends = ["pdf", "ps", "svg", "xml"];
+ let backends = ["pdf", "ps", "svg"];
for name in &backends {
check_for_cairo_surface_backend(name);
}
diff --git a/src/bin/rsvg-convert.rs b/src/bin/rsvg-convert.rs
index 25834b87..c01b594d 100644
--- a/src/bin/rsvg-convert.rs
+++ b/src/bin/rsvg-convert.rs
@@ -154,8 +154,11 @@ impl ResizeStrategy {
enum Surface {
Png(cairo::ImageSurface, OutputStream),
+ #[cfg(have_cairo_pdf)]
Pdf(cairo::PdfSurface, Size),
+ #[cfg(have_cairo_ps)]
Ps(cairo::PsSurface, Size),
+ #[cfg(have_cairo_svg)]
Svg(cairo::SvgSurface, Size),
}
@@ -165,8 +168,11 @@ impl Deref for Surface {
fn deref(&self) -> &cairo::Surface {
match self {
Self::Png(surface, _) => &surface,
+ #[cfg(have_cairo_pdf)]
Self::Pdf(surface, _) => &surface,
+ #[cfg(have_cairo_ps)]
Self::Ps(surface, _) => &surface,
+ #[cfg(have_cairo_svg)]
Self::Svg(surface, _) => &surface,
}
}
@@ -190,6 +196,7 @@ impl Surface {
Ok(Self::Png(surface, stream))
}
+ #[cfg(have_cairo_pdf)]
fn new_for_pdf(size: Size, stream: OutputStream) -> Result<Self, Error> {
let surface = cairo::PdfSurface::for_stream(size.w, size.h, stream.into_write())?;
if let Some(date) = metadata::creation_date()? {
@@ -198,17 +205,34 @@ impl Surface {
Ok(Self::Pdf(surface, size))
}
+ #[cfg(not(have_cairo_pdf))]
+ fn new_for_pdf(_size: Size, _stream: OutputStream) -> Result<Self, Error> {
+ Err(Error("unsupported format".to_string()))
+ }
+
+ #[cfg(have_cairo_ps)]
fn new_for_ps(size: Size, stream: OutputStream, eps: bool) -> Result<Self, Error> {
let surface = cairo::PsSurface::for_stream(size.w, size.h, stream.into_write())?;
surface.set_eps(eps);
Ok(Self::Ps(surface, size))
}
+ #[cfg(not(have_cairo_ps))]
+ fn new_for_ps(_size: Size, _stream: OutputStream, _eps: bool) -> Result<Self, Error> {
+ Err(Error("unsupported format".to_string()))
+ }
+
+ #[cfg(have_cairo_svg)]
fn new_for_svg(size: Size, stream: OutputStream) -> Result<Self, Error> {
let surface = cairo::SvgSurface::for_stream(size.w, size.h, stream.into_write())?;
Ok(Self::Svg(surface, size))
}
+ #[cfg(not(have_cairo_svg))]
+ fn new_for_svg(_size: Size, _stream: OutputStream) -> Result<Self, Error> {
+ Err(Error("unsupported format".to_string()))
+ }
+
pub fn render(
&self,
renderer: &CairoRenderer,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]