diff --git a/src/lib.rs b/src/lib.rs index 4cffebd..32fbc30 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -36,9 +36,7 @@ use libc::size_t; #[cfg(not(target_os = "freebsd"))] use libc::ssize_t; -pub use bindings::{ - ColorspaceType, CompositeOperator, DitherMethod, FilterType, GravityType, MetricType, -}; +pub use bindings::{ColorspaceType, DitherMethod, FilterType, GravityType, MetricType}; pub use conversions::ToMagick; pub use result::MagickError; use result::Result; diff --git a/src/wand/composite_operator.rs b/src/wand/composite_operator.rs new file mode 100644 index 0000000..359528e --- /dev/null +++ b/src/wand/composite_operator.rs @@ -0,0 +1,322 @@ +pub enum CompositeOperator { + UndefinedCompositeOp, + AlphaCompositeOp, + AtopCompositeOp, + BlendCompositeOp, + BlurCompositeOp, + BumpmapCompositeOp, + ChangeMaskCompositeOp, + ClearCompositeOp, + ColorBurnCompositeOp, + ColorDodgeCompositeOp, + ColorizeCompositeOp, + CopyBlackCompositeOp, + CopyBlueCompositeOp, + CopyCompositeOp, + CopyCyanCompositeOp, + CopyGreenCompositeOp, + CopyMagentaCompositeOp, + CopyAlphaCompositeOp, + CopyRedCompositeOp, + CopyYellowCompositeOp, + DarkenCompositeOp, + DarkenIntensityCompositeOp, + DifferenceCompositeOp, + DisplaceCompositeOp, + DissolveCompositeOp, + DistortCompositeOp, + DivideDstCompositeOp, + DivideSrcCompositeOp, + DstAtopCompositeOp, + DstCompositeOp, + DstInCompositeOp, + DstOutCompositeOp, + DstOverCompositeOp, + ExclusionCompositeOp, + HardLightCompositeOp, + HardMixCompositeOp, + HueCompositeOp, + InCompositeOp, + IntensityCompositeOp, + LightenCompositeOp, + LightenIntensityCompositeOp, + LinearBurnCompositeOp, + LinearDodgeCompositeOp, + LinearLightCompositeOp, + LuminizeCompositeOp, + MathematicsCompositeOp, + MinusDstCompositeOp, + MinusSrcCompositeOp, + ModulateCompositeOp, + ModulusAddCompositeOp, + ModulusSubtractCompositeOp, + MultiplyCompositeOp, + NoCompositeOp, + OutCompositeOp, + OverCompositeOp, + OverlayCompositeOp, + PegtopLightCompositeOp, + PinLightCompositeOp, + PlusCompositeOp, + ReplaceCompositeOp, + SaturateCompositeOp, + ScreenCompositeOp, + SoftLightCompositeOp, + SrcAtopCompositeOp, + SrcCompositeOp, + SrcInCompositeOp, + SrcOutCompositeOp, + SrcOverCompositeOp, + ThresholdCompositeOp, + VividLightCompositeOp, + XorCompositeOp, + StereoCompositeOp, + FreezeCompositeOp, + InterpolateCompositeOp, + NegateCompositeOp, + ReflectCompositeOp, + SoftBurnCompositeOp, + SoftDodgeCompositeOp, + StampCompositeOp, + RMSECompositeOp, + SaliencyBlendCompositeOp, + SeamlessBlendCompositeOp, +} + +impl From for crate::bindings::CompositeOperator { + fn from(value: CompositeOperator) -> Self { + match value { + CompositeOperator::UndefinedCompositeOp => { + crate::bindings::CompositeOperator_UndefinedCompositeOp + } + CompositeOperator::AlphaCompositeOp => { + crate::bindings::CompositeOperator_AlphaCompositeOp + } + CompositeOperator::AtopCompositeOp => { + crate::bindings::CompositeOperator_AtopCompositeOp + } + CompositeOperator::BlendCompositeOp => { + crate::bindings::CompositeOperator_BlendCompositeOp + } + CompositeOperator::BlurCompositeOp => { + crate::bindings::CompositeOperator_BlurCompositeOp + } + CompositeOperator::BumpmapCompositeOp => { + crate::bindings::CompositeOperator_BumpmapCompositeOp + } + CompositeOperator::ChangeMaskCompositeOp => { + crate::bindings::CompositeOperator_ChangeMaskCompositeOp + } + CompositeOperator::ClearCompositeOp => { + crate::bindings::CompositeOperator_ClearCompositeOp + } + CompositeOperator::ColorBurnCompositeOp => { + crate::bindings::CompositeOperator_ColorBurnCompositeOp + } + CompositeOperator::ColorDodgeCompositeOp => { + crate::bindings::CompositeOperator_ColorDodgeCompositeOp + } + CompositeOperator::ColorizeCompositeOp => { crate::bindings::CompositeOperator_ColorizeCompositeOp + } + CompositeOperator::CopyBlackCompositeOp => { + crate::bindings::CompositeOperator_CopyBlackCompositeOp + } + CompositeOperator::CopyBlueCompositeOp => { + crate::bindings::CompositeOperator_CopyBlueCompositeOp + } + CompositeOperator::CopyCompositeOp => { + crate::bindings::CompositeOperator_CopyCompositeOp + } + CompositeOperator::CopyCyanCompositeOp => { + crate::bindings::CompositeOperator_CopyCyanCompositeOp + } + CompositeOperator::CopyGreenCompositeOp => { + crate::bindings::CompositeOperator_CopyGreenCompositeOp + } + CompositeOperator::CopyMagentaCompositeOp => { + crate::bindings::CompositeOperator_CopyMagentaCompositeOp + } + CompositeOperator::CopyAlphaCompositeOp => { + crate::bindings::CompositeOperator_CopyAlphaCompositeOp + } + CompositeOperator::CopyRedCompositeOp => { + crate::bindings::CompositeOperator_CopyRedCompositeOp + } + CompositeOperator::CopyYellowCompositeOp => { + crate::bindings::CompositeOperator_CopyYellowCompositeOp + } + CompositeOperator::DarkenCompositeOp => { + crate::bindings::CompositeOperator_DarkenCompositeOp + } + CompositeOperator::DarkenIntensityCompositeOp => { + crate::bindings::CompositeOperator_DarkenIntensityCompositeOp + } + CompositeOperator::DifferenceCompositeOp => { + crate::bindings::CompositeOperator_DifferenceCompositeOp + } + CompositeOperator::DisplaceCompositeOp => { + crate::bindings::CompositeOperator_DisplaceCompositeOp + } + CompositeOperator::DissolveCompositeOp => { + crate::bindings::CompositeOperator_DissolveCompositeOp + } + CompositeOperator::DistortCompositeOp => { + crate::bindings::CompositeOperator_DistortCompositeOp + } + CompositeOperator::DivideDstCompositeOp => { + crate::bindings::CompositeOperator_DivideDstCompositeOp + } + CompositeOperator::DivideSrcCompositeOp => { + crate::bindings::CompositeOperator_DivideSrcCompositeOp + } + CompositeOperator::DstAtopCompositeOp => { + crate::bindings::CompositeOperator_DstAtopCompositeOp + } + CompositeOperator::DstCompositeOp => crate::bindings::CompositeOperator_DstCompositeOp, + CompositeOperator::DstInCompositeOp => { + crate::bindings::CompositeOperator_DstInCompositeOp + } + CompositeOperator::DstOutCompositeOp => { + crate::bindings::CompositeOperator_DstOutCompositeOp + } + CompositeOperator::DstOverCompositeOp => { + crate::bindings::CompositeOperator_DstOverCompositeOp + } + CompositeOperator::ExclusionCompositeOp => { + crate::bindings::CompositeOperator_ExclusionCompositeOp + } + CompositeOperator::HardLightCompositeOp => { + crate::bindings::CompositeOperator_HardLightCompositeOp + } + CompositeOperator::HardMixCompositeOp => { + crate::bindings::CompositeOperator_HardMixCompositeOp + } + CompositeOperator::HueCompositeOp => crate::bindings::CompositeOperator_HueCompositeOp, + CompositeOperator::InCompositeOp => crate::bindings::CompositeOperator_InCompositeOp, + CompositeOperator::IntensityCompositeOp => { + crate::bindings::CompositeOperator_IntensityCompositeOp + } + CompositeOperator::LightenCompositeOp => { + crate::bindings::CompositeOperator_LightenCompositeOp + } + CompositeOperator::LightenIntensityCompositeOp => { + crate::bindings::CompositeOperator_LightenIntensityCompositeOp + } + CompositeOperator::LinearBurnCompositeOp => { + crate::bindings::CompositeOperator_LinearBurnCompositeOp + } + CompositeOperator::LinearDodgeCompositeOp => { + crate::bindings::CompositeOperator_LinearDodgeCompositeOp + } + CompositeOperator::LinearLightCompositeOp => { + crate::bindings::CompositeOperator_LinearLightCompositeOp + } + CompositeOperator::LuminizeCompositeOp => { + crate::bindings::CompositeOperator_LuminizeCompositeOp + } + CompositeOperator::MathematicsCompositeOp => { + crate::bindings::CompositeOperator_MathematicsCompositeOp + } + CompositeOperator::MinusDstCompositeOp => { + crate::bindings::CompositeOperator_MinusDstCompositeOp + } + CompositeOperator::MinusSrcCompositeOp => { + crate::bindings::CompositeOperator_MinusSrcCompositeOp + } + CompositeOperator::ModulateCompositeOp => { + crate::bindings::CompositeOperator_ModulateCompositeOp + } + CompositeOperator::ModulusAddCompositeOp => { + crate::bindings::CompositeOperator_ModulusAddCompositeOp + } + CompositeOperator::ModulusSubtractCompositeOp => { + crate::bindings::CompositeOperator_ModulusSubtractCompositeOp + } + CompositeOperator::MultiplyCompositeOp => { + crate::bindings::CompositeOperator_MultiplyCompositeOp + } + CompositeOperator::NoCompositeOp => crate::bindings::CompositeOperator_NoCompositeOp, + CompositeOperator::OutCompositeOp => crate::bindings::CompositeOperator_OutCompositeOp, + CompositeOperator::OverCompositeOp => { + crate::bindings::CompositeOperator_OverCompositeOp + } + CompositeOperator::OverlayCompositeOp => { + crate::bindings::CompositeOperator_OverlayCompositeOp + } + CompositeOperator::PegtopLightCompositeOp => { + crate::bindings::CompositeOperator_PegtopLightCompositeOp + } + CompositeOperator::PinLightCompositeOp => { + crate::bindings::CompositeOperator_PinLightCompositeOp + } + CompositeOperator::PlusCompositeOp => { + crate::bindings::CompositeOperator_PlusCompositeOp + } + CompositeOperator::ReplaceCompositeOp => { + crate::bindings::CompositeOperator_ReplaceCompositeOp + } + CompositeOperator::SaturateCompositeOp => { + crate::bindings::CompositeOperator_SaturateCompositeOp + } + CompositeOperator::ScreenCompositeOp => { + crate::bindings::CompositeOperator_ScreenCompositeOp + } + CompositeOperator::SoftLightCompositeOp => { + crate::bindings::CompositeOperator_SoftLightCompositeOp + } + CompositeOperator::SrcAtopCompositeOp => { + crate::bindings::CompositeOperator_SrcAtopCompositeOp + } + CompositeOperator::SrcCompositeOp => crate::bindings::CompositeOperator_SrcCompositeOp, + CompositeOperator::SrcInCompositeOp => { + crate::bindings::CompositeOperator_SrcInCompositeOp + } + CompositeOperator::SrcOutCompositeOp => { + crate::bindings::CompositeOperator_SrcOutCompositeOp + } + CompositeOperator::SrcOverCompositeOp => { + crate::bindings::CompositeOperator_SrcOverCompositeOp + } + CompositeOperator::ThresholdCompositeOp => { + crate::bindings::CompositeOperator_ThresholdCompositeOp + } + CompositeOperator::VividLightCompositeOp => { + crate::bindings::CompositeOperator_VividLightCompositeOp + } + CompositeOperator::XorCompositeOp => crate::bindings::CompositeOperator_XorCompositeOp, + CompositeOperator::StereoCompositeOp => { + crate::bindings::CompositeOperator_StereoCompositeOp + } + CompositeOperator::FreezeCompositeOp => { + crate::bindings::CompositeOperator_FreezeCompositeOp + } + CompositeOperator::InterpolateCompositeOp => { + crate::bindings::CompositeOperator_InterpolateCompositeOp + } + CompositeOperator::NegateCompositeOp => { + crate::bindings::CompositeOperator_NegateCompositeOp + } + CompositeOperator::ReflectCompositeOp => { + crate::bindings::CompositeOperator_ReflectCompositeOp + } + CompositeOperator::SoftBurnCompositeOp => { + crate::bindings::CompositeOperator_SoftBurnCompositeOp + } + CompositeOperator::SoftDodgeCompositeOp => { + crate::bindings::CompositeOperator_SoftDodgeCompositeOp + } + CompositeOperator::StampCompositeOp => { + crate::bindings::CompositeOperator_StampCompositeOp + } + CompositeOperator::RMSECompositeOp => { + crate::bindings::CompositeOperator_RMSECompositeOp + } + CompositeOperator::SaliencyBlendCompositeOp => { + crate::bindings::CompositeOperator_SaliencyBlendCompositeOp + } + CompositeOperator::SeamlessBlendCompositeOp => { + crate::bindings::CompositeOperator_SeamlessBlendCompositeOp + } + } + } +} diff --git a/src/wand/magick.rs b/src/wand/magick.rs index 54d4185..593d4d7 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}; +use super::{DrawingWand, PixelWand, CompositeOperator}; wand_common!( MagickWand, @@ -236,7 +236,7 @@ impl MagickWand { pub fn compose_images( &self, reference: &MagickWand, - composition_operator: bindings::CompositeOperator, + composition_operator: CompositeOperator, clip_to_self: bool, x: isize, y: isize, @@ -250,7 +250,7 @@ impl MagickWand { bindings::MagickCompositeImage( self.wand, reference.wand, - composition_operator, + composition_operator.into(), native_clip_to_self, x, y, @@ -266,14 +266,14 @@ impl MagickWand { pub fn compose_images_gravity( &self, reference: &MagickWand, - composition_operator: bindings::CompositeOperator, + composition_operator: CompositeOperator, gravity_type: bindings::GravityType, ) -> Result<()> { let result = unsafe { bindings::MagickCompositeImageGravity( self.wand, reference.wand, - composition_operator, + composition_operator.into(), gravity_type, ) }; @@ -949,10 +949,10 @@ impl MagickWand { pixel_wand: &PixelWand, width: usize, height: usize, - compose: bindings::CompositeOperator, + compose: CompositeOperator, ) -> Result<()> { match unsafe { - bindings::MagickBorderImage(self.wand, pixel_wand.wand, width, height, compose) + bindings::MagickBorderImage(self.wand, pixel_wand.wand, width, height, compose.into()) } { bindings::MagickBooleanType_MagickTrue => Ok(()), diff --git a/src/wand/mod.rs b/src/wand/mod.rs index 2cf9201..1e40284 100644 --- a/src/wand/mod.rs +++ b/src/wand/mod.rs @@ -15,10 +15,12 @@ */ #[macro_use] mod macros; +mod composite_operator; mod drawing; mod magick; mod pixel; +pub use self::composite_operator::CompositeOperator; pub use self::drawing::DrawingWand; pub use self::magick::{MagickWand, ResourceType}; pub use self::pixel::{PixelWand, HSL};