styled.rs

 1use crate::{Hoverable, Pressable, Refineable, RefinementCascade};
 2
 3pub trait Styled {
 4    type Style: 'static + Refineable + Send + Sync + Default;
 5
 6    fn style_cascade(&mut self) -> &mut RefinementCascade<Self::Style>;
 7    fn declared_style(&mut self) -> &mut <Self::Style as Refineable>::Refinement;
 8
 9    fn computed_style(&mut self) -> Self::Style {
10        Self::Style::from_refinement(&self.style_cascade().merged())
11    }
12
13    fn hover(self) -> Hoverable<Self>
14    where
15        Self: 'static + Sized + Send + Sync,
16        Self::Style: 'static + Refineable + Default + Send + Sync,
17        <Self::Style as Refineable>::Refinement: 'static + Default + Send + Sync,
18    {
19        Hoverable::new(self)
20    }
21
22    fn active(self) -> Pressable<Self>
23    where
24        Self: 'static + Sized + Send + Sync,
25        Self::Style: 'static + Refineable + Default + Send + Sync,
26        <Self::Style as Refineable>::Refinement: 'static + Default + Send + Sync,
27    {
28        Pressable::new(self)
29    }
30}