use crate::color::Color;
use objc2::rc::Retained;
use objc2_core_foundation::{CFRetained, CGFloat, CGPoint, CGRect};
use objc2_core_graphics::CGColor;
use objc2_quartz_core::{CALayer, CATransform3D};
#[derive(Default)]
pub struct CALayerBuilder {
bounds: Option<CGRect>,
position: Option<CGPoint>,
background_color: Option<CFRetained<CGColor>>,
corner_radius: Option<CGFloat>,
hidden: Option<bool>,
transform: Option<CATransform3D>,
opacity: Option<f32>,
}
impl CALayerBuilder {
pub fn new() -> Self {
Self::default()
}
pub fn bounds(mut self, bounds: CGRect) -> Self {
self.bounds = Some(bounds);
self
}
pub fn position(mut self, position: CGPoint) -> Self {
self.position = Some(position);
self
}
pub fn background_color(mut self, color: impl Into<CFRetained<CGColor>>) -> Self {
self.background_color = Some(color.into());
self
}
pub fn background_rgba(mut self, r: CGFloat, g: CGFloat, b: CGFloat, a: CGFloat) -> Self {
self.background_color = Some(Color::rgba(r, g, b, a).into());
self
}
pub fn corner_radius(mut self, radius: CGFloat) -> Self {
self.corner_radius = Some(radius);
self
}
pub fn hidden(mut self, hidden: bool) -> Self {
self.hidden = Some(hidden);
self
}
pub fn transform(mut self, transform: CATransform3D) -> Self {
self.transform = Some(transform);
self
}
pub fn opacity(mut self, opacity: f32) -> Self {
self.opacity = Some(opacity);
self
}
pub fn build(self) -> Retained<CALayer> {
let layer = CALayer::new();
if let Some(bounds) = self.bounds {
layer.setBounds(bounds);
}
if let Some(position) = self.position {
layer.setPosition(position);
}
if let Some(ref color) = self.background_color {
layer.setBackgroundColor(Some(&**color));
}
if let Some(radius) = self.corner_radius {
layer.setCornerRadius(radius);
}
if let Some(hidden) = self.hidden {
layer.setHidden(hidden);
}
if let Some(transform) = self.transform {
layer.setTransform(transform);
}
if let Some(opacity) = self.opacity {
layer.setOpacity(opacity);
}
layer
}
}