ferroui_base/rendering/composition/
composition_experimental_acrylic_visual.rs1use super::visual::CompositionVisualKind;
2use super::{CompositionDrawListVisual, CompositionVisual, Compositor};
3use crate::media::ImmutableExperimentalAcrylicMaterial;
4use crate::{CornerRadius, Visual};
5use std::ops::Deref;
6use std::rc::Rc;
7
8#[derive(Clone)]
10pub struct CompositionExperimentalAcrylicVisual(CompositionDrawListVisual);
11
12impl Deref for CompositionExperimentalAcrylicVisual {
13 type Target = CompositionDrawListVisual;
14
15 fn deref(&self) -> &CompositionDrawListVisual {
16 &self.0
17 }
18}
19
20impl CompositionExperimentalAcrylicVisual {
21 pub fn new(compositor: &Rc<Compositor>, visual: &Visual) -> CompositionExperimentalAcrylicVisual {
22 CompositionExperimentalAcrylicVisual(CompositionDrawListVisual::create(compositor, visual, true))
23 }
24
25 pub fn from_visual(visual: &Rc<CompositionVisual>) -> Option<CompositionExperimentalAcrylicVisual> {
27 match &visual.kind {
28 CompositionVisualKind::DrawList(data) if data.acrylic.is_some() => {
29 CompositionDrawListVisual::from_visual(visual).map(CompositionExperimentalAcrylicVisual)
30 }
31 _ => None,
32 }
33 }
34
35 pub fn as_draw_list_visual(&self) -> &CompositionDrawListVisual {
37 &self.0
38 }
39
40 fn props(&self) -> &super::generated::CompositionExperimentalAcrylicVisualProps {
41 match &self.0.kind {
42 CompositionVisualKind::DrawList(data) => match &data.acrylic {
43 Some(props) => props,
44 None => unreachable!("an acrylic visual handle wraps an acrylic visual"),
45 },
46 _ => unreachable!("an acrylic visual handle wraps an acrylic visual"),
47 }
48 }
49
50 pub fn material(&self) -> ImmutableExperimentalAcrylicMaterial {
51 self.props().material()
52 }
53
54 pub fn set_material(&self, value: ImmutableExperimentalAcrylicMaterial) {
55 let visual: &CompositionVisual = &self.0;
56 self.props().set_material(visual, value)
57 }
58
59 pub fn corner_radius(&self) -> CornerRadius {
60 self.props().corner_radius()
61 }
62
63 pub fn set_corner_radius(&self, value: CornerRadius) {
64 let visual: &CompositionVisual = &self.0;
65 self.props().set_corner_radius(visual, value)
66 }
67}