[librsvg: 4/5] c_api: use the From conversion trait for the flags



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]