notedeck

One damus client to rule them all
git clone git://jb55.com/notedeck
Log | Files | Refs | README | LICENSE

commit f4a6e8f9bbb943869098ff3f24e33c70ec531eab
parent 83fd6de076737a6134e74650fb055c7e3f60724d
Author: William Casarin <jb55@jb55.com>
Date:   Tue, 29 Jul 2025 10:59:27 -0700

media: change is_narrow logic to is_scaled

Signed-off-by: William Casarin <jb55@jb55.com>

Diffstat:
Mcrates/notedeck_ui/src/note/contents.rs | 1+
Mcrates/notedeck_ui/src/note/media.rs | 61++++++++++++++++++++++++++++++++++++++-----------------------
2 files changed, 39 insertions(+), 23 deletions(-)

diff --git a/crates/notedeck_ui/src/note/contents.rs b/crates/notedeck_ui/src/note/contents.rs @@ -323,6 +323,7 @@ pub fn render_note_contents<'a>( carousel_id, trusted_media, note_context.i18n, + options, ); ui.add_space(2.0); } diff --git a/crates/notedeck_ui/src/note/media.rs b/crates/notedeck_ui/src/note/media.rs @@ -10,10 +10,10 @@ use notedeck::{ RenderableMedia, TexturedImage, TexturesCache, }; +use crate::NoteOptions; use notedeck::media::gif::ensure_latest_texture; use notedeck::media::images::{fetch_no_pfp_promise, ImageType}; use notedeck::media::{MediaInfo, ViewMediaInfo}; -use notedeck::ui::is_narrow; use crate::{app_images, AnimationHelper, PulseAlpha}; @@ -23,7 +23,7 @@ pub enum MediaViewAction { } #[allow(clippy::too_many_arguments)] -pub(crate) fn image_carousel( +pub fn image_carousel( ui: &mut egui::Ui, img_cache: &mut Images, job_pool: &mut JobPool, @@ -32,6 +32,7 @@ pub(crate) fn image_carousel( carousel_id: egui::Id, trusted_media: bool, i18n: &mut Localization, + note_options: NoteOptions, ) -> Option<MediaAction> { // let's make sure everything is within our area @@ -84,6 +85,7 @@ pub(crate) fn image_carousel( url, size, i18n, + note_options.contains(NoteOptions::Wide), ); if let Some(action) = media_response.inner { @@ -315,10 +317,11 @@ fn render_media( url: &str, size: egui::Vec2, i18n: &mut Localization, + is_scaled: bool, ) -> egui::InnerResponse<Option<MediaUIAction>> { match render_state { MediaRenderState::ActualImage(image) => { - let resp = render_success_media(ui, url, image, gifs, size, i18n); + let resp = render_success_media(ui, url, image, gifs, size, i18n, is_scaled); if resp.clicked() { egui::InnerResponse::new(Some(MediaUIAction::Clicked), resp) } else { @@ -327,8 +330,14 @@ fn render_media( } MediaRenderState::Transitioning { image, obfuscation } => match obfuscation { ObfuscatedTexture::Blur(texture) => { - let resp = - render_blur_transition(ui, url, size, texture, image.get_first_texture()); + let resp = render_blur_transition( + ui, + url, + size, + texture, + image.get_first_texture(), + is_scaled, + ); if resp.inner { egui::InnerResponse::new(Some(MediaUIAction::DoneLoading), resp.response) } else { @@ -336,11 +345,7 @@ fn render_media( } } ObfuscatedTexture::Default => { - let scaled = ScaledTexture::new( - image.get_first_texture(), - size, - notedeck::ui::is_narrow(ui.ctx()), - ); + let scaled = ScaledTexture::new(image.get_first_texture(), size, is_scaled); let resp = ui.add(scaled.get_image()); egui::InnerResponse::new(Some(MediaUIAction::DoneLoading), resp) } @@ -351,23 +356,27 @@ fn render_media( egui::InnerResponse::new(Some(MediaUIAction::Error), response) } MediaRenderState::Shimmering(obfuscated_texture) => match obfuscated_texture { - ObfuscatedTexture::Blur(texture_handle) => { - egui::InnerResponse::new(None, shimmer_blurhash(texture_handle, ui, url, size)) - } + ObfuscatedTexture::Blur(texture_handle) => egui::InnerResponse::new( + None, + shimmer_blurhash(texture_handle, ui, url, size, is_scaled), + ), ObfuscatedTexture::Default => { - egui::InnerResponse::new(None, render_default_blur_bg(ui, size, url, true)) + let shimmer = true; + egui::InnerResponse::new( + None, + render_default_blur_bg(ui, size, url, shimmer, is_scaled), + ) } }, MediaRenderState::Obfuscated(obfuscated_texture) => { let resp = match obfuscated_texture { ObfuscatedTexture::Blur(texture_handle) => { - let scaled = - ScaledTexture::new(texture_handle, size, notedeck::ui::is_narrow(ui.ctx())); + let scaled = ScaledTexture::new(texture_handle, size, is_scaled); let resp = ui.add(scaled.get_image()); render_blur_text(ui, i18n, url, resp.rect) } - ObfuscatedTexture::Default => render_default_blur(ui, i18n, size, url), + ObfuscatedTexture::Default => render_default_blur(ui, i18n, size, url, is_scaled), }; let resp = resp.on_hover_cursor(egui::CursorIcon::PointingHand); @@ -471,8 +480,10 @@ fn render_default_blur( i18n: &mut Localization, size: egui::Vec2, url: &str, + is_scaled: bool, ) -> egui::Response { - let response = render_default_blur_bg(ui, size, url, false); + let shimmer = false; + let response = render_default_blur_bg(ui, size, url, shimmer, is_scaled); render_blur_text(ui, i18n, url, response.rect) } @@ -481,8 +492,9 @@ fn render_default_blur_bg( size: egui::Vec2, url: &str, shimmer: bool, + is_scaled: bool, ) -> egui::Response { - let size = if notedeck::ui::is_narrow(ui.ctx()) { + let size = if is_scaled { size } else { vec2(size.y, size.y) @@ -548,10 +560,11 @@ fn render_success_media( gifs: &mut GifStateMap, size: Vec2, i18n: &mut Localization, + is_scaled: bool, ) -> Response { let texture = ensure_latest_texture(ui, url, gifs, tex); - let scaled = ScaledTexture::new(&texture, size, is_narrow(ui.ctx())); + let scaled = ScaledTexture::new(&texture, size, is_scaled); let img_resp = ui.add(Button::image(scaled.get_image()).frame(false)); @@ -588,10 +601,11 @@ fn shimmer_blurhash( ui: &mut egui::Ui, url: &str, size: Vec2, + is_scaled: bool, ) -> egui::Response { let cur_alpha = get_blur_current_alpha(ui, url); - let scaled = ScaledTexture::new(tex, size, is_narrow(ui.ctx())); + let scaled = ScaledTexture::new(tex, size, is_scaled); let img = scaled.get_image(); show_blurhash_with_alpha(ui, img, cur_alpha) } @@ -616,9 +630,10 @@ fn render_blur_transition( size: Vec2, blur_texture: &TextureHandle, image_texture: &TextureHandle, + is_scaled: bool, ) -> egui::InnerResponse<FinishedTransition> { - let scaled_texture = ScaledTexture::new(image_texture, size, is_narrow(ui.ctx())); - let scaled_blur_img = ScaledTexture::new(blur_texture, size, is_narrow(ui.ctx())); + let scaled_texture = ScaledTexture::new(image_texture, size, is_scaled); + let scaled_blur_img = ScaledTexture::new(blur_texture, size, is_scaled); match get_blur_transition_state(ui.ctx(), url) { BlurTransitionState::StoppingShimmer { cur_alpha } => egui::InnerResponse::new(