From e1cefcdbe6fbd48930b86adeefd29413952eda27 Mon Sep 17 00:00:00 2001 From: 5ohue <86558263+5ohue@users.noreply.github.com> Date: Thu, 16 Nov 2023 22:16:33 +0300 Subject: [PATCH] fixed set/get for new CompositeOperator type --- src/wand/composite_operator.rs | 92 ++++++++++++++++++++++++++++++++++ src/wand/magick.rs | 16 +++++- 2 files changed, 106 insertions(+), 2 deletions(-) diff --git a/src/wand/composite_operator.rs b/src/wand/composite_operator.rs index 9d92e1e..ab9e7f8 100644 --- a/src/wand/composite_operator.rs +++ b/src/wand/composite_operator.rs @@ -1,3 +1,4 @@ +#[derive(Default, Debug, Clone, Copy)] pub enum CompositeOperator { Undefined, Alpha, @@ -53,6 +54,7 @@ pub enum CompositeOperator { Multiply, No, Out, + #[default] Over, Overlay, PegtopLight, @@ -172,3 +174,93 @@ impl From for crate::bindings::CompositeOperator { } } } + +impl From for CompositeOperator { + fn from(value: crate::bindings::CompositeOperator) -> Self { + match value { + crate::bindings::CompositeOperator_UndefinedCompositeOp => CompositeOperator::Undefined, + crate::bindings::CompositeOperator_AlphaCompositeOp => CompositeOperator::Alpha, + crate::bindings::CompositeOperator_AtopCompositeOp => CompositeOperator::Atop, + crate::bindings::CompositeOperator_BlendCompositeOp => CompositeOperator::Blend, + crate::bindings::CompositeOperator_BlurCompositeOp => CompositeOperator::Blur, + crate::bindings::CompositeOperator_BumpmapCompositeOp => CompositeOperator::Bumpmap, + crate::bindings::CompositeOperator_ChangeMaskCompositeOp => CompositeOperator::ChangeMask, + crate::bindings::CompositeOperator_ClearCompositeOp => CompositeOperator::Clear, + crate::bindings::CompositeOperator_ColorBurnCompositeOp => CompositeOperator::ColorBurn, + crate::bindings::CompositeOperator_ColorDodgeCompositeOp => CompositeOperator::ColorDodge, + crate::bindings::CompositeOperator_ColorizeCompositeOp => CompositeOperator::Colorize, + crate::bindings::CompositeOperator_CopyBlackCompositeOp => CompositeOperator::CopyBlack, + crate::bindings::CompositeOperator_CopyBlueCompositeOp => CompositeOperator::CopyBlue, + crate::bindings::CompositeOperator_CopyCompositeOp => CompositeOperator::Copy, + crate::bindings::CompositeOperator_CopyCyanCompositeOp => CompositeOperator::CopyCyan, + crate::bindings::CompositeOperator_CopyGreenCompositeOp => CompositeOperator::CopyGreen, + crate::bindings::CompositeOperator_CopyMagentaCompositeOp => CompositeOperator::CopyMagenta, + crate::bindings::CompositeOperator_CopyAlphaCompositeOp => CompositeOperator::CopyAlpha, + crate::bindings::CompositeOperator_CopyRedCompositeOp => CompositeOperator::CopyRed, + crate::bindings::CompositeOperator_CopyYellowCompositeOp => CompositeOperator::CopyYellow, + crate::bindings::CompositeOperator_DarkenCompositeOp => CompositeOperator::Darken, + crate::bindings::CompositeOperator_DarkenIntensityCompositeOp => CompositeOperator::DarkenIntensity, + crate::bindings::CompositeOperator_DifferenceCompositeOp => CompositeOperator::Difference, + crate::bindings::CompositeOperator_DisplaceCompositeOp => CompositeOperator::Displace, + crate::bindings::CompositeOperator_DissolveCompositeOp => CompositeOperator::Dissolve, + crate::bindings::CompositeOperator_DistortCompositeOp => CompositeOperator::Distort, + crate::bindings::CompositeOperator_DivideDstCompositeOp => CompositeOperator::DivideDst, + crate::bindings::CompositeOperator_DivideSrcCompositeOp => CompositeOperator::DivideSrc, + crate::bindings::CompositeOperator_DstAtopCompositeOp => CompositeOperator::DstAtop, + crate::bindings::CompositeOperator_DstCompositeOp => CompositeOperator::Dst, + crate::bindings::CompositeOperator_DstInCompositeOp => CompositeOperator::DstIn, + crate::bindings::CompositeOperator_DstOutCompositeOp => CompositeOperator::DstOut, + crate::bindings::CompositeOperator_DstOverCompositeOp => CompositeOperator::DstOver, + crate::bindings::CompositeOperator_ExclusionCompositeOp => CompositeOperator::Exclusion, + crate::bindings::CompositeOperator_HardLightCompositeOp => CompositeOperator::HardLight, + crate::bindings::CompositeOperator_HardMixCompositeOp => CompositeOperator::HardMix, + crate::bindings::CompositeOperator_HueCompositeOp => CompositeOperator::Hue, + crate::bindings::CompositeOperator_InCompositeOp => CompositeOperator::In, + crate::bindings::CompositeOperator_IntensityCompositeOp => CompositeOperator::Intensity, + crate::bindings::CompositeOperator_LightenCompositeOp => CompositeOperator::Lighten, + crate::bindings::CompositeOperator_LightenIntensityCompositeOp => CompositeOperator::LightenIntensity, + crate::bindings::CompositeOperator_LinearBurnCompositeOp => CompositeOperator::LinearBurn, + crate::bindings::CompositeOperator_LinearDodgeCompositeOp => CompositeOperator::LinearDodge, + crate::bindings::CompositeOperator_LinearLightCompositeOp => CompositeOperator::LinearLight, + crate::bindings::CompositeOperator_LuminizeCompositeOp => CompositeOperator::Luminize, + crate::bindings::CompositeOperator_MathematicsCompositeOp => CompositeOperator::Mathematics, + crate::bindings::CompositeOperator_MinusDstCompositeOp => CompositeOperator::MinusDst, + crate::bindings::CompositeOperator_MinusSrcCompositeOp => CompositeOperator::MinusSrc, + crate::bindings::CompositeOperator_ModulateCompositeOp => CompositeOperator::Modulate, + crate::bindings::CompositeOperator_ModulusAddCompositeOp => CompositeOperator::ModulusAdd, + crate::bindings::CompositeOperator_ModulusSubtractCompositeOp => CompositeOperator::ModulusSubtract, + crate::bindings::CompositeOperator_MultiplyCompositeOp => CompositeOperator::Multiply, + crate::bindings::CompositeOperator_NoCompositeOp => CompositeOperator::No, + crate::bindings::CompositeOperator_OutCompositeOp => CompositeOperator::Out, + crate::bindings::CompositeOperator_OverCompositeOp => CompositeOperator::Over, + crate::bindings::CompositeOperator_OverlayCompositeOp => CompositeOperator::Overlay, + crate::bindings::CompositeOperator_PegtopLightCompositeOp => CompositeOperator::PegtopLight, + crate::bindings::CompositeOperator_PinLightCompositeOp => CompositeOperator::PinLight, + crate::bindings::CompositeOperator_PlusCompositeOp => CompositeOperator::Plus, + crate::bindings::CompositeOperator_ReplaceCompositeOp => CompositeOperator::Replace, + crate::bindings::CompositeOperator_SaturateCompositeOp => CompositeOperator::Saturate, + crate::bindings::CompositeOperator_ScreenCompositeOp => CompositeOperator::Screen, + crate::bindings::CompositeOperator_SoftLightCompositeOp => CompositeOperator::SoftLight, + crate::bindings::CompositeOperator_SrcAtopCompositeOp => CompositeOperator::SrcAtop, + crate::bindings::CompositeOperator_SrcCompositeOp => CompositeOperator::Src, + crate::bindings::CompositeOperator_SrcInCompositeOp => CompositeOperator::SrcIn, + crate::bindings::CompositeOperator_SrcOutCompositeOp => CompositeOperator::SrcOut, + crate::bindings::CompositeOperator_SrcOverCompositeOp => CompositeOperator::SrcOver, + crate::bindings::CompositeOperator_ThresholdCompositeOp => CompositeOperator::Threshold, + crate::bindings::CompositeOperator_VividLightCompositeOp => CompositeOperator::VividLight, + crate::bindings::CompositeOperator_XorCompositeOp => CompositeOperator::Xor, + crate::bindings::CompositeOperator_StereoCompositeOp => CompositeOperator::Stereo, + crate::bindings::CompositeOperator_FreezeCompositeOp => CompositeOperator::Freeze, + crate::bindings::CompositeOperator_InterpolateCompositeOp => CompositeOperator::Interpolate, + crate::bindings::CompositeOperator_NegateCompositeOp => CompositeOperator::Negate, + crate::bindings::CompositeOperator_ReflectCompositeOp => CompositeOperator::Reflect, + crate::bindings::CompositeOperator_SoftBurnCompositeOp => CompositeOperator::SoftBurn, + crate::bindings::CompositeOperator_SoftDodgeCompositeOp => CompositeOperator::SoftDodge, + crate::bindings::CompositeOperator_StampCompositeOp => CompositeOperator::Stamp, + crate::bindings::CompositeOperator_RMSECompositeOp => CompositeOperator::RMSE, + crate::bindings::CompositeOperator_SaliencyBlendCompositeOp => CompositeOperator::SaliencyBlend, + crate::bindings::CompositeOperator_SeamlessBlendCompositeOp => CompositeOperator::SeamlessBlend, + _ => CompositeOperator::default(), + } + } +} diff --git a/src/wand/magick.rs b/src/wand/magick.rs index 593d4d7..517c2c7 100644 --- a/src/wand/magick.rs +++ b/src/wand/magick.rs @@ -28,7 +28,7 @@ use {size_t, ssize_t}; use crate::result::Result; -use super::{DrawingWand, PixelWand, CompositeOperator}; +use super::{CompositeOperator, DrawingWand, PixelWand}; wand_common!( MagickWand, @@ -232,6 +232,19 @@ impl MagickWand { (distortion, wand) } + pub fn get_image_compose(&self) -> CompositeOperator { + unsafe { bindings::MagickGetImageCompose(self.wand).into() } + } + + pub fn set_image_compose(&self, composite_operator: CompositeOperator) -> Result<()> { + match unsafe { bindings::MagickSetImageCompose(self.wand, composite_operator.into()) } { + bindings::MagickBooleanType_MagickTrue => Ok(()), + _ => Err(MagickError( + "Failed to set the image composite operator type", + )), + } + } + /// Compose another image onto self at (x, y) using composition_operator pub fn compose_images( &self, @@ -1086,7 +1099,6 @@ impl MagickWand { get_compression_quality, set_compression_quality, MagickGetCompressionQuality, MagickSetCompressionQuality, size_t get_gravity, set_gravity, MagickGetGravity, MagickSetGravity, bindings::GravityType get_image_colorspace, set_image_colorspace, MagickGetImageColorspace, MagickSetImageColorspace, bindings::ColorspaceType - get_image_compose, set_image_compose, MagickGetImageCompose, MagickSetImageCompose, bindings::CompositeOperator get_image_compression, set_image_compression, MagickGetImageCompression, MagickSetImageCompression, bindings::CompressionType get_image_compression_quality, set_image_compression_quality, MagickGetImageCompressionQuality, MagickSetImageCompressionQuality, size_t get_image_delay, set_image_delay, MagickGetImageDelay, MagickSetImageDelay, size_t