diff --git a/assets/logos/series-troxide-grayscaled.svg b/assets/logos/series-troxide-grayscaled.svg new file mode 100644 index 0000000..8327356 --- /dev/null +++ b/assets/logos/series-troxide-grayscaled.svg @@ -0,0 +1,358 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/gui/assets.rs b/src/gui/assets.rs index 47b918b..3a66af4 100644 --- a/src/gui/assets.rs +++ b/src/gui/assets.rs @@ -22,6 +22,8 @@ pub mod icons { pub static GITHUB_ICON: &[u8] = include_bytes!("../../assets/icons/github.svg"); pub static TRAKT_ICON_RED: &[u8] = include_bytes!("../../assets/logos/trakt-icon-red.svg"); pub static SERIES_TROXIDE_ICON: &[u8] = include_bytes!("../../assets/logos/series-troxide.svg"); + pub static SERIES_TROXIDE_GRAY_SCALED_ICON: &[u8] = + include_bytes!("../../assets/logos/series-troxide-grayscaled.svg"); } pub mod fonts { diff --git a/src/gui/helpers.rs b/src/gui/helpers.rs index cf3563c..d0916cb 100644 --- a/src/gui/helpers.rs +++ b/src/gui/helpers.rs @@ -22,6 +22,19 @@ pub fn season_episode_str_gen(season_number: u32, episode_number: u32) -> String ) } +pub fn genres_with_pipes(genres: &[String]) -> String { + let mut genres_string = String::new(); + + let mut series_result_iter = genres.iter().peekable(); + while let Some(genre) = series_result_iter.next() { + genres_string.push_str(genre); + if series_result_iter.peek().is_some() { + genres_string.push_str(" | "); + } + } + genres_string +} + pub mod time { //! Time related helpers use chrono::Duration; @@ -157,15 +170,14 @@ pub mod time { } } -pub fn genres_with_pipes(genres: &[String]) -> String { - let mut genres_string = String::new(); +pub mod empty_image { + use crate::gui::assets::icons::SERIES_TROXIDE_GRAY_SCALED_ICON; - let mut series_result_iter = genres.iter().peekable(); - while let Some(genre) = series_result_iter.next() { - genres_string.push_str(genre); - if series_result_iter.peek().is_some() { - genres_string.push_str(" | "); - } + use iced::widget::{svg, Svg}; + + /// Placeholder for an empty image + pub fn empty_image() -> Svg { + let icon_handle = svg::Handle::from_memory(SERIES_TROXIDE_GRAY_SCALED_ICON); + svg(icon_handle) } - genres_string } diff --git a/src/gui/series_page/series/cast_widget.rs b/src/gui/series_page/series/cast_widget.rs index 7484517..a04ba1b 100644 --- a/src/gui/series_page/series/cast_widget.rs +++ b/src/gui/series_page/series/cast_widget.rs @@ -247,6 +247,8 @@ mod cast_poster { pub fn view(&self) -> Element<'_, IndexedMessage, Renderer> { let mut content = Row::new().spacing(10); + let empty_image = helpers::empty_image::empty_image().width(100).height(140); + match self.current_display_image { DisplayImage::Person => { if let Some(image_bytes) = self.person_image.clone() { @@ -255,7 +257,7 @@ mod cast_poster { let image = image(image_handle).width(100); content = content.push(image); } else { - content = content.push(Space::new(100, 140)); + content = content.push(empty_image); }; } DisplayImage::Character => { @@ -265,7 +267,7 @@ mod cast_poster { let image = image(image_handle).width(100); content = content.push(image); } else { - content = content.push(Space::new(100, 140)); + content = content.push(empty_image); }; } } diff --git a/src/gui/series_page/series/mod.rs b/src/gui/series_page/series/mod.rs index e859a99..9d09be5 100644 --- a/src/gui/series_page/series/mod.rs +++ b/src/gui/series_page/series/mod.rs @@ -6,7 +6,7 @@ use crate::core::api::tv_maze::Image; use crate::core::caching::episode_list::EpisodeReleaseTime; use crate::core::{caching, database}; use crate::gui::assets::icons::{PATCH_PLUS, PATCH_PLUS_FILL}; -use crate::gui::styles; +use crate::gui::{helpers, styles}; use bytes::Bytes; use cast_widget::{CastWidget, Message as CastWidgetMessage}; @@ -43,7 +43,7 @@ pub fn series_metadata<'a>( main_info = main_info.push(image); } else { - main_info = main_info.push(Space::new(180, 253)); + main_info = main_info.push(helpers::empty_image::empty_image().width(180).height(253)); }; let mut series_data_grid = Grid::with_columns(2); diff --git a/src/gui/tabs/my_shows_tab/upcoming_releases_widget.rs b/src/gui/tabs/my_shows_tab/upcoming_releases_widget.rs index 7a80e66..7d91511 100644 --- a/src/gui/tabs/my_shows_tab/upcoming_releases_widget.rs +++ b/src/gui/tabs/my_shows_tab/upcoming_releases_widget.rs @@ -161,7 +161,7 @@ mod upcoming_poster { use crate::gui::troxide_widget::series_poster::{GenericPoster, GenericPosterMessage}; use iced::widget::{ - column, container, horizontal_space, image, mouse_area, row, text, vertical_space, Space, + column, container, horizontal_space, image, mouse_area, row, text, vertical_space, }; use iced::{Command, Element, Length, Renderer}; @@ -226,7 +226,7 @@ mod upcoming_poster { let image = image(image_handle).width(100); content = content.push(image); } else { - content = content.push(Space::new(100, 140)); + content = content.push(helpers::empty_image::empty_image().width(100).height(140)); }; let mut metadata = column!().spacing(5); diff --git a/src/gui/tabs/statistics_tab/mini_widgets.rs b/src/gui/tabs/statistics_tab/mini_widgets.rs index 1cdee26..83f4816 100644 --- a/src/gui/tabs/statistics_tab/mini_widgets.rs +++ b/src/gui/tabs/statistics_tab/mini_widgets.rs @@ -178,7 +178,7 @@ pub fn genre_stats(series_infos: Vec<&SeriesMainInformation>) -> Element<'_, Mes pub mod series_banner { use std::sync::mpsc; - use iced::widget::{column, container, image, mouse_area, row, text, Row, Space}; + use iced::widget::{column, container, image, mouse_area, row, text, Row}; use iced::{Alignment, Command, Element, Length, Renderer}; use crate::core::{api::tv_maze::series_information::SeriesMainInformation, database}; @@ -290,7 +290,10 @@ pub mod series_banner { let image_handle = image::Handle::from_memory(image_bytes.clone()); image(image_handle).height(100).into() } else { - Space::new(71, 100).into() + helpers::empty_image::empty_image() + .width(71) + .height(100) + .into() }; let content = column![text(series_name), metadata] diff --git a/src/gui/troxide_widget.rs b/src/gui/troxide_widget.rs index a58a434..2fa4098 100644 --- a/src/gui/troxide_widget.rs +++ b/src/gui/troxide_widget.rs @@ -1,18 +1,18 @@ pub mod episode_widget { - pub use crate::gui::message::IndexedMessage; - use crate::{ - core::{api::tv_maze::episodes_information::Episode as EpisodeInfo, caching, database}, - gui::{assets::icons::EYE_FILL, helpers::season_episode_str_gen, styles}, + use crate::core::{ + api::tv_maze::episodes_information::Episode as EpisodeInfo, caching, database, }; + use crate::gui::assets::icons::EYE_FILL; + use crate::gui::helpers::{self, season_episode_str_gen}; + pub use crate::gui::message::IndexedMessage; + use crate::gui::styles; use bytes::Bytes; - use iced::{ - font::Weight, - widget::{ - button, checkbox, column, container, horizontal_space, image, row, svg, text, - vertical_space, Row, Space, Text, - }, - Command, Element, Font, Length, Renderer, + use iced::font::Weight; + use iced::widget::{ + button, checkbox, column, container, horizontal_space, image, row, svg, text, + vertical_space, Row, Space, Text, }; + use iced::{Command, Element, Font, Length, Renderer}; #[derive(Clone, Debug)] pub enum Message { @@ -143,7 +143,11 @@ pub mod episode_widget { let image = image(image_handle).height(image_height); content = content.push(image); } else { - content = content.push(Space::new(image_width, image_height)); + content = content.push( + helpers::empty_image::empty_image() + .width(image_width) + .height(image_height), + ); }; let episode_details = column!( @@ -411,7 +415,10 @@ pub mod series_poster { let image_handle = image::Handle::from_memory(image_bytes.clone()); image(image_handle).height(image_height).into() } else { - Space::new(image_height as f32 / 1.4, image_height).into() + helpers::empty_image::empty_image() + .width(image_height as f32 / 1.4) + .height(image_height) + .into() } };