lutgen-studio 0.4.0

Offical GUI for Lutgen, the best way to apply popular colorschemes to any image or wallpaper!
Documentation
use crate::App;

impl App {
    #[cfg(not(target_arch = "wasm32"))]
    pub fn show_update(&self, ui: &mut egui::Ui) {
        if let Some(update) = &self.state.update {
            let [maj, min, pat] = update.version;
            if ui
                .link(format!("Update v{maj}.{min}.{pat} available!"))
                .clicked()
            {
                ui.ctx()
                    .open_url(egui::OpenUrl::new_tab(update.url.clone()));
            }
        }
    }

    pub fn show_topbar(&mut self, ctx: &egui::Context) {
        egui::TopBottomPanel::top("top_panel").show(ctx, |ui| {
            egui::MenuBar::new().ui(ui, |ui| {
                ui.add(egui::Image::from_texture(&self.icon).max_height(16.));

                #[cfg(not(target_arch = "wasm32"))]
                ui.label("Lutgen Studio");
                #[cfg(target_arch = "wasm32")]
                ui.label("Lutgen Studio Web");

                ui.menu_button("File", |ui| {
                    if ui.button("🖻  Open").clicked() {
                        self.open_picker.trigger(self.state.current_image.clone());
                        ui.close();
                    }

                    #[cfg(not(target_arch = "wasm32"))]
                    if ui.button("💾  Save As").clicked() {
                        self.save_picker.trigger(self.state.current_image.clone());
                        ui.close();
                    }

                    #[cfg(target_arch = "wasm32")]
                    ui.add_enabled_ui(self.state.current_image.is_some(), |ui| {
                        egui::containers::menu::SubMenuButton::new("💾  Export").ui(ui, |ui| {
                            for format in image::ImageFormat::all() {
                                let ext = *format.extensions_str().first().unwrap();
                                if ui.button(ext).clicked() {
                                    self.worker.save_as(format);
                                    self.state.processing = true;
                                    ui.close();
                                }
                            }
                        });
                    });

                    ui.menu_button("🎨  Theme", |ui| {
                        egui::widgets::global_theme_preference_buttons(ui);
                    });
                });

                ui.menu_button("Help", |ui| {
                    if ui.button("ℹ  About").clicked() {
                        self.state.show_about = !self.state.show_about;
                    }

                    if ui.button("🖹  Docs").clicked() {
                        ui.ctx().open_url(egui::OpenUrl::new_tab("https://lut.sh"));
                    }
                });

                #[cfg(not(target_arch = "wasm32"))]
                ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| {
                    self.show_update(ui);
                });
            });
        });
    }
}