windows_composition/
shape.rs1use super::*;
2
3#[derive(Clone)]
7pub struct CompositionShape(pub(crate) bindings::CompositionShape);
8
9pub trait Shape: Sealed {
13 fn as_shape(&self) -> CompositionShape;
15}
16
17#[derive(Clone)]
19pub struct CompositionGeometry(pub(crate) bindings::CompositionGeometry);
20
21#[derive(Clone)]
23pub struct CompositionEllipseGeometry(pub(crate) bindings::CompositionEllipseGeometry);
24
25impl CompositionEllipseGeometry {
26 pub fn set_radius(&self, radius: Vector2) {
28 self.0.SetRadius(radius).unwrap();
29 }
30
31 pub(crate) fn as_geometry(&self) -> CompositionGeometry {
32 CompositionGeometry(self.0.cast().unwrap())
33 }
34}
35
36#[derive(Clone)]
38pub struct CompositionSpriteShape(pub(crate) bindings::CompositionSpriteShape);
39
40impl CompositionSpriteShape {
41 pub fn set_fill_brush(&self, brush: &impl Brush) {
43 self.0.SetFillBrush(&brush.as_brush().0).unwrap();
44 }
45
46 pub fn set_offset(&self, offset: Vector2) {
48 let shape: bindings::ICompositionShape = self.0.cast().unwrap();
49 shape.SetOffset(offset).unwrap();
50 }
51}
52
53impl Sealed for CompositionSpriteShape {}
54
55impl Shape for CompositionSpriteShape {
56 fn as_shape(&self) -> CompositionShape {
57 CompositionShape(self.0.cast().unwrap())
58 }
59}
60
61#[derive(Clone)]
63pub struct CompositionContainerShape(pub(crate) bindings::CompositionContainerShape);
64
65impl CompositionContainerShape {
66 pub fn shapes(&self) -> CompositionShapeCollection {
68 CompositionShapeCollection(self.0.Shapes().unwrap())
69 }
70}
71
72impl Sealed for CompositionContainerShape {}
73
74impl Shape for CompositionContainerShape {
75 fn as_shape(&self) -> CompositionShape {
76 CompositionShape(self.0.cast().unwrap())
77 }
78}
79
80#[derive(Clone)]
83pub struct CompositionShapeCollection(pub(crate) bindings::CompositionShapeCollection);
84
85impl CompositionShapeCollection {
86 pub fn append(&self, shape: &impl Shape) {
88 let vector: windows_collections::IVector<bindings::CompositionShape> =
89 self.0.cast().unwrap();
90 vector.Append(&shape.as_shape().0).unwrap();
91 }
92}
93
94#[derive(Clone)]
97pub struct ShapeVisual {
98 visual: Visual,
99 shape_visual: bindings::ShapeVisual,
100}
101
102impl ShapeVisual {
103 pub(crate) fn new(shape_visual: bindings::ShapeVisual) -> Self {
104 Self {
105 visual: Visual(shape_visual.cast().unwrap()),
106 shape_visual,
107 }
108 }
109
110 pub fn shapes(&self) -> CompositionShapeCollection {
112 CompositionShapeCollection(self.shape_visual.Shapes().unwrap())
113 }
114}
115
116impl core::ops::Deref for ShapeVisual {
117 type Target = Visual;
118 fn deref(&self) -> &Visual {
119 &self.visual
120 }
121}