#[derive(Debug, Clone, Default)]
pub struct PixelData {
pub width: u32,
pub height: u32,
pub data: Vec<u8>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum BlendMode {
PassThrough,
Normal,
Dissolve,
Darken,
Multiply,
ColorBurn,
LinearBurn,
DarkerColor,
Lighten,
Screen,
ColorDodge,
LinearDodge,
LighterColor,
Overlay,
SoftLight,
HardLight,
VividLight,
LinearLight,
PinLight,
HardMix,
Difference,
Exclusion,
Subtract,
Divide,
Hue,
Saturation,
Color,
Luminosity,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ColorMode {
Bitmap = 0,
Grayscale = 1,
Indexed = 2,
Rgb = 3,
Cmyk = 4,
Multichannel = 7,
Duotone = 8,
Lab = 9,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum SectionDividerType {
Other = 0,
OpenFolder = 1,
ClosedFolder = 2,
BoundingSectionDivider = 3,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum LayerCompCapturedInfo {
None = 0,
Visibility = 1,
Position = 2,
Appearance = 4,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ChannelId {
Color0 = 0,
Color1 = 1,
Color2 = 2,
Color3 = 3,
Transparency = -1,
UserMask = -2,
RealUserMask = -3,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Compression {
RawData = 0,
RleCompressed = 1,
ZipWithoutPrediction = 2,
ZipWithPrediction = 3,
}
#[derive(Debug, Clone, Copy, Default, PartialEq)]
pub struct Rgba {
pub r: f64,
pub g: f64,
pub b: f64,
pub a: f64,
}
#[derive(Debug, Clone, Copy, Default, PartialEq)]
pub struct Rgb {
pub r: f64,
pub g: f64,
pub b: f64,
}
#[derive(Debug, Clone, Copy, Default, PartialEq)]
pub struct Frgb {
pub fr: f64,
pub fg: f64,
pub fb: f64,
}
#[derive(Debug, Clone, Copy, Default, PartialEq)]
pub struct Hsb {
pub h: f64,
pub s: f64,
pub b: f64,
}
#[derive(Debug, Clone, Copy, Default, PartialEq)]
pub struct Cmyk {
pub c: f64,
pub m: f64,
pub y: f64,
pub k: f64,
}
#[derive(Debug, Clone, Copy, Default, PartialEq)]
pub struct Lab {
pub l: f64,
pub a: f64,
pub b: f64,
}
#[derive(Debug, Clone, Copy, Default, PartialEq)]
pub struct Grayscale {
pub k: f64,
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum Color {
Rgba(Rgba),
Rgb(Rgb),
Frgb(Frgb),
Hsb(Hsb),
Cmyk(Cmyk),
Lab(Lab),
Grayscale(Grayscale),
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Units {
Pixels,
Points,
Picas,
Millimeters,
Centimeters,
Inches,
None,
Density,
}
#[derive(Debug, Clone, Copy)]
pub struct UnitsValue {
pub units: Units,
pub value: f64,
}
#[derive(Debug, Clone, Copy)]
pub struct UnitsBounds {
pub top: UnitsValue,
pub left: UnitsValue,
pub right: UnitsValue,
pub bottom: UnitsValue,
}
#[derive(Debug, Clone, Copy, Default, PartialEq)]
pub struct PointF {
pub x: f64,
pub y: f64,
}
#[derive(Debug, Clone, Copy)]
pub struct UnitsPoint {
pub x: UnitsValue,
pub y: UnitsValue,
}
#[derive(Debug, Clone, Copy, Default)]
pub struct HorizontalVertical {
pub horizontal: f64,
pub vertical: f64,
}
#[derive(Debug, Clone, Copy, Default)]
pub struct Bounds {
pub top: f64,
pub left: f64,
pub bottom: f64,
pub right: f64,
}
#[derive(Debug, Clone, Copy, Default)]
pub struct LtrbBounds {
pub left: f64,
pub top: f64,
pub right: f64,
pub bottom: f64,
}
#[derive(Debug, Clone, Copy, Default)]
pub struct Fraction {
pub numerator: f64,
pub denominator: f64,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum TextGridding {
None,
Round,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Orientation {
Horizontal,
Vertical,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum AntiAlias {
None,
Sharp,
Crisp,
Strong,
Smooth,
Platform,
PlatformLcd,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum WarpStyle {
None,
Arc,
ArcLower,
ArcUpper,
Arch,
Bulge,
ShellLower,
ShellUpper,
Flag,
Wave,
Fish,
Rise,
Fisheye,
Inflate,
Squeeze,
Twist,
Custom,
Cylinder,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum BevelStyle {
OuterBevel,
InnerBevel,
Emboss,
PillowEmboss,
StrokeEmboss,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum BevelTechnique {
Smooth,
ChiselHard,
ChiselSoft,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum BevelDirection {
Up,
Down,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum GlowTechnique {
Softer,
Precise,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum GlowSource {
Edge,
Center,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum GradientStyle {
Linear,
Radial,
Angle,
Reflected,
Diamond,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Justification {
Left,
Right,
Center,
JustifyLeft,
JustifyRight,
JustifyCenter,
JustifyAll,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum LineCapType {
Butt,
Round,
Square,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum LineJoinType {
Miter,
Round,
Bevel,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum LineAlignment {
Inside,
Center,
Outside,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum InterpolationMethod {
Classic,
Perceptual,
Linear,
Smooth,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum RenderingIntent {
Perceptual,
Saturation,
RelativeColorimetric,
AbsoluteColorimetric,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum BooleanOperation {
Exclude,
Combine,
Subtract,
Intersect,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum LayerColor {
None,
Red,
Orange,
Yellow,
Green,
Blue,
Violet,
Gray,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum PlacedLayerType {
Unknown,
Vector,
Raster,
ImageStack,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum TimelineKeyInterpolation {
Linear,
Hold,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum TimelineTrackType {
Opacity,
Style,
SheetTransform,
SheetPosition,
GlobalLighting,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum StrokePosition {
Inside,
Center,
Outside,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum StrokeFillType {
Color,
Gradient,
Pattern,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum GradientColorModel {
Rgb,
Hsb,
Lab,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum FillRule {
EvenOdd,
NonZero,
}
#[derive(Debug, Clone, Default)]
pub struct EffectContour {
pub name: String,
pub curve: Vec<PointF>,
}
#[derive(Debug, Clone, Default)]
pub struct EffectPattern {
pub name: String,
pub id: String,
}
#[derive(Debug, Clone)]
pub struct ColorStop {
pub color: Color,
pub location: f64,
pub midpoint: f64,
}
#[derive(Debug, Clone, Default)]
pub struct OpacityStop {
pub opacity: f64,
pub location: f64,
pub midpoint: f64,
}
#[derive(Debug, Clone, Default)]
pub struct EffectSolidGradient {
pub name: String,
pub smoothness: Option<f64>,
pub color_stops: Vec<ColorStop>,
pub opacity_stops: Vec<OpacityStop>,
}
#[derive(Debug, Clone, Default)]
pub struct EffectNoiseGradient {
pub name: String,
pub roughness: Option<f64>,
pub color_model: Option<GradientColorModel>,
pub random_seed: Option<f64>,
pub restrict_colors: Option<bool>,
pub add_transparency: Option<bool>,
pub min: Vec<f64>,
pub max: Vec<f64>,
}
#[derive(Debug, Clone)]
pub enum EffectGradient {
Solid(EffectSolidGradient),
Noise(EffectNoiseGradient),
}
#[derive(Debug, Clone, Default)]
pub struct ExtraGradientInfo {
pub style: Option<GradientStyle>,
pub scale: Option<f64>,
pub angle: Option<f64>,
pub dither: Option<bool>,
pub interpolation_method: Option<InterpolationMethod>,
pub reverse: Option<bool>,
pub align: Option<bool>,
pub offset: Option<PointF>,
}
#[derive(Debug, Clone, Default)]
pub struct ExtraPatternInfo {
pub linked: Option<bool>,
pub phase: Option<PointF>,
}
#[derive(Debug, Clone)]
pub struct GradientWithExtra {
pub gradient: EffectGradient,
pub extra: ExtraGradientInfo,
}
#[derive(Debug, Clone, Default)]
pub struct LayerEffectShadow {
pub present: Option<bool>,
pub show_in_dialog: Option<bool>,
pub enabled: Option<bool>,
pub size: Option<UnitsValue>,
pub angle: Option<f64>,
pub distance: Option<UnitsValue>,
pub color: Option<Color>,
pub blend_mode: Option<BlendMode>,
pub opacity: Option<f64>,
pub use_global_light: Option<bool>,
pub antialiased: Option<bool>,
pub contour: Option<EffectContour>,
pub choke: Option<UnitsValue>,
pub layer_conceals: Option<bool>,
}
#[derive(Debug, Clone, Default)]
pub struct LayerEffectsOuterGlow {
pub present: Option<bool>,
pub show_in_dialog: Option<bool>,
pub enabled: Option<bool>,
pub size: Option<UnitsValue>,
pub color: Option<Color>,
pub blend_mode: Option<BlendMode>,
pub opacity: Option<f64>,
pub source: Option<GlowSource>,
pub antialiased: Option<bool>,
pub noise: Option<f64>,
pub range: Option<f64>,
pub choke: Option<UnitsValue>,
pub jitter: Option<f64>,
pub contour: Option<EffectContour>,
}
#[derive(Debug, Clone, Default)]
pub struct LayerEffectInnerGlow {
pub present: Option<bool>,
pub show_in_dialog: Option<bool>,
pub enabled: Option<bool>,
pub size: Option<UnitsValue>,
pub color: Option<Color>,
pub blend_mode: Option<BlendMode>,
pub opacity: Option<f64>,
pub source: Option<GlowSource>,
pub technique: Option<GlowTechnique>,
pub antialiased: Option<bool>,
pub noise: Option<f64>,
pub range: Option<f64>,
pub choke: Option<UnitsValue>,
pub jitter: Option<f64>,
pub contour: Option<EffectContour>,
}
#[derive(Debug, Clone, Default)]
pub struct LayerEffectBevel {
pub present: Option<bool>,
pub show_in_dialog: Option<bool>,
pub enabled: Option<bool>,
pub size: Option<UnitsValue>,
pub angle: Option<f64>,
pub strength: Option<f64>,
pub highlight_blend_mode: Option<BlendMode>,
pub shadow_blend_mode: Option<BlendMode>,
pub highlight_color: Option<Color>,
pub shadow_color: Option<Color>,
pub style: Option<BevelStyle>,
pub highlight_opacity: Option<f64>,
pub shadow_opacity: Option<f64>,
pub soften: Option<UnitsValue>,
pub use_global_light: Option<bool>,
pub altitude: Option<f64>,
pub technique: Option<BevelTechnique>,
pub direction: Option<BevelDirection>,
pub use_texture: Option<bool>,
pub use_shape: Option<bool>,
pub antialias_gloss: Option<bool>,
pub contour: Option<EffectContour>,
}
#[derive(Debug, Clone, Default)]
pub struct LayerEffectSolidFill {
pub present: Option<bool>,
pub show_in_dialog: Option<bool>,
pub enabled: Option<bool>,
pub blend_mode: Option<BlendMode>,
pub color: Option<Color>,
pub opacity: Option<f64>,
}
#[derive(Debug, Clone, Default)]
pub struct LayerEffectStroke {
pub present: Option<bool>,
pub show_in_dialog: Option<bool>,
pub enabled: Option<bool>,
pub overprint: Option<bool>,
pub size: Option<UnitsValue>,
pub position: Option<StrokePosition>,
pub fill_type: Option<StrokeFillType>,
pub blend_mode: Option<BlendMode>,
pub opacity: Option<f64>,
pub color: Option<Color>,
pub gradient: Option<GradientWithExtra>,
pub pattern: Option<EffectPattern>,
}
#[derive(Debug, Clone, Default)]
pub struct LayerEffectSatin {
pub present: Option<bool>,
pub show_in_dialog: Option<bool>,
pub enabled: Option<bool>,
pub size: Option<UnitsValue>,
pub blend_mode: Option<BlendMode>,
pub color: Option<Color>,
pub antialiased: Option<bool>,
pub opacity: Option<f64>,
pub distance: Option<UnitsValue>,
pub invert: Option<bool>,
pub angle: Option<f64>,
pub contour: Option<EffectContour>,
}
#[derive(Debug, Clone, Default)]
pub struct LayerEffectPatternOverlay {
pub present: Option<bool>,
pub show_in_dialog: Option<bool>,
pub enabled: Option<bool>,
pub blend_mode: Option<BlendMode>,
pub opacity: Option<f64>,
pub scale: Option<f64>,
pub pattern: Option<EffectPattern>,
pub phase: Option<PointF>,
pub align: Option<bool>,
}
#[derive(Debug, Clone, Default)]
pub struct LayerEffectGradientOverlay {
pub blend_mode: Option<String>,
pub present: Option<bool>,
pub show_in_dialog: Option<bool>,
pub enabled: Option<bool>,
pub opacity: Option<f64>,
pub align: Option<bool>,
pub scale: Option<f64>,
pub dither: Option<bool>,
pub reverse: Option<bool>,
pub gradient_type: Option<GradientStyle>,
pub offset: Option<PointF>,
pub gradient: Option<EffectGradient>,
pub interpolation_method: Option<InterpolationMethod>,
pub angle: Option<f64>,
}
#[derive(Debug, Clone, Default)]
pub struct LayerEffectsInfo {
pub disabled: Option<bool>,
pub scale: Option<f64>,
pub drop_shadow: Option<Vec<LayerEffectShadow>>,
pub inner_shadow: Option<Vec<LayerEffectShadow>>,
pub outer_glow: Option<LayerEffectsOuterGlow>,
pub inner_glow: Option<LayerEffectInnerGlow>,
pub bevel: Option<LayerEffectBevel>,
pub solid_fill: Option<Vec<LayerEffectSolidFill>>,
pub satin: Option<LayerEffectSatin>,
pub stroke: Option<Vec<LayerEffectStroke>>,
pub gradient_overlay: Option<Vec<LayerEffectGradientOverlay>>,
pub pattern_overlay: Option<LayerEffectPatternOverlay>,
}
#[derive(Debug, Clone, Default)]
pub struct LayerMaskData {
pub top: Option<f64>,
pub left: Option<f64>,
pub bottom: Option<f64>,
pub right: Option<f64>,
pub default_color: Option<f64>,
pub disabled: Option<bool>,
pub position_relative_to_layer: Option<bool>,
pub from_vector_data: Option<bool>,
pub user_mask_density: Option<f64>,
pub user_mask_feather: Option<f64>,
pub vector_mask_density: Option<f64>,
pub vector_mask_feather: Option<f64>,
pub canvas: Option<PixelData>,
pub image_data: Option<PixelData>,
}
#[derive(Debug, Clone, Default)]
pub struct CustomEnvelopeWarp {
pub quilt_slice_x: Option<Vec<f64>>,
pub quilt_slice_y: Option<Vec<f64>>,
pub mesh_points: Vec<PointF>,
}
#[derive(Debug, Clone, Default)]
pub struct Warp {
pub style: Option<WarpStyle>,
pub value: Option<f64>,
pub values: Option<Vec<f64>>,
pub perspective: Option<f64>,
pub perspective_other: Option<f64>,
pub rotate: Option<Orientation>,
pub bounds: Option<UnitsBounds>,
pub u_order: Option<f64>,
pub v_order: Option<f64>,
pub deform_num_rows: Option<f64>,
pub deform_num_cols: Option<f64>,
pub custom_envelope_warp: Option<CustomEnvelopeWarp>,
}
#[derive(Debug, Clone, Default)]
pub struct AnimationFrameInfo {
pub id: f64,
pub delay: f64,
pub dispose: Option<AnimationDispose>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum AnimationDispose {
Auto,
None,
Dispose,
}
#[derive(Debug, Clone, Default)]
pub struct AnimationInfo {
pub id: f64,
pub frames: Vec<f64>,
pub repeats: Option<f64>,
pub active_frame: Option<f64>,
}
#[derive(Debug, Clone, Default)]
pub struct Animations {
pub frames: Vec<AnimationFrameInfo>,
pub animations: Vec<AnimationInfo>,
}
#[derive(Debug, Clone, Default)]
pub struct Font {
pub name: String,
pub script: Option<f64>,
pub font_type: Option<f64>,
pub synthetic: Option<f64>,
}
#[derive(Debug, Clone, Default)]
pub struct ParagraphStyle {
pub justification: Option<Justification>,
pub first_line_indent: Option<f64>,
pub start_indent: Option<f64>,
pub end_indent: Option<f64>,
pub space_before: Option<f64>,
pub space_after: Option<f64>,
pub auto_hyphenate: Option<bool>,
pub hyphenated_word_size: Option<f64>,
pub pre_hyphen: Option<f64>,
pub post_hyphen: Option<f64>,
pub consecutive_hyphens: Option<f64>,
pub zone: Option<f64>,
pub word_spacing: Option<Vec<f64>>,
pub letter_spacing: Option<Vec<f64>>,
pub glyph_spacing: Option<Vec<f64>>,
pub auto_leading: Option<f64>,
pub leading_type: Option<f64>,
pub hanging: Option<bool>,
pub burasagari: Option<bool>,
pub kinsoku_order: Option<f64>,
pub every_line_composer: Option<bool>,
}
#[derive(Debug, Clone, Default)]
pub struct ParagraphStyleRun {
pub length: f64,
pub style: ParagraphStyle,
}
#[derive(Debug, Clone, Default)]
pub struct TextStyle {
pub font: Option<Font>,
pub font_size: Option<f64>,
pub faux_bold: Option<bool>,
pub faux_italic: Option<bool>,
pub auto_leading: Option<bool>,
pub leading: Option<f64>,
pub horizontal_scale: Option<f64>,
pub vertical_scale: Option<f64>,
pub tracking: Option<f64>,
pub auto_kerning: Option<bool>,
pub kerning: Option<f64>,
pub baseline_shift: Option<f64>,
pub font_caps: Option<f64>,
pub font_baseline: Option<f64>,
pub underline: Option<bool>,
pub strikethrough: Option<bool>,
pub ligatures: Option<bool>,
pub d_ligatures: Option<bool>,
pub baseline_direction: Option<f64>,
pub tsume: Option<f64>,
pub style_run_alignment: Option<f64>,
pub language: Option<f64>,
pub no_break: Option<bool>,
pub fill_color: Option<Color>,
pub stroke_color: Option<Color>,
pub fill_flag: Option<bool>,
pub stroke_flag: Option<bool>,
pub fill_first: Option<bool>,
pub y_underline: Option<f64>,
pub outline_width: Option<f64>,
pub character_direction: Option<f64>,
pub hindi_numbers: Option<bool>,
pub kashida: Option<f64>,
pub diacritic_pos: Option<f64>,
}
#[derive(Debug, Clone, Default)]
pub struct TextStyleRun {
pub length: f64,
pub style: TextStyle,
}
#[derive(Debug, Clone, Default)]
pub struct TextGridInfo {
pub is_on: Option<bool>,
pub show: Option<bool>,
pub size: Option<f64>,
pub leading: Option<f64>,
pub color: Option<Color>,
pub leading_fill_color: Option<Color>,
pub align_line_height_to_grid_flags: Option<bool>,
}
#[derive(Debug, Clone, Default)]
pub struct TextPathBezierCurve {
pub control_points: Vec<f64>,
}
#[derive(Debug, Clone, Default)]
pub struct TextPathBaselineAlignment {
pub flag: Option<f64>,
pub min: Option<f64>,
}
#[derive(Debug, Clone, Default)]
pub struct TextPathPathData {
pub reversed: Option<bool>,
pub spacing: Option<f64>,
}
#[derive(Debug, Clone, Default)]
pub struct TextPathData {
pub path_type: Option<f64>,
pub orientation: Option<f64>,
pub frame_matrix: Vec<f64>,
pub text_range: Vec<f64>,
pub row_gutter: Option<f64>,
pub column_gutter: Option<f64>,
pub baseline_alignment: Option<TextPathBaselineAlignment>,
pub path_data: TextPathPathData,
}
#[derive(Debug, Clone, Default)]
pub struct TextPath {
pub name: Option<Vec<f64>>,
pub bezier_curve: Option<TextPathBezierCurve>,
pub data: TextPathData,
pub uuid: Option<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum TextShapeType {
Point,
Box,
}
#[derive(Debug, Clone, Default)]
pub struct LayerTextData {
pub text: String,
pub transform: Option<Vec<f64>>,
pub anti_alias: Option<AntiAlias>,
pub gridding: Option<TextGridding>,
pub orientation: Option<Orientation>,
pub index: Option<f64>,
pub warp: Option<Warp>,
pub top: Option<f64>,
pub left: Option<f64>,
pub bottom: Option<f64>,
pub right: Option<f64>,
pub grid_info: Option<TextGridInfo>,
pub use_fractional_glyph_widths: Option<bool>,
pub style: Option<TextStyle>,
pub style_runs: Option<Vec<TextStyleRun>>,
pub paragraph_style: Option<ParagraphStyle>,
pub paragraph_style_runs: Option<Vec<ParagraphStyleRun>>,
pub superscript_size: Option<f64>,
pub superscript_position: Option<f64>,
pub subscript_size: Option<f64>,
pub subscript_position: Option<f64>,
pub small_cap_size: Option<f64>,
pub shape_type: Option<TextShapeType>,
pub point_base: Option<Vec<f64>>,
pub box_bounds: Option<Vec<f64>>,
pub bounds: Option<UnitsBounds>,
pub bounding_box: Option<UnitsBounds>,
pub text_path: Option<TextPath>,
}
#[derive(Debug, Clone, Default)]
pub struct PatternInfo {
pub name: String,
pub id: String,
pub x: f64,
pub y: f64,
pub bounds: PatternBounds,
pub data: Vec<u8>,
}
#[derive(Debug, Clone, Copy, Default)]
pub struct PatternBounds {
pub x: f64,
pub y: f64,
pub w: f64,
pub h: f64,
}
#[derive(Debug, Clone, Default)]
pub struct BezierKnot {
pub linked: bool,
pub points: Vec<f64>,
}
#[derive(Debug, Clone)]
pub struct BezierPath {
pub open: bool,
pub operation: Option<BooleanOperation>,
pub knots: Vec<BezierKnot>,
pub fill_rule: FillRule,
}
#[derive(Debug, Clone)]
pub enum VectorContent {
Color(Color),
SolidGradient {
gradient: EffectSolidGradient,
extra: ExtraGradientInfo,
},
NoiseGradient {
gradient: EffectNoiseGradient,
extra: ExtraGradientInfo,
},
Pattern {
pattern: EffectPattern,
extra: ExtraPatternInfo,
},
}
#[derive(Debug, Clone, Default)]
pub struct PresetInfo {
pub preset_kind: Option<f64>,
pub preset_file_name: Option<String>,
}
#[derive(Debug, Clone, Default)]
pub struct BrightnessAdjustment {
pub brightness: Option<f64>,
pub contrast: Option<f64>,
pub mean_value: Option<f64>,
pub use_legacy: Option<bool>,
pub lab_color_only: Option<bool>,
pub auto: Option<bool>,
}
#[derive(Debug, Clone, Default)]
pub struct LevelsAdjustmentChannel {
pub shadow_input: f64,
pub highlight_input: f64,
pub shadow_output: f64,
pub highlight_output: f64,
pub midtone_input: f64,
}
#[derive(Debug, Clone, Default)]
pub struct LevelsAdjustment {
pub preset: PresetInfo,
pub rgb: Option<LevelsAdjustmentChannel>,
pub red: Option<LevelsAdjustmentChannel>,
pub green: Option<LevelsAdjustmentChannel>,
pub blue: Option<LevelsAdjustmentChannel>,
}
pub type CurvesAdjustmentChannel = Vec<CurvesPoint>;
#[derive(Debug, Clone, Copy, Default)]
pub struct CurvesPoint {
pub input: f64,
pub output: f64,
}
#[derive(Debug, Clone, Default)]
pub struct CurvesAdjustment {
pub preset: PresetInfo,
pub rgb: Option<CurvesAdjustmentChannel>,
pub red: Option<CurvesAdjustmentChannel>,
pub green: Option<CurvesAdjustmentChannel>,
pub blue: Option<CurvesAdjustmentChannel>,
}
#[derive(Debug, Clone, Default)]
pub struct ExposureAdjustment {
pub preset: PresetInfo,
pub exposure: Option<f64>,
pub offset: Option<f64>,
pub gamma: Option<f64>,
}
#[derive(Debug, Clone, Default)]
pub struct VibranceAdjustment {
pub vibrance: Option<f64>,
pub saturation: Option<f64>,
}
#[derive(Debug, Clone, Default)]
pub struct HueSaturationAdjustmentChannel {
pub a: f64,
pub b: f64,
pub c: f64,
pub d: f64,
pub hue: f64,
pub saturation: f64,
pub lightness: f64,
}
#[derive(Debug, Clone, Default)]
pub struct HueSaturationAdjustment {
pub preset: PresetInfo,
pub master: Option<HueSaturationAdjustmentChannel>,
pub reds: Option<HueSaturationAdjustmentChannel>,
pub yellows: Option<HueSaturationAdjustmentChannel>,
pub greens: Option<HueSaturationAdjustmentChannel>,
pub cyans: Option<HueSaturationAdjustmentChannel>,
pub blues: Option<HueSaturationAdjustmentChannel>,
pub magentas: Option<HueSaturationAdjustmentChannel>,
}
#[derive(Debug, Clone, Default)]
pub struct ColorBalanceValues {
pub cyan_red: f64,
pub magenta_green: f64,
pub yellow_blue: f64,
}
#[derive(Debug, Clone, Default)]
pub struct ColorBalanceAdjustment {
pub shadows: Option<ColorBalanceValues>,
pub midtones: Option<ColorBalanceValues>,
pub highlights: Option<ColorBalanceValues>,
pub preserve_luminosity: Option<bool>,
}
#[derive(Debug, Clone, Default)]
pub struct BlackAndWhiteAdjustment {
pub preset: PresetInfo,
pub reds: Option<f64>,
pub yellows: Option<f64>,
pub greens: Option<f64>,
pub cyans: Option<f64>,
pub blues: Option<f64>,
pub magentas: Option<f64>,
pub use_tint: Option<bool>,
pub tint_color: Option<Color>,
}
#[derive(Debug, Clone, Default)]
pub struct PhotoFilterAdjustment {
pub color: Option<Color>,
pub density: Option<f64>,
pub preserve_luminosity: Option<bool>,
}
#[derive(Debug, Clone, Default)]
pub struct ChannelMixerChannel {
pub red: f64,
pub green: f64,
pub blue: f64,
pub constant: f64,
}
#[derive(Debug, Clone, Default)]
pub struct ChannelMixerAdjustment {
pub preset: PresetInfo,
pub monochrome: Option<bool>,
pub red: Option<ChannelMixerChannel>,
pub green: Option<ChannelMixerChannel>,
pub blue: Option<ChannelMixerChannel>,
pub gray: Option<ChannelMixerChannel>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ColorLookupType {
Lut3D,
AbstractProfile,
DeviceLinkProfile,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum LutFormat {
Look,
Cube,
ThreeDl,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum RgbBgrOrder {
Rgb,
Bgr,
}
#[derive(Debug, Clone, Default)]
pub struct ColorLookupAdjustment {
pub lookup_type: Option<ColorLookupType>,
pub name: Option<String>,
pub dither: Option<bool>,
pub profile: Option<Vec<u8>>,
pub lut_format: Option<LutFormat>,
pub data_order: Option<RgbBgrOrder>,
pub table_order: Option<RgbBgrOrder>,
pub lut3d_file_data: Option<Vec<u8>>,
pub lut3d_file_name: Option<String>,
}
#[derive(Debug, Clone, Default)]
pub struct InvertAdjustment;
#[derive(Debug, Clone, Default)]
pub struct PosterizeAdjustment {
pub levels: Option<f64>,
}
#[derive(Debug, Clone, Default)]
pub struct ThresholdAdjustment {
pub level: Option<f64>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum GradientMapType {
Solid,
Noise,
}
#[derive(Debug, Clone)]
pub struct GradientMapAdjustment {
pub name: Option<String>,
pub gradient_type: GradientMapType,
pub dither: Option<bool>,
pub reverse: Option<bool>,
pub method: Option<InterpolationMethod>,
pub smoothness: Option<f64>,
pub color_stops: Option<Vec<ColorStop>>,
pub opacity_stops: Option<Vec<OpacityStop>>,
pub roughness: Option<f64>,
pub color_model: Option<GradientColorModel>,
pub random_seed: Option<f64>,
pub restrict_colors: Option<bool>,
pub add_transparency: Option<bool>,
pub min: Option<Vec<f64>>,
pub max: Option<Vec<f64>>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum SelectiveColorMode {
Relative,
Absolute,
}
#[derive(Debug, Clone, Default)]
pub struct SelectiveColorAdjustment {
pub mode: Option<SelectiveColorMode>,
pub reds: Option<Cmyk>,
pub yellows: Option<Cmyk>,
pub greens: Option<Cmyk>,
pub cyans: Option<Cmyk>,
pub blues: Option<Cmyk>,
pub magentas: Option<Cmyk>,
pub whites: Option<Cmyk>,
pub neutrals: Option<Cmyk>,
pub blacks: Option<Cmyk>,
}
#[derive(Debug, Clone)]
pub enum AdjustmentLayer {
Brightness(BrightnessAdjustment),
Levels(LevelsAdjustment),
Curves(CurvesAdjustment),
Exposure(ExposureAdjustment),
Vibrance(VibranceAdjustment),
HueSaturation(HueSaturationAdjustment),
ColorBalance(ColorBalanceAdjustment),
BlackAndWhite(BlackAndWhiteAdjustment),
PhotoFilter(PhotoFilterAdjustment),
ChannelMixer(ChannelMixerAdjustment),
ColorLookup(ColorLookupAdjustment),
Invert(InvertAdjustment),
Posterize(PosterizeAdjustment),
Threshold(ThresholdAdjustment),
GradientMap(GradientMapAdjustment),
SelectiveColor(SelectiveColorAdjustment),
}
#[derive(Debug, Clone, Copy, Default)]
pub struct CompInfo {
pub comp_id: f64,
pub original_comp_id: f64,
}
#[derive(Debug, Clone, Default)]
pub struct LinkedFileDescriptor {
pub comp_info: CompInfo,
}
#[derive(Debug, Clone, Default)]
pub struct ExternalLinkedFile {
pub file_size: f64,
pub name: String,
pub full_path: String,
pub original_path: String,
pub relative_path: String,
}
#[derive(Debug, Clone, Default)]
pub struct LinkedFile {
pub id: String,
pub name: String,
pub file_type: Option<String>,
pub creator: Option<String>,
pub data: Option<Vec<u8>>,
pub time: Option<String>,
pub descriptor: Option<LinkedFileDescriptor>,
pub child_document_id: Option<String>,
pub asset_mod_time: Option<f64>,
pub asset_locked_state: Option<f64>,
pub linked_file: Option<ExternalLinkedFile>,
}
#[derive(Debug, Clone, Copy)]
pub struct RadiusFilter {
pub radius: UnitsValue,
}
#[derive(Debug, Clone)]
pub enum FilterVariant {
Average,
Blur,
BlurMore,
BoxBlur(RadiusFilter),
GaussianBlur(RadiusFilter),
MotionBlur {
angle: f64,
distance: UnitsValue,
},
RadialBlur {
amount: f64,
method: RadialBlurMethod,
quality: RadialBlurQuality,
},
ShapeBlur {
radius: UnitsValue,
custom_shape: NamedId,
},
SmartBlur {
radius: f64,
threshold: f64,
quality: LowMediumHigh,
mode: SmartBlurMode,
},
SurfaceBlur { radius: UnitsValue, threshold: f64 },
Displace {
horizontal_scale: f64,
vertical_scale: f64,
displacement_map: DisplacementMap,
undefined_areas: WrapOrRepeat,
displacement_file: DisplacementFile,
},
Pinch { amount: f64 },
PolarCoordinates { conversion: PolarConversion },
Ripple {
amount: f64,
size: SmallMediumLarge,
},
Shear {
shear_points: Vec<PointF>,
shear_start: f64,
shear_end: f64,
undefined_areas: WrapOrRepeat,
},
Spherize {
amount: f64,
mode: SpherizeMode,
},
Twirl {
angle: f64,
},
Wave {
number_of_generators: f64,
wave_type: WaveType,
wavelength: MinMax,
amplitude: MinMax,
scale: PointF,
random_seed: f64,
undefined_areas: WrapOrRepeat,
},
ZigZag {
amount: f64,
ridges: f64,
style: ZigZagStyle,
},
AddNoise {
amount: f64,
distribution: NoiseDistribution,
monochromatic: bool,
random_seed: f64,
},
Despeckle,
DustAndScratches {
radius: f64,
threshold: f64,
},
Median(RadiusFilter),
ReduceNoise {
preset: String,
remove_jpeg_artifact: bool,
reduce_color_noise: f64,
sharpen_details: f64,
channel_denoise: Vec<ChannelDenoise>,
},
ColorHalftone {
radius: f64,
angle1: f64,
angle2: f64,
angle3: f64,
angle4: f64,
},
Crystallize { cell_size: f64, random_seed: f64 },
Facet,
Fragment,
Mezzotint {
mezzotint_type: MezzotintType,
random_seed: f64,
},
Mosaic { cell_size: UnitsValue },
Pointillize { cell_size: f64, random_seed: f64 },
Clouds { random_seed: f64 },
DifferenceClouds { random_seed: f64 },
Fibers {
variance: f64,
strength: f64,
random_seed: f64,
},
LensFlare {
brightness: f64,
position: PointF,
lens_type: LensType,
},
Sharpen,
SharpenEdges,
SharpenMore,
SmartSharpen {
amount: f64,
radius: UnitsValue,
threshold: f64,
angle: f64,
more_accurate: bool,
blur: SmartSharpenBlur,
preset: String,
shadow: SmartSharpenTone,
highlight: SmartSharpenTone,
},
UnsharpMask {
amount: f64,
radius: UnitsValue,
threshold: f64,
},
Diffuse {
mode: DiffuseMode,
random_seed: f64,
},
Emboss {
angle: f64,
height: f64,
amount: f64,
},
Extrude {
extrude_type: ExtrudeType,
size: f64,
depth: f64,
depth_mode: ExtrudeDepthMode,
random_seed: f64,
solid_front_faces: bool,
mask_incomplete_blocks: bool,
},
FindEdges,
Solarize,
Tiles {
number_of_tiles: f64,
maximum_offset: f64,
fill_empty_area_with: TilesFill,
random_seed: f64,
},
TraceContour { level: f64, edge: LowerUpper },
Wind {
method: WindMethod,
direction: LeftRight,
},
DeInterlace {
eliminate: DeInterlaceEliminate,
new_fields_by: DeInterlaceNewFields,
},
NtscColors,
Custom {
scale: f64,
offset: f64,
matrix: Vec<f64>,
},
HighPass(RadiusFilter),
Maximum(RadiusFilter),
Minimum(RadiusFilter),
Offset {
horizontal: f64,
vertical: f64,
undefined_areas: OffsetUndefinedAreas,
},
Puppet {
rigid_type: bool,
bounds: Vec<PointF>,
puppet_shape_list: Vec<PuppetShape>,
},
OilPaintPlugin {
name: String,
gpu: bool,
lighting: bool,
parameters: Vec<NamedValue>,
},
HsbHsl {
input_mode: RgbHsbHsl,
row_order: RgbHsbHsl,
},
OilPaint {
lighting_on: bool,
stylization: f64,
cleanliness: f64,
brush_scale: f64,
micro_brush: f64,
light_direction: f64,
specularity: f64,
},
Liquify { liquify_mesh: Vec<u8> },
PerspectiveWarp {
quads: Vec<Vec<f64>>,
vertices: Vec<UnitsPoint>,
warped_vertices: Vec<UnitsPoint>,
},
Curves {
preset_kind: CurvesPresetKind,
adjustments: Option<Vec<CurvesFilterAdjustment>>,
},
Invert,
BrightnessContrast {
brightness: f64,
contrast: f64,
use_legacy: bool,
},
}
#[derive(Debug, Clone, Default)]
pub struct NamedId {
pub name: String,
pub id: String,
}
#[derive(Debug, Clone, Default)]
pub struct NamedValue {
pub name: String,
pub value: f64,
}
#[derive(Debug, Clone, Copy, Default)]
pub struct MinMax {
pub min: f64,
pub max: f64,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum RadialBlurMethod {
Spin,
Zoom,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum RadialBlurQuality {
Draft,
Good,
Best,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum LowMediumHigh {
Low,
Medium,
High,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum SmartBlurMode {
Normal,
EdgeOnly,
OverlayEdge,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum DisplacementMap {
StretchToFit,
Tile,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum WrapOrRepeat {
WrapAround,
RepeatEdgePixels,
}
#[derive(Debug, Clone, Default)]
pub struct DisplacementFile {
pub signature: String,
pub path: String,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum PolarConversion {
RectangularToPolar,
PolarToRectangular,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum SmallMediumLarge {
Small,
Medium,
Large,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum SpherizeMode {
Normal,
HorizontalOnly,
VerticalOnly,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum WaveType {
Sine,
Triangle,
Square,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ZigZagStyle {
AroundCenter,
OutFromCenter,
PondRipples,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum NoiseDistribution {
Uniform,
Gaussian,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum DenoiseChannel {
Red,
Green,
Blue,
Composite,
}
#[derive(Debug, Clone, Default)]
pub struct ChannelDenoise {
pub channels: Vec<DenoiseChannel>,
pub amount: f64,
pub preserve_details: Option<f64>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum MezzotintType {
FineDots,
MediumDots,
GrainyDots,
CoarseDots,
ShortLines,
MediumLines,
LongLines,
ShortStrokes,
MediumStrokes,
LongStrokes,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum LensType {
Zoom50To300,
Prime32,
Prime105,
MoviePrime,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum SmartSharpenBlur {
GaussianBlur,
LensBlur,
MotionBlur,
}
#[derive(Debug, Clone, Copy, Default)]
pub struct SmartSharpenTone {
pub fade_amount: f64,
pub tonal_width: f64,
pub radius: f64,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum DiffuseMode {
Normal,
DarkenOnly,
LightenOnly,
Anisotropic,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ExtrudeType {
Blocks,
Pyramids,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ExtrudeDepthMode {
Random,
LevelBased,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum TilesFill {
BackgroundColor,
ForegroundColor,
InverseImage,
UnalteredImage,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum LowerUpper {
Lower,
Upper,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum WindMethod {
Wind,
Blast,
Stagger,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum LeftRight {
Left,
Right,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum DeInterlaceEliminate {
OddLines,
EvenLines,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum DeInterlaceNewFields {
Duplication,
Interpolation,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum OffsetUndefinedAreas {
SetToTransparent,
RepeatEdgePixels,
WrapAround,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum RgbHsbHsl {
Rgb,
Hsb,
Hsl,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum CurvesPresetKind {
Custom,
Default,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum CurvesFilterChannel {
Composite,
Red,
Green,
Blue,
}
#[derive(Debug, Clone, Copy, Default)]
pub struct CurvesFilterPoint {
pub x: f64,
pub y: f64,
pub curved: Option<bool>,
}
#[derive(Debug, Clone)]
pub enum CurvesFilterAdjustment {
Curve {
channels: Vec<CurvesFilterChannel>,
curve: Vec<CurvesFilterPoint>,
},
Values {
channels: Vec<CurvesFilterChannel>,
values: Vec<f64>,
},
}
#[derive(Debug, Clone, Copy)]
pub struct PuppetMeshPoint {
pub anchor: UnitsPoint,
pub forward: UnitsPoint,
pub backward: UnitsPoint,
pub smooth: bool,
}
#[derive(Debug, Clone, Default)]
pub struct PuppetMeshPath {
pub closed: bool,
pub points: Vec<PuppetMeshPoint>,
}
#[derive(Debug, Clone, Default)]
pub struct PuppetPathComponent {
pub shape_operation: String,
pub paths: Vec<PuppetMeshPath>,
}
#[derive(Debug, Clone, Default)]
pub struct PuppetShape {
pub rigid_type: bool,
pub original_vertex_array: Vec<PointF>,
pub deformed_vertex_array: Vec<PointF>,
pub index_array: Vec<f64>,
pub pin_offsets: Vec<PointF>,
pub pos_final_pins: Vec<PointF>,
pub pin_vertex_indices: Vec<f64>,
pub selected_pin: Vec<f64>,
pub pin_position: Vec<PointF>,
pub pin_rotation: Vec<f64>,
pub pin_overlay: Vec<bool>,
pub pin_depth: Vec<f64>,
pub mesh_quality: f64,
pub mesh_expansion: f64,
pub mesh_rigidity: f64,
pub image_resolution: f64,
pub mesh_boundary_path: Vec<PuppetPathComponent>,
}
#[derive(Debug, Clone)]
pub struct Filter {
pub variant: FilterVariant,
pub name: String,
pub opacity: f64,
pub blend_mode: BlendMode,
pub enabled: bool,
pub has_options: bool,
pub foreground_color: Color,
pub background_color: Color,
}
#[derive(Debug, Clone, Default)]
pub struct PlacedLayerFilter {
pub enabled: bool,
pub valid_at_position: bool,
pub mask_enabled: bool,
pub mask_linked: bool,
pub mask_extend_with_white: bool,
pub list: Vec<Filter>,
}
#[derive(Debug, Clone, Copy, Default)]
pub struct NumDenom {
pub numerator: f64,
pub denominator: f64,
}
#[derive(Debug, Clone, Default)]
pub struct PlacedLayer {
pub id: String,
pub placed: Option<String>,
pub layer_type: Option<PlacedLayerType>,
pub page_number: Option<f64>,
pub total_pages: Option<f64>,
pub frame_step: Option<NumDenom>,
pub duration: Option<NumDenom>,
pub frame_count: Option<f64>,
pub transform: Vec<f64>,
pub non_affine_transform: Option<Vec<f64>>,
pub width: Option<f64>,
pub height: Option<f64>,
pub resolution: Option<UnitsValue>,
pub warp: Option<Warp>,
pub crop: Option<f64>,
pub comp: Option<f64>,
pub comp_info: Option<CompInfo>,
pub filter: Option<PlacedLayerFilter>,
}
#[derive(Debug, Clone, Copy)]
pub struct RRectRadii {
pub top_right: UnitsValue,
pub top_left: UnitsValue,
pub bottom_left: UnitsValue,
pub bottom_right: UnitsValue,
}
#[derive(Debug, Clone, Default)]
pub struct KeyDescriptorItem {
pub key_shape_invalidated: Option<bool>,
pub key_origin_type: Option<f64>,
pub key_origin_resolution: Option<f64>,
pub key_origin_r_rect_radii: Option<RRectRadii>,
pub key_origin_shape_bounding_box: Option<UnitsBounds>,
pub key_origin_box_corners: Option<Vec<PointF>>,
pub transform: Option<Vec<f64>>,
}
#[derive(Debug, Clone, Copy, Default)]
pub struct VectorMaskClipboard {
pub top: f64,
pub left: f64,
pub bottom: f64,
pub right: f64,
pub resolution: f64,
}
#[derive(Debug, Clone, Default)]
pub struct LayerVectorMask {
pub invert: Option<bool>,
pub not_link: Option<bool>,
pub disable: Option<bool>,
pub fill_starts_with_all_pixels: Option<bool>,
pub clipboard: Option<VectorMaskClipboard>,
pub paths: Vec<BezierPath>,
}
#[derive(Debug, Clone, Default)]
pub struct AnimationFrame {
pub frames: Vec<f64>,
pub enable: Option<bool>,
pub offset: Option<PointF>,
pub reference_point: Option<PointF>,
pub opacity: Option<f64>,
pub effects: Option<LayerEffectsInfo>,
}
#[derive(Debug, Clone)]
pub enum TimelineKeyData {
Opacity { value: f64 },
Position { x: f64, y: f64 },
Transform {
scale: PointF,
skew: PointF,
rotation: f64,
translation: PointF,
},
Style { style: Option<LayerEffectsInfo> },
GlobalLighting {
global_angle: f64,
global_altitude: f64,
},
}
#[derive(Debug, Clone)]
pub struct TimelineKey {
pub interpolation: TimelineKeyInterpolation,
pub time: Fraction,
pub selected: Option<bool>,
pub data: TimelineKeyData,
}
#[derive(Debug, Clone, Default)]
pub struct TimelineEffectParams {
pub keys: Vec<TimelineKey>,
pub fill_canvas: bool,
pub zoom_origin: f64,
}
#[derive(Debug, Clone)]
pub struct TimelineTrack {
pub track_type: TimelineTrackType,
pub enabled: Option<bool>,
pub effect_params: Option<TimelineEffectParams>,
pub keys: Vec<TimelineKey>,
}
#[derive(Debug, Clone, Default)]
pub struct Timeline {
pub start: Fraction,
pub duration: Fraction,
pub in_time: Fraction,
pub out_time: Fraction,
pub auto_scope: bool,
pub audio_level: f64,
pub tracks: Option<Vec<TimelineTrack>>,
}
#[derive(Debug, Clone, Default)]
pub struct ProtectedInfo {
pub transparency: Option<bool>,
pub composite: Option<bool>,
pub position: Option<bool>,
pub artboards: Option<bool>,
}
#[derive(Debug, Clone)]
pub struct SectionDivider {
pub divider_type: SectionDividerType,
pub key: Option<String>,
pub sub_type: Option<f64>,
}
#[derive(Debug, Clone)]
pub struct ColorSpaceMask {
pub color_space: Color,
pub opacity: f64,
}
#[derive(Debug, Clone, Default)]
pub struct VectorStroke {
pub stroke_enabled: Option<bool>,
pub fill_enabled: Option<bool>,
pub line_width: Option<UnitsValue>,
pub line_dash_offset: Option<UnitsValue>,
pub miter_limit: Option<f64>,
pub line_cap_type: Option<LineCapType>,
pub line_join_type: Option<LineJoinType>,
pub line_alignment: Option<LineAlignment>,
pub scale_lock: Option<bool>,
pub stroke_adjust: Option<bool>,
pub line_dash_set: Option<Vec<UnitsValue>>,
pub blend_mode: Option<BlendMode>,
pub opacity: Option<f64>,
pub content: Option<VectorContent>,
pub resolution: Option<f64>,
}
#[derive(Debug, Clone, Default)]
pub struct VectorOrigination {
pub key_descriptor_list: Vec<KeyDescriptorItem>,
}
#[derive(Debug, Clone, Copy, Default)]
pub struct VersionTriple {
pub major: f64,
pub minor: f64,
pub fix: f64,
}
#[derive(Debug, Clone, Default)]
pub struct CompositorUsed {
pub version: Option<VersionTriple>,
pub photoshop_version: Option<VersionTriple>,
pub description: String,
pub reason: String,
pub engine: String,
pub enable_comp_core: Option<String>,
pub enable_comp_core_gpu: Option<String>,
pub enable_comp_core_threads: Option<String>,
pub comp_core_support: Option<String>,
pub comp_core_gpu_support: Option<String>,
}
#[derive(Debug, Clone, Default)]
pub struct LayerArtboard {
pub rect: Bounds,
pub guide_indices: Option<Vec<f64>>,
pub preset_name: Option<String>,
pub color: Option<Color>,
pub background_type: Option<f64>,
}
#[derive(Debug, Clone, Default)]
pub struct AnimationFrameFlags {
pub propagate_frame_one: Option<bool>,
pub unify_layer_position: Option<bool>,
pub unify_layer_style: Option<bool>,
pub unify_layer_visibility: Option<bool>,
}
#[derive(Debug, Clone, Default)]
pub struct FilterEffectsChannel {
pub compression_mode: f64,
pub data: Vec<u8>,
}
#[derive(Debug, Clone, Default)]
pub struct FilterEffectsExtra {
pub top: f64,
pub left: f64,
pub bottom: f64,
pub right: f64,
pub compression_mode: f64,
pub data: Vec<u8>,
}
#[derive(Debug, Clone, Default)]
pub struct FilterEffectsMask {
pub id: String,
pub top: f64,
pub left: f64,
pub bottom: f64,
pub right: f64,
pub depth: f64,
pub channels: Vec<Option<FilterEffectsChannel>>,
pub extra: Option<FilterEffectsExtra>,
}
#[derive(Debug, Clone, Default)]
pub struct LayerCompSettings {
pub enabled: Option<bool>,
pub comp_list: Vec<f64>,
pub offset: Option<PointF>,
pub effects_reference_point: Option<PointF>,
}
#[derive(Debug, Clone, Default)]
pub struct LayerComps {
pub original_effects_reference_point: Option<PointF>,
pub settings: Vec<LayerCompSettings>,
}
#[derive(Debug, Clone, Default)]
pub struct BlendingRange {
pub source_range: Vec<f64>,
pub dest_range: Vec<f64>,
}
#[derive(Debug, Clone, Default)]
pub struct BlendingRanges {
pub composite_gray_blend_source: Vec<f64>,
pub composite_graph_blend_destination_range: Vec<f64>,
pub ranges: Vec<BlendingRange>,
}
#[derive(Debug, Clone, Default)]
pub struct PixelSourceInterpretation {
pub interpret_alpha: String,
pub profile: Vec<u8>,
}
#[derive(Debug, Clone, Default)]
pub struct PixelSourceFrameReaderLink {
pub name: String,
pub full_path: String,
pub original_path: String,
pub relative_path: String,
pub alias: String,
}
#[derive(Debug, Clone, Default)]
pub struct PixelSourceFrameReader {
pub reader_type: String,
pub link: PixelSourceFrameReaderLink,
pub media_descriptor: String,
}
#[derive(Debug, Clone, Default)]
pub struct PixelSource {
pub source_type: String,
pub origin: PointF,
pub interpretation: PixelSourceInterpretation,
pub frame_reader: PixelSourceFrameReader,
pub show_altered_video: bool,
}
#[derive(Debug, Clone, Default)]
pub struct LayerAdditionalInfo {
pub name: Option<String>,
pub name_source: Option<String>,
pub id: Option<f64>,
pub version: Option<f64>,
pub mask: Option<LayerMaskData>,
pub real_mask: Option<LayerMaskData>,
pub blend_clippend_elements: Option<bool>,
pub blend_interior_elements: Option<bool>,
pub knockout: Option<bool>,
pub layer_mask_as_global_mask: Option<bool>,
pub protected_info: Option<ProtectedInfo>,
pub layer_color: Option<LayerColor>,
pub reference_point: Option<PointF>,
pub section_divider: Option<SectionDivider>,
pub filter_mask: Option<ColorSpaceMask>,
pub effects: Option<LayerEffectsInfo>,
pub text: Option<LayerTextData>,
pub patterns: Option<Vec<PatternInfo>>,
pub vector_fill: Option<VectorContent>,
pub vector_stroke: Option<VectorStroke>,
pub vector_mask: Option<LayerVectorMask>,
pub using_aligned_rendering: Option<bool>,
pub timestamp: Option<f64>,
pub path_list: Option<Vec<PathListItem>>,
pub adjustment: Option<AdjustmentLayer>,
pub placed_layer: Option<PlacedLayer>,
pub vector_origination: Option<VectorOrigination>,
pub compositor_used: Option<CompositorUsed>,
pub artboard: Option<LayerArtboard>,
pub fill_opacity: Option<f64>,
pub transparency_shapes_layer: Option<bool>,
pub channel_blending_restrictions: Option<Vec<f64>>,
pub animation_frames: Option<Vec<AnimationFrame>>,
pub animation_frame_flags: Option<AnimationFrameFlags>,
pub timeline: Option<Timeline>,
pub filter_effects_masks: Option<Vec<FilterEffectsMask>>,
pub comps: Option<LayerComps>,
pub user_mask: Option<ColorSpaceMask>,
pub blending_ranges: Option<BlendingRanges>,
pub vowv: Option<f64>,
pub pixel_source: Option<PixelSource>,
pub engine_data: Option<String>,
}
#[derive(Debug, Clone, Default)]
pub struct PathListItem;
#[derive(Debug, Clone, Default)]
pub struct VersionInfo {
pub has_real_merged_data: bool,
pub writer_name: String,
pub reader_name: String,
pub file_version: f64,
}
#[derive(Debug, Clone, Default)]
pub struct UrlListItem {
pub id: f64,
pub r#ref: String,
pub url: String,
}
#[derive(Debug, Clone, Copy, Default)]
pub struct GridInfo {
pub horizontal: f64,
pub vertical: f64,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum GuideDirection {
Horizontal,
Vertical,
}
#[derive(Debug, Clone, Copy)]
pub struct GuideInfo {
pub location: f64,
pub direction: GuideDirection,
}
#[derive(Debug, Clone, Default)]
pub struct GridAndGuidesInformation {
pub grid: Option<GridInfo>,
pub guides: Option<Vec<GuideInfo>>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ResolutionUnit {
Ppi,
Ppcm,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum DimensionUnit {
Inches,
Centimeters,
Points,
Picas,
Columns,
}
#[derive(Debug, Clone, Copy)]
pub struct ResolutionInfo {
pub horizontal_resolution: f64,
pub horizontal_resolution_unit: ResolutionUnit,
pub width_unit: DimensionUnit,
pub vertical_resolution: f64,
pub vertical_resolution_unit: ResolutionUnit,
pub height_unit: DimensionUnit,
}
#[derive(Debug, Clone, Default)]
pub struct ThumbnailRaw {
pub width: f64,
pub height: f64,
pub data: Vec<u8>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum PrintScaleStyle {
Centered,
SizeToFit,
UserDefined,
}
#[derive(Debug, Clone, Default)]
pub struct PrintScale {
pub style: Option<PrintScaleStyle>,
pub x: Option<f64>,
pub y: Option<f64>,
pub scale: Option<f64>,
}
#[derive(Debug, Clone)]
pub enum ProofSetup {
Builtin { builtin: String },
Profile {
profile: String,
rendering_intent: Option<RenderingIntent>,
black_point_compensation: Option<bool>,
paper_white: Option<bool>,
},
}
#[derive(Debug, Clone, Default)]
pub struct PrintInformation {
pub printer_manages_colors: Option<bool>,
pub printer_name: Option<String>,
pub printer_profile: Option<String>,
pub print_sixteen_bit: Option<bool>,
pub rendering_intent: Option<RenderingIntent>,
pub hard_proof: Option<bool>,
pub black_point_compensation: Option<bool>,
pub proof_setup: Option<ProofSetup>,
}
#[derive(Debug, Clone, Default)]
pub struct PrintFlags {
pub labels: Option<bool>,
pub crop_marks: Option<bool>,
pub color_bars: Option<bool>,
pub registration_marks: Option<bool>,
pub negative: Option<bool>,
pub flip: Option<bool>,
pub interpolate: Option<bool>,
pub caption: Option<bool>,
pub print_flags: Option<bool>,
}
#[derive(Debug, Clone)]
pub struct OnionSkins {
pub enabled: bool,
pub frames_before: f64,
pub frames_after: f64,
pub frame_spacing: f64,
pub min_opacity: f64,
pub max_opacity: f64,
pub blend_mode: BlendMode,
}
#[derive(Debug, Clone, Default)]
pub struct AudioClipFrameReaderLink {
pub name: String,
pub full_path: String,
pub relative_path: String,
}
#[derive(Debug, Clone, Default)]
pub struct AudioClipFrameReader {
pub reader_type: f64,
pub media_descriptor: String,
pub link: AudioClipFrameReaderLink,
}
#[derive(Debug, Clone, Default)]
pub struct AudioClip {
pub id: String,
pub start: Fraction,
pub duration: Fraction,
pub in_time: Fraction,
pub out_time: Fraction,
pub muted: bool,
pub audio_level: f64,
pub frame_reader: AudioClipFrameReader,
}
#[derive(Debug, Clone, Default)]
pub struct AudioClipGroup {
pub id: String,
pub muted: bool,
pub audio_clips: Vec<AudioClip>,
}
#[derive(Debug, Clone, Default)]
pub struct TimelineInformation {
pub enabled: bool,
pub frame_step: Fraction,
pub frame_rate: f64,
pub time: Fraction,
pub duration: Fraction,
pub work_in_time: Fraction,
pub work_out_time: Fraction,
pub repeats: f64,
pub has_motion: bool,
pub global_tracks: Vec<TimelineTrack>,
pub audio_clip_groups: Option<Vec<AudioClipGroup>>,
}
#[derive(Debug, Clone, Copy, Default)]
pub struct SheetTimelineOption {
pub sheet_id: f64,
pub sheet_disclosed: bool,
pub lights_disclosed: bool,
pub meshes_disclosed: bool,
pub materials_disclosed: bool,
}
#[derive(Debug, Clone, Default)]
pub struct SheetDisclosure {
pub sheet_timeline_options: Option<Vec<SheetTimelineOption>>,
}
#[derive(Debug, Clone, Default)]
pub struct CountInformation {
pub color: Rgb,
pub name: String,
pub size: f64,
pub font_size: f64,
pub visible: bool,
pub points: Vec<PointF>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum SliceOrigin {
UserGenerated,
AutoGenerated,
Layer,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum SliceType {
Image,
NoImage,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum SliceAlignment {
Default,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum SliceBackgroundColorType {
None,
Matte,
Color,
}
#[derive(Debug, Clone, Default)]
pub struct Slice {
pub id: f64,
pub group_id: f64,
pub origin: Option<SliceOrigin>,
pub associated_layer_id: f64,
pub name: Option<String>,
pub slice_type: Option<SliceType>,
pub bounds: LtrbBounds,
pub url: String,
pub target: String,
pub message: String,
pub alt_tag: String,
pub cell_text_is_html: bool,
pub cell_text: String,
pub horizontal_alignment: Option<SliceAlignment>,
pub vertical_alignment: Option<SliceAlignment>,
pub background_color_type: Option<SliceBackgroundColorType>,
pub background_color: Rgba,
pub top_outset: Option<f64>,
pub left_outset: Option<f64>,
pub bottom_outset: Option<f64>,
pub right_outset: Option<f64>,
}
#[derive(Debug, Clone, Default)]
pub struct SliceGroup {
pub bounds: LtrbBounds,
pub group_name: String,
pub slices: Vec<Slice>,
}
#[derive(Debug, Clone)]
pub struct LayerCompListItem {
pub id: f64,
pub name: String,
pub comment: Option<String>,
pub captured_info: LayerCompCapturedInfo,
}
#[derive(Debug, Clone, Default)]
pub struct LayerCompsResource {
pub list: Vec<LayerCompListItem>,
pub last_applied: Option<f64>,
}
#[derive(Debug, Clone, Copy, Default)]
pub struct PixelAspectRatio {
pub aspect: f64,
}
#[derive(Debug, Clone, Default)]
pub struct ImageResources {
pub layer_state: Option<f64>,
pub layer_selection_ids: Option<Vec<f64>>,
pub version_info: Option<VersionInfo>,
pub alpha_identifiers: Option<Vec<f64>>,
pub alpha_channel_names: Option<Vec<String>>,
pub global_angle: Option<f64>,
pub global_altitude: Option<f64>,
pub pixel_aspect_ratio: Option<PixelAspectRatio>,
pub urls_list: Option<Vec<UrlListItem>>,
pub grid_and_guides_information: Option<GridAndGuidesInformation>,
pub resolution_info: Option<ResolutionInfo>,
pub thumbnail: Option<PixelData>,
pub thumbnail_raw: Option<ThumbnailRaw>,
pub caption_digest: Option<String>,
pub xmp_metadata: Option<String>,
pub print_scale: Option<PrintScale>,
pub print_information: Option<PrintInformation>,
pub background_color: Option<Color>,
pub ids_seed_number: Option<f64>,
pub print_flags: Option<PrintFlags>,
pub icc_untagged_profile: Option<bool>,
pub path_selection_state: Option<Vec<String>>,
pub image_ready_variables: Option<String>,
pub image_ready_data_sets: Option<String>,
pub animations: Option<Animations>,
pub onion_skins: Option<OnionSkins>,
pub timeline_information: Option<TimelineInformation>,
pub sheet_disclosure: Option<SheetDisclosure>,
pub count_information: Option<Vec<CountInformation>>,
pub slices: Option<Vec<SliceGroup>>,
pub layer_comps: Option<LayerCompsResource>,
pub copyrighted: Option<bool>,
pub url: Option<String>,
}
#[derive(Debug, Clone, Default)]
pub struct GlobalLayerMaskInfo {
pub overlay_color_space: f64,
pub color_space1: f64,
pub color_space2: f64,
pub color_space3: f64,
pub color_space4: f64,
pub opacity: f64,
pub kind: f64,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum AnnotationType {
Text,
Sound,
}
#[derive(Debug, Clone)]
pub enum AnnotationData {
Text(String),
Binary(Vec<u8>),
}
#[derive(Debug, Clone)]
pub struct Annotation {
pub annotation_type: AnnotationType,
pub open: bool,
pub icon_location: LtrbBounds,
pub popup_location: LtrbBounds,
pub color: Color,
pub author: String,
pub name: String,
pub date: String,
pub data: AnnotationData,
}
#[derive(Debug, Clone)]
pub struct LayerRawDataChannel {
pub id: ChannelId,
pub compression: Compression,
pub data: Option<Vec<u8>>,
}
#[derive(Debug, Clone)]
pub struct LayerRawData {
pub color_mode: ColorMode,
pub bits_per_channel: f64,
pub channels: Vec<LayerRawDataChannel>,
pub large: bool,
}
#[derive(Debug, Clone, Default)]
pub struct Layer {
pub additional_info: LayerAdditionalInfo,
pub top: Option<f64>,
pub left: Option<f64>,
pub bottom: Option<f64>,
pub right: Option<f64>,
pub blend_mode: Option<BlendMode>,
pub opacity: Option<f64>,
pub transparency_protected: Option<bool>,
pub effects_open: Option<bool>,
pub hidden: Option<bool>,
pub clipping: Option<bool>,
pub canvas: Option<PixelData>,
pub image_data: Option<PixelData>,
pub raw_data: Option<LayerRawData>,
pub children: Option<Vec<Layer>>,
pub opened: Option<bool>,
pub link_group: Option<f64>,
pub link_group_enabled: Option<bool>,
}
#[derive(Debug, Clone, Default)]
pub struct PsdArtboards {
pub count: f64,
pub auto_expand_offset: Option<HorizontalVertical>,
pub origin: Option<HorizontalVertical>,
pub auto_expand_enabled: Option<bool>,
pub auto_nest_enabled: Option<bool>,
pub auto_position_enabled: Option<bool>,
pub shrinkwrap_on_save_enabled: Option<bool>,
pub doc_default_new_artboard_background_color: Option<Color>,
pub doc_default_new_artboard_background_type: Option<f64>,
}
#[derive(Debug, Clone, Default)]
pub struct Psd {
pub additional_info: LayerAdditionalInfo,
pub width: f64,
pub height: f64,
pub channels: Option<f64>,
pub bits_per_channel: Option<f64>,
pub color_mode: Option<ColorMode>,
pub palette: Option<Vec<Rgb>>,
pub children: Option<Vec<Layer>>,
pub canvas: Option<PixelData>,
pub image_data: Option<PixelData>,
pub image_resources: Option<ImageResources>,
pub linked_files: Option<Vec<LinkedFile>>,
pub artboards: Option<PsdArtboards>,
pub global_layer_mask_info: Option<GlobalLayerMaskInfo>,
pub annotations: Option<Vec<Annotation>>,
}
#[derive(Debug, Clone, Default)]
pub struct ReadOptions {
pub skip_layer_image_data: Option<bool>,
pub skip_composite_image_data: Option<bool>,
pub skip_thumbnail: Option<bool>,
pub skip_linked_files_data: Option<bool>,
pub throw_for_missing_features: Option<bool>,
pub log_missing_features: Option<bool>,
pub use_image_data: Option<bool>,
pub use_raw_data: Option<bool>,
pub use_raw_thumbnail: Option<bool>,
pub log_dev_features: Option<bool>,
pub strict: Option<bool>,
pub debug: Option<bool>,
}
#[derive(Debug, Clone, Default)]
pub struct WriteOptions {
pub generate_thumbnail: Option<bool>,
pub trim_image_data: Option<bool>,
pub invalidate_text_layers: Option<bool>,
pub log_missing_features: Option<bool>,
pub no_background: Option<bool>,
pub psb: Option<bool>,
pub compress: Option<bool>,
}