fixed set/get for new CompositeOperator type

This commit is contained in:
5ohue
2023-11-16 22:16:33 +03:00
parent c00ce82a4c
commit e1cefcdbe6
2 changed files with 106 additions and 2 deletions

View File

@ -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<CompositeOperator> for crate::bindings::CompositeOperator {
}
}
}
impl From<crate::bindings::CompositeOperator> 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(),
}
}
}

View File

@ -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