facepile.rs

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