From baac3cbf59d8c19602a650990eb977e16bc9dd6a Mon Sep 17 00:00:00 2001 From: 5ohue <86558263+5ohue@users.noreply.github.com> Date: Sat, 11 May 2024 14:31:53 +0300 Subject: [PATCH] Add `ResolutionType` type --- src/types/mod.rs | 2 ++ src/types/resolution_type.rs | 38 ++++++++++++++++++++++++++++++++++++ src/wand/magick.rs | 3 ++- 3 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 src/types/resolution_type.rs diff --git a/src/types/mod.rs b/src/types/mod.rs index e746ed9..be350da 100644 --- a/src/types/mod.rs +++ b/src/types/mod.rs @@ -12,6 +12,7 @@ mod metric_type; mod orientation_type; mod pixel_interpolate_method; mod rendering_intent; +mod resolution_type; mod resource_type; pub use self::alpha_channel_option::AlphaChannelOption; @@ -28,4 +29,5 @@ 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::resolution_type::ResolutionType; pub use self::resource_type::ResourceType; diff --git a/src/types/resolution_type.rs b/src/types/resolution_type.rs new file mode 100644 index 0000000..f94f55e --- /dev/null +++ b/src/types/resolution_type.rs @@ -0,0 +1,38 @@ +use crate::bindings; + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +#[repr(u32)] +pub enum ResolutionType { + Undefined = bindings::ResolutionType_UndefinedResolution, + PixelsPerInch = bindings::ResolutionType_PixelsPerInchResolution, + PixelsPerCentimeter = bindings::ResolutionType_PixelsPerCentimeterResolution, +} + +impl Default for ResolutionType { + fn default() -> Self { + return ResolutionType::Undefined; + } +} + +impl From for bindings::ResolutionType { + fn from(value: ResolutionType) -> Self { + return value as bindings::ResolutionType; + } +} + +impl From for ResolutionType { + fn from(value: bindings::ResolutionType) -> Self { + /* + * SAFETY: + * + * `ResolutionType` has the same repr as `bindings::ResolutionType` - u32 + * + * If `value` is less than PixelsPerCentimeter than it is in the vaild range and can be safely + * reinterpreted as `ResolutionType` + */ + if value <= bindings::ResolutionType_PixelsPerCentimeterResolution { + return unsafe { std::mem::transmute(value) }; + } + return ResolutionType::default(); + } +} diff --git a/src/wand/magick.rs b/src/wand/magick.rs index d323446..220844b 100644 --- a/src/wand/magick.rs +++ b/src/wand/magick.rs @@ -45,6 +45,7 @@ use crate::{ OrientationType, PixelInterpolateMethod, RenderingIntent, + ResolutionType, ResourceType }; @@ -1195,7 +1196,7 @@ impl MagickWand { 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 + get_image_units, set_image_units, MagickGetImageUnits, MagickSetImageUnits, ResolutionType get_interlace_scheme, set_interlace_scheme, MagickGetInterlaceScheme, MagickSetInterlaceScheme, InterlaceType get_interpolate_method, set_interpolate_method, MagickGetInterpolateMethod, MagickSetInterpolateMethod, PixelInterpolateMethod get_iterator_index, set_iterator_index, MagickGetIteratorIndex, MagickSetIteratorIndex, isize