use super::ImageProvider; use crate::gtk_helpers::IronbarGtkExt; use gtk::prelude::*; use gtk::{Button, IconTheme, Image, Label, Orientation}; #[cfg(any(feature = "music", feature = "workspaces", feature = "clipboard"))] pub fn new_icon_button(input: &str, icon_theme: &IconTheme, size: i32) -> Button { let button = Button::new(); if ImageProvider::is_definitely_image_input(input) { let image = Image::new(); image.add_class("image"); image.add_class("icon"); match ImageProvider::parse(input, icon_theme, false, size) .map(|provider| provider.load_into_image(image.clone())) { Some(_) => { button.set_image(Some(&image)); button.set_always_show_image(true); } None => { button.set_label(input); } } } else { button.set_label(input); } button } #[cfg(feature = "music")] pub fn new_icon_label(input: &str, icon_theme: &IconTheme, size: i32) -> gtk::Box { let container = gtk::Box::new(Orientation::Horizontal, 0); if ImageProvider::is_definitely_image_input(input) { let image = Image::new(); image.add_class("icon"); image.add_class("image"); container.add(&image); ImageProvider::parse(input, icon_theme, false, size) .map(|provider| provider.load_into_image(image)); } else { let label = Label::new(Some(input)); label.add_class("icon"); label.add_class("text-icon"); container.add(&label); } container }