1use gpui::{BoxShadow, Hsla};
4
5use crate::{paint, theme::Theme};
6
7#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
11pub enum Selection {
12 #[default]
13 None,
14 Emphasized,
15 Unemphasized,
16}
17
18impl Selection {
19 pub fn new(selected: bool, emphasized: bool) -> Self {
20 match (selected, emphasized) {
21 (false, _) => Self::None,
22 (true, true) => Self::Emphasized,
23 (true, false) => Self::Unemphasized,
24 }
25 }
26
27 pub fn is_selected(self) -> bool {
28 self != Self::None
29 }
30
31 pub fn fill(self, theme: &Theme) -> Option<Hsla> {
34 match self {
35 Self::None => None,
36 Self::Emphasized => Some(theme.card_selected_bg()),
37 Self::Unemphasized => Some(theme.element_hover),
38 }
39 }
40
41 pub fn shadows(self) -> Vec<BoxShadow> {
43 match self {
44 Self::Emphasized => paint::glass_selected_shadows(),
45 Self::None | Self::Unemphasized => Vec::new(),
46 }
47 }
48}