Skip to content

Commit 91e324c

Browse files
committed
fix clippy
1 parent bdf8cfc commit 91e324c

File tree

9 files changed

+267
-433
lines changed

9 files changed

+267
-433
lines changed

Cargo.lock

Lines changed: 0 additions & 162 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ version = "0.0.1-pre-alpha-4"
1616
metadata.makepad-auto-version = "zqpv-Yj-K7WNVK2I8h5Okhho46Q="
1717

1818
[dependencies]
19-
makepad-widgets = { git = "https://github.com/alanpoon/makepad", branch = "rotated_image_set_texture" }
19+
makepad-widgets = { git = "https://github.com/makepad/makepad", branch = "dev" }
2020

2121
## Including this crate automatically configures all `robius-*` crates to work with Makepad.
2222
robius-use-makepad = "0.1.1"

src/app.rs

Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -557,11 +557,11 @@ impl AppMain for App {
557557
}
558558

559559
// If the image viewer modal is really opened, handles non-Draw events using the modal.
560-
let image_viewer_modal = self.ui.modal(id!(image_viewer));
560+
let image_viewer_modal = self.ui.modal(ids!(image_viewer));
561561
if image_viewer_modal.is_open() &&image_viewer_modal.area().rect(cx).size.y > 200.0 {
562562
let scope = &mut Scope::with_data(&mut self.app_state);
563-
self.ui.view(id!(popup_list)).handle_event(cx, event, scope);
564-
self.ui.modal(id!(image_viewer)).handle_event(cx, event, scope);
563+
self.ui.view(ids!(popup_list)).handle_event(cx, event, scope);
564+
self.ui.modal(ids!(image_viewer)).handle_event(cx, event, scope);
565565
// Pass the Signal event to the underlying room screen, so as to populate the full image in the image viewer.
566566
if let Event::Signal = event {
567567
self.ui.handle_event(cx, event, scope);
@@ -687,43 +687,45 @@ impl App {
687687

688688
/// Handles actions for the image viewer.
689689
/// Returns a boolean, is true continues the actions for loop.
690-
fn handle_image_viewer_action(&mut self, cx: &mut Cx, action: &Box<dyn ActionTrait>) -> bool {
690+
//fn handle_image_viewer_action(&mut self, cx: &mut Cx, action: &Box<dyn ActionTrait>) -> bool {
691+
fn handle_image_viewer_action(&mut self, cx: &mut Cx, action: &Action) -> bool {
692+
691693
match action.downcast_ref() {
692694
Some(ImageViewerAction::Show(load_state)) => {
693695
match load_state {
694696
LoadState::Loading(texture, image_size) => {
695-
self.ui.modal(id!(image_viewer)).open(cx);
696-
self.ui.image_viewer(id!(image_viewer_inner)).reset(cx);
697-
self.ui.view(id!(image_viewer_loading_spinner_view)).set_visible(cx, true);
698-
self.ui.label(id!(image_viewer_status_label)).set_text(cx, "Loading...");
699-
self.ui.view(id!(image_viewer_forbidden_view)).set_visible(cx, false);
700-
self.ui.view(id!(footer)).apply_over(cx, live!{
697+
self.ui.modal(ids!(image_viewer)).open(cx);
698+
self.ui.image_viewer(ids!(image_viewer_inner)).reset(cx);
699+
self.ui.view(ids!(image_viewer_loading_spinner_view)).set_visible(cx, true);
700+
self.ui.label(ids!(image_viewer_status_label)).set_text(cx, "Loading...");
701+
self.ui.view(ids!(image_viewer_forbidden_view)).set_visible(cx, false);
702+
self.ui.view(ids!(footer)).apply_over(cx, live!{
701703
height: 50
702704
});
703-
self.ui.image_viewer(id!(image_viewer_inner)).display_using_texture(cx, texture.as_ref().clone(), image_size);
705+
self.ui.image_viewer(ids!(image_viewer_inner)).display_using_texture(cx, texture.as_ref().clone(), image_size);
704706
}
705707
LoadState::Loaded(image_bytes) => {
706-
self.ui.modal(id!(image_viewer)).open(cx);
707-
self.ui.image_viewer(id!(image_viewer_inner)).display_using_background_thread(cx, image_bytes);
708+
self.ui.modal(ids!(image_viewer)).open(cx);
709+
self.ui.image_viewer(ids!(image_viewer_inner)).display_using_background_thread(cx, image_bytes);
708710
}
709711
LoadState::FinishedBackgroundDecoding => {
710-
self.ui.view(id!(zoom_button_view)).set_visible(cx, true);
711-
self.ui.view(id!(image_viewer_loading_spinner_view)).set_visible(cx, false);
712-
self.ui.view(id!(image_viewer_forbidden_view)).set_visible(cx, false);
713-
self.ui.label(id!(image_viewer_status_label)).set_text(cx, "");
712+
self.ui.view(ids!(zoom_button_view)).set_visible(cx, true);
713+
self.ui.view(ids!(image_viewer_loading_spinner_view)).set_visible(cx, false);
714+
self.ui.view(ids!(image_viewer_forbidden_view)).set_visible(cx, false);
715+
self.ui.label(ids!(image_viewer_status_label)).set_text(cx, "");
714716
// Collapse the footer
715-
self.ui.view(id!(footer)).apply_over(cx, live!{
717+
self.ui.view(ids!(footer)).apply_over(cx, live!{
716718
height: 0
717719
});
718720
}
719721
LoadState::Error(error) => {
720-
if self.ui.modal(id!(image_viewer)).is_open() {
722+
if self.ui.modal(ids!(image_viewer)).is_open() {
721723
// Reset the image viewer to clear any previous image
722-
self.ui.view(id!(image_viewer_loading_spinner_view)).set_visible(cx, false);
723-
self.ui.view(id!(image_viewer_forbidden_view)).set_visible(cx, true);
724-
self.ui.label(id!(image_viewer_status_label)).set_text(cx, image_viewer_error_to_string(error));
724+
self.ui.view(ids!(image_viewer_loading_spinner_view)).set_visible(cx, false);
725+
self.ui.view(ids!(image_viewer_forbidden_view)).set_visible(cx, true);
726+
self.ui.label(ids!(image_viewer_status_label)).set_text(cx, image_viewer_error_to_string(error));
725727
// Expand the footer
726-
self.ui.view(id!(footer)).apply_over(cx, live!{
728+
self.ui.view(ids!(footer)).apply_over(cx, live!{
727729
height: 50
728730
});
729731
}
@@ -732,8 +734,8 @@ impl App {
732734
true
733735
}
734736
Some(ImageViewerAction::Hide) => {
735-
self.ui.modal(id!(image_viewer)).close(cx);
736-
self.ui.room_image_message_detail(id!(image_detail)).reset_state(cx);
737+
self.ui.modal(ids!(image_viewer)).close(cx);
738+
self.ui.room_image_message_detail(ids!(image_detail)).reset_state(cx);
737739
true
738740
}
739741
_ => false

src/home/link_preview.rs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -270,19 +270,14 @@ impl LinkPreviewRef {
270270
}
271271
}
272272

273+
/// Gets the children of the LinkPreview widget.
273274
pub fn get_children(&self) -> Vec<ViewRef> {
274275
if let Some(inner) = self.borrow() {
275276
return inner.children.clone();
276277
}
277278
Vec::new()
278279
}
279-
pub fn iter<F>(&self, closure: F) where F: Fn(&ViewRef) {
280-
if let Some(inner) = self.borrow() {
281-
for child in inner.children.iter() {
282-
closure(child);
283-
}
284-
}
285-
}
280+
286281
/// Shows the collapsible button for the link preview.
287282
///
288283
/// This function is usually called when the link preview is updated.

src/home/room_image_message_detail.rs

Lines changed: 38 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -30,38 +30,35 @@ live_design! {
3030
width: 150, height: Fit,
3131
flow: Right,
3232
spacing: 10,
33-
margin: {left: 20, top: 20}
34-
align: { y: 0.5}
33+
margin: {left: 20, top: 40}
34+
align: { y: 0.5 }
3535

3636
avatar = <Avatar> {
37-
width: 40,
38-
height: 40,
37+
width: 40, height: 40,
3938
}
4039

4140
content = <View> {
4241
width: Fill, height: Fit,
4342
flow: Down,
4443
spacing: 4,
45-
align: { x: 0.0 }
4644

4745
username = <Label> {
4846
width: Fill, height: Fit,
4947
draw_text: {
5048
text_style: <REGULAR_TEXT>{font_size: 14},
5149
color: (COLOR_TEXT)
5250
}
53-
text: ""
5451
}
5552
timestamp_view = <View> {
5653
width: Fill, height: Fit
5754
timestamp = <Timestamp> {
5855
width: Fill, height: Fit,
59-
margin: { left: 5}
56+
margin: { left: 5 }
6057
}
6158
}
62-
6359
}
6460
}
61+
6562
image_name_and_size = <Label> {
6663
width: Fill, height: Fit,
6764
margin: {top: 40}
@@ -72,24 +69,32 @@ live_design! {
7269
wrap: Word
7370
}
7471
}
72+
7573
empty_right_container = <View> {
7674
// equal width as the top-left container to keep the image name centered.
7775
width: 150, height: Fit,
7876
}
7977
}
8078
}
8179

80+
/// A room image message detail widget that displays a user's avatar, username, and message date.
8281
#[derive(Live, LiveHook, Widget)]
8382
pub struct RoomImageMessageDetail {
84-
#[deref] view: View,
83+
#[deref] view: View,
84+
/// The sender of the message
8585
#[rust] sender: Option<OwnedUserId>,
86+
/// The profile of the sender
8687
#[rust] sender_profile: Option<TimelineDetails<Profile>>,
88+
/// The room ID
8789
#[rust] room_id: Option<OwnedRoomId>,
90+
/// The event ID
8891
#[rust] event_id: Option<OwnedEventId>,
92+
/// The sender's avatar has been drawn. Will not be drawn again if set to `true`.
8993
#[rust] avatar_drawn: bool,
94+
/// The name of the image.
9095
#[rust] image_name: String,
96+
/// The size of the image in bytes.
9197
#[rust] image_size: i32,
92-
#[rust] is_desktop: bool
9398
}
9499

95100
/// Convert bytes to human-readable file size format
@@ -120,14 +125,12 @@ fn format_file_size(bytes: i32) -> String {
120125
}
121126
}
122127

123-
/// Maximum image name length for desktop display
124-
const MAX_IMAGE_NAME_LENGTH_DESKTOP: usize = 50;
125-
/// Maximum image name length for mobile display
126-
const MAX_IMAGE_NAME_LENGTH_MOBILE: usize = 10;
128+
/// Maximum image name length to be displayed
129+
const MAX_IMAGE_NAME_LENGTH: usize = 50;
127130

128-
/// Truncate image name based on display context while preserving file extension
129-
fn truncate_image_name(image_name: &str, is_desktop: bool) -> String {
130-
let max_length = if is_desktop { MAX_IMAGE_NAME_LENGTH_DESKTOP } else { MAX_IMAGE_NAME_LENGTH_MOBILE };
131+
/// Truncate image name while preserving file extension
132+
fn truncate_image_name(image_name: &str) -> String {
133+
let max_length = MAX_IMAGE_NAME_LENGTH;
131134

132135
if image_name.len() <= max_length {
133136
return image_name.to_string();
@@ -159,24 +162,22 @@ impl Widget for RoomImageMessageDetail {
159162
}
160163

161164
fn draw_walk(&mut self, cx: &mut Cx2d, scope: &mut Scope, walk: Walk) -> DrawStep {
162-
let is_desktop = cx.display_context.is_desktop();
163-
if self.is_desktop != is_desktop && !self.image_name.is_empty() {
164-
let truncated_name = truncate_image_name(&self.image_name, is_desktop);
165-
let human_readable_size = format_file_size(self.image_size);
166-
let display_text = format!("{} ({})", truncated_name, human_readable_size);
167-
self.label(id!(image_name_and_size)).set_text(cx, &display_text);
168-
self.is_desktop = is_desktop;
169-
}
170-
171165
if !self.avatar_drawn {
172-
let avatar_ref = self.avatar(id!(top_left_container.avatar));
166+
let avatar_ref = self.avatar(ids!(top_left_container.avatar));
173167
let Some(room_id) = &self.room_id else { return DrawStep::done() };
174168
let Some(sender) = &self.sender else { return DrawStep::done() };
175169
let (username, avatar_drawn) = avatar_ref.set_avatar_and_get_username(cx, room_id, sender, self.sender_profile.as_ref(), self.event_id.as_deref());
176-
self.label(id!(top_left_container.username)).set_text(cx, &username);
170+
self.label(ids!(top_left_container.username)).set_text(cx, &username);
177171
self.avatar_drawn = avatar_drawn;
178172
let is_desktop = cx.display_context.is_desktop();
179-
self.is_desktop = is_desktop;
173+
let truncated_name = truncate_image_name(&self.image_name);
174+
let human_readable_size = format_file_size(self.image_size);
175+
let display_text = format!("{} ({})", truncated_name, human_readable_size);
176+
self.label(ids!(image_name_and_size)).set_text(cx, &display_text);
177+
let empty_right_container_width = if is_desktop { 150 } else { 0 };
178+
self.view(ids!(empty_right_container)).apply_over(cx, live!{
179+
width: (empty_right_container_width)
180+
});
180181
}
181182

182183
self.view.draw_walk(cx, scope, walk)
@@ -200,16 +201,15 @@ impl MatchEvent for RoomImageMessageDetail {
200201
self.event_id = event_id.clone();
201202
self.avatar_drawn = false;
202203
// Format and display image name and size
203-
let is_desktop = cx.display_context.is_desktop();
204-
let truncated_name = truncate_image_name(&image_name, is_desktop);
204+
let truncated_name = truncate_image_name(&image_name);
205205
let human_readable_size = format_file_size(image_size);
206206
let display_text = format!("{} ({})", truncated_name, human_readable_size);
207207
self.image_name = image_name;
208208
self.image_size = image_size;
209-
self.label(id!(image_name_and_size)).set_text(cx, &display_text);
209+
self.label(ids!(image_name_and_size)).set_text(cx, &display_text);
210210
if let Some(dt) = unix_time_millis_to_datetime(timestamp_millis) {
211-
self.view(id!(timestamp_view)).set_visible(cx, true);
212-
self.timestamp(id!(timestamp)).set_date_time(cx, dt);
211+
self.view(ids!(timestamp_view)).set_visible(cx, true);
212+
self.timestamp(ids!(timestamp)).set_date_time(cx, dt);
213213
}
214214
}
215215
}
@@ -227,9 +227,9 @@ impl RoomImageMessageDetail {
227227
self.image_size = 0;
228228

229229
// Clear the UI elements
230-
self.label(id!(top_left_container.username)).set_text(cx, "");
231-
self.label(id!(image_name_and_size)).set_text(cx, "");
232-
self.view(id!(timestamp_view)).set_visible(cx, false);
230+
self.label(ids!(top_left_container.username)).set_text(cx, "");
231+
self.label(ids!(image_name_and_size)).set_text(cx, "");
232+
self.view(ids!(timestamp_view)).set_visible(cx, false);
233233
}
234234
}
235235

@@ -263,4 +263,4 @@ pub enum RoomImageMessageDetailAction {
263263
image_size: i32
264264
},
265265
None,
266-
}
266+
}

src/home/room_screen.rs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ use crate::{
3535
shared::{
3636
avatar::AvatarWidgetRefExt, callout_tooltip::TooltipAction, html_or_plaintext::{HtmlOrPlaintextRef, HtmlOrPlaintextWidgetRefExt, RobrixHtmlLinkAction}, image_viewer::{ImageViewerAction, ImageViewerError, LoadState}, jump_to_bottom_button::{JumpToBottomButtonWidgetExt, UnreadMessageCount}, popup_list::{PopupItem, PopupKind, enqueue_popup_notification}, restore_status_view::RestoreStatusViewWidgetExt, styles::*, text_or_image::{TextOrImageAction, TextOrImageRef, TextOrImageWidgetRefExt}, timestamp::TimestampWidgetRefExt
3737
},
38-
sliding_sync::{BackwardsPaginateUntilEventRequest, MatrixRequest, PaginationDirection, TimelineEndpoints, TimelineRequestSender, UserPowerLevels, get_client, submit_async_request, take_timeline_endpoints}, utils::{self, ImageFormat, MEDIA_THUMBNAIL_FORMAT, retain_aspect_ratio, room_name_or_id, unix_time_millis_to_datetime}
38+
sliding_sync::{BackwardsPaginateUntilEventRequest, MatrixRequest, PaginationDirection, TimelineEndpoints, TimelineRequestSender, UserPowerLevels, get_client, submit_async_request, take_timeline_endpoints}, utils::{self, ImageFormat, MEDIA_THUMBNAIL_FORMAT, constrain_image_dimensions, room_name_or_id, unix_time_millis_to_datetime}
3939
};
4040
use crate::home::event_reaction_list::ReactionListWidgetRefExt;
4141
use crate::home::room_read_receipt::AvatarRowWidgetRefExt;
@@ -662,11 +662,12 @@ impl Widget for RoomScreen {
662662
TooltipAction::HoverOut
663663
);
664664
}
665-
let content_message = wr.text_or_image(id!(content.message));
665+
let content_message = wr.text_or_image(ids!(content.message));
666666
if let TextOrImageAction::Clicked(mxc_uri) = actions.find_widget_action(content_message.widget_uid()).cast() {
667667
let Some((texture, size)) = content_message.get_texture_and_size(cx) else { continue; };
668-
let texture = Arc::new(texture);
669-
let (capped_width, capped_height) = retain_aspect_ratio(size.x as u32, size.y as u32);
668+
let texture = std::rc::Rc::new(texture);
669+
let screen_width = wr.area().rect(cx).size.x;
670+
let (capped_width, capped_height) = constrain_image_dimensions(size.x, size.y, screen_width);
670671
if let Some(tl_state) = &mut self.tl_state {
671672
if let Some(item) = tl_state.items.get(index) {
672673
if let Some(event_tl_item) = item.as_event() {
@@ -682,7 +683,6 @@ impl Widget for RoomScreen {
682683
.and_then(|info| info.size)
683684
.map(|s| i32::try_from(s).unwrap_or_default())
684685
.unwrap_or(0);
685-
686686
(name, size)
687687
} else {
688688
("Unknown Image".to_string(), 0)
@@ -712,15 +712,16 @@ impl Widget for RoomScreen {
712712
}
713713
continue
714714
}
715-
let link_preview_content = wr.link_preview(id!(content.link_preview_view)).get_children();
715+
let link_preview_content = wr.link_preview(ids!(content.link_preview_view)).get_children();
716716
for text_or_image in link_preview_content.iter() {
717-
let text_or_image = text_or_image.text_or_image(id!(image_view.image));
717+
let text_or_image = text_or_image.text_or_image(ids!(image_view.image));
718718
if let TextOrImageAction::Clicked(mxc_uri) = actions.find_widget_action(text_or_image.widget_uid()).cast() {
719719
let Some((texture, size)) = text_or_image.get_texture_and_size(cx) else {
720720
continue;
721721
};
722-
let (capped_width, capped_height) = retain_aspect_ratio(size.x as u32, size.y as u32);
723-
let texture = Arc::new(texture);
722+
let screen_width = wr.area().rect(cx).size.x;
723+
let (capped_width, capped_height) = constrain_image_dimensions(size.x, size.y, screen_width);
724+
let texture = std::rc::Rc::new(texture);
724725
let Some(mxc_uri_string) = mxc_uri else { continue; };
725726
let mxc_uri = OwnedMxcUri::from(mxc_uri_string);
726727
cx.action(ImageViewerAction::Show(LoadState::Loading(texture, DVec2 { x: capped_width, y: capped_height })));

0 commit comments

Comments
 (0)