From 7db8314e5ac1b688b0d8946369d60d150fb0499b Mon Sep 17 00:00:00 2001 From: 5ohue <86558263+5ohue@users.noreply.github.com> Date: Sat, 11 May 2024 14:27:45 +0300 Subject: [PATCH] Add `RenderingIntent` type --- src/types/mod.rs | 2 ++ src/types/rendering_intent.rs | 40 +++++++++++++++++++++++++++++++++++ src/wand/magick.rs | 3 ++- 3 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 src/types/rendering_intent.rs diff --git a/src/types/mod.rs b/src/types/mod.rs index deb75bb..e746ed9 100644 --- a/src/types/mod.rs +++ b/src/types/mod.rs @@ -11,6 +11,7 @@ mod interlace_type; mod metric_type; mod orientation_type; mod pixel_interpolate_method; +mod rendering_intent; mod resource_type; pub use self::alpha_channel_option::AlphaChannelOption; @@ -26,4 +27,5 @@ pub use self::interlace_type::InterlaceType; pub use self::metric_type::MetricType; pub use self::orientation_type::OrientationType; pub use self::pixel_interpolate_method::PixelInterpolateMethod; +pub use self::rendering_intent::RenderingIntent; pub use self::resource_type::ResourceType; diff --git a/src/types/rendering_intent.rs b/src/types/rendering_intent.rs new file mode 100644 index 0000000..d63c9cc --- /dev/null +++ b/src/types/rendering_intent.rs @@ -0,0 +1,40 @@ +use crate::bindings; + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +#[repr(u32)] +pub enum RenderingIntent { + Undefined = bindings::RenderingIntent_UndefinedIntent, + Saturation = bindings::RenderingIntent_SaturationIntent, + Perceptual = bindings::RenderingIntent_PerceptualIntent, + Absolute = bindings::RenderingIntent_AbsoluteIntent, + Relative = bindings::RenderingIntent_RelativeIntent, +} + +impl Default for RenderingIntent { + fn default() -> Self { + return RenderingIntent::Undefined; + } +} + +impl From for bindings::RenderingIntent { + fn from(value: RenderingIntent) -> Self { + return value as bindings::RenderingIntent; + } +} + +impl From for RenderingIntent { + fn from(value: bindings::RenderingIntent) -> Self { + /* + * SAFETY: + * + * `RenderingIntent` has the same repr as `bindings::RenderingIntent` - u32 + * + * If `value` is less than Relative than it is in the vaild range and can be safely + * reinterpreted as `RenderingIntent` + */ + if value <= bindings::RenderingIntent_RelativeIntent { + return unsafe { std::mem::transmute(value) }; + } + return RenderingIntent::default(); + } +} diff --git a/src/wand/magick.rs b/src/wand/magick.rs index d9de4e2..d323446 100644 --- a/src/wand/magick.rs +++ b/src/wand/magick.rs @@ -44,6 +44,7 @@ use crate::{ MetricType, OrientationType, PixelInterpolateMethod, + RenderingIntent, ResourceType }; @@ -1191,7 +1192,7 @@ impl MagickWand { get_image_interpolate_method, set_image_interpolate_method, MagickGetImageInterpolateMethod, MagickSetImageInterpolateMethod, PixelInterpolateMethod get_image_iterations, set_image_iterations, MagickGetImageIterations, MagickSetImageIterations, usize get_image_orientation, set_image_orientation, MagickGetImageOrientation, MagickSetImageOrientation, OrientationType - get_image_rendering_intent, set_image_rendering_intent, MagickGetImageRenderingIntent, MagickSetImageRenderingIntent, bindings::RenderingIntent + get_image_rendering_intent, set_image_rendering_intent, MagickGetImageRenderingIntent, MagickSetImageRenderingIntent, RenderingIntent get_image_scene, set_image_scene, MagickGetImageScene, MagickSetImageScene, usize get_image_type, set_image_type, MagickGetImageType, MagickSetImageType, bindings::ImageType get_image_units, set_image_units, MagickGetImageUnits, MagickSetImageUnits, bindings::ResolutionType