diff --git a/crates/idml/src/model/effects.rs b/crates/idml/src/model/effects.rs index fddd44494..bb19c54f7 100644 --- a/crates/idml/src/model/effects.rs +++ b/crates/idml/src/model/effects.rs @@ -16,6 +16,29 @@ pub struct DropShadowValues { pub blend_mode: Option, } +impl DropShadowValues { + pub fn to_el(&self) -> El { + let mut element = El::new("DropShadowSetting"); + if let Some(value) = &self.mode { + element.set_attr("Mode", value); + } + for (key, value) in + [("XOffset", self.x_offset), ("YOffset", self.y_offset), ("Size", self.size), ("Spread", self.spread), ("Opacity", self.opacity)] + { + if let Some(value) = value { + element.set_attr(key, crate::value::num(value)); + } + } + if let Some(value) = &self.blend_mode { + element.set_attr("BlendMode", value); + } + if let Some(value) = &self.color { + element.set_attr("EffectColor", value); + } + element + } +} + #[derive(Clone, Debug, Default, PartialEq)] pub struct FeatherValues { pub mode: Option, @@ -24,6 +47,24 @@ pub struct FeatherValues { pub corner_type: Option, } +impl FeatherValues { + pub fn to_el(&self) -> El { + let mut element = El::new("FeatherSetting"); + if let Some(value) = &self.mode { + element.set_attr("Mode", value); + } + for (key, value) in [("Width", self.width), ("ChokeAmount", self.choke_amount)] { + if let Some(value) = value { + element.set_attr(key, crate::value::num(value)); + } + } + if let Some(value) = &self.corner_type { + element.set_attr("CornerType", value); + } + element + } +} + #[derive(Clone, Debug, Default, PartialEq)] pub struct OpacityStopValues { pub location: Option,