diff --git a/src/types/clip_path_units.rs b/src/types/clip_path_units.rs new file mode 100644 index 0000000..762efe8 --- /dev/null +++ b/src/types/clip_path_units.rs @@ -0,0 +1,39 @@ +use crate::bindings; + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +#[repr(u32)] +pub enum ClipPathUnits { + Undefined = bindings::ClipPathUnits_UndefinedPathUnits, + UserSpace = bindings::ClipPathUnits_UserSpace, + UserSpaceOnUse = bindings::ClipPathUnits_UserSpaceOnUse, + ObjectBoundingBox = bindings::ClipPathUnits_ObjectBoundingBox, +} + +impl Default for ClipPathUnits { + fn default() -> Self { + return ClipPathUnits::Undefined; + } +} + +impl From for bindings::ClipPathUnits { + fn from(value: ClipPathUnits) -> Self { + return value as bindings::ClipPathUnits; + } +} + +impl From for ClipPathUnits { + fn from(value: bindings::ClipPathUnits) -> Self { + /* + * SAFETY: + * + * `ClipPathUnits` has the same repr as `bindings::ClipPathUnits` - u32 + * + * If `value` is less than ObjectBoundingBox than it is in the vaild range and can be safely + * reinterpreted as `ClipPathUnits` + */ + if value <= bindings::ClipPathUnits_ObjectBoundingBox { + return unsafe { std::mem::transmute(value) }; + } + return ClipPathUnits::default(); + } +} diff --git a/src/types/mod.rs b/src/types/mod.rs index c21e5ed..7894e4d 100644 --- a/src/types/mod.rs +++ b/src/types/mod.rs @@ -1,4 +1,5 @@ mod alpha_channel_option; +mod clip_path_units; mod colorspace_type; mod composite_operator; mod compression_type; @@ -17,8 +18,10 @@ mod rendering_intent; mod resolution_type; mod resource_type; mod statistic_type; +mod style_type; pub use self::alpha_channel_option::AlphaChannelOption; +pub use self::clip_path_units::ClipPathUnits; pub use self::colorspace_type::ColorspaceType; pub use self::composite_operator::CompositeOperator; pub use self::compression_type::CompressionType; @@ -37,3 +40,4 @@ pub use self::rendering_intent::RenderingIntent; pub use self::resolution_type::ResolutionType; pub use self::resource_type::ResourceType; pub use self::statistic_type::StatisticType; +pub use self::style_type::StyleType; diff --git a/src/types/style_type.rs b/src/types/style_type.rs new file mode 100644 index 0000000..be22eaf --- /dev/null +++ b/src/types/style_type.rs @@ -0,0 +1,41 @@ +use crate::bindings; + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +#[repr(u32)] +pub enum StyleType { + Undefined = bindings::StyleType_UndefinedStyle, + Normal = bindings::StyleType_NormalStyle, + Italic = bindings::StyleType_ItalicStyle, + Oblique = bindings::StyleType_ObliqueStyle, + Any = bindings::StyleType_AnyStyle, + Bold = bindings::StyleType_BoldStyle, +} + +impl Default for StyleType { + fn default() -> Self { + return StyleType::Undefined; + } +} + +impl From for bindings::StyleType { + fn from(value: StyleType) -> Self { + return value as bindings::StyleType; + } +} + +impl From for StyleType { + fn from(value: bindings::StyleType) -> Self { + /* + * SAFETY: + * + * `StyleType` has the same repr as `bindings::StyleType` - u32 + * + * If `value` is less than Bold than it is in the vaild range and can be safely + * reinterpreted as `StyleType` + */ + if value <= bindings::StyleType_BoldStyle { + return unsafe { std::mem::transmute(value) }; + } + return StyleType::default(); + } +} diff --git a/src/wand/drawing.rs b/src/wand/drawing.rs index 39b6bbf..5810b43 100644 --- a/src/wand/drawing.rs +++ b/src/wand/drawing.rs @@ -21,8 +21,10 @@ use bindings; use crate::result::MagickError; use crate::result::Result; use crate::{ + ClipPathUnits, FillRule, GravityType, + StyleType, }; wand_common!( @@ -93,12 +95,12 @@ impl DrawingWand { get_gravity, set_gravity, DrawGetGravity, DrawSetGravity, GravityType get_opacity, set_opacity, DrawGetOpacity, DrawSetOpacity, f64 get_clip_rule, set_clip_rule, DrawGetClipRule, DrawSetClipRule, FillRule - get_clip_units, set_clip_units, DrawGetClipUnits, DrawSetClipUnits, bindings::ClipPathUnits + get_clip_units, set_clip_units, DrawGetClipUnits, DrawSetClipUnits, ClipPathUnits get_fill_rule, set_fill_rule, DrawGetFillRule, DrawSetFillRule, FillRule get_fill_opacity, set_fill_opacity, DrawGetFillOpacity, DrawSetFillOpacity, f64 get_font_size, set_font_size, DrawGetFontSize, DrawSetFontSize, f64 - get_font_style, set_font_style, DrawGetFontStyle, DrawSetFontStyle, bindings::StyleType + get_font_style, set_font_style, DrawGetFontStyle, DrawSetFontStyle, StyleType get_font_weight, set_font_weight, DrawGetFontWeight, DrawSetFontWeight, usize get_font_stretch, set_font_stretch, DrawGetFontStretch, DrawSetFontStretch, bindings::StretchType