bevy_mod_stylebuilder 0.1.3

A set of fluent builder utilities for Bevy UI styles.
Documentation
use super::builder::{ColorParam, LengthParam, StyleBuilder};
use bevy::ui;

#[allow(missing_docs)]
pub trait StyleBuilderOutline {
    fn outline_color(&mut self, color: impl ColorParam) -> &mut Self;
    fn outline_width(&mut self, length: impl LengthParam) -> &mut Self;
    fn outline_offset(&mut self, length: impl LengthParam) -> &mut Self;
}

impl<'a, 'w> StyleBuilderOutline for StyleBuilder<'a, 'w> {
    fn outline_color(&mut self, color: impl ColorParam) -> &mut Self {
        match (color.to_val(), self.target.get_mut::<ui::Outline>()) {
            (Some(color), Some(mut outline)) => {
                outline.color = color;
            }
            (None, Some(_)) => {
                self.target.remove::<ui::Outline>();
            }
            (Some(color), None) => {
                self.target.insert(ui::Outline {
                    color,
                    ..Default::default()
                });
            }
            (None, None) => (),
        };
        self
    }

    fn outline_width(&mut self, length: impl LengthParam) -> &mut Self {
        match self.target.get_mut::<ui::Outline>() {
            Some(mut outline) => {
                outline.width = length.to_val();
            }
            None => {
                self.target.insert(ui::Outline {
                    width: length.to_val(),
                    ..Default::default()
                });
            }
        }
        self
    }

    fn outline_offset(&mut self, length: impl LengthParam) -> &mut Self {
        match self.target.get_mut::<ui::Outline>() {
            Some(mut outline) => {
                outline.offset = length.to_val();
            }
            None => {
                self.target.insert(ui::Outline {
                    offset: length.to_val(),
                    ..Default::default()
                });
            }
        }
        self
    }
}