[librsvg/bilelmoussaoui/release-gtk-rs] Bump gtk-rs crates to 0.16.0




commit 75001797ad46fd00423358ec5c9b30cb91309296
Author: Bilal Elmoussaoui <belmouss redhat com>
Date:   Wed Oct 19 16:11:59 2022 +0200

    Bump gtk-rs crates to 0.16.0

 Cargo.lock                          | 358 ++++++++++++++++++++++++------------
 Cargo.toml                          |  20 +-
 examples/proportional.rs            |   7 +-
 src/bin/rsvg-convert.rs             |  19 +-
 src/c_api/handle.rs                 | 117 ++++--------
 src/c_api/pixbuf_utils.rs           |   7 +-
 src/c_api/sizing.rs                 |  10 +-
 src/drawing_ctx.rs                  |   8 +-
 src/handle.rs                       |   6 +-
 src/lib.rs                          |   7 +-
 src/rect.rs                         |  35 ++--
 src/surface_utils/shared_surface.rs |  14 +-
 src/text.rs                         |   4 +-
 tests/src/api.rs                    |  50 +----
 tests/src/bugs.rs                   |  74 ++------
 tests/src/errors.rs                 |  12 +-
 tests/src/filters.rs                |  14 +-
 tests/src/geometries.rs             |   7 +-
 tests/src/intrinsic_dimensions.rs   | 168 +++--------------
 tests/src/legacy_sizing.rs          | 112 ++---------
 tests/src/primitive_geometries.rs   |   7 +-
 tests/src/primitives.rs             |  49 +----
 tests/src/reference.rs              |   9 +-
 tests/src/reference_utils.rs        |  28 +--
 tests/src/render_crash.rs           |  11 +-
 tests/src/text.rs                   |  15 +-
 tests/src/utils.rs                  |   2 +-
 27 files changed, 423 insertions(+), 747 deletions(-)
