Skip to content
Snippets Groups Projects
s2_introduction.rs 1.66 KiB
Newer Older
use crate::{fade_in, Margin, Slide};
Finn Bear's avatar
Finn Bear committed
use eframe::egui::{Context, Frame, Ui};

Finn Bear's avatar
Finn Bear committed
/// A slide that sets some expectations about generative art.
Finn Bear's avatar
Finn Bear committed
#[derive(Default)]
Finn Bear's avatar
Finn Bear committed
pub struct Introduction {
    state: IntroductionState,
}

#[derive(Default)]
enum IntroductionState {
    #[default]
    Weaknesses,
    Strengths {
Finn Bear's avatar
Finn Bear committed
        /// What time we started fading in the strengths.
        transition_time: f64,
    },
Finn Bear's avatar
Finn Bear committed
}
Finn Bear's avatar
Finn Bear committed

impl Slide for Introduction {
    fn transition(&mut self, ctx: &Context) -> bool {
        match self.state {
            IntroductionState::Weaknesses => {
                self.state = IntroductionState::Strengths {
                    transition_time: ctx.input().time,
                };
                false
            }
            IntroductionState::Strengths { .. } => true,
        }
Finn Bear's avatar
Finn Bear committed
    }

    fn show(&mut self, ui: &mut Ui) {
Finn Bear's avatar
Finn Bear committed
        Frame::none().margin(Margin::same(20.0)).show(ui, |ui| {
Finn Bear's avatar
Finn Bear committed
            ui.heading("Introduction to Artistic Algorithms");
Finn Bear's avatar
Finn Bear committed
            ui.add_space(8.0);
            ui.label("Weaknesses");
Finn Bear's avatar
Finn Bear committed
            ui.small(" ✖ Social context");
            ui.small(" ✖ Human emotion");
            ui.small(" ✖ Political commentary");

            if let IntroductionState::Strengths { transition_time } = &self.state {
                fade_in(ui, *transition_time, |ui| {
                    ui.add_space(10.0);
                    ui.label("Strengths");
                    ui.small(" ✔ Following rules");
                    ui.small(" ✔ Performing computation");
                    ui.small(" ✔ Harnessing chaos and randomness");
                    ui.small(" ✔ Guided exploration");
                });
Finn Bear's avatar
Finn Bear committed
            }
Finn Bear's avatar
Finn Bear committed
        });
    }
}