@@ -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