diff options
author | Sophie Herold <sophie@hemio.de> | 2023-04-01 17:17:41 +0200 |
---|---|---|
committer | Sophie Herold <sophie@hemio.de> | 2023-04-01 22:14:56 +0200 |
commit | 950425c215b9cd819b1cffb568de7ae1270040ed (patch) | |
tree | 361f217b3b7b2c023a0aea19e679b96ea909a17b | |
parent | 3330b38a3094e09edbb80fb85f3e5c3803f718a1 (diff) | |
download | librsvg-950425c215b9cd819b1cffb568de7ae1270040ed.tar.gz |
meta: Separate C API from rust crate
Part-of: <https://gitlab.gnome.org/GNOME/librsvg/-/merge_requests/822>
44 files changed, 161 insertions, 288 deletions
@@ -1117,7 +1117,6 @@ name = "librsvg" version = "2.56.0" dependencies = [ "anyhow", - "assert_cmd", "byteorder", "cairo-rs", "cast", @@ -1164,7 +1163,7 @@ dependencies = [ [[package]] name = "librsvg-c" -version = "0.1.0" +version = "2.56.0" dependencies = [ "cairo-rs", "cast", @@ -1662,6 +1661,7 @@ dependencies = [ "glib", "libc", "librsvg", + "librsvg-c", ] [[package]] @@ -2041,16 +2041,24 @@ dependencies = [ name = "rsvg-convert" version = "2.56.0" dependencies = [ + "assert_cmd", "cairo-rs", "cast", "chrono", "clap 4.1.9", "clap_complete", "cssparser", + "float-cmp", "gio", "libc", "librsvg", + "librsvg-c", + "lopdf", + "png", + "predicates 2.1.5", "system-deps", + "tempfile", + "url", ] [[package]] @@ -21,5 +21,6 @@ members = [ "rsvg-bench", ] default-members = [ + "rsvg", "rsvg-convert", ] diff --git a/gdk-pixbuf-loader/Cargo.toml b/gdk-pixbuf-loader/Cargo.toml index d9132e7a..f1458fc0 100644 --- a/gdk-pixbuf-loader/Cargo.toml +++ b/gdk-pixbuf-loader/Cargo.toml @@ -11,10 +11,11 @@ rust-version.workspace = true crate-type = ["cdylib"] [dependencies] -librsvg = { path = "../rsvg" } +cairo-rs = "0.17" +cstr = "0.2" gdk-pixbuf = "0.17" -libc = "0.2" -glib = "0.17" gio = "0.17" -cairo-rs = "0.17" -cstr = "0.2"
\ No newline at end of file +glib = "0.17" +libc = "0.2" +librsvg = { path = "../rsvg" } +librsvg-c = { path = "../librsvg-c" } diff --git a/gdk-pixbuf-loader/src/lib.rs b/gdk-pixbuf-loader/src/lib.rs index 007367c1..06e541ce 100644 --- a/gdk-pixbuf-loader/src/lib.rs +++ b/gdk-pixbuf-loader/src/lib.rs @@ -16,7 +16,7 @@ use gio::prelude::MemoryInputStreamExt; use gio::MemoryInputStream; use glib::gobject_ffi::GObject; -use rsvg::rsvg_convert_only::LegacySize; +use librsvg_c::c_api::sizing::LegacySize; use rsvg::Loader; use cstr::cstr; @@ -104,7 +104,7 @@ unsafe extern "C" fn stop_load(user_data: gpointer, error: *mut *mut GError) -> } } - let pb = rsvg::c_api::pixbuf_utils::render_to_pixbuf_at_size( + let pb = librsvg_c::c_api::pixbuf_utils::render_to_pixbuf_at_size( &renderer, w as f64, h as f64, w as f64, h as f64, ) .map_err(|e| e.to_string())?; diff --git a/librsvg-c/Cargo.toml b/librsvg-c/Cargo.toml index cb2209cd..9996027b 100644 --- a/librsvg-c/Cargo.toml +++ b/librsvg-c/Cargo.toml @@ -1,19 +1,26 @@ [package] name = "librsvg-c" -version = "0.1.0" -edition = "2021" +version.workspace = true +authors.workspace = true +description.workspace = true +license.workspace = true +homepage.workspace = true +repository.workspace = true +edition.workspace = true +rust-version.workspace = true [dependencies] -librsvg = { version = "*", path = "../rsvg" } -gio = "0.17" -glib = "0.17" cairo-rs = { version = "0.17", features=["v1_16", "png", "pdf", "ps", "svg"] } cast = "0.3.0" +float-cmp = "0.9.0" gdk-pixbuf = "0.17" +gio = "0.17" +glib = "0.17" libc = "0.2" -float-cmp = "0.9.0" -url = "2" +librsvg = { path = "../rsvg", features = ["c-api"] } once_cell = "1.2.0" +url = "2" [build-dependencies] -regex = "1.7.1"
\ No newline at end of file +regex = "1.7.1" +librsvg = { path = "../rsvg", features = ["c-api", "test-utils"] }
\ No newline at end of file diff --git a/librsvg-c/build.rs b/librsvg-c/build.rs index 7a46d6c6..0a0bdd9b 100644 --- a/librsvg-c/build.rs +++ b/librsvg-c/build.rs @@ -2,68 +2,13 @@ use regex::Regex; use std::env; use std::fs::File; use std::io::prelude::*; -use std::io::{BufReader, BufWriter, Write}; +use std::io::{BufReader, Write}; use std::path::Path; -use std::process; fn main() { - if let Err(e) = system_deps::Config::new().probe() { - eprintln!("{e}"); - process::exit(1); - } - - generate_srgb_tables(); write_version(); } -/// Converts an sRGB color value to a linear sRGB color value (undoes the gamma correction). -/// -/// The input and the output are supposed to be in the [0, 1] range. -#[inline] -fn linearize(c: f64) -> f64 { - if c <= (12.92 * 0.0031308) { - c / 12.92 - } else { - ((c + 0.055) / 1.055).powf(2.4) - } -} - -/// Converts a linear sRGB color value to a normal sRGB color value (applies the gamma correction). -/// -/// The input and the output are supposed to be in the [0, 1] range. -#[inline] -fn unlinearize(c: f64) -> f64 { - if c <= 0.0031308 { - 12.92 * c - } else { - 1.055 * c.powf(1f64 / 2.4) - 0.055 - } -} - -fn print_table<W, F>(w: &mut W, name: &str, f: F, len: u32) -where - W: Write, - F: Fn(f64) -> f64, -{ - writeln!(w, "const {name}: [u8; {len}] = [").unwrap(); - - for i in 0..len { - let x = f(i as f64 / 255.0); - let v = (x * 255.0).round() as u8; - writeln!(w, " {v},").unwrap(); - } - - writeln!(w, "];").unwrap(); -} - -fn generate_srgb_tables() { - let path = Path::new(&env::var("OUT_DIR").unwrap()).join("srgb-codegen.rs"); - let mut file = BufWriter::new(File::create(path).unwrap()); - - print_table(&mut file, "LINEARIZE", linearize, 256); - print_table(&mut file, "UNLINEARIZE", unlinearize, 256); -} - fn write_version() { let mut major = None; let mut minor = None; diff --git a/librsvg-c/src/c_api/handle.rs b/librsvg-c/src/c_api/handle.rs index 1698cc17..3ab6acc5 100644 --- a/librsvg-c/src/c_api/handle.rs +++ b/librsvg-c/src/c_api/handle.rs @@ -38,14 +38,10 @@ use glib::types::instance_of; use glib::{ffi::gpointer, gobject_ffi}; use glib::{Bytes, Cast, StaticType, ToValue}; -use crate::api::{self, CairoRenderer, IntrinsicDimensions, Loader, LoadingError, SvgHandle}; - -use crate::{ - length::RsvgLength, - rsvg_log, - session::Session, - surface_utils::shared_surface::{SharedImageSurface, SurfaceType}, -}; +use rsvg::c_api_only::Session; +use rsvg::surface_utils::shared_surface::{SharedImageSurface, SurfaceType}; +use rsvg::{rsvg_log, Length}; +use rsvg::{CairoRenderer, IntrinsicDimensions, Loader, LoadingError, SvgHandle}; use super::dpi::Dpi; use super::messages::{rsvg_g_critical, rsvg_g_warning}; @@ -59,13 +55,13 @@ include!(concat!(env!("OUT_DIR"), "/version.rs")); // This is basically the same as api::RenderingError but with extra cases for // the peculiarities of the C API. enum RenderingError { - RenderingError(api::RenderingError), + RenderingError(rsvg::RenderingError), // The RsvgHandle is created, but hasn't been loaded yet. HandleIsNotLoaded, } -impl<T: Into<api::RenderingError>> From<T> for RenderingError { +impl<T: Into<rsvg::RenderingError>> From<T> for RenderingError { fn from(e: T) -> RenderingError { RenderingError::RenderingError(e.into()) } @@ -1645,9 +1641,9 @@ pub unsafe extern "C" fn rsvg_handle_set_stylesheet( pub unsafe extern "C" fn rsvg_handle_get_intrinsic_dimensions( handle: *const RsvgHandle, out_has_width: *mut glib::ffi::gboolean, - out_width: *mut RsvgLength, + out_width: *mut Length, out_has_height: *mut glib::ffi::gboolean, - out_height: *mut RsvgLength, + out_height: *mut Length, out_has_viewbox: *mut glib::ffi::gboolean, out_viewbox: *mut RsvgRectangle, ) { diff --git a/librsvg-c/src/c_api/pixbuf_utils.rs b/librsvg-c/src/c_api/pixbuf_utils.rs index 710f2c4b..da1ad804 100644 --- a/librsvg-c/src/c_api/pixbuf_utils.rs +++ b/librsvg-c/src/c_api/pixbuf_utils.rs @@ -12,10 +12,10 @@ use super::dpi::Dpi; use super::handle::{checked_i32, set_gerror}; use super::sizing::LegacySize; -use crate::api::{CairoRenderer, Loader}; -use crate::error::RenderingError; -use crate::session::Session; -use crate::surface_utils::shared_surface::{SharedImageSurface, SurfaceType}; +use rsvg::c_api_only::Session; +use rsvg::surface_utils::shared_surface::{SharedImageSurface, SurfaceType}; +use rsvg::RenderingError; +use rsvg::{CairoRenderer, Loader}; pub fn empty_pixbuf() -> Result<Pixbuf, RenderingError> { // GdkPixbuf does not allow zero-sized pixbufs, but Cairo allows zero-sized diff --git a/librsvg-c/src/c_api/sizing.rs b/librsvg-c/src/c_api/sizing.rs index e0c85bd1..4d16e483 100644 --- a/librsvg-c/src/c_api/sizing.rs +++ b/librsvg-c/src/c_api/sizing.rs @@ -12,10 +12,8 @@ use float_cmp::approx_eq; -use crate::api::{CairoRenderer, IntrinsicDimensions, RenderingError}; -use crate::dpi::Dpi; -use crate::handle::Handle; -use crate::length::*; +use rsvg::c_api_only::Handle; +use rsvg::{CairoRenderer, Dpi, IntrinsicDimensions, RenderingError}; use super::handle::CairoRectangleExt; @@ -51,9 +49,9 @@ impl<'a> LegacySize for CairoRenderer<'a> { let size_from_intrinsic_dimensions = self.intrinsic_size_in_pixels().or_else(|| { size_in_pixels_from_percentage_width_and_height( - &self.handle.handle, + self.handle(), &self.intrinsic_dimensions(), - self.dpi, + self.dpi(), ) }); @@ -94,7 +92,7 @@ fn size_in_pixels_from_percentage_width_and_height( vbox, } = *dim; - use LengthUnit::*; + use rsvg::LengthUnit::*; // Unwrap or return None if we don't know the aspect ratio -> Let the caller handle it. let vbox = vbox?; diff --git a/librsvg-c/src/lib.rs b/librsvg-c/src/lib.rs index ec407516..3b543815 100644 --- a/librsvg-c/src/lib.rs +++ b/librsvg-c/src/lib.rs @@ -1 +1 @@ -pub use c_api; +pub mod c_api; diff --git a/rsvg/tests/Makefile.am b/librsvg-c/tests-c/Makefile.am index b645ea6d..b645ea6d 100644 --- a/rsvg/tests/Makefile.am +++ b/librsvg-c/tests-c/Makefile.am diff --git a/rsvg/tests/api.c b/librsvg-c/tests-c/api.c index f7b01c2e..f7b01c2e 100644 --- a/rsvg/tests/api.c +++ b/librsvg-c/tests-c/api.c diff --git a/rsvg/tests/test-utils.c b/librsvg-c/tests-c/test-utils.c index 128611f4..128611f4 100644 --- a/rsvg/tests/test-utils.c +++ b/librsvg-c/tests-c/test-utils.c diff --git a/rsvg/tests/test-utils.h b/librsvg-c/tests-c/test-utils.h index d71af69d..d71af69d 100644 --- a/rsvg/tests/test-utils.h +++ b/librsvg-c/tests-c/test-utils.h diff --git a/rsvg/tests/src/legacy_sizing.rs b/librsvg-c/tests/legacy_sizing.rs index 78f2a13f..3ccc1f01 100644 --- a/rsvg/tests/src/legacy_sizing.rs +++ b/librsvg-c/tests/legacy_sizing.rs @@ -1,8 +1,8 @@ use cairo; -use rsvg::{rsvg_convert_only::LegacySize, CairoRenderer}; - -use crate::utils::load_svg; +use librsvg_c::c_api::sizing::LegacySize; +use rsvg::test_utils::load_svg; +use rsvg::CairoRenderer; #[test] fn just_viewbox_uses_viewbox_size() { diff --git a/rsvg-bench/Cargo.toml b/rsvg-bench/Cargo.toml index f951faf9..4eecd476 100644 --- a/rsvg-bench/Cargo.toml +++ b/rsvg-bench/Cargo.toml @@ -16,5 +16,5 @@ documentation = "https://gnome.pages.gitlab.gnome.org/librsvg/doc/rsvg/index.htm anyhow = "1.0" cairo-rs = { version = "0.17", features=["v1_16", "png", "pdf", "ps", "svg"] } clap = { version = "4.0.17", features = ["cargo", "derive"] } # rsvg-convert -librsvg = { version = "*", path = "../rsvg" } +librsvg = { path = "../rsvg" } thiserror = "1.0"
\ No newline at end of file diff --git a/rsvg-convert/Cargo.toml b/rsvg-convert/Cargo.toml index feb8aa9c..c3e103fb 100644 --- a/rsvg-convert/Cargo.toml +++ b/rsvg-convert/Cargo.toml @@ -25,7 +25,18 @@ clap_complete = "4.0.5" # rsvg-convert cssparser = "0.29.0" gio = "0.17" libc = "0.2" -librsvg = { version = "*", path = "../rsvg" } +librsvg = { path = "../rsvg" } +librsvg-c = { path = "../librsvg-c" } + +[dev-dependencies] +assert_cmd = "2.0.2" +predicates = "2.0.0" +tempfile = "3" +url = "2" +lopdf = "0.29.0" +png = "0.17.2" +float-cmp = "0.9.0" +librsvg = { path = "../rsvg", features = ["test-utils"] } [build-dependencies] system-deps = "6.0.0"
\ No newline at end of file diff --git a/rsvg-convert/src/main.rs b/rsvg-convert/src/main.rs index 9c472331..dc1cb396 100644 --- a/rsvg-convert/src/main.rs +++ b/rsvg-convert/src/main.rs @@ -21,11 +21,14 @@ use self::windows_imports::*; use cssparser::{_cssparser_internal_to_lowercase, match_ignore_ascii_case}; +use librsvg_c::c_api::{handle::PathOrUrl, sizing::LegacySize}; use rsvg::rsvg_convert_only::{ - AspectRatio, CssLength, Dpi, Horizontal, LegacySize, Length, Normalize, NormalizeParams, Parse, - PathOrUrl, Rect, Signed, ULength, Unsigned, Validate, Vertical, ViewBox, + AspectRatio, CssLength, Horizontal, Length, Normalize, NormalizeParams, Parse, Signed, ULength, + Unsigned, Validate, Vertical, ViewBox, +}; +use rsvg::{ + AcceptLanguage, CairoRenderer, Color, Dpi, Language, LengthUnit, Loader, Rect, RenderingError, }; -use rsvg::{AcceptLanguage, CairoRenderer, Color, Language, LengthUnit, Loader, RenderingError}; use std::ffi::OsString; use std::io; diff --git a/rsvg-convert/tests/fixtures b/rsvg-convert/tests/fixtures new file mode 120000 index 00000000..ab9214e0 --- /dev/null +++ b/rsvg-convert/tests/fixtures @@ -0,0 +1 @@ +../../rsvg/tests/fixtures/
\ No newline at end of file diff --git a/rsvg/tests/src/predicates/file.rs b/rsvg-convert/tests/internal_predicates/file.rs index 997b3690..a7af5acf 100644 --- a/rsvg/tests/src/predicates/file.rs +++ b/rsvg-convert/tests/internal_predicates/file.rs @@ -1,9 +1,9 @@ use predicates::prelude::*; use predicates::str::StartsWithPredicate; -use crate::predicates::pdf::PdfPredicate; -use crate::predicates::png::PngPredicate; -use crate::predicates::svg::SvgPredicate; +use super::pdf::PdfPredicate; +use super::png::PngPredicate; +use super::svg::SvgPredicate; /// Predicates to check that some output ([u8]) is of a certain file type diff --git a/rsvg-convert/tests/internal_predicates/mod.rs b/rsvg-convert/tests/internal_predicates/mod.rs new file mode 100644 index 00000000..7e15354d --- /dev/null +++ b/rsvg-convert/tests/internal_predicates/mod.rs @@ -0,0 +1,4 @@ +pub mod file; +mod pdf; +mod png; +mod svg; diff --git a/rsvg/tests/src/predicates/pdf.rs b/rsvg-convert/tests/internal_predicates/pdf.rs index f7872d71..f7872d71 100644 --- a/rsvg/tests/src/predicates/pdf.rs +++ b/rsvg-convert/tests/internal_predicates/pdf.rs diff --git a/rsvg/tests/src/predicates/png.rs b/rsvg-convert/tests/internal_predicates/png.rs index 452e756e..f629b510 100644 --- a/rsvg/tests/src/predicates/png.rs +++ b/rsvg-convert/tests/internal_predicates/png.rs @@ -7,8 +7,8 @@ use std::path::{Path, PathBuf}; use rsvg::surface_utils::shared_surface::{SharedImageSurface, SurfaceType}; -use crate::compare_surfaces::BufferDiff; -use crate::reference_utils::{surface_from_png, Compare, Deviation, Reference}; +use rsvg::test_utils::compare_surfaces::BufferDiff; +use rsvg::test_utils::reference_utils::{surface_from_png, Compare, Deviation, Reference}; /// Checks that the variable of type [u8] can be parsed as a PNG file. #[derive(Debug)] diff --git a/rsvg/tests/src/predicates/svg.rs b/rsvg-convert/tests/internal_predicates/svg.rs index cd6071b7..70473812 100644 --- a/rsvg/tests/src/predicates/svg.rs +++ b/rsvg-convert/tests/internal_predicates/svg.rs @@ -1,6 +1,6 @@ use float_cmp::approx_eq; +use gio::glib::Bytes; use gio::MemoryInputStream; -use glib::Bytes; use predicates::prelude::*; use predicates::reflection::{Case, Child, PredicateReflection, Product}; use std::cmp; diff --git a/rsvg/tests/src/cmdline/rsvg_convert.rs b/rsvg-convert/tests/rsvg_convert.rs index 88e63ce8..dcd04838 100644 --- a/rsvg/tests/src/cmdline/rsvg_convert.rs +++ b/rsvg-convert/tests/rsvg_convert.rs @@ -1,5 +1,6 @@ -use crate::predicates::ends_with_pkg_version; -use crate::predicates::file; +//use crate::predicates::ends_with_pkg_version; +mod internal_predicates; +use internal_predicates::file; use assert_cmd::assert::IntoOutputPredicate; use assert_cmd::Command; @@ -1051,7 +1052,8 @@ fn no_keep_image_data_option() { } fn is_version_output() -> AndPredicate<StartsWithPredicate, TrimPredicate<EndsWithPredicate>, str> { - starts_with("rsvg-convert version ").and(ends_with_pkg_version().trim()) + starts_with("rsvg-convert version ") + .and(predicates::str::ends_with(env!("CARGO_PKG_VERSION")).trim()) } #[test] diff --git a/rsvg/Cargo.toml b/rsvg/Cargo.toml index 4f6fa35e..5469ad5d 100644 --- a/rsvg/Cargo.toml +++ b/rsvg/Cargo.toml @@ -11,6 +11,9 @@ edition.workspace = true rust-version.workspace = true [package.metadata.system-deps] +cairo-pdf = { version = "1.16", optional = true } +cairo-ps = { version = "1.16", optional = true } +cairo-svg = { version = "1.16", optional = true } gdk-pixbuf = { name = "gdk-pixbuf-2.0", version = "2.20" } gio = { name = "gio-2.0", version = "2.24" } glib = { name = "glib-2.0", version = "2.50" } @@ -36,6 +39,10 @@ harfbuzz = "2.0" freetype2 = "20.0.14" libxml2 = { name = "libxml-2.0", version = "2.9" } +[features] +c-api = [] +test-utils = ["yeslogic-fontconfig-sys"] + [lib] name = "rsvg" crate-type = [ "staticlib", "rlib" ] @@ -69,14 +76,13 @@ regex = "1.7.1" rgb = { version="0.8", features=["argb"] } selectors = "0.24.0" string_cache = "0.8.0" -#thiserror = "1.0" tinyvec = { version = "1.2.0", features = ["alloc"] } url = "2" xml5ever = "0.17.0" +yeslogic-fontconfig-sys = { version = "4.0.1", optional = true } [dev-dependencies] anyhow = "1.0" -assert_cmd = "2.0.2" chrono = { version = "0.4.23", default-features = false, features = ["clock", "std"] } criterion = "0.4" lopdf = "0.29.0" @@ -88,10 +94,9 @@ quick-error = "2.0.0" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" tempfile = "3" -yeslogic-fontconfig-sys = "4.0.1" +#librsvg = { path = ".", features = ["tests"] } [build-dependencies] -regex = "1.7.1" system-deps = "6.0.0" [[bench]] diff --git a/rsvg/build.rs b/rsvg/build.rs index 7a46d6c6..92037d16 100644 --- a/rsvg/build.rs +++ b/rsvg/build.rs @@ -1,8 +1,6 @@ -use regex::Regex; use std::env; use std::fs::File; -use std::io::prelude::*; -use std::io::{BufReader, BufWriter, Write}; +use std::io::{BufWriter, Write}; use std::path::Path; use std::process; @@ -13,7 +11,6 @@ fn main() { } generate_srgb_tables(); - write_version(); } /// Converts an sRGB color value to a linear sRGB color value (undoes the gamma correction). @@ -63,64 +60,3 @@ fn generate_srgb_tables() { print_table(&mut file, "LINEARIZE", linearize, 256); print_table(&mut file, "UNLINEARIZE", unlinearize, 256); } - -fn write_version() { - let mut major = None; - let mut minor = None; - let mut micro = None; - - { - let file = File::open("../configure.ac") - .expect("builds must take place within the librsvg source tree"); - - let major_regex = Regex::new(r#"^m4_define\(\[rsvg_major_version\],\[(\d+)\]\)"#).unwrap(); - let minor_regex = Regex::new(r#"^m4_define\(\[rsvg_minor_version\],\[(\d+)\]\)"#).unwrap(); - let micro_regex = Regex::new(r#"^m4_define\(\[rsvg_micro_version\],\[(\d+)\]\)"#).unwrap(); - - for line in BufReader::new(file).lines() { - match line { - Ok(line) => { - if let Some(nums) = major_regex.captures(&line) { - major = Some(String::from( - nums.get(1).expect("major_regex matched once").as_str(), - )); - } else if let Some(nums) = minor_regex.captures(&line) { - minor = Some(String::from( - nums.get(1).expect("minor_regex matched once").as_str(), - )); - } else if let Some(nums) = micro_regex.captures(&line) { - micro = Some(String::from( - nums.get(1).expect("micro_regex matched once").as_str(), - )); - } - } - - Err(e) => panic!("could not parse version from configure.ac: {e}"), - } - } - } - - let output = Path::new(&env::var("OUT_DIR").unwrap()).join("version.rs"); - let mut file = File::create(output).expect("open version.rs for writing"); - file.write_all( - format!( - r#" -use std::os::raw::c_uint; - -#[no_mangle] -pub static rsvg_major_version: c_uint = {}; - -#[no_mangle] -pub static rsvg_minor_version: c_uint = {}; - -#[no_mangle] -pub static rsvg_micro_version: c_uint = {}; -"#, - major.expect("major version is set"), - minor.expect("minor version is set"), - micro.expect("micro version is set") - ) - .as_bytes(), - ) - .expect("write version.rs"); -} diff --git a/example.svg b/rsvg/example.svg index 1a6c762d..1a6c762d 100644 --- a/example.svg +++ b/rsvg/example.svg diff --git a/rsvg/src/api.rs b/rsvg/src/api.rs index beaee9a9..34945afa 100644 --- a/rsvg/src/api.rs +++ b/rsvg/src/api.rs @@ -6,6 +6,7 @@ pub use crate::{ accept_language::{AcceptLanguage, Language}, + dpi::Dpi, error::{ImplementationLimit, LoadingError, RenderingError}, length::{LengthUnit, RsvgLength as Length}, }; @@ -22,7 +23,6 @@ use locale_config::{LanguageRange, Locale}; use crate::{ accept_language::{LanguageTags, UserLanguage}, - dpi::Dpi, handle::{Handle, LoadOptions}, session::Session, url_resolver::UrlResolver, @@ -64,14 +64,19 @@ impl Loader { /// ``` #[allow(clippy::new_without_default)] pub fn new() -> Self { - Self::new_with_session(Session::default()) + Self { + unlimited_size: false, + keep_image_data: false, + session: Session::default(), + } } /// Creates a `Loader` from a pre-created [`Session`]. /// /// This is useful when a `Loader` must be created by the C API, which should already /// have created a session for logging. - pub(crate) fn new_with_session(session: Session) -> Self { + #[cfg(feature = "c-api")] + pub fn new_with_session(session: Session) -> Self { Self { unlimited_size: false, keep_image_data: false, @@ -615,6 +620,17 @@ impl<'a> CairoRenderer<'a> { ) } + /// Returns DPI TODO + pub fn dpi(&self) -> Dpi { + self.dpi + } + + /// Questionable Special function TODO + #[cfg(feature = "c-api")] + pub fn handle(&self) -> &Handle { + &self.handle.handle + } + /// Turns on test mode. Do not use this function; it is for librsvg's test suite only. pub fn test_mode(self, is_testing: bool) -> Self { CairoRenderer { is_testing, ..self } diff --git a/rsvg/src/lib.rs b/rsvg/src/lib.rs index bfe2e73d..6d470d59 100644 --- a/rsvg/src/lib.rs +++ b/rsvg/src/lib.rs @@ -218,6 +218,10 @@ mod url_resolver; mod viewbox; mod xml; +#[cfg(feature = "test-utils")] +#[doc(hidden)] +pub mod test_utils; + #[doc(hidden)] pub mod bench_only { pub use crate::path_builder::PathBuilder; @@ -225,6 +229,13 @@ pub mod bench_only { } #[doc(hidden)] +#[cfg(feature = "c-api")] +pub mod c_api_only { + pub use crate::handle::Handle; + pub use crate::session::Session; +} + +#[doc(hidden)] pub mod doctest_only { pub use crate::aspect_ratio::AspectRatio; pub use crate::error::AttributeResultExt; @@ -239,7 +250,6 @@ pub mod doctest_only { #[doc(hidden)] pub mod rsvg_convert_only { pub use crate::aspect_ratio::AspectRatio; - pub use crate::dpi::Dpi; pub use crate::error::ParseError; pub use crate::length::{ CssLength, Horizontal, Length, Normalize, NormalizeParams, Signed, ULength, Unsigned, diff --git a/rsvg/tests/src/compare_surfaces.rs b/rsvg/src/test_utils/compare_surfaces.rs index 0a170441..06100db9 100644 --- a/rsvg/tests/src/compare_surfaces.rs +++ b/rsvg/src/test_utils/compare_surfaces.rs @@ -1,6 +1,6 @@ use std::fmt; -use rsvg::surface_utils::{ +use crate::surface_utils::{ iterators::Pixels, shared_surface::{SharedImageSurface, SurfaceType}, ImageSurfaceDataExt, Pixel, PixelOps, diff --git a/rsvg/tests/src/utils.rs b/rsvg/src/test_utils/mod.rs index 158fc77e..c5aabb91 100644 --- a/rsvg/tests/src/utils.rs +++ b/rsvg/src/test_utils/mod.rs @@ -1,5 +1,5 @@ -#![cfg(test)] -#![allow(unused)] +pub mod compare_surfaces; +pub mod reference_utils; use cairo; use gio; @@ -10,7 +10,7 @@ use std::env; use std::ffi::CString; use std::sync::Once; -use rsvg::{ +use crate::{ surface_utils::shared_surface::{SharedImageSurface, SurfaceType}, CairoRenderer, Loader, LoadingError, RenderingError, SvgHandle, }; diff --git a/rsvg/tests/src/reference_utils.rs b/rsvg/src/test_utils/reference_utils.rs index 8232d4c9..9f4a51d5 100644 --- a/rsvg/tests/src/reference_utils.rs +++ b/rsvg/src/test_utils/reference_utils.rs @@ -12,9 +12,9 @@ use std::io::{BufReader, Read}; use std::path::{Path, PathBuf}; use std::sync::Once; -use rsvg::surface_utils::shared_surface::{SharedImageSurface, SurfaceType}; +use crate::surface_utils::shared_surface::{SharedImageSurface, SurfaceType}; -use crate::compare_surfaces::{compare_surfaces, BufferDiff, Diff}; +use super::compare_surfaces::{compare_surfaces, BufferDiff, Diff}; pub struct Reference(SharedImageSurface); @@ -23,7 +23,7 @@ impl Reference { where P: AsRef<Path>, { - let file = File::open(path).map_err(|e| cairo::IoError::Io(e))?; + let file = File::open(path).map_err(cairo::IoError::Io)?; let mut reader = BufReader::new(file); let surface = surface_from_png(&mut reader)?; Self::from_surface(surface) @@ -100,7 +100,7 @@ impl Evaluate for Result<BufferDiff, cairo::IoError> { } fn write_to_file(input: &SharedImageSurface, output_base_name: &str, suffix: &str) { - let path = output_dir().join(&format!("{}-{}.png", output_base_name, suffix)); + let path = output_dir().join(format!("{}-{}.png", output_base_name, suffix)); println!("{}: {}", suffix, path.to_string_lossy()); let mut output_file = File::create(path).unwrap(); input @@ -191,7 +191,7 @@ macro_rules! test_compare_render_output { ($test_name:ident, $width:expr, $height:expr, $test:expr, $reference:expr $(,)?) => { #[test] fn $test_name() { - crate::utils::setup_font_map(); + $crate::test_utils::setup_font_map(); let sx: i32 = $width; let sy: i32 = $height; @@ -235,10 +235,10 @@ macro_rules! test_svg_reference { ($test_name:ident, $test_filename:expr, $reference_filename:expr) => { #[test] fn $test_name() { - use crate::reference_utils::{Compare, Evaluate, Reference}; - use crate::utils::{render_document, setup_font_map, SurfaceSize}; use cairo; use rsvg::{CairoRenderer, Loader}; + use $crate::test_utils::reference_utils::{Compare, Evaluate, Reference}; + use $crate::test_utils::{render_document, setup_font_map, SurfaceSize}; setup_font_map(); diff --git a/rsvg/tests/src/api.rs b/rsvg/tests/src/api.rs index 7846b2cb..88735ec0 100644 --- a/rsvg/tests/src/api.rs +++ b/rsvg/tests/src/api.rs @@ -2,8 +2,8 @@ use cairo; use rsvg::surface_utils::shared_surface::{SharedImageSurface, SurfaceType}; use rsvg::{CairoRenderer, RenderingError}; -use crate::reference_utils::{Compare, Evaluate, Reference}; -use crate::utils::load_svg; +use rsvg::test_utils::load_svg; +use rsvg::test_utils::reference_utils::{Compare, Evaluate, Reference}; #[test] fn has_element_with_id_works() { diff --git a/rsvg/tests/src/bugs.rs b/rsvg/tests/src/bugs.rs index 6fb75f7c..447e5159 100644 --- a/rsvg/tests/src/bugs.rs +++ b/rsvg/tests/src/bugs.rs @@ -2,8 +2,8 @@ use cairo; use matches::matches; use rsvg::{CairoRenderer, Loader, LoadingError, SvgHandle}; -use crate::reference_utils::{Compare, Evaluate, Reference}; -use crate::utils::{load_svg, render_document, setup_font_map, setup_language, SurfaceSize}; +use rsvg::test_utils::reference_utils::{Compare, Evaluate, Reference}; +use rsvg::test_utils::{load_svg, render_document, setup_font_map, setup_language, SurfaceSize}; // https://gitlab.gnome.org/GNOME/librsvg/issues/335 #[test] diff --git a/rsvg/tests/src/cmdline/mod.rs b/rsvg/tests/src/cmdline/mod.rs deleted file mode 100644 index c694bf2e..00000000 --- a/rsvg/tests/src/cmdline/mod.rs +++ /dev/null @@ -1 +0,0 @@ -mod rsvg_convert; diff --git a/rsvg/tests/src/filters.rs b/rsvg/tests/src/filters.rs index 9517e651..28fc867c 100644 --- a/rsvg/tests/src/filters.rs +++ b/rsvg/tests/src/filters.rs @@ -1,8 +1,8 @@ use cairo; -use crate::reference_utils::{Compare, Evaluate, Reference}; -use crate::utils::{load_svg, render_document, SurfaceSize}; -use crate::{test_compare_render_output, test_svg_reference}; +use rsvg::test_utils::reference_utils::{Compare, Evaluate, Reference}; +use rsvg::test_utils::{load_svg, render_document, SurfaceSize}; +use rsvg::{test_compare_render_output, test_svg_reference}; #[test] fn invalid_filter_reference_cancels_filter_chain() { diff --git a/rsvg/tests/src/intrinsic_dimensions.rs b/rsvg/tests/src/intrinsic_dimensions.rs index 4ca31f93..fdbec145 100644 --- a/rsvg/tests/src/intrinsic_dimensions.rs +++ b/rsvg/tests/src/intrinsic_dimensions.rs @@ -2,8 +2,8 @@ use cairo; use rsvg::{CairoRenderer, IntrinsicDimensions, Length, LengthUnit, RenderingError}; -use crate::reference_utils::{Compare, Evaluate, Reference}; -use crate::utils::{load_svg, render_document, SurfaceSize}; +use rsvg::test_utils::reference_utils::{Compare, Evaluate, Reference}; +use rsvg::test_utils::{load_svg, render_document, SurfaceSize}; #[test] fn no_intrinsic_dimensions() { diff --git a/rsvg/tests/src/main.rs b/rsvg/tests/src/main.rs deleted file mode 100644 index 467cbb47..00000000 --- a/rsvg/tests/src/main.rs +++ /dev/null @@ -1,60 +0,0 @@ -#[cfg(test)] -mod api; - -#[cfg(test)] -mod bugs; - -#[cfg(test)] -mod cmdline; - -#[cfg(test)] -mod compare_surfaces; - -#[cfg(test)] -mod errors; - -#[cfg(test)] -mod filters; - -#[cfg(test)] -mod geometries; - -#[cfg(test)] -mod intrinsic_dimensions; - -#[cfg(test)] -mod legacy_sizing; - -#[cfg(test)] -mod loading_crash; - -#[cfg(test)] -mod predicates; - -#[cfg(test)] -mod primitive_geometries; - -#[cfg(test)] -mod primitives; - -#[cfg(test)] -mod reference; - -#[cfg(test)] -mod reference_utils; - -#[cfg(test)] -mod render_crash; - -#[cfg(test)] -mod shapes; - -#[cfg(test)] -mod text; - -#[cfg(test)] -mod utils; - -fn main() { - println!("Use 'cargo test' to run the tests."); -} diff --git a/rsvg/tests/src/predicates/mod.rs b/rsvg/tests/src/predicates/mod.rs deleted file mode 100644 index e14061f0..00000000 --- a/rsvg/tests/src/predicates/mod.rs +++ /dev/null @@ -1,10 +0,0 @@ -pub mod file; -mod pdf; -mod png; -mod svg; - -use predicates::str; - -pub fn ends_with_pkg_version() -> str::EndsWithPredicate { - str::ends_with(env!("CARGO_PKG_VERSION")) -} diff --git a/rsvg/tests/src/primitives.rs b/rsvg/tests/src/primitives.rs index b12906f4..b24c1a6a 100644 --- a/rsvg/tests/src/primitives.rs +++ b/rsvg/tests/src/primitives.rs @@ -1,8 +1,8 @@ use cairo; -use crate::reference_utils::{Compare, Evaluate, Reference}; -use crate::test_compare_render_output; -use crate::utils::{load_svg, render_document, SurfaceSize}; +use rsvg::test_compare_render_output; +use rsvg::test_utils::reference_utils::{Compare, Evaluate, Reference}; +use rsvg::test_utils::{load_svg, render_document, SurfaceSize}; #[test] fn simple_opacity_with_transform() { diff --git a/rsvg/tests/src/reference.rs b/rsvg/tests/src/reference.rs index 37f1a562..37eed1b1 100644 --- a/rsvg/tests/src/reference.rs +++ b/rsvg/tests/src/reference.rs @@ -12,9 +12,9 @@ use rsvg::{ CairoRenderer, IntrinsicDimensions, Length, Loader, }; -use crate::reference_utils::{Compare, Evaluate, Reference}; -use crate::utils::{load_svg, render_document, setup_font_map, setup_language, SurfaceSize}; -use crate::{test_compare_render_output, test_svg_reference}; +use rsvg::test_utils::reference_utils::{Compare, Evaluate, Reference}; +use rsvg::test_utils::{load_svg, render_document, setup_font_map, setup_language, SurfaceSize}; +use rsvg::{test_compare_render_output, test_svg_reference}; use std::path::{Path, PathBuf}; diff --git a/rsvg/tests/src/shapes.rs b/rsvg/tests/src/shapes.rs index 8545b79d..23a75d49 100644 --- a/rsvg/tests/src/shapes.rs +++ b/rsvg/tests/src/shapes.rs @@ -1,4 +1,4 @@ -use crate::test_svg_reference; +use rsvg::test_svg_reference; test_svg_reference!( ellipse_auto_rx_ry, diff --git a/rsvg/tests/src/text.rs b/rsvg/tests/src/text.rs index 257d7f0c..05c3de3e 100644 --- a/rsvg/tests/src/text.rs +++ b/rsvg/tests/src/text.rs @@ -2,9 +2,9 @@ use cairo; use float_cmp::approx_eq; use rsvg::{CairoRenderer, Loader}; -use crate::reference_utils::{Compare, Evaluate, Reference}; -use crate::utils::{load_svg, render_document, setup_font_map, SurfaceSize}; -use crate::{test_compare_render_output, test_svg_reference}; +use rsvg::test_utils::reference_utils::{Compare, Evaluate, Reference}; +use rsvg::test_utils::{load_svg, render_document, setup_font_map, SurfaceSize}; +use rsvg::{test_compare_render_output, test_svg_reference}; // From https://www.w3.org/Style/CSS/Test/Fonts/Ahem/ // |