facepile.rs

 1use crate::{theme::theme, ui::Avatar};
 2use gpui2::style::StyleHelpers;
 3use gpui2::{elements::div, IntoElement};
 4use gpui2::{Element, ParentElement, ViewContext};
 5
 6#[derive(Element)]
 7pub struct Facepile {
 8    players: Vec<Avatar>,
 9}
10
11pub fn facepile(players: Vec<Avatar>) -> Facepile {
12    Facepile { players }
13}
14
15impl Facepile {
16    fn render<V: 'static>(&mut self, _: &mut V, cx: &mut ViewContext<V>) -> impl IntoElement<V> {
17        let theme = theme(cx);
18        let player_count = self.players.len();
19        let player_list = self.players.iter().enumerate().map(|(ix, player)| {
20            let isnt_last = ix < player_count - 1;
21            div()
22                .when(isnt_last, |div| div.neg_mr_1())
23                .child(player.clone())
24        });
25        div().p_1().flex().items_center().children(player_list)
26    }
27}