[librsvg: 4/5] c_api: use the From conversion trait for the flags
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg: 4/5] c_api: use the From conversion trait for the flags
- Date: Mon, 4 Mar 2019 00:51:49 +0000 (UTC)
commit a65fd69dcd4197646126b4afbb636232ea41553a
Author: Paolo Borelli <pborelli gnome org>
Date: Sun Mar 3 14:51:20 2019 +0100
c_api: use the From conversion trait for the flags
rsvg_internals/src/c_api.rs | 41 ++++++++++++++++++++++++++++++++++-------
rsvg_internals/src/handle.rs | 30 +-----------------------------
2 files changed, 35 insertions(+), 36 deletions(-)
---
diff --git a/rsvg_internals/src/c_api.rs b/rsvg_internals/src/c_api.rs
index 22582e35..b390dd74 100644
--- a/rsvg_internals/src/c_api.rs
+++ b/rsvg_internals/src/c_api.rs
@@ -86,6 +86,31 @@ mod handle_flags {
pub use self::handle_flags::*;
+impl From<HandleFlags> for LoadFlags {
+ fn from(hflags: HandleFlags) -> LoadFlags {
+ LoadFlags {
+ unlimited_size: hflags.contains(HandleFlags::UNLIMITED),
+ keep_image_data: hflags.contains(HandleFlags::KEEP_IMAGE_DATA),
+ }
+ }
+}
+
+impl From<LoadFlags> for HandleFlags {
+ fn from(lflags: LoadFlags) -> HandleFlags {
+ let mut hflags = HandleFlags::empty();
+
+ if lflags.unlimited_size {
+ hflags.insert(HandleFlags::UNLIMITED);
+ }
+
+ if lflags.keep_image_data {
+ hflags.insert(HandleFlags::KEEP_IMAGE_DATA);
+ }
+
+ hflags
+ }
+}
+
// Keep in sync with rsvg.h:RsvgDimensionData
#[repr(C)]
pub struct RsvgDimensionData {
@@ -262,8 +287,7 @@ impl ObjectImpl for Handle {
match *prop {
subclass::Property("flags", ..) => {
let v: HandleFlags = value.get().expect("flags value has incorrect type");
-
- self.set_load_flags(v);
+ self.load_flags.set(LoadFlags::from(v));
}
subclass::Property("dpi-x", ..) => {
@@ -294,7 +318,11 @@ impl ObjectImpl for Handle {
let prop = &PROPERTIES[id];
match *prop {
- subclass::Property("flags", ..) => Ok(self.load_flags.get().to_flags().to_value()),
+ subclass::Property("flags", ..) => {
+ let flags = HandleFlags::from(self.load_flags.get());
+ Ok(flags.to_value())
+ }
+
subclass::Property("dpi-x", ..) => Ok(self.dpi.get().x().to_value()),
subclass::Property("dpi-y", ..) => Ok(self.dpi.get().y().to_value()),
@@ -485,7 +513,7 @@ pub unsafe extern "C" fn rsvg_rust_handle_get_flags(
) -> RsvgHandleFlags {
let rhandle = get_rust_handle(raw_handle);
- rhandle.load_flags.get().to_flags().to_glib()
+ HandleFlags::from(rhandle.load_flags.get()).to_glib()
}
#[no_mangle]
@@ -495,9 +523,8 @@ pub unsafe extern "C" fn rsvg_rust_handle_set_flags(
) {
let rhandle = get_rust_handle(raw_handle);
- rhandle
- .load_flags
- .set(LoadFlags::from_flags(from_glib(flags)));
+ let flags: HandleFlags = from_glib(flags);
+ rhandle.load_flags.set(LoadFlags::from(flags));
}
#[no_mangle]
diff --git a/rsvg_internals/src/handle.rs b/rsvg_internals/src/handle.rs
index b555dc1c..25b8e7e5 100644
--- a/rsvg_internals/src/handle.rs
+++ b/rsvg_internals/src/handle.rs
@@ -12,7 +12,7 @@ use libc;
use locale_config::{LanguageRange, Locale};
use allowed_url::{AllowedUrl, Href};
-use c_api::{HandleFlags, RsvgDimensionData, RsvgPositionData, RsvgSizeFunc};
+use c_api::{RsvgDimensionData, RsvgPositionData, RsvgSizeFunc};
use dpi::Dpi;
use drawing_ctx::{DrawingCtx, RsvgRectangle};
use error::{DefsLookupErrorKind, LoadingError, RenderingError};
@@ -678,11 +678,6 @@ impl Handle {
svg.get_intrinsic_dimensions()
}
- // from the public API
- pub fn set_load_flags(&self, flags: HandleFlags) {
- self.load_flags.set(LoadFlags::from_flags(flags));
- }
-
// from the public API
pub fn set_dpi_x(&self, dpi_x: f64) {
self.dpi.set(Dpi::new(dpi_x, self.dpi.get().y()));
@@ -713,29 +708,6 @@ fn check_cairo_context(cr: &cairo::Context) -> Result<(), RenderingError> {
}
}
-impl LoadFlags {
- pub fn from_flags(flags: HandleFlags) -> Self {
- LoadFlags {
- unlimited_size: flags.contains(HandleFlags::UNLIMITED),
- keep_image_data: flags.contains(HandleFlags::KEEP_IMAGE_DATA),
- }
- }
-
- pub fn to_flags(&self) -> HandleFlags {
- let mut flags = HandleFlags::empty();
-
- if self.unlimited_size {
- flags.insert(HandleFlags::UNLIMITED);
- }
-
- if self.keep_image_data {
- flags.insert(HandleFlags::KEEP_IMAGE_DATA);
- }
-
- flags
- }
-}
-
/// Gets the user's preferred locale from the environment and
/// translates it to a `Locale` with `LanguageRange` fallbacks.
///
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]