use super::*;
#[derive(Clone)]
pub struct CompositionShape(pub(crate) bindings::CompositionShape);
pub trait Shape: Sealed {
fn as_shape(&self) -> CompositionShape;
}
#[derive(Clone)]
pub struct CompositionGeometry(pub(crate) bindings::CompositionGeometry);
#[derive(Clone)]
pub struct CompositionEllipseGeometry(pub(crate) bindings::CompositionEllipseGeometry);
impl CompositionEllipseGeometry {
pub fn set_radius(&self, radius: Vector2) {
self.0.SetRadius(radius).unwrap();
}
pub(crate) fn as_geometry(&self) -> CompositionGeometry {
CompositionGeometry(self.0.cast().unwrap())
}
}
#[derive(Clone)]
pub struct CompositionSpriteShape(pub(crate) bindings::CompositionSpriteShape);
impl CompositionSpriteShape {
pub fn set_fill_brush(&self, brush: &impl Brush) {
self.0.SetFillBrush(&brush.as_brush().0).unwrap();
}
pub fn set_offset(&self, offset: Vector2) {
let shape: bindings::ICompositionShape = self.0.cast().unwrap();
shape.SetOffset(offset).unwrap();
}
}
impl Sealed for CompositionSpriteShape {}
impl Shape for CompositionSpriteShape {
fn as_shape(&self) -> CompositionShape {
CompositionShape(self.0.cast().unwrap())
}
}
#[derive(Clone)]
pub struct CompositionContainerShape(pub(crate) bindings::CompositionContainerShape);
impl CompositionContainerShape {
pub fn shapes(&self) -> CompositionShapeCollection {
CompositionShapeCollection(self.0.Shapes().unwrap())
}
}
impl Sealed for CompositionContainerShape {}
impl Shape for CompositionContainerShape {
fn as_shape(&self) -> CompositionShape {
CompositionShape(self.0.cast().unwrap())
}
}
#[derive(Clone)]
pub struct CompositionShapeCollection(pub(crate) bindings::CompositionShapeCollection);
impl CompositionShapeCollection {
pub fn append(&self, shape: &impl Shape) {
let vector: windows_collections::IVector<bindings::CompositionShape> =
self.0.cast().unwrap();
vector.Append(&shape.as_shape().0).unwrap();
}
}
#[derive(Clone)]
pub struct ShapeVisual {
visual: Visual,
shape_visual: bindings::ShapeVisual,
}
impl ShapeVisual {
pub(crate) fn new(shape_visual: bindings::ShapeVisual) -> Self {
Self {
visual: Visual(shape_visual.cast().unwrap()),
shape_visual,
}
}
pub fn shapes(&self) -> CompositionShapeCollection {
CompositionShapeCollection(self.shape_visual.Shapes().unwrap())
}
}
impl core::ops::Deref for ShapeVisual {
type Target = Visual;
fn deref(&self) -> &Visual {
&self.visual
}
}