Add ColorspaceType type

This commit is contained in:
5ohue
2024-05-09 21:36:09 +03:00
parent d6c617ebce
commit e419039647
6 changed files with 161 additions and 25 deletions

View File

@ -0,0 +1,75 @@
use crate::bindings;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(u32)]
pub enum ColorspaceType {
Undefined = bindings::ColorspaceType_UndefinedColorspace,
CMY = bindings::ColorspaceType_CMYColorspace,
CMYK = bindings::ColorspaceType_CMYKColorspace,
GRAY = bindings::ColorspaceType_GRAYColorspace,
HCL = bindings::ColorspaceType_HCLColorspace,
HCLp = bindings::ColorspaceType_HCLpColorspace,
HSB = bindings::ColorspaceType_HSBColorspace,
HSI = bindings::ColorspaceType_HSIColorspace,
HSL = bindings::ColorspaceType_HSLColorspace,
HSV = bindings::ColorspaceType_HSVColorspace,
HWB = bindings::ColorspaceType_HWBColorspace,
Lab = bindings::ColorspaceType_LabColorspace,
LCH = bindings::ColorspaceType_LCHColorspace,
LCHab = bindings::ColorspaceType_LCHabColorspace,
LCHuv = bindings::ColorspaceType_LCHuvColorspace,
Log = bindings::ColorspaceType_LogColorspace,
LMS = bindings::ColorspaceType_LMSColorspace,
Luv = bindings::ColorspaceType_LuvColorspace,
OHTA = bindings::ColorspaceType_OHTAColorspace,
Rec601YCbCr = bindings::ColorspaceType_Rec601YCbCrColorspace,
Rec709YCbCr = bindings::ColorspaceType_Rec709YCbCrColorspace,
RGB = bindings::ColorspaceType_RGBColorspace,
scRGB = bindings::ColorspaceType_scRGBColorspace,
sRGB = bindings::ColorspaceType_sRGBColorspace,
Transparent = bindings::ColorspaceType_TransparentColorspace,
xyY = bindings::ColorspaceType_xyYColorspace,
XYZ = bindings::ColorspaceType_XYZColorspace,
YCbCr = bindings::ColorspaceType_YCbCrColorspace,
YCC = bindings::ColorspaceType_YCCColorspace,
YDbDr = bindings::ColorspaceType_YDbDrColorspace,
YIQ = bindings::ColorspaceType_YIQColorspace,
YPbPr = bindings::ColorspaceType_YPbPrColorspace,
YUV = bindings::ColorspaceType_YUVColorspace,
LinearGRAY = bindings::ColorspaceType_LinearGRAYColorspace,
Jzazbz = bindings::ColorspaceType_JzazbzColorspace,
DisplayP3 = bindings::ColorspaceType_DisplayP3Colorspace,
Adobe98 = bindings::ColorspaceType_Adobe98Colorspace,
ProPhoto = bindings::ColorspaceType_ProPhotoColorspace,
Oklab = bindings::ColorspaceType_OklabColorspace,
Oklch = bindings::ColorspaceType_OklchColorspace,
}
impl Default for ColorspaceType {
fn default() -> Self {
return ColorspaceType::RGB;
}
}
impl From<ColorspaceType> for bindings::ColorspaceType {
fn from(value: ColorspaceType) -> Self {
return value as bindings::ColorspaceType;
}
}
impl From<bindings::ColorspaceType> for ColorspaceType {
fn from(value: bindings::ColorspaceType) -> Self {
/*
* SAFETY:
*
* `ColorspaceType` has the same repr as `bindings::ColorspaceType` - u32
*
* If `value` is less than Oklch than it is in the vaild range and can be safely
* reinterpreted as `ColorspaceType`
*/
if value <= bindings::ColorspaceType_OklchColorspace {
return unsafe { std::mem::transmute(value) };
}
return ColorspaceType::default();
}
}

View File

@ -1,7 +1,9 @@
mod colorspace_type;
mod composite_operator;
mod metric_type;
mod resource_type;
pub use self::colorspace_type::ColorspaceType;
pub use self::composite_operator::CompositeOperator;
pub use self::metric_type::MetricType;
pub use self::resource_type::ResourceType;

View File

@ -3,7 +3,7 @@ use std::convert::TryInto;
use crate::bindings;
/// Resource type to use with [set_resource_limit](crate::MagickWand::set_resource_limit)
#[derive(Debug, Clone, Copy)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ResourceType {
Undefined = bindings::ResourceType_UndefinedResource as isize,
Area = bindings::ResourceType_AreaResource as isize,