Skip to main content

ppt_rs/generator/slide_content/
transition.rs

1//! Slide transition types
2
3use crate::core::ToXml;
4
5/// Slide transition effects
6#[derive(Clone, Debug, Copy, PartialEq, Eq, Default)]
7pub enum TransitionType {
8    #[default]
9    None,
10    Fade,
11    Cut,
12    Push,
13    Wipe,
14    Split,
15    Reveal,
16    Cover,
17    Zoom,
18}
19
20impl TransitionType {
21    /// Generate XML for the transition
22    pub fn to_xml(&self) -> String {
23        match self {
24            TransitionType::None => String::new(),
25            TransitionType::Cut => String::new(), // Default is cut/instant
26            TransitionType::Fade => r#"<p:transition><p:fade/></p:transition>"#.to_string(),
27            TransitionType::Push => r#"<p:transition><p:push dir="r"/></p:transition>"#.to_string(), // Default right
28            TransitionType::Wipe => r#"<p:transition><p:wipe dir="r"/></p:transition>"#.to_string(), // Default right
29            TransitionType::Split => r#"<p:transition><p:split dir="out" orient="horz"/></p:transition>"#.to_string(),
30            TransitionType::Reveal => r#"<p:transition><p:reveal dir="r"/></p:transition>"#.to_string(),
31            TransitionType::Cover => r#"<p:transition><p:cover dir="r"/></p:transition>"#.to_string(),
32            TransitionType::Zoom => r#"<p:transition><p:zoom dir="in"/></p:transition>"#.to_string(),
33        }
34    }
35}
36
37impl ToXml for TransitionType {
38    fn to_xml(&self) -> String {
39        TransitionType::to_xml(self)
40    }
41}