face_pile.rs

 1use gpui::{
 2    div, AnyElement, Div, ElementId, IntoElement, ParentElement, RenderOnce, Styled, WindowContext,
 3};
 4use smallvec::SmallVec;
 5
 6#[derive(Default, IntoElement)]
 7pub struct FacePile {
 8    pub faces: SmallVec<[AnyElement; 2]>,
 9}
10
11impl RenderOnce for FacePile {
12    type Rendered = Div;
13
14    fn render(self, _: &mut WindowContext) -> Self::Rendered {
15        let player_count = self.faces.len();
16        let player_list = self.faces.into_iter().enumerate().map(|(ix, player)| {
17            let isnt_last = ix < player_count - 1;
18
19            div()
20                .z_index((player_count - ix) as u32)
21                .when(isnt_last, |div| div.neg_mr_1())
22                .child(player)
23        });
24        div().p_1().flex().items_center().children(player_list)
25    }
26}
27
28impl ParentElement for FacePile {
29    fn children_mut(&mut self) -> &mut SmallVec<[AnyElement; 2]> {
30        &mut self.faces
31    }
32}