Skip to content

Commit 9ce2bb8

Browse files
committed
simplify SpaceLobbyScreen draw implementation
1 parent c44f833 commit 9ce2bb8

1 file changed

Lines changed: 55 additions & 62 deletions

File tree

src/home/space_lobby.rs

Lines changed: 55 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -755,105 +755,98 @@ impl Widget for SpaceLobbyScreen {
755755
list.set_item_range(cx, 0, total_count);
756756

757757
while let Some(item_id) = list.next_visible_item(cx) {
758-
let mut item_scope = Scope::empty();
759-
760-
if self.is_loading && item_id == 0 {
761-
// Draw loading indicator
758+
// Draw loading indicator
759+
let item = if self.is_loading && item_id == 0 {
762760
let item = list.item(cx, item_id, id!(status_label));
763761
item.label(ids!(label)).set_text(cx, "Loading rooms and spaces...");
764-
item.draw_all(cx, &mut item_scope);
765-
} else if entry_count == 0 && item_id == 0 {
766-
// No entries found
762+
item
763+
}
764+
// No entries found
765+
else if entry_count == 0 && item_id == 0 {
767766
let item = list.item(cx, item_id, id!(status_label));
768767
item.label(ids!(label)).set_text(cx, "No rooms or spaces found.");
769768
item.view(ids!(loading_spinner)).apply_over(cx, live! { visible: false });
770-
item.draw_all(cx, &mut item_scope);
771-
} else if let Some(entry) = self.tree_entries.get(item_id) {
769+
item
770+
}
771+
// Draw a regular entrty
772+
else if let Some(entry) = self.tree_entries.get(item_id) {
772773
match entry {
773774
TreeEntry::Item { info, level, is_last, parent_mask } => {
774-
if info.is_space() {
775+
let item = if info.is_space() {
775776
let item = list.item(cx, item_id, id!(subspace_entry));
776777
if let Some(mut inner) = item.borrow_mut::<SubspaceEntry>() {
777778
inner.space_id = Some(info.id.clone());
778779
}
779-
780-
// Configure tree lines
781-
if let Some(mut lines) = item.widget(ids!(tree_lines)).borrow_mut::<TreeLines>() {
782-
lines.draw_bg.level = *level as f32;
783-
lines.draw_bg.is_last = if *is_last { 1.0 } else { 0.0 };
784-
lines.draw_bg.parent_mask = *parent_mask as f32;
785-
lines.draw_bg.indent_width = 44.0; // Hardcoded to match
786-
}
787-
788780
// Expand icon
789781
let is_expanded = self.expanded_spaces.contains(&info.id);
790782
let angle = if is_expanded { 180.0 } else { 90.0 };
791783
item.icon(ids!(expand_icon)).apply_over(cx, live! {
792784
draw_icon: { rotation_angle: (angle) }
793785
});
794-
795-
// Avatar
796-
let avatar_ref = item.avatar(ids!(avatar));
797-
let first_char = utils::user_name_first_letter(&info.name);
798-
avatar_ref.show_text(cx, None, None, first_char.unwrap_or("#"));
799-
800-
// Text
801-
item.label(ids!(content.name_label)).set_text(cx, &info.name);
802-
let info_text = if let Some(c) = info.children_count && c > 0 {
803-
format!("{} members · {} rooms", info.num_joined_members, c)
804-
} else {
805-
format!("{} members", info.num_joined_members)
806-
};
807-
item.label(ids!(content.info_label)).set_text(cx, &info_text);
808-
809-
item.draw_all(cx, &mut item_scope);
786+
item
810787
} else {
811788
let item = list.item(cx, item_id, id!(room_entry));
812789
if let Some(mut inner) = item.borrow_mut::<RoomEntry>() {
813790
inner.room_id = Some(info.id.clone());
814791
}
815-
816-
// Configure tree lines
817-
if let Some(mut lines) = item.widget(ids!(tree_lines)).borrow_mut::<TreeLines>() {
818-
lines.draw_bg.level = *level as f32;
819-
lines.draw_bg.is_last = if *is_last { 1.0 } else { 0.0 };
820-
lines.draw_bg.parent_mask = *parent_mask as f32;
821-
lines.draw_bg.indent_width = 44.0;
822-
}
823-
824-
// Avatar
825-
let avatar_ref = item.avatar(ids!(avatar));
826-
let first_char = utils::user_name_first_letter(&info.name);
827-
avatar_ref.show_text(cx, None, None, first_char.unwrap_or("#"));
828-
829-
// Text
830-
item.label(ids!(content.name_label)).set_text(cx, &info.name);
831-
let info_text = format!("{} members", info.num_joined_members);
832-
item.label(ids!(content.info_label)).set_text(cx, &info_text);
833-
834-
item.draw_all(cx, &mut item_scope);
792+
item
793+
};
794+
795+
// Below, draw things that are common to child rooms and subspaces.
796+
item.label(ids!(content.name_label)).set_text(cx, &info.name);
797+
// TODO: query (and update) room/space avatar from the avatar_cache
798+
let avatar_ref = item.avatar(ids!(avatar));
799+
let first_char = utils::user_name_first_letter(&info.name);
800+
avatar_ref.show_text(cx, None, None, first_char.unwrap_or("#"));
801+
802+
if let Some(mut lines) = item.widget(ids!(tree_lines)).borrow_mut::<TreeLines>() {
803+
lines.draw_bg.level = *level as f32;
804+
lines.draw_bg.is_last = if *is_last { 1.0 } else { 0.0 };
805+
lines.draw_bg.parent_mask = *parent_mask as f32;
806+
lines.draw_bg.indent_width = 44.0; // Hardcoded to match
835807
}
808+
809+
let info_label = item.label(ids!(content.info_label));
810+
if let Some(c) = info.children_count && c > 0 {
811+
info_label.set_text(cx, &format!(
812+
"{} {} | ~{} {}",
813+
info.num_joined_members,
814+
match info.num_joined_members {
815+
1 => "member",
816+
_ => "members",
817+
},
818+
c,
819+
match c {
820+
1 => "room",
821+
_ => "rooms",
822+
}
823+
));
824+
} else {
825+
match info.num_joined_members {
826+
1 => info_label.set_text(cx, "1 member"),
827+
n => info_label.set_text(cx, &format!("{n} members")),
828+
}
829+
};
830+
831+
item
836832
}
837833
TreeEntry::Loading { level, parent_mask } => {
838834
// Draw loading indicator for subspace
839835
let item = list.item(cx, item_id, id!(subspace_loading));
840-
841836
// Configure tree lines
842837
if let Some(mut lines) = item.widget(ids!(tree_lines)).borrow_mut::<TreeLines>() {
843838
lines.draw_bg.level = *level as f32;
844839
lines.draw_bg.is_last = 1.0;
845840
lines.draw_bg.parent_mask = *parent_mask as f32;
846841
lines.draw_bg.indent_width = 44.0;
847842
}
848-
849-
item.draw_all(cx, &mut item_scope);
843+
item
850844
}
851845
}
852846
} else {
853-
// Bottom filler
854-
let item = list.item(cx, item_id, id!(bottom_filler));
855-
item.draw_all(cx, &mut item_scope);
856-
}
847+
list.item(cx, item_id, id!(bottom_filler))
848+
};
849+
item.draw_all(cx, scope);
857850
}
858851
}
859852

0 commit comments

Comments
 (0)