From c7b6917af25fdb5f5152cd83449c8b7d07250db8 Mon Sep 17 00:00:00 2001 From: PlexSheep Date: Fri, 23 Aug 2024 01:28:43 +0200 Subject: [PATCH] feat(player): load img or default --- src/player/ui/entry.rs | 27 ++++++++++++++++++++------- src/player/ui/mod.rs | 1 + src/player/ui/showbox.rs | 19 ++++++++----------- 3 files changed, 29 insertions(+), 18 deletions(-) diff --git a/src/player/ui/entry.rs b/src/player/ui/entry.rs index 60d2fb5..81c6525 100644 --- a/src/player/ui/entry.rs +++ b/src/player/ui/entry.rs @@ -1,4 +1,6 @@ -#[derive(Hash, Clone, PartialEq, Eq)] +use egui::ImageSource; + +#[derive(Hash, Debug, Clone, PartialEq, Eq)] pub enum Kind { Playlist, Album, @@ -6,19 +8,30 @@ pub enum Kind { Artist, } -#[derive(Hash, Clone, PartialEq, Eq)] +#[derive(Clone, Debug)] pub struct Entry { - kind: Kind, - title: String, - image: Option<()>, + pub kind: Kind, + pub title: String, + /// image url because I can't be bothered to use lifetimes everywhere + pub img_url: Option, } impl Entry { - pub fn new(kind: Kind, title: &str, img: Option<()>) -> Self { + pub fn new(kind: Kind, title: &str, img: Option) -> Self { Self { kind, title: title.to_owned(), - image: img, + img_url: img, + } + } + pub fn img(&self) -> ImageSource { + if let Some(url) = &self.img_url { + ImageSource::Uri(std::borrow::Cow::from(url)) + } else { + ImageSource::Bytes { + uri: std::borrow::Cow::Borrowed("builtin://icon_256.jpg"), + bytes: egui::load::Bytes::Static(super::ICON_RAW), + } } } } diff --git a/src/player/ui/mod.rs b/src/player/ui/mod.rs index 9ad512f..87f2a19 100644 --- a/src/player/ui/mod.rs +++ b/src/player/ui/mod.rs @@ -9,6 +9,7 @@ use self::showbox::ShowBox; use super::*; +const ICON_RAW_PATH: &str = "file://../../../assets/img/icon-512.jpg"; const ICON_RAW: &[u8; 36525] = include_bytes!("../../../assets/img/icon-512.jpg"); impl Player { diff --git a/src/player/ui/showbox.rs b/src/player/ui/showbox.rs index fbd333e..5e8f8ae 100644 --- a/src/player/ui/showbox.rs +++ b/src/player/ui/showbox.rs @@ -1,4 +1,4 @@ -use egui::ImageSource; +use egui::{Color32, ImageSource}; use super::{Entry, ICON_RAW}; @@ -18,21 +18,18 @@ impl ShowBox { } impl egui::Widget for ShowBox { - fn ui(mut self, ui: &mut egui::Ui) -> egui::Response { + fn ui(self, ui: &mut egui::Ui) -> egui::Response { egui::Frame::none() - .fill(Color32::GRAY) + // .fill(Color32::DARK_GRAY) .show(ui, |ui| { ui.label("Label with red background"); ui.vertical_centered(|ui| { ui.add( - egui::Image::new(ImageSource::Bytes { - uri: std::borrow::Cow::Borrowed("fuck you"), - bytes: egui::load::Bytes::Static(ICON_RAW), - }) - .rounding(5.0) - .bg_fill(Color32::DARK_GRAY) - .shrink_to_fit() - .maintain_aspect_ratio(true), + egui::Image::new(self.entry.img()) + .rounding(5.0) + .bg_fill(Color32::DARK_GRAY) + .shrink_to_fit() + .maintain_aspect_ratio(true), ); ui.button("i dont get it").union(ui.label("caption")) })