---
diff --git a/Cargo.lock b/Cargo.lock
index c130f1334..55cab049f 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -119,9 +119,9 @@ dependencies = [
 
 [[package]]
 name = "bumpalo"
-version = "3.11.0"
+version = "3.11.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "c1ad822118d20d2c234f427000d5acc36eabe1e29a348c89b63dd60b13f28e5d"
+checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba"
 
 [[package]]
 name = "bytemuck"
@@ -137,22 +137,23 @@ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
 
 [[package]]
 name = "cairo-rs"
-version = "0.15.12"
+version = "0.16.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "c76ee391b03d35510d9fa917357c7f1855bd9a6659c95a1b392e33f49b3369bc"
+checksum = "bd6d010ad1f8103b579afac7713f061e3fc99d101f23928a432e2d42e9bdf249"
 dependencies = [
  "bitflags",
  "cairo-sys-rs",
  "glib",
  "libc",
+ "once_cell",
  "thiserror",
 ]
 
 [[package]]
 name = "cairo-sys-rs"
-version = "0.15.1"
+version = "0.16.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "3c55d429bef56ac9172d25fecb85dc8068307d17acd74b377866b7a1ef25d3c8"
+checksum = "5119ea655ec777b523f0b57279e70f8a4542f61b0e98a48f892b4ef043fd4c5d"
 dependencies = [
  "glib-sys",
  "libc",
@@ -165,11 +166,17 @@ version = "0.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5"
 
+[[package]]
+name = "cc"
+version = "1.0.73"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11"
+
 [[package]]
 name = "cfg-expr"
-version = "0.10.3"
+version = "0.11.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "0aacacf4d96c24b2ad6eb8ee6df040e4f27b0d0b39a5710c30091baa830485db"
+checksum = "b0357a6402b295ca3a86bc148e84df46c02e41f41fef186bda662557ef6328aa"
 dependencies = [
  "smallvec",
 ]
@@ -231,9 +238,9 @@ checksum = "ea0c8bce528c4be4da13ea6fead8965e95b6073585a2f05204bd8f4119f82a65"
 dependencies = [
  "heck",
  "proc-macro-error",
- "proc-macro2 1.0.43",
+ "proc-macro2 1.0.47",
  "quote 1.0.21",
- "syn 1.0.100",
+ "syn 1.0.102",
 ]
 
 [[package]]
@@ -245,6 +252,16 @@ dependencies = [
  "os_str_bytes",
 ]
 
+[[package]]
+name = "codespan-reporting"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
+dependencies = [
+ "termcolor",
+ "unicode-width",
+]
+
 [[package]]
 name = "const-cstr"
 version = "0.3.0"
@@ -337,26 +354,24 @@ dependencies = [
 
 [[package]]
 name = "crossbeam-epoch"
-version = "0.9.10"
+version = "0.9.11"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "045ebe27666471bb549370b4b0b3e51b07f56325befa4284db65fc89c02511b1"
+checksum = "f916dfc5d356b0ed9dae65f1db9fc9770aa2851d2662b988ccf4fe3516e86348"
 dependencies = [
  "autocfg",
  "cfg-if",
  "crossbeam-utils",
  "memoffset",
- "once_cell",
  "scopeguard",
 ]
 
 [[package]]
 name = "crossbeam-utils"
-version = "0.8.11"
+version = "0.8.12"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "51887d4adc7b564537b15adcfb307936f8075dfcd5f00dde9a9f1d29383682bc"
+checksum = "edbafec5fa1f196ca66527c1b12c2ec4745ca14b50f1ad8f9f6f720b55d11fac"
 dependencies = [
  "cfg-if",
- "once_cell",
 ]
 
 [[package]]
@@ -370,10 +385,10 @@ dependencies = [
  "itoa 0.4.8",
  "matches",
  "phf",
- "proc-macro2 1.0.43",
+ "proc-macro2 1.0.47",
  "quote 1.0.21",
  "smallvec",
- "syn 1.0.100",
+ "syn 1.0.102",
 ]
 
 [[package]]
@@ -383,7 +398,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "dfae75de57f2b2e85e8768c3ea840fd159c8f33e2b6522c7835b7abac81be16e"
 dependencies = [
  "quote 1.0.21",
- "syn 1.0.100",
+ "syn 1.0.102",
 ]
 
 [[package]]
@@ -408,6 +423,50 @@ dependencies = [
  "memchr",
 ]
 
+[[package]]
+name = "cxx"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "3f83d0ebf42c6eafb8d7c52f7e5f2d3003b89c7aa4fd2b79229209459a849af8"
+dependencies = [
+ "cc",
+ "cxxbridge-flags",
+ "cxxbridge-macro",
+ "link-cplusplus",
+]
+
+[[package]]
+name = "cxx-build"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "07d050484b55975889284352b0ffc2ecbda25c0c55978017c132b29ba0818a86"
+dependencies = [
+ "cc",
+ "codespan-reporting",
+ "once_cell",
+ "proc-macro2 1.0.47",
+ "quote 1.0.21",
+ "scratch",
+ "syn 1.0.102",
+]
+
+[[package]]
+name = "cxxbridge-flags"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "99d2199b00553eda8012dfec8d3b1c75fce747cf27c169a270b3b99e3448ab78"
+
+[[package]]
+name = "cxxbridge-macro"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "dcb67a6de1f602736dd7eaead0080cf3435df806c61b24b13328db128c58868f"
+dependencies = [
+ "proc-macro2 1.0.47",
+ "quote 1.0.21",
+ "syn 1.0.102",
+]
+
 [[package]]
 name = "data-url"
 version = "0.1.1"
@@ -424,10 +483,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321"
 dependencies = [
  "convert_case",
- "proc-macro2 1.0.43",
+ "proc-macro2 1.0.47",
  "quote 1.0.21",
  "rustc_version 0.4.0",
- "syn 1.0.100",
+ "syn 1.0.102",
 ]
 
 [[package]]
@@ -618,6 +677,17 @@ version = "0.3.24"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "bbf4d2a7a308fd4578637c0b17c7e1c7ba127b8f6ba00b29f717e9655d85eb68"
 
+[[package]]
+name = "futures-macro"
+version = "0.3.24"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "42cd15d1c7456c04dbdf7e88bcd69760d74f3a798d6444e16974b505b0e62f17"
+dependencies = [
+ "proc-macro2 1.0.47",
+ "quote 1.0.21",
+ "syn 1.0.102",
+]
+
 [[package]]
 name = "futures-task"
 version = "0.3.24"
@@ -631,6 +701,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "44fb6cb1be61cc1d2e43b262516aafcf63b241cffdb1d3fa115f91d9c7b09c90"
 dependencies = [
  "futures-core",
+ "futures-macro",
  "futures-task",
  "pin-project-lite",
  "pin-utils",
@@ -648,9 +719,9 @@ dependencies = [
 
 [[package]]
 name = "gdk-pixbuf"
-version = "0.15.11"
+version = "0.16.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ad38dd9cc8b099cceecdf41375bb6d481b1b5a7cd5cd603e10a69a9383f8619a"
+checksum = "c0fb526c8c3a075eda15f961820edf3e15fe18576ac4fbabbb324e4cc6c421e6"
 dependencies = [
  "bitflags",
  "gdk-pixbuf-sys",
@@ -661,9 +732,9 @@ dependencies = [
 
 [[package]]
 name = "gdk-pixbuf-sys"
-version = "0.15.10"
+version = "0.16.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "140b2f5378256527150350a8346dbdb08fadc13453a7a2d73aecd5fab3c402a7"
+checksum = "7df12d15c10c3c5a84d9fb4ba0e27659f6a2bdee4f27f8b17126da15d5ddd3f2"
 dependencies = [
  "gio-sys",
  "glib-sys",
@@ -696,26 +767,29 @@ dependencies = [
 
 [[package]]
 name = "gio"
-version = "0.15.12"
+version = "0.16.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "68fdbc90312d462781a395f7a16d96a2b379bb6ef8cd6310a2df272771c4283b"
+checksum = "3025f17aab38ebbb40d785806cf36c292c4dd6755b05584fc52d34fb87533263"
 dependencies = [
  "bitflags",
  "futures-channel",
  "futures-core",
  "futures-io",
+ "futures-util",
  "gio-sys",
  "glib",
  "libc",
  "once_cell",
+ "pin-project-lite",
+ "smallvec",
  "thiserror",
 ]
 
 [[package]]
 name = "gio-sys"
-version = "0.15.10"
+version = "0.16.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "32157a475271e2c4a023382e9cab31c4584ee30a97da41d3c4e9fdd605abcf8d"
+checksum = "6da1bba9d3f2ab13a6e9932c40f240dc99ebc9f0bdc35cfb130d1a3df36f374c"
 dependencies = [
  "glib-sys",
  "gobject-sys",
@@ -726,15 +800,17 @@ dependencies = [
 
 [[package]]
 name = "glib"
-version = "0.15.12"
+version = "0.16.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "edb0306fbad0ab5428b0ca674a23893db909a98582969c9b537be4ced78c505d"
+checksum = "9d9d01334b55e33e9189fa956dde9885e5439dfa6c448f4d724e222addbf06f2"
 dependencies = [
  "bitflags",
  "futures-channel",
  "futures-core",
  "futures-executor",
  "futures-task",
+ "futures-util",
+ "gio-sys",
  "glib-macros",
  "glib-sys",
  "gobject-sys",
@@ -746,24 +822,24 @@ dependencies = [
 
 [[package]]
 name = "glib-macros"
-version = "0.15.11"
+version = "0.16.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "25a68131a662b04931e71891fb14aaf65ee4b44d08e8abc10f49e77418c86c64"
+checksum = "e195c1311fa6b04d7b896ea39385f6bd60ef5d25bf74a7c11c8c3f94f6c1a572"
 dependencies = [
  "anyhow",
  "heck",
  "proc-macro-crate",
  "proc-macro-error",
- "proc-macro2 1.0.43",
+ "proc-macro2 1.0.47",
  "quote 1.0.21",
- "syn 1.0.100",
+ "syn 1.0.102",
 ]
 
 [[package]]
 name = "glib-sys"
-version = "0.15.10"
+version = "0.16.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ef4b192f8e65e9cf76cbf4ea71fa8e3be4a0e18ffe3d68b8da6836974cc5bad4"
+checksum = "b33357bb421a77bd849f6a0bfcaf3b4b256a2577802971bb5dd522d530f27021"
 dependencies = [
  "libc",
  "system-deps",
@@ -777,9 +853,9 @@ checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
 
 [[package]]
 name = "gobject-sys"
-version = "0.15.10"
+version = "0.16.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "0d57ce44246becd17153bd035ab4d32cfee096a657fc01f2231c9278378d1e0a"
+checksum = "63ca11a57400f3d4fda594e002844be47900c9fb8b29e2155c6e37a1f24e51b3"
 dependencies = [
  "glib-sys",
  "libc",
@@ -815,18 +891,28 @@ dependencies = [
 
 [[package]]
 name = "iana-time-zone"
-version = "0.1.48"
+version = "0.1.51"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "237a0714f28b1ee39ccec0770ccb544eb02c9ef2c82bb096230eefcffa6468b0"
+checksum = "f5a6ef98976b22b3b7f2f3a806f858cb862044cfa66805aa3ad84cb3d3b785ed"
 dependencies = [
  "android_system_properties",
  "core-foundation-sys",
+ "iana-time-zone-haiku",
  "js-sys",
- "once_cell",
  "wasm-bindgen",
  "winapi",
 ]
 
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca"
+dependencies = [
+ "cxx",
+ "cxx-build",
+]
+
 [[package]]
 name = "idna"
 version = "0.3.0"
@@ -858,9 +944,9 @@ dependencies = [
 
 [[package]]
 name = "itertools"
-version = "0.10.4"
+version = "0.10.5"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "d8bf247779e67a9082a4790b45e71ac7cfd1321331a5c856a74a9faebdab78d0"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
 dependencies = [
  "either",
 ]
@@ -873,9 +959,9 @@ checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
 
 [[package]]
 name = "itoa"
-version = "1.0.3"
+version = "1.0.4"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "6c8af84674fe1f223a982c933a0ee1086ac4d4052aa0fb8060c12c6ad838e754"
+checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc"
 
 [[package]]
 name = "js-sys"
@@ -900,9 +986,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
 
 [[package]]
 name = "libc"
-version = "0.2.133"
+version = "0.2.135"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "c0f80d65747a3e43d1596c7c5492d95d5edddaabd45a7fcdb02b95f644164966"
+checksum = "68783febc7782c6c5cb401fbda4de5a9898be1762314da0bb2c10ced61f18b0c"
 
 [[package]]
 name = "librsvg"
@@ -955,6 +1041,15 @@ dependencies = [
  "yeslogic-fontconfig-sys",
 ]
 
+[[package]]
+name = "link-cplusplus"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "9272ab7b96c9046fbc5bc56c06c117cb639fe2d509df0c421cad82d2915cf369"
+dependencies = [
+ "cc",
+]
+
 [[package]]
 name = "linked-hash-map"
 version = "0.5.6"
@@ -976,9 +1071,9 @@ dependencies = [
 
 [[package]]
 name = "lock_api"
-version = "0.4.8"
+version = "0.4.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "9f80bf5aacaf25cbfc8210d1cfb718f2bf3b11c4c54e5afe36c236853a8ec390"
+checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df"
 dependencies = [
  "autocfg",
  "scopeguard",
@@ -1107,9 +1202,9 @@ version = "0.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "01fcc0b8149b4632adc89ac3b7b31a12fb6099a0317a4eb2ebff574ef7de7218"
 dependencies = [
- "proc-macro2 1.0.43",
+ "proc-macro2 1.0.47",
  "quote 1.0.21",
- "syn 1.0.100",
+ "syn 1.0.102",
 ]
 
 [[package]]
@@ -1210,9 +1305,9 @@ dependencies = [
 
 [[package]]
 name = "once_cell"
-version = "1.14.0"
+version = "1.15.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "2f7254b99e31cad77da24b08ebf628882739a608578bb1bcdfc1f9c21260d7c0"
+checksum = "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1"
 
 [[package]]
 name = "oorandom"
@@ -1228,11 +1323,12 @@ checksum = "9ff7415e9ae3fff1225851df9e0d9e4e5479f947619774677a63572e55e80eff"
 
 [[package]]
 name = "pango"
-version = "0.15.10"
+version = "0.16.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "22e4045548659aee5313bde6c582b0d83a627b7904dd20dc2d9ef0895d414e4f"
+checksum = "7208c60f224cf6e44c551df5ee2ef38f9da0fd29d7c5a0402000b8ab0520e798"
 dependencies = [
  "bitflags",
+ "gio",
  "glib",
  "libc",
  "once_cell",
@@ -1241,9 +1337,9 @@ dependencies = [
 
 [[package]]
 name = "pango-sys"
-version = "0.15.10"
+version = "0.16.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "d2a00081cde4661982ed91d80ef437c20eacaf6aa1a5962c0279ae194662c3aa"
+checksum = "922441c228366ed98d3534b87bc7c987c50564094c3abbc3513717786419252d"
 dependencies = [
  "glib-sys",
  "gobject-sys",
@@ -1253,9 +1349,9 @@ dependencies = [
 
 [[package]]
 name = "pangocairo"
-version = "0.15.1"
+version = "0.16.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "7876a45c1f1d1a75a2601dc6d9ef2cb5a8be0e3d76f909d82450759929035366"
+checksum = "a726760a29e5e17d965d5d7573548e385ae9ce99cb7adcf70d75d4627f23fc7a"
 dependencies = [
  "bitflags",
  "cairo-rs",
@@ -1267,9 +1363,9 @@ dependencies = [
 
 [[package]]
 name = "pangocairo-sys"
-version = "0.15.1"
+version = "0.16.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "78cf746594916c81d5f739af9335c5f55a1f4606d80b3e1d821f18cf95a29494"
+checksum = "b8281198ea4596bdc6e22b0d3565471c9456d7125e423a785f866640c18b57ec"
 dependencies = [
  "cairo-sys-rs",
  "glib-sys",
@@ -1290,9 +1386,9 @@ dependencies = [
 
 [[package]]
 name = "parking_lot_core"
-version = "0.9.3"
+version = "0.9.4"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929"
+checksum = "4dc9e0dc2adc1c69d09143aff38d3d30c5c3f0df0dad82e6d25547af174ebec0"
 dependencies = [
  "cfg-if",
  "libc",
@@ -1363,9 +1459,9 @@ dependencies = [
  "phf_generator 0.8.0",
  "phf_shared 0.8.0",
  "proc-macro-hack",
- "proc-macro2 1.0.43",
+ "proc-macro2 1.0.47",
  "quote 1.0.21",
- "syn 1.0.100",
+ "syn 1.0.102",
 ]
 
 [[package]]
@@ -1510,9 +1606,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
 dependencies = [
  "proc-macro-error-attr",
- "proc-macro2 1.0.43",
+ "proc-macro2 1.0.47",
  "quote 1.0.21",
- "syn 1.0.100",
+ "syn 1.0.102",
  "version_check",
 ]
 
@@ -1522,7 +1618,7 @@ version = "1.0.4"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
 dependencies = [
- "proc-macro2 1.0.43",
+ "proc-macro2 1.0.47",
  "quote 1.0.21",
  "version_check",
 ]
@@ -1544,9 +1640,9 @@ dependencies = [
 
 [[package]]
 name = "proc-macro2"
-version = "1.0.43"
+version = "1.0.47"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab"
+checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725"
 dependencies = [
  "unicode-ident",
 ]
@@ -1598,7 +1694,7 @@ version = "1.0.21"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179"
 dependencies = [
- "proc-macro2 1.0.43",
+ "proc-macro2 1.0.47",
 ]
 
 [[package]]
@@ -1837,6 +1933,12 @@ version = "1.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
 
+[[package]]
+name = "scratch"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "9c8132065adcfd6e02db789d9285a0deb2f3fcb04002865ab67d5fb103533898"
+
 [[package]]
 name = "selectors"
 version = "0.23.0"
@@ -1878,9 +1980,9 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
 
 [[package]]
 name = "serde"
-version = "1.0.144"
+version = "1.0.145"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "0f747710de3dcd43b88c9168773254e809d8ddbdf9653b84e2554ab219f17860"
+checksum = "728eb6351430bccb993660dfffc5a72f91ccc1295abaa8ce19b27ebe4f75568b"
 dependencies = [
  "serde_derive",
 ]
@@ -1897,22 +1999,22 @@ dependencies = [
 
 [[package]]
 name = "serde_derive"
-version = "1.0.144"
+version = "1.0.145"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "94ed3a816fb1d101812f83e789f888322c34e291f894f19590dc310963e87a00"
+checksum = "81fa1584d3d1bcacd84c277a0dfe21f5b0f6accf4a23d04d4c6d61f1af522b4c"
 dependencies = [
- "proc-macro2 1.0.43",
+ "proc-macro2 1.0.47",
  "quote 1.0.21",
- "syn 1.0.100",
+ "syn 1.0.102",
 ]
 
 [[package]]
 name = "serde_json"
-version = "1.0.85"
+version = "1.0.86"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "e55a28e3aaef9d5ce0506d0a14dbba8054ddc7e499ef522dd8b26859ec9d4a44"
+checksum = "41feea4228a6f1cd09ec7a3593a682276702cd67b5273544757dae23c096f074"
 dependencies = [
- "itoa 1.0.3",
+ "itoa 1.0.4",
  "ryu",
  "serde",
 ]
@@ -1972,9 +2074,9 @@ dependencies = [
 
 [[package]]
 name = "smallvec"
-version = "1.9.0"
+version = "1.10.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1"
+checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
 
 [[package]]
 name = "stable_deref_trait"
@@ -2011,11 +2113,11 @@ version = "0.5.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef"
 dependencies = [
- "proc-macro2 1.0.43",
+ "proc-macro2 1.0.47",
  "quote 1.0.21",
  "serde",
  "serde_derive",
- "syn 1.0.100",
+ "syn 1.0.102",
 ]
 
 [[package]]
@@ -2025,13 +2127,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11"
 dependencies = [
  "base-x",
- "proc-macro2 1.0.43",
+ "proc-macro2 1.0.47",
  "quote 1.0.21",
  "serde",
  "serde_derive",
  "serde_json",
  "sha1",
- "syn 1.0.100",
+ "syn 1.0.102",
 ]
 
 [[package]]
@@ -2062,7 +2164,7 @@ checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988"
 dependencies = [
  "phf_generator 0.10.0",
  "phf_shared 0.10.0",
- "proc-macro2 1.0.43",
+ "proc-macro2 1.0.47",
  "quote 1.0.21",
 ]
 
@@ -2085,20 +2187,20 @@ dependencies = [
 
 [[package]]
 name = "syn"
-version = "1.0.100"
+version = "1.0.102"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "52205623b1b0f064a4e71182c3b18ae902267282930c6d5462c91b859668426e"
+checksum = "3fcd952facd492f9be3ef0d0b7032a6e442ee9b361d4acc2b1d0c4aaa5f613a1"
 dependencies = [
- "proc-macro2 1.0.43",
+ "proc-macro2 1.0.47",
  "quote 1.0.21",
  "unicode-ident",
 ]
 
 [[package]]
 name = "system-deps"
-version = "6.0.2"
+version = "6.0.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "a1a45a1c4c9015217e12347f2a411b57ce2c4fc543913b14b6fe40483328e709"
+checksum = "2955b1fe31e1fa2fbd1976b71cc69a606d7d4da16f6de3333d0c92d51419aeff"
 dependencies = [
  "cfg-expr",
  "heck",
@@ -2176,22 +2278,22 @@ checksum = "949517c0cf1bf4ee812e2e07e08ab448e3ae0d23472aee8a06c985f0c8815b16"
 
 [[package]]
 name = "thiserror"
-version = "1.0.35"
+version = "1.0.37"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "c53f98874615aea268107765aa1ed8f6116782501d18e53d08b471733bea6c85"
+checksum = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e"
 dependencies = [
  "thiserror-impl",
 ]
 
 [[package]]
 name = "thiserror-impl"
-version = "1.0.35"
+version = "1.0.37"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f8b463991b4eab2d801e724172285ec4195c650e8ec79b149e6c2a8e6dd3f783"
+checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb"
 dependencies = [
- "proc-macro2 1.0.43",
+ "proc-macro2 1.0.47",
  "quote 1.0.21",
- "syn 1.0.100",
+ "syn 1.0.102",
 ]
 
 [[package]]
@@ -2237,10 +2339,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "fd3c141a1b43194f3f56a1411225df8646c55781d5f26db825b3d98507eb482f"
 dependencies = [
  "proc-macro-hack",
- "proc-macro2 1.0.43",
+ "proc-macro2 1.0.47",
  "quote 1.0.21",
  "standback",
- "syn 1.0.100",
+ "syn 1.0.102",
 ]
 
 [[package]]
@@ -2291,9 +2393,9 @@ checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992"
 
 [[package]]
 name = "unicode-ident"
-version = "1.0.4"
+version = "1.0.5"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "dcc811dc4066ac62f84f11307873c4850cb653bfa9b1719cee2bd2204a4bc5dd"
+checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3"
 
 [[package]]
 name = "unicode-normalization"
@@ -2402,9 +2504,9 @@ dependencies = [
  "bumpalo",
  "log",
  "once_cell",
- "proc-macro2 1.0.43",
+ "proc-macro2 1.0.47",
  "quote 1.0.21",
- "syn 1.0.100",
+ "syn 1.0.102",
  "wasm-bindgen-shared",
 ]
 
@@ -2424,9 +2526,9 @@ version = "0.2.83"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c"
 dependencies = [
- "proc-macro2 1.0.43",
+ "proc-macro2 1.0.47",
  "quote 1.0.21",
- "syn 1.0.100",
+ "syn 1.0.102",
  "wasm-bindgen-backend",
  "wasm-bindgen-shared",
 ]
@@ -2449,9 +2551,9 @@ dependencies = [
 
 [[package]]
 name = "wide"
-version = "0.7.4"
+version = "0.7.5"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "b3aba2d1dac31ac7cae82847ac5b8be822aee8f99a4e100f279605016b185c5f"
+checksum = "ae41ecad2489a1655c8ef8489444b0b113c0a0c795944a3572a0931cf7d2525c"
 dependencies = [
  "bytemuck",
  "safe_arch",
@@ -2490,46 +2592,60 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
 
 [[package]]
 name = "windows-sys"
-version = "0.36.1"
+version = "0.42.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
 dependencies = [
+ "windows_aarch64_gnullvm",
  "windows_aarch64_msvc",
  "windows_i686_gnu",
  "windows_i686_msvc",
  "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
  "windows_x86_64_msvc",
 ]
 
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e"
+
 [[package]]
 name = "windows_aarch64_msvc"
-version = "0.36.1"
+version = "0.42.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47"
+checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4"
 
 [[package]]
 name = "windows_i686_gnu"
-version = "0.36.1"
+version = "0.42.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6"
+checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7"
 
 [[package]]
 name = "windows_i686_msvc"
-version = "0.36.1"
+version = "0.42.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024"
+checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246"
 
 [[package]]
 name = "windows_x86_64_gnu"
-version = "0.36.1"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1"
+checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028"
 
 [[package]]
 name = "windows_x86_64_msvc"
-version = "0.36.1"
+version = "0.42.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680"
+checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5"
 
 [[package]]
 name = "xml5ever"
diff --git a/Cargo.toml b/Cargo.toml
index 474aa8f47..81b7eb7b6 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -48,7 +48,7 @@ crate-type = [ "staticlib", "rlib" ]
 # Keep these in sync with respect to the cairo-rs version:
 #   src/lib.rs - toplevel example in the docs
 byteorder = "1.4"
-cairo-rs = { version = "0.15", features=["v1_16", "png", "pdf", "ps", "svg"] }
+cairo-rs = { version = "0.16", features=["v1_16", "png", "pdf", "ps", "svg"] }
 cast = "0.3.0"
 chrono = "0.4.0" # rsvg-convert
 clap = { version = "3.2.22", features = ["cargo", "derive"] } # rsvg-convert
@@ -56,9 +56,9 @@ cssparser = "0.28.0"
 data-url = "0.1"
 encoding = "0.2.33"
 float-cmp = "0.9.0"
-gdk-pixbuf = "0.15"
-gio = { version = "0.15", features = ["v2_50"] } # per configure.ac
-glib = { version = "0.15", features = ["v2_50"] }
+gdk-pixbuf = "0.16"
+gio = "0.16"
+glib = "0.16"
 itertools = "0.10.3"
 language-tags = "0.3.1"
 libc = "0.2"
@@ -67,8 +67,8 @@ markup5ever = "0.10"
 nalgebra = "0.30.1"
 num-traits = "0.2"
 once_cell = "1.2.0"
-pango = { version = "0.15", features = ["v1_46"] }
-pangocairo = "0.15"
+pango = { version = "0.16", features = ["v1_46"] }
+pangocairo = "0.16"
 rayon = "1"
 rctree = "0.4.0"
 regex = "1"
@@ -82,16 +82,16 @@ xml5ever = "0.16.1"
 [dev-dependencies]
 anyhow = "1.0"
 assert_cmd = "2.0.2"
-cairo-rs = { version = "0.15", features = ["png"] }
+cairo-rs = { version = "0.16", features = ["png"] }
 cast = "0.3.0"
 chrono = "0.4.0"
 criterion = "0.3"
-glib = "0.15"
+glib = "0.16"
 libc = "0.2"
 lopdf = "0.26.0"
 matches = "0.1"
-pango = "0.15"
-pangocairo = "0.15"
+pango = "0.16"
+pangocairo = "0.16"
 png = "0.17.2"
 predicates = "2.0.0"
 proptest = "1.0.0"
diff --git a/examples/proportional.rs b/examples/proportional.rs
index 9924b3ed9..aefc5df93 100644
--- a/examples/proportional.rs
+++ b/examples/proportional.rs
@@ -44,12 +44,7 @@ fn main() {
 
     let res = renderer.render_document(
         &cr,
-        &cairo::Rectangle {
-            x: 0.0,
-            y: 0.0,
-            width: f64::from(width),
-            height: f64::from(height),
-        },
+        &cairo::Rectangle::new(0.0, 0.0, f64::from(width), f64::from(height)),
     );
 
     match res {
diff --git a/src/bin/rsvg-convert.rs b/src/bin/rsvg-convert.rs
index d4aa82fb5..3a2207294 100644
--- a/src/bin/rsvg-convert.rs
+++ b/src/bin/rsvg-convert.rs
@@ -241,6 +241,12 @@ impl Deref for Surface {
     }
 }
 
+impl AsRef<cairo::Surface> for Surface {
+    fn as_ref(&self) -> &cairo::Surface {
+        self
+    }
+}
+
 impl Surface {
     pub fn new(
         format: Format,
@@ -345,18 +351,13 @@ impl Surface {
         // we do that with a separate transform.
 
         let scale = Scale {
-            x: final_size.w / geometry.width,
-            y: final_size.h / geometry.height,
+            x: final_size.w / geometry.width(),
+            y: final_size.h / geometry.height(),
         };
 
         cr.scale(scale.x, scale.y);
 
-        let viewport = cairo::Rectangle {
-            x: 0.0,
-            y: 0.0,
-            width: geometry.width,
-            height: geometry.height,
-        };
+        let viewport = cairo::Rectangle::new(0.0, 0.0, geometry.width(), geometry.height());
 
         match id {
             None => renderer.render_document(&cr, &viewport)?,
@@ -564,7 +565,7 @@ impl Converter {
 
             let geometry = natural_geometry(&renderer, input, self.export_id.as_deref())?;
 
-            let natural_size = Size::new(geometry.width, geometry.height);
+            let natural_size = Size::new(geometry.width(), geometry.height());
 
             let params = NormalizeParams::from_dpi(Dpi::new(self.dpi_x.0, self.dpi_y.0));
 
diff --git a/src/c_api/handle.rs b/src/c_api/handle.rs
index 02770301f..f1e65c4f1 100644
--- a/src/c_api/handle.rs
+++ b/src/c_api/handle.rs
@@ -266,30 +266,23 @@ pub struct RsvgRectangle {
 impl From<cairo::Rectangle> for RsvgRectangle {
     fn from(r: cairo::Rectangle) -> RsvgRectangle {
         RsvgRectangle {
-            x: r.x,
-            y: r.y,
-            width: r.width,
-            height: r.height,
+            x: r.x(),
+            y: r.y(),
+            width: r.width(),
+            height: r.height(),
         }
     }
 }
 
 impl From<RsvgRectangle> for cairo::Rectangle {
     fn from(r: RsvgRectangle) -> cairo::Rectangle {
-        cairo::Rectangle {
-            x: r.x,
-            y: r.y,
-            width: r.width,
-            height: r.height,
-        }
+        cairo::Rectangle::new(r.x, r.y, r.width, r.height)
     }
 }
 
 mod imp {
     use super::*;
-    use glib::{
-        ParamFlags, ParamSpec, ParamSpecDouble, ParamSpecFlags, ParamSpecInt, ParamSpecString,
-    };
+    use glib::{ParamSpec, ParamSpecDouble, ParamSpecFlags, ParamSpecInt, ParamSpecString};
     use once_cell::sync::Lazy;
 
     /// Contains all the interior mutability for a RsvgHandle to be called
@@ -324,51 +317,26 @@ mod imp {
         fn properties() -> &'static [ParamSpec] {
             static PROPERTIES: Lazy<Vec<ParamSpec>> = Lazy::new(|| {
                 vec![
-                    ParamSpecFlags::builder("flags", HandleFlags::static_type())
-                        .flags(ParamFlags::READWRITE | ParamFlags::CONSTRUCT_ONLY)
-                        .build(),
-                    ParamSpecDouble::builder("dpi-x")
-                        .flags(ParamFlags::READWRITE | ParamFlags::CONSTRUCT)
-                        .build(),
-                    ParamSpecDouble::builder("dpi-y")
-                        .flags(ParamFlags::READWRITE | ParamFlags::CONSTRUCT)
-                        .build(),
-                    ParamSpecString::builder("base-uri")
-                        .flags(ParamFlags::READWRITE | ParamFlags::CONSTRUCT)
-                        .build(),
-                    ParamSpecInt::builder("width")
-                        .flags(ParamFlags::READABLE)
-                        .build(),
-                    ParamSpecInt::builder("height")
-                        .flags(ParamFlags::READABLE)
-                        .build(),
-                    ParamSpecDouble::builder("em")
-                        .flags(ParamFlags::READABLE)
-                        .build(),
-                    ParamSpecDouble::builder("ex")
-                        .flags(ParamFlags::READABLE)
-                        .build(),
-                    ParamSpecString::builder("title")
-                        .flags(ParamFlags::READABLE)
-                        .build(),
-                    ParamSpecString::builder("desc")
-                        .flags(ParamFlags::READABLE)
-                        .build(),
-                    ParamSpecString::builder("metadata")
-                        .flags(ParamFlags::READABLE)
+                    ParamSpecFlags::builder::<HandleFlags>("flags")
+                        .construct_only()
                         .build(),
+                    ParamSpecDouble::builder("dpi-x").construct().build(),
+                    ParamSpecDouble::builder("dpi-y").construct().build(),
+                    ParamSpecString::builder("base-uri").construct().build(),
+                    ParamSpecInt::builder("width").read_only().build(),
+                    ParamSpecInt::builder("height").read_only().build(),
+                    ParamSpecDouble::builder("em").read_only().build(),
+                    ParamSpecDouble::builder("ex").read_only().build(),
+                    ParamSpecString::builder("title").read_only().build(),
+                    ParamSpecString::builder("desc").read_only().build(),
+                    ParamSpecString::builder("metadata").read_only().build(),
                 ]
             });
             PROPERTIES.as_ref()
         }
 
-        fn set_property(
-            &self,
-            obj: &Self::Type,
-            id: usize,
-            value: &glib::Value,
-            pspec: &ParamSpec,
-        ) {
+        fn set_property(&self, id: usize, value: &glib::Value, pspec: &ParamSpec) {
+            let obj = self.instance();
             match pspec.name() {
                 "flags" => {
                     let v: HandleFlags = value.get().expect("flags value has incorrect type");
@@ -401,7 +369,8 @@ mod imp {
             }
         }
 
-        fn property(&self, obj: &Self::Type, id: usize, pspec: &ParamSpec) -> glib::Value {
+        fn property(&self, id: usize, pspec: &ParamSpec) -> glib::Value {
+            let obj = self.instance();
             match pspec.name() {
                 "flags" => obj.get_flags().to_value(),
                 "dpi-x" => obj.get_dpi_x().to_value(),
@@ -549,12 +518,7 @@ pub trait CairoRectangleExt {
 
 impl CairoRectangleExt for cairo::Rectangle {
     fn from_size(width: f64, height: f64) -> Self {
-        Self {
-            x: 0.0,
-            y: 0.0,
-            width,
-            height,
-        }
+        Self::new(0.0, 0.0, width, height)
     }
 }
 
@@ -805,8 +769,8 @@ impl CHandle {
             .get_geometry_sub(id)
             .and_then(|(ink_r, _)| {
                 // Keep these in sync with tests/src/reference.rs
-                let width = checked_i32(ink_r.width.round())?;
-                let height = checked_i32(ink_r.height.round())?;
+                let width = checked_i32(ink_r.width().round())?;
+                let height = checked_i32(ink_r.height().round())?;
 
                 Ok((ink_r, width, height))
             })
@@ -816,8 +780,8 @@ impl CHandle {
                 RsvgDimensionData {
                     width: w,
                     height: h,
-                    em: ink_r.width,
-                    ex: ink_r.height,
+                    em: ink_r.width(),
+                    ex: ink_r.height(),
                 }
             });
 
@@ -835,8 +799,8 @@ impl CHandle {
 
         self.get_geometry_sub(id)
             .and_then(|(ink_r, _)| {
-                let width = checked_i32(ink_r.width.round())?;
-                let height = checked_i32(ink_r.height.round())?;
+                let width = checked_i32(ink_r.width().round())?;
+                let height = checked_i32(ink_r.height().round())?;
 
                 Ok((ink_r, width, height))
             })
@@ -844,8 +808,8 @@ impl CHandle {
                 inner.size_callback.call(width, height);
 
                 Ok(RsvgPositionData {
-                    x: checked_i32(ink_r.x)?,
-                    y: checked_i32(ink_r.y)?,
+                    x: checked_i32(ink_r.x())?,
+                    y: checked_i32(ink_r.y())?,
                 })
             })
     }
@@ -893,12 +857,12 @@ impl CHandle {
             return Ok(());
         }
 
-        let viewport = cairo::Rectangle {
-            x: 0.0,
-            y: 0.0,
-            width: f64::from(dimensions.width),
-            height: f64::from(dimensions.height),
-        };
+        let viewport = cairo::Rectangle::new(
+            0.0,
+            0.0,
+            f64::from(dimensions.width),
+            f64::from(dimensions.height),
+        );
 
         self.render_layer(cr, id, &viewport)
     }
@@ -1032,7 +996,7 @@ fn is_cancellable(obj: *mut gio::ffi::GCancellable) -> bool {
 
 fn get_rust_handle(handle: *const RsvgHandle) -> CHandle {
     let handle = unsafe { &*handle };
-    handle.imp().instance()
+    handle.imp().instance().to_owned()
 }
 
 #[no_mangle]
@@ -1451,15 +1415,14 @@ pub unsafe extern "C" fn rsvg_handle_get_position_sub(
 
 #[no_mangle]
 pub unsafe extern "C" fn rsvg_handle_new() -> *const RsvgHandle {
-    let obj = glib::Object::new::<CHandle>(&[]).unwrap();
+    let obj = glib::Object::new::<CHandle>(&[]);
 
     obj.to_glib_full()
 }
 
 #[no_mangle]
 pub unsafe extern "C" fn rsvg_handle_new_with_flags(flags: RsvgHandleFlags) -> *const RsvgHandle {
-    let obj = glib::Object::new::<CHandle>(&[("flags", &HandleFlags::from_bits_truncate(flags))])
-        .unwrap();
+    let obj = glib::Object::new::<CHandle>(&[("flags", &HandleFlags::from_bits_truncate(flags))]);
 
     obj.to_glib_full()
 }
diff --git a/src/c_api/pixbuf_utils.rs b/src/c_api/pixbuf_utils.rs
index a43518b64..cc0efe05a 100644
--- a/src/c_api/pixbuf_utils.rs
+++ b/src/c_api/pixbuf_utils.rs
@@ -133,12 +133,7 @@ pub fn render_to_pixbuf_at_size(
             desired_height / document_height,
         );
 
-        let viewport = cairo::Rectangle {
-            x: 0.0,
-            y: 0.0,
-            width: document_width,
-            height: document_height,
-        };
+        let viewport = cairo::Rectangle::new(0.0, 0.0, document_width, document_height);
 
         // We do it with a cr transform so we can scale non-proportionally.
         renderer.render_document(&cr, &viewport)?;
diff --git a/src/c_api/sizing.rs b/src/c_api/sizing.rs
index e0c2090a0..e0c85bd1f 100644
--- a/src/c_api/sizing.rs
+++ b/src/c_api/sizing.rs
@@ -30,7 +30,7 @@ use super::handle::CairoRectangleExt;
 pub trait LegacySize {
     fn legacy_document_size(&self) -> Result<(f64, f64), RenderingError> {
         let (ink_r, _) = self.legacy_layer_geometry(None)?;
-        Ok((ink_r.width, ink_r.height))
+        Ok((ink_r.width(), ink_r.height()))
     }
 
     fn legacy_layer_geometry(
@@ -103,14 +103,14 @@ fn size_in_pixels_from_percentage_width_and_height(
 
     // Avoid division by zero below.  If the viewBox is zero-sized, there's
     // not much we can do.
-    if approx_eq!(f64, vbox.width, 0.0) || approx_eq!(f64, vbox.height, 0.0) {
+    if approx_eq!(f64, vbox.width(), 0.0) || approx_eq!(f64, vbox.height(), 0.0) {
         return Some((0.0, 0.0));
     }
 
     match (width.unit, height.unit) {
-        (Percent, Percent) => Some((vbox.width, vbox.height)),
-        (_, Percent) => Some((w, w * vbox.height / vbox.width)),
-        (Percent, _) => Some((h * vbox.width / vbox.height, h)),
+        (Percent, Percent) => Some((vbox.width(), vbox.height())),
+        (_, Percent) => Some((w, w * vbox.height() / vbox.width())),
+        (Percent, _) => Some((h * vbox.width() / vbox.height(), h)),
         (_, _) => unreachable!("should have been called with percentage units"),
     }
 }
diff --git a/src/drawing_ctx.rs b/src/drawing_ctx.rs
index fc458798a..444a75829 100644
--- a/src/drawing_ctx.rs
+++ b/src/drawing_ctx.rs
@@ -759,7 +759,7 @@ impl DrawingCtx {
                                 .create_similar_surface_for_toplevel_viewport(&self.cr.target())?,
                         )?,
                         Filter::List(_) => {
-                            cairo::Context::new(&*self.create_surface_for_toplevel_viewport()?)?
+                            cairo::Context::new(self.create_surface_for_toplevel_viewport()?)?
                         }
                     };
 
@@ -1847,8 +1847,8 @@ impl DrawingCtx {
 
 /// Create a Pango context with a particular configuration.
 pub fn create_pango_context(font_options: &FontOptions, transform: &Transform) -> pango::Context {
-    let font_map = pangocairo::FontMap::default().unwrap();
-    let context = font_map.create_context().unwrap();
+    let font_map = pangocairo::FontMap::default();
+    let context = font_map.create_context();
 
     context.set_round_glyph_positions(false);
 
@@ -2241,7 +2241,7 @@ impl From<TextRendering> for cairo::Antialias {
 impl From<cairo::Matrix> for Transform {
     #[inline]
     fn from(m: cairo::Matrix) -> Self {
-        Self::new_unchecked(m.xx, m.yx, m.xy, m.yy, m.x0, m.y0)
+        Self::new_unchecked(m.xx(), m.yx(), m.xy(), m.yy(), m.x0(), m.y0())
     }
 }
 
diff --git a/src/handle.rs b/src/handle.rs
index 8c9caed97..36de859d0 100644
--- a/src/handle.rs
+++ b/src/handle.rs
@@ -342,10 +342,10 @@ impl Handle {
         // Render, transforming so element is at the new viewport's origin
 
         with_saved_cr(cr, || {
-            let factor = (element_viewport.width / ink_r.width())
-                .min(element_viewport.height / ink_r.height());
+            let factor = (element_viewport.width() / ink_r.width())
+                .min(element_viewport.height() / ink_r.height());
 
-            cr.translate(element_viewport.x, element_viewport.y);
+            cr.translate(element_viewport.x(), element_viewport.y());
             cr.scale(factor, factor);
             cr.translate(-ink_r.x0, -ink_r.y0);
 
diff --git a/src/lib.rs b/src/lib.rs
index 56e71c800..022c01504 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -44,12 +44,7 @@
 //!     let renderer = librsvg::CairoRenderer::new(&handle);
 //!     renderer.render_document(
 //!         &cr,
-//!         &cairo::Rectangle {
-//!             x: 0.0,
-//!             y: 0.0,
-//!             width: f64::from(WIDTH),
-//!             height: f64::from(HEIGHT),
-//!         },
+//!         &cairo::Rectangle::new(0.0, 0.0, f64::from(WIDTH), f64::from(HEIGHT))
 //!     ).unwrap();
 //!
 //!     // Loading from a static SVG asset
diff --git a/src/rect.rs b/src/rect.rs
index b0bbb201f..f805211ee 100644
--- a/src/rect.rs
+++ b/src/rect.rs
@@ -188,10 +188,10 @@ impl From<cairo::Rectangle> for Rect {
     #[inline]
     fn from(r: cairo::Rectangle) -> Self {
         Self {
-            x0: r.x,
-            y0: r.y,
-            x1: r.x + r.width,
-            y1: r.y + r.height,
+            x0: r.x(),
+            y0: r.y(),
+            x1: r.x() + r.width(),
+            y1: r.y() + r.height(),
         }
     }
 }
@@ -199,12 +199,7 @@ impl From<cairo::Rectangle> for Rect {
 impl From<Rect> for cairo::Rectangle {
     #[inline]
     fn from(r: Rect) -> Self {
-        Self {
-            x: r.x0,
-            y: r.y0,
-            width: r.x1 - r.x0,
-            height: r.y1 - r.y0,
-        }
+        Self::new(r.x0, r.y0, r.x1 - r.x0, r.y1 - r.y0)
     }
 }
 
@@ -258,10 +253,10 @@ impl From<cairo::Rectangle> for IRect {
     #[inline]
     fn from(r: cairo::Rectangle) -> Self {
         Self {
-            x0: r.x.floor() as i32,
-            y0: r.y.floor() as i32,
-            x1: (r.x + r.width).ceil() as i32,
-            y1: (r.y + r.height).ceil() as i32,
+            x0: r.x().floor() as i32,
+            y0: r.y().floor() as i32,
+            x1: (r.x() + r.width()).ceil() as i32,
+            y1: (r.y() + r.height()).ceil() as i32,
         }
     }
 }
@@ -269,11 +264,11 @@ impl From<cairo::Rectangle> for IRect {
 impl From<IRect> for cairo::Rectangle {
     #[inline]
     fn from(r: IRect) -> Self {
-        Self {
-            x: f64::from(r.x0),
-            y: f64::from(r.y0),
-            width: f64::from(r.x1 - r.x0),
-            height: f64::from(r.y1 - r.y0),
-        }
+        Self::new(
+            f64::from(r.x0),
+            f64::from(r.y0),
+            f64::from(r.x1 - r.x0),
+            f64::from(r.y1 - r.y0),
+        )
     }
 }
diff --git a/src/surface_utils/shared_surface.rs b/src/surface_utils/shared_surface.rs
index dc4bc45e4..0bd743534 100644
--- a/src/surface_utils/shared_surface.rs
+++ b/src/surface_utils/shared_surface.rs
@@ -410,7 +410,7 @@ impl ImageSurface<Shared> {
 
         let cr = cairo::Context::new(&output_surface)?;
         let r = cairo::Rectangle::from(bounds);
-        cr.rectangle(r.x, r.y, r.width, r.height);
+        cr.rectangle(r.x(), r.y(), r.width(), r.height());
         cr.clip();
 
         cr.set_source_surface(&self.surface, 0f64, 0f64)?;
@@ -434,7 +434,7 @@ impl ImageSurface<Shared> {
         {
             let cr = cairo::Context::new(&output_surface)?;
             let r = cairo::Rectangle::from(bounds);
-            cr.rectangle(r.x, r.y, r.width, r.height);
+            cr.rectangle(r.x(), r.y(), r.width(), r.height());
             cr.clip();
 
             cr.scale(x, y);
@@ -994,7 +994,7 @@ impl ImageSurface<Shared> {
         if color.alpha > 0 {
             let cr = cairo::Context::new(&output_surface)?;
             let r = cairo::Rectangle::from(bounds);
-            cr.rectangle(r.x, r.y, r.width, r.height);
+            cr.rectangle(r.x(), r.y(), r.width(), r.height());
             cr.clip();
 
             cr.set_source_rgba(
@@ -1028,7 +1028,7 @@ impl ImageSurface<Shared> {
         {
             let cr = cairo::Context::new(&output_surface)?;
             let r = cairo::Rectangle::from(output_bounds);
-            cr.rectangle(r.x, r.y, r.width, r.height);
+            cr.rectangle(r.x(), r.y(), r.width(), r.height());
             cr.clip();
 
             self.set_as_source_surface(&cr, dx, dy)?;
@@ -1053,7 +1053,7 @@ impl ImageSurface<Shared> {
         if rect.is_none() || !rect.unwrap().is_empty() {
             let cr = cairo::Context::new(&output_surface)?;
             let r = cairo::Rectangle::from(bounds);
-            cr.rectangle(r.x, r.y, r.width, r.height);
+            cr.rectangle(r.x(), r.y(), r.width(), r.height());
             cr.clip();
 
             image.set_as_source_surface(&cr, 0f64, 0f64)?;
@@ -1116,7 +1116,7 @@ impl ImageSurface<Shared> {
             ptn.set_matrix(mat);
 
             let r = cairo::Rectangle::from(bounds);
-            cr.rectangle(r.x, r.y, r.width, r.height);
+            cr.rectangle(r.x(), r.y(), r.width(), r.height());
             cr.clip();
 
             cr.set_source(&ptn)?;
@@ -1143,7 +1143,7 @@ impl ImageSurface<Shared> {
         {
             let cr = cairo::Context::new(&output_surface)?;
             let r = cairo::Rectangle::from(bounds);
-            cr.rectangle(r.x, r.y, r.width, r.height);
+            cr.rectangle(r.x(), r.y(), r.width(), r.height());
             cr.clip();
 
             self.set_as_source_surface(&cr, 0.0, 0.0)?;
diff --git a/src/text.rs b/src/text.rs
index 6115d09a0..7b6429758 100644
--- a/src/text.rs
+++ b/src/text.rs
@@ -446,7 +446,7 @@ impl PositionedSpan {
 
         let stroke = Stroke::new(&self.values, &params);
 
-        let gravity = layout.context().unwrap().gravity();
+        let gravity = layout.context().gravity();
 
         let bbox = compute_text_box(&layout, x, y, layout_context.transform, gravity);
 
@@ -1206,7 +1206,7 @@ fn create_pango_layout(
         create_pango_context(&layout_context.font_options, &layout_context.transform);
 
     if let XmlLang(Some(ref lang)) = props.xml_lang {
-        pango_context.set_language(&pango::Language::from_string(lang.as_str()));
+        pango_context.set_language(Some(&pango::Language::from_string(lang.as_str())));
     }
 
     pango_context.set_base_gravity(pango::Gravity::from(layout_context.writing_mode));
diff --git a/tests/src/api.rs b/tests/src/api.rs
index 4d099ba4d..e48096967 100644
--- a/tests/src/api.rs
+++ b/tests/src/api.rs
@@ -53,12 +53,7 @@ fn render_layer() {
 
     let res = {
         let cr = cairo::Context::new(&output).expect("Failed to create cairo context");
-        let viewport = cairo::Rectangle {
-            x: 100.0,
-            y: 100.0,
-            width: 100.0,
-            height: 100.0,
-        };
+        let viewport = cairo::Rectangle::new(100.0, 100.0, 100.0, 100.0);
 
         renderer.render_layer(&cr, Some("#bar"), &viewport)
     };
@@ -109,25 +104,9 @@ fn untransformed_element() {
 
     let (ink_r, logical_r) = renderer.geometry_for_element(Some("#foo")).unwrap();
 
-    assert_eq!(
-        ink_r,
-        cairo::Rectangle {
-            x: 0.0,
-            y: 0.0,
-            width: 40.0,
-            height: 50.0,
-        }
-    );
-
-    assert_eq!(
-        logical_r,
-        cairo::Rectangle {
-            x: 5.0,
-            y: 5.0,
-            width: 30.0,
-            height: 40.0,
-        }
-    );
+    assert_eq!(ink_r, cairo::Rectangle::new(0.0, 0.0, 40.0, 50.0));
+
+    assert_eq!(logical_r, cairo::Rectangle::new(5.0, 5.0, 30.0, 40.0));
 
     /* Rendering */
 
@@ -135,12 +114,7 @@ fn untransformed_element() {
 
     let res = {
         let cr = cairo::Context::new(&output).expect("Failed to create cairo context");
-        let viewport = cairo::Rectangle {
-            x: 100.0,
-            y: 100.0,
-            width: 100.0,
-            height: 100.0,
-        };
+        let viewport = cairo::Rectangle::new(100.0, 100.0, 100.0, 100.0);
 
         renderer.render_element(&cr, Some("#foo"), &viewport)
     };
@@ -191,12 +165,7 @@ fn set_stylesheet() {
 
     let res = {
         let cr = cairo::Context::new(&output).expect("Failed to create cairo context");
-        let viewport = cairo::Rectangle {
-            x: 0.0,
-            y: 0.0,
-            width: 100.0,
-            height: 100.0,
-        };
+        let viewport = cairo::Rectangle::new(0.0, 0.0, 100.0, 100.0);
 
         renderer.render_document(&cr, &viewport)
     };
@@ -239,12 +208,7 @@ fn text_doesnt_leave_points_in_current_path() {
 
     assert!(!cr.has_current_point().unwrap());
 
-    let viewport = cairo::Rectangle {
-        x: 0.0,
-        y: 0.0,
-        width: 100.0,
-        height: 100.0,
-    };
+    let viewport = cairo::Rectangle::new(0.0, 0.0, 100.0, 100.0);
 
     renderer.render_document(&cr, &viewport).unwrap();
 
diff --git a/tests/src/bugs.rs b/tests/src/bugs.rs
index 2f5927df2..d268b4f2e 100644
--- a/tests/src/bugs.rs
+++ b/tests/src/bugs.rs
@@ -29,12 +29,7 @@ fn inf_width() {
         &svg,
         SurfaceSize(150, 150),
         |cr| cr.translate(50.0, 50.0),
-        cairo::Rectangle {
-            x: 0.0,
-            y: 0.0,
-            width: 50.0,
-            height: 50.0,
-        },
+        cairo::Rectangle::new(0.0, 0.0, 50.0, 50.0),
     )
     .unwrap();
 }
@@ -57,12 +52,7 @@ fn nonexistent_image_shouldnt_cancel_rendering() {
         &svg,
         SurfaceSize(50, 50),
         |_| (),
-        cairo::Rectangle {
-            x: 0.0,
-            y: 0.0,
-            width: 50.0,
-            height: 50.0,
-        },
+        cairo::Rectangle::new(0.0, 0.0, 50.0, 50.0),
     )
     .unwrap();
 
@@ -106,12 +96,7 @@ fn href_attribute_overrides_xlink_href() {
         &svg,
         SurfaceSize(500, 500),
         |_| (),
-        cairo::Rectangle {
-            x: 0.0,
-            y: 0.0,
-            width: 500.0,
-            height: 500.0,
-        },
+        cairo::Rectangle::new(0.0, 0.0, 500.0, 500.0),
     )
     .unwrap();
 
@@ -147,12 +132,7 @@ fn nonexistent_filter_leaves_object_unfiltered() {
         &svg,
         SurfaceSize(500, 500),
         |_| (),
-        cairo::Rectangle {
-            x: 0.0,
-            y: 0.0,
-            width: 500.0,
-            height: 500.0,
-        },
+        cairo::Rectangle::new(0.0, 0.0, 500.0, 500.0),
     )
     .unwrap();
 
@@ -212,12 +192,7 @@ fn recursive_paint_servers_fallback_to_color() {
         &svg,
         SurfaceSize(200, 200),
         |_| (),
-        cairo::Rectangle {
-            x: 0.0,
-            y: 0.0,
-            width: 200.0,
-            height: 200.0,
-        },
+        cairo::Rectangle::new(0.0, 0.0, 200.0, 200.0),
     )
     .unwrap();
 
@@ -241,12 +216,7 @@ fn test_renders_as_empty(svg: &SvgHandle, test_name: &str) {
         &svg,
         SurfaceSize(100, 100),
         |_| (),
-        cairo::Rectangle {
-            x: 0.0,
-            y: 0.0,
-            width: 100.0,
-            height: 100.0,
-        },
+        cairo::Rectangle::new(0.0, 0.0, 100.0, 100.0),
     )
     .unwrap();
 
@@ -336,22 +306,17 @@ fn test_text_bounds(name: &str) {
     let (ink_r, _) = renderer
         .geometry_for_layer(
             Some("#LabelA"),
-            &cairo::Rectangle {
-                x: 0.0,
-                y: 0.0,
-                width: 248.0,
-                height: 176.0,
-            },
+            &cairo::Rectangle::new(0.0, 0.0, 248.0, 176.0),
         )
         .unwrap();
 
-    assert!(ink_r.x >= 80.0 && ink_r.x < 80.1);
+    assert!(ink_r.x() >= 80.0 && ink_r.x() < 80.1);
 
     // This is kind of suspicious, but we don't know the actual height of the
     // text set at y=49 in the test SVG.  However, this test is more "text
     // elements compute sensible bounds"; the bug #347 was that their ink_rect
     // was not being computed correctly at all.
-    assert!(ink_r.y > 48.0 && ink_r.y < 49.0);
+    assert!(ink_r.y() > 48.0 && ink_r.y() < 49.0);
 }
 
 // https://gitlab.gnome.org/GNOME/librsvg/-/issues/703
@@ -375,12 +340,7 @@ fn switch_element_should_ignore_elements_in_error() {
         &svg,
         SurfaceSize(100, 100),
         |_| (),
-        cairo::Rectangle {
-            x: 0.0,
-            y: 0.0,
-            width: 100.0,
-            height: 100.0,
-        },
+        cairo::Rectangle::new(0.0, 0.0, 100.0, 100.0),
     )
     .unwrap();
 
@@ -438,12 +398,7 @@ fn accepted_children_inside_clip_path() {
         &svg,
         SurfaceSize(200, 200),
         |_| (),
-        cairo::Rectangle {
-            x: 0.0,
-            y: 0.0,
-            width: 200.0,
-            height: 200.0,
-        },
+        cairo::Rectangle::new(0.0, 0.0, 200.0, 200.0),
     )
     .unwrap();
 
@@ -491,12 +446,7 @@ fn can_draw_to_non_image_surface() {
 
     let renderer = CairoRenderer::new(&svg);
 
-    let viewport = cairo::Rectangle {
-        x: 0.0,
-        y: 0.0,
-        width: 200.0,
-        height: 200.0,
-    };
+    let viewport = cairo::Rectangle::new(0.0, 0.0, 200.0, 200.0);
 
     let output =
         cairo::RecordingSurface::create(cairo::Content::ColorAlpha, Some(viewport)).unwrap();
diff --git a/tests/src/errors.rs b/tests/src/errors.rs
index def44f9f5..d98eeb67c 100644
--- a/tests/src/errors.rs
+++ b/tests/src/errors.rs
@@ -37,15 +37,9 @@ fn rendering_instancing_limit(name: &str) {
     // Note that at least 515-patttern-billion-laughs.svg requires a viewport of this size
     // or bigger; a smaller one causes the recursive patterns to get so small that they
     // are culled out, and so the document doesn't reach the instancing limit.
-    match CairoRenderer::new(&handle).render_document(
-        &cr,
-        &cairo::Rectangle {
-            x: 0.0,
-            y: 0.0,
-            width: 500.0,
-            height: 500.0,
-        },
-    ) {
+    match CairoRenderer::new(&handle)
+        .render_document(&cr, &cairo::Rectangle::new(0.0, 0.0, 500.0, 500.0))
+    {
         Ok(_) => (),
         Err(RenderingError::LimitExceeded(ImplementationLimit::TooManyReferencedElements)) => (),
         _ => panic!("unexpected error code"),
diff --git a/tests/src/filters.rs b/tests/src/filters.rs
index c7fdb7602..f756a7815 100644
--- a/tests/src/filters.rs
+++ b/tests/src/filters.rs
@@ -26,12 +26,7 @@ fn invalid_filter_reference_cancels_filter_chain() {
         &svg,
         SurfaceSize(400, 400),
         |_| (),
-        cairo::Rectangle {
-            x: 0.0,
-            y: 0.0,
-            width: 400.0,
-            height: 400.0,
-        },
+        cairo::Rectangle::new(0.0, 0.0, 400.0, 400.0),
     )
     .unwrap();
 
@@ -76,12 +71,7 @@ fn non_filter_reference_cancels_filter_chain() {
         &svg,
         SurfaceSize(400, 400),
         |_| (),
-        cairo::Rectangle {
-            x: 0.0,
-            y: 0.0,
-            width: 400.0,
-            height: 400.0,
-        },
+        cairo::Rectangle::new(0.0, 0.0, 400.0, 400.0),
     )
     .unwrap();
 
diff --git a/tests/src/geometries.rs b/tests/src/geometries.rs
index 0c25ebce4..db1d2cc10 100644
--- a/tests/src/geometries.rs
+++ b/tests/src/geometries.rs
@@ -99,12 +99,7 @@ fn test(svg_filename: &str) {
             geom: Rect::from(*expected),
         };
 
-        let viewport = cairo::Rectangle {
-            x: 0.0,
-            y: 0.0,
-            width: svg_width,
-            height: svg_height,
-        };
+        let viewport = cairo::Rectangle::new(0.0, 0.0, svg_width, svg_height);
 
         let (geometry, _) = renderer
             .geometry_for_layer(Some(id), &viewport)
diff --git a/tests/src/intrinsic_dimensions.rs b/tests/src/intrinsic_dimensions.rs
index 01f0704a1..e7ab49547 100644
--- a/tests/src/intrinsic_dimensions.rs
+++ b/tests/src/intrinsic_dimensions.rs
@@ -38,12 +38,7 @@ fn has_intrinsic_dimensions() {
         IntrinsicDimensions {
             width: Length::new(10.0, LengthUnit::Cm),
             height: Length::new(20.0, LengthUnit::Px),
-            vbox: Some(cairo::Rectangle {
-                x: 0.0,
-                y: 0.0,
-                width: 100.0,
-                height: 200.0,
-            }),
+            vbox: Some(cairo::Rectangle::new(0.0, 0.0, 100.0, 200.0)),
         }
     );
 }
@@ -112,21 +107,11 @@ fn root_geometry_with_percent_viewport() {
 
     let renderer = CairoRenderer::new(&svg);
 
-    let viewport = cairo::Rectangle {
-        x: 0.0,
-        y: 0.0,
-        width: 100.0,
-        height: 100.0,
-    };
+    let viewport = cairo::Rectangle::new(0.0, 0.0, 100.0, 100.0);
 
     let (ink_r, logical_r) = renderer.geometry_for_layer(None, &viewport).unwrap();
 
-    let rect = cairo::Rectangle {
-        x: 10.0,
-        y: 20.0,
-        width: 30.0,
-        height: 40.0,
-    };
+    let rect = cairo::Rectangle::new(10.0, 20.0, 30.0, 40.0);
 
     assert_eq!((ink_r, logical_r), (rect, rect));
 }
@@ -144,21 +129,11 @@ fn layer_geometry_with_offset_viewport() {
 
     let renderer = CairoRenderer::new(&svg);
 
-    let viewport = cairo::Rectangle {
-        x: 100.0,
-        y: 100.0,
-        width: 100.0,
-        height: 100.0,
-    };
+    let viewport = cairo::Rectangle::new(100.0, 100.0, 100.0, 100.0);
 
     let (ink_r, logical_r) = renderer.geometry_for_layer(None, &viewport).unwrap();
 
-    let rect = cairo::Rectangle {
-        x: 110.0,
-        y: 120.0,
-        width: 30.0,
-        height: 40.0,
-    };
+    let rect = cairo::Rectangle::new(110.0, 120.0, 30.0, 40.0);
 
     assert_eq!((ink_r, logical_r), (rect, rect));
 }
@@ -176,21 +151,11 @@ fn layer_geometry_with_viewbox_and_offset_viewport() {
 
     let renderer = CairoRenderer::new(&svg);
 
-    let viewport = cairo::Rectangle {
-        x: 100.0,
-        y: 100.0,
-        width: 100.0,
-        height: 100.0,
-    };
+    let viewport = cairo::Rectangle::new(100.0, 100.0, 100.0, 100.0);
 
     let (ink_r, logical_r) = renderer.geometry_for_layer(None, &viewport).unwrap();
 
-    let rect = cairo::Rectangle {
-        x: 110.0,
-        y: 120.0,
-        width: 30.0,
-        height: 40.0,
-    };
+    let rect = cairo::Rectangle::new(110.0, 120.0, 30.0, 40.0);
 
     assert_eq!((ink_r, logical_r), (rect, rect));
 }
@@ -208,21 +173,11 @@ fn layer_geometry_with_no_width_height() {
 
     let renderer = CairoRenderer::new(&svg);
 
-    let viewport = cairo::Rectangle {
-        x: 100.0,
-        y: 100.0,
-        width: 100.0,
-        height: 100.0,
-    };
+    let viewport = cairo::Rectangle::new(100.0, 100.0, 100.0, 100.0);
 
     let (ink_r, logical_r) = renderer.geometry_for_layer(None, &viewport).unwrap();
 
-    let rect = cairo::Rectangle {
-        x: 105.0,
-        y: 110.0,
-        width: 15.0,
-        height: 20.0,
-    };
+    let rect = cairo::Rectangle::new(105.0, 110.0, 15.0, 20.0);
 
     assert_eq!((ink_r, logical_r), (rect, rect));
 }
@@ -240,24 +195,14 @@ fn layer_geometry_with_no_intrinsic_dimensions() {
 
     let renderer = CairoRenderer::new(&svg);
 
-    let viewport = cairo::Rectangle {
-        x: 100.0,
-        y: 100.0,
-        width: 100.0,
-        height: 100.0,
-    };
+    let viewport = cairo::Rectangle::new(100.0, 100.0, 100.0, 100.0);
 
     let (ink_r, logical_r) = renderer.geometry_for_layer(None, &viewport).unwrap();
 
     // The SVG document above has no width/height nor viewBox, which means it should
     // start with an identity transform for its coordinate space.  Since the viewport
     // is just offset by (100, 100), this just translates the coordinates of the <rect>.
-    let rect = cairo::Rectangle {
-        x: 210.0,
-        y: 220.0,
-        width: 50.0,
-        height: 40.0,
-    };
+    let rect = cairo::Rectangle::new(210.0, 220.0, 50.0, 40.0);
 
     assert_eq!((ink_r, logical_r), (rect, rect));
 }
@@ -275,23 +220,13 @@ fn layer_geometry_with_percentage_viewport() {
 
     let renderer = CairoRenderer::new(&svg);
 
-    let viewport = cairo::Rectangle {
-        x: 100.0,
-        y: 100.0,
-        width: 100.0,
-        height: 100.0,
-    };
+    let viewport = cairo::Rectangle::new(100.0, 100.0, 100.0, 100.0);
 
     let (ink_r, logical_r) = renderer.geometry_for_layer(None, &viewport).unwrap();
 
     // Lack of viewBox means we use an identity transform, so the <rect> is just
     // offset by (100, 100) because of the viewport.
-    let rect = cairo::Rectangle {
-        x: 110.0,
-        y: 120.0,
-        width: 50.0,
-        height: 40.0,
-    };
+    let rect = cairo::Rectangle::new(110.0, 120.0, 50.0, 40.0);
 
     assert_eq!((ink_r, logical_r), (rect, rect));
 }
@@ -309,23 +244,13 @@ fn layer_geometry_with_percent_viewport() {
 
     let renderer = CairoRenderer::new(&svg);
 
-    let viewport = cairo::Rectangle {
-        x: 0.0,
-        y: 0.0,
-        width: 100.0,
-        height: 100.0,
-    };
+    let viewport = cairo::Rectangle::new(0.0, 0.0, 100.0, 100.0);
 
     let (ink_r, logical_r) = renderer
         .geometry_for_layer(Some("#foo"), &viewport)
         .unwrap();
 
-    let rect = cairo::Rectangle {
-        x: 10.0,
-        y: 20.0,
-        width: 30.0,
-        height: 40.0,
-    };
+    let rect = cairo::Rectangle::new(10.0, 20.0, 30.0, 40.0);
 
     assert_eq!((ink_r, logical_r), (rect, rect));
 }
@@ -344,23 +269,13 @@ fn layer_geometry_viewport_viewbox() {
 
     let renderer = CairoRenderer::new(&svg);
 
-    let viewport = cairo::Rectangle {
-        x: 0.0,
-        y: 0.0,
-        width: 100.0,
-        height: 400.0,
-    };
+    let viewport = cairo::Rectangle::new(0.0, 0.0, 100.0, 400.0);
 
     let (ink_r, logical_r) = renderer
         .geometry_for_layer(Some("#two"), &viewport)
         .unwrap();
 
-    let rect = cairo::Rectangle {
-        x: 0.0,
-        y: 200.0,
-        width: 100.0,
-        height: 200.0,
-    };
+    let rect = cairo::Rectangle::new(0.0, 200.0, 100.0, 200.0);
 
     assert_eq!((ink_r, logical_r), (rect, rect));
 }
@@ -374,12 +289,7 @@ fn layer_geometry_for_nonexistent_element() {
     )
     .unwrap();
 
-    let viewport = cairo::Rectangle {
-        x: 0.0,
-        y: 0.0,
-        width: 100.0,
-        height: 100.0,
-    };
+    let viewport = cairo::Rectangle::new(0.0, 0.0, 100.0, 100.0);
 
     let renderer = CairoRenderer::new(&svg);
 
@@ -398,12 +308,7 @@ fn layer_geometry_for_invalid_id() {
     )
     .unwrap();
 
-    let viewport = cairo::Rectangle {
-        x: 0.0,
-        y: 0.0,
-        width: 100.0,
-        height: 100.0,
-    };
+    let viewport = cairo::Rectangle::new(0.0, 0.0, 100.0, 100.0);
 
     let renderer = CairoRenderer::new(&svg);
     assert!(matches!(
@@ -437,12 +342,7 @@ fn render_to_viewport_with_different_size() {
         &svg,
         SurfaceSize(128, 128),
         |_cr| (),
-        cairo::Rectangle {
-            x: 0.0,
-            y: 0.0,
-            width: 128.0,
-            height: 128.0,
-        },
+        cairo::Rectangle::new(0.0, 0.0, 128.0, 128.0),
     )
     .unwrap();
 
@@ -478,12 +378,7 @@ fn render_to_offsetted_viewport() {
         &svg,
         SurfaceSize(100, 100),
         |_cr| (),
-        cairo::Rectangle {
-            x: 10.0,
-            y: 20.0,
-            width: 48.0,
-            height: 48.0,
-        },
+        cairo::Rectangle::new(10.0, 20.0, 48.0, 48.0),
     )
     .unwrap();
 
@@ -521,12 +416,7 @@ fn render_to_viewport_with_transform() {
         &svg,
         SurfaceSize(100, 100),
         |cr| cr.translate(10.0, 20.0),
-        cairo::Rectangle {
-            x: 0.0,
-            y: 0.0,
-            width: 48.0,
-            height: 48.0,
-        },
+        cairo::Rectangle::new(0.0, 0.0, 48.0, 48.0),
     )
     .unwrap();
 
@@ -571,12 +461,7 @@ fn clip_on_transformed_viewport() {
         &svg,
         SurfaceSize(200, 200),
         |cr| cr.translate(50.0, 50.0),
-        cairo::Rectangle {
-            x: 0.0,
-            y: 0.0,
-            width: 100.0,
-            height: 100.0,
-        },
+        cairo::Rectangle::new(0.0, 0.0, 100.0, 100.0),
     )
     .unwrap();
 
@@ -637,12 +522,7 @@ fn mask_on_transformed_viewport() {
         &svg,
         SurfaceSize(200, 200),
         |cr| cr.translate(50.0, 50.0),
-        cairo::Rectangle {
-            x: 0.0,
-            y: 0.0,
-            width: 100.0,
-            height: 100.0,
-        },
+        cairo::Rectangle::new(0.0, 0.0, 100.0, 100.0),
     )
     .unwrap();
 
diff --git a/tests/src/legacy_sizing.rs b/tests/src/legacy_sizing.rs
index 3446aba37..dd1474fd5 100644
--- a/tests/src/legacy_sizing.rs
+++ b/tests/src/legacy_sizing.rs
@@ -18,18 +18,8 @@ fn just_viewbox_uses_viewbox_size() {
             .legacy_layer_geometry(None)
             .unwrap(),
         (
-            cairo::Rectangle {
-                x: 0.0,
-                y: 0.0,
-                width: 100.0,
-                height: 200.0,
-            },
-            cairo::Rectangle {
-                x: 0.0,
-                y: 0.0,
-                width: 100.0,
-                height: 200.0,
-            }
+            cairo::Rectangle::new(0.0, 0.0, 100.0, 200.0),
+            cairo::Rectangle::new(0.0, 0.0, 100.0, 200.0),
         )
     );
 }
@@ -50,18 +40,8 @@ fn no_intrinsic_size_uses_element_geometries() {
             .legacy_layer_geometry(None)
             .unwrap(),
         (
-            cairo::Rectangle {
-                x: 10.0,
-                y: 20.0,
-                width: 30.0,
-                height: 40.0,
-            },
-            cairo::Rectangle {
-                x: 10.0,
-                y: 20.0,
-                width: 30.0,
-                height: 40.0,
-            }
+            cairo::Rectangle::new(10.0, 20.0, 30.0, 40.0),
+            cairo::Rectangle::new(10.0, 20.0, 30.0, 40.0),
         )
     );
 }
@@ -80,18 +60,8 @@ fn hundred_percent_width_height_uses_viewbox() {
             .legacy_layer_geometry(None)
             .unwrap(),
         (
-            cairo::Rectangle {
-                x: 0.0,
-                y: 0.0,
-                width: 100.0,
-                height: 200.0,
-            },
-            cairo::Rectangle {
-                x: 0.0,
-                y: 0.0,
-                width: 100.0,
-                height: 200.0,
-            }
+            cairo::Rectangle::new(0.0, 0.0, 100.0, 200.0),
+            cairo::Rectangle::new(0.0, 0.0, 100.0, 200.0),
         )
     );
 }
@@ -112,18 +82,8 @@ fn hundred_percent_width_height_no_viewbox_uses_element_geometries() {
             .legacy_layer_geometry(None)
             .unwrap(),
         (
-            cairo::Rectangle {
-                x: 10.0,
-                y: 20.0,
-                width: 30.0,
-                height: 40.0,
-            },
-            cairo::Rectangle {
-                x: 10.0,
-                y: 20.0,
-                width: 30.0,
-                height: 40.0,
-            }
+            cairo::Rectangle::new(10.0, 20.0, 30.0, 40.0),
+            cairo::Rectangle::new(10.0, 20.0, 30.0, 40.0),
         )
     );
 }
@@ -153,18 +113,8 @@ fn width_and_viewbox_preserves_aspect_ratio() {
             .legacy_layer_geometry(None)
             .unwrap(),
         (
-            cairo::Rectangle {
-                x: 0.0,
-                y: 0.0,
-                width: 60.0,
-                height: 80.0,
-            },
-            cairo::Rectangle {
-                x: 0.0,
-                y: 0.0,
-                width: 60.0,
-                height: 80.0,
-            }
+            cairo::Rectangle::new(0.0, 0.0, 60.0, 80.0),
+            cairo::Rectangle::new(0.0, 0.0, 60.0, 80.0),
         )
     );
 }
@@ -188,18 +138,8 @@ fn height_and_viewbox_preserves_aspect_ratio() {
             .legacy_layer_geometry(None)
             .unwrap(),
         (
-            cairo::Rectangle {
-                x: 0.0,
-                y: 0.0,
-                width: 60.0,
-                height: 80.0,
-            },
-            cairo::Rectangle {
-                x: 0.0,
-                y: 0.0,
-                width: 60.0,
-                height: 80.0,
-            }
+            cairo::Rectangle::new(0.0, 0.0, 60.0, 80.0),
+            cairo::Rectangle::new(0.0, 0.0, 60.0, 80.0),
         )
     );
 }
@@ -220,18 +160,8 @@ fn zero_width_vbox() {
             .legacy_layer_geometry(None)
             .unwrap(),
         (
-            cairo::Rectangle {
-                x: 0.0,
-                y: 0.0,
-                width: 0.0,
-                height: 0.0,
-            },
-            cairo::Rectangle {
-                x: 0.0,
-                y: 0.0,
-                width: 0.0,
-                height: 0.0,
-            }
+            cairo::Rectangle::new(0.0, 0.0, 0.0, 0.0),
+            cairo::Rectangle::new(0.0, 0.0, 0.0, 0.0)
         )
     );
 }
@@ -252,18 +182,8 @@ fn zero_height_vbox() {
             .legacy_layer_geometry(None)
             .unwrap(),
         (
-            cairo::Rectangle {
-                x: 0.0,
-                y: 0.0,
-                width: 0.0,
-                height: 0.0,
-            },
-            cairo::Rectangle {
-                x: 0.0,
-                y: 0.0,
-                width: 0.0,
-                height: 0.0,
-            }
+            cairo::Rectangle::new(0.0, 0.0, 0.0, 0.0),
+            cairo::Rectangle::new(0.0, 0.0, 0.0, 0.0)
         )
     );
 }
diff --git a/tests/src/primitive_geometries.rs b/tests/src/primitive_geometries.rs
index c544f43df..3a9f23915 100644
--- a/tests/src/primitive_geometries.rs
+++ b/tests/src/primitive_geometries.rs
@@ -122,12 +122,7 @@ fn test(svg_filename: &str, geometries_filename: &str) {
     for (id, expected) in geometries.0.iter() {
         let expected = Element::from_element_geometry(id, expected);
 
-        let viewport = cairo::Rectangle {
-            x: 0.0,
-            y: 0.0,
-            width: svg_width,
-            height: svg_height,
-        };
+        let viewport = cairo::Rectangle::new(0.0, 0.0, svg_width, svg_height);
 
         let (ink_rect, logical_rect) = renderer
             .geometry_for_layer(Some(id), &viewport)
diff --git a/tests/src/primitives.rs b/tests/src/primitives.rs
index e1564bf80..b12906f46 100644
--- a/tests/src/primitives.rs
+++ b/tests/src/primitives.rs
@@ -21,12 +21,7 @@ fn simple_opacity_with_transform() {
         &svg,
         SurfaceSize(150, 150),
         |cr| cr.translate(50.0, 50.0),
-        cairo::Rectangle {
-            x: 0.0,
-            y: 0.0,
-            width: 50.0,
-            height: 50.0,
-        },
+        cairo::Rectangle::new(0.0, 0.0, 50.0, 50.0),
     )
     .unwrap();
 
@@ -63,12 +58,7 @@ fn simple_opacity_with_offset_viewport() {
         &svg,
         SurfaceSize(150, 150),
         |_cr| (),
-        cairo::Rectangle {
-            x: 50.0,
-            y: 50.0,
-            width: 50.0,
-            height: 50.0,
-        },
+        cairo::Rectangle::new(50.0, 50.0, 50.0, 50.0),
     )
     .unwrap();
 
@@ -109,12 +99,7 @@ fn simple_opacity_with_scale() {
             cr.translate(50.0, 50.0);
             cr.scale(8.0, 8.0);
         },
-        cairo::Rectangle {
-            x: 0.0,
-            y: 0.0,
-            width: 50.0,
-            height: 50.0,
-        },
+        cairo::Rectangle::new(0.0, 0.0, 50.0, 50.0),
     )
     .unwrap();
 
@@ -158,12 +143,7 @@ fn markers_with_scale() {
         |cr| {
             cr.scale(4.0, 4.0);
         },
-        cairo::Rectangle {
-            x: 0.0,
-            y: 0.0,
-            width: 200.0,
-            height: 200.0,
-        },
+        cairo::Rectangle::new(0.0, 0.0, 200.0, 200.0),
     )
     .unwrap();
 
@@ -211,12 +191,7 @@ fn opacity_inside_transformed_group() {
         &svg,
         SurfaceSize(140, 140),
         |cr| cr.translate(20.0, 20.0),
-        cairo::Rectangle {
-            x: 0.0,
-            y: 0.0,
-            width: 100.0,
-            height: 100.0,
-        },
+        cairo::Rectangle::new(0.0, 0.0, 100.0, 100.0),
     )
     .unwrap();
 
@@ -258,12 +233,7 @@ fn compound_opacity() {
         &svg,
         SurfaceSize(500, 380),
         |cr| cr.translate(10.0, 10.0),
-        cairo::Rectangle {
-            x: 0.0,
-            y: 0.0,
-            width: 480.0,
-            height: 360.0,
-        },
+        cairo::Rectangle::new(0.0, 0.0, 480.0, 360.0),
     )
     .unwrap();
 
@@ -328,12 +298,7 @@ fn nested_masks() {
         &svg,
         SurfaceSize(321 + 20, 27 + 20),
         |cr| cr.translate(10.0, 10.0),
-        cairo::Rectangle {
-            x: 0.0,
-            y: 0.0,
-            width: 321.0,
-            height: 27.0,
-        },
+        cairo::Rectangle::new(0.0, 0.0, 321.0, 27.0),
     )
     .unwrap();
 
diff --git a/tests/src/reference.rs b/tests/src/reference.rs
index 2234e130a..46fb9dc2e 100644
--- a/tests/src/reference.rs
+++ b/tests/src/reference.rs
@@ -71,12 +71,7 @@ fn reference_test(path: &str) {
         renderer
             .render_document(
                 &cr,
-                &cairo::Rectangle {
-                    x: 0.0,
-                    y: 0.0,
-                    width: f64::from(width),
-                    height: f64::from(height),
-                },
+                &cairo::Rectangle::new(0.0, 0.0, f64::from(width), f64::from(height)),
             )
             .unwrap();
     }
@@ -141,7 +136,7 @@ fn image_size(dim: IntrinsicDimensions, dpi: f64) -> (i32, i32) {
         (Length { length: w, unit: Percent },
          Length { length: h, unit: Percent }, vbox) if w == 1.0 && h == 1.0 => {
             if let Some(vbox) = vbox {
-                (vbox.width, vbox.height)
+                (vbox.width(), vbox.height())
             } else {
                 panic!("SVG with percentage width/height must have a viewBox");
             }
diff --git a/tests/src/reference_utils.rs b/tests/src/reference_utils.rs
index 69810e0de..ecb093feb 100644
--- a/tests/src/reference_utils.rs
+++ b/tests/src/reference_utils.rs
@@ -200,12 +200,7 @@ macro_rules! test_compare_render_output {
                 &svg,
                 SurfaceSize(sx, sy),
                 |_| (),
-                cairo::Rectangle {
-                    x: 0.0,
-                    y: 0.0,
-                    width: sx as f64,
-                    height: sy as f64,
-                },
+                cairo::Rectangle::new(0.0, 0.0, f64::from(sx), f64::from(sy)),
             )
             .unwrap();
 
@@ -214,12 +209,7 @@ macro_rules! test_compare_render_output {
                 &reference,
                 SurfaceSize(sx, sy),
                 |_| (),
-                cairo::Rectangle {
-                    x: 0.0,
-                    y: 0.0,
-                    width: sx as f64,
-                    height: sy as f64,
-                },
+                cairo::Rectangle::new(0.0, 0.0, f64::from(sx), f64::from(sy)),
             )
             .unwrap();
 
@@ -278,12 +268,7 @@ macro_rules! test_svg_reference {
                 &svg,
                 SurfaceSize(pixels.0.ceil() as i32, pixels.1.ceil() as i32),
                 |_| (),
-                cairo::Rectangle {
-                    x: 0.0,
-                    y: 0.0,
-                    width: pixels.0,
-                    height: pixels.1,
-                },
+                cairo::Rectangle::new(0.0, 0.0, pixels.0, pixels.1),
             )
             .unwrap();
 
@@ -291,12 +276,7 @@ macro_rules! test_svg_reference {
                 &reference,
                 SurfaceSize(pixels.0.ceil() as i32, pixels.1.ceil() as i32),
                 |_| (),
-                cairo::Rectangle {
-                    x: 0.0,
-                    y: 0.0,
-                    width: pixels.0,
-                    height: pixels.1,
-                },
+                cairo::Rectangle::new(0.0, 0.0, pixels.0, pixels.1),
             )
             .unwrap();
 
diff --git a/tests/src/render_crash.rs b/tests/src/render_crash.rs
index f89285d32..c00e50051 100644
--- a/tests/src/render_crash.rs
+++ b/tests/src/render_crash.rs
@@ -19,13 +19,6 @@ fn render_crash(path: &str) {
     let cr = cairo::Context::new(&surface).expect("Failed to create a cairo context");
 
     // We just test for crashes during rendering, and don't care about success/error.
-    let _ = CairoRenderer::new(&handle).render_document(
-        &cr,
-        &cairo::Rectangle {
-            x: 0.0,
-            y: 0.0,
-            width: 100.0,
-            height: 100.0,
-        },
-    );
+    let _ = CairoRenderer::new(&handle)
+        .render_document(&cr, &cairo::Rectangle::new(0.0, 0.0, 100.0, 100.0));
 }
diff --git a/tests/src/text.rs b/tests/src/text.rs
index e02285236..45bb01e27 100644
--- a/tests/src/text.rs
+++ b/tests/src/text.rs
@@ -83,21 +83,16 @@ test_svg_reference!(
 );
 
 fn rect(x: f64, y: f64, width: f64, height: f64) -> cairo::Rectangle {
-    cairo::Rectangle {
-        x,
-        y,
-        width,
-        height,
-    }
+    cairo::Rectangle::new(x, y, width, height)
 }
 
 fn rectangle_approx_eq(a: &cairo::Rectangle, b: &cairo::Rectangle) -> bool {
     // FIXME: this is super fishy; shouldn't we be using 2x the epsilon against the width/height
     // instead of the raw coordinates?
-    approx_eq!(f64, a.x, b.x)
-        && approx_eq!(f64, a.y, b.y)
-        && approx_eq!(f64, a.width, b.width)
-        && approx_eq!(f64, a.height, b.height)
+    approx_eq!(f64, a.x(), b.x())
+        && approx_eq!(f64, a.y(), b.y())
+        && approx_eq!(f64, a.width(), b.width())
+        && approx_eq!(f64, a.height(), b.height())
 }
 
 // Test that the computed geometry of text layers is as expected.
diff --git a/tests/src/utils.rs b/tests/src/utils.rs
index fb4ad2de4..f01d1c00b 100644
--- a/tests/src/utils.rs
+++ b/tests/src/utils.rs
@@ -92,7 +92,7 @@ mod pango_ft2 {
         pango_fc_font_map_set_config(raw_font_map as *mut _, config);
         fontconfig::FcConfigDestroy(config);
 
-        FontMap::set_default(Some(font_map.downcast::<pangocairo::FontMap>().unwrap()));
+        FontMap::set_default(Some(&font_map.downcast::<pangocairo::FontMap>().unwrap()));
     }
 }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]