sequoia-view 0.1.0

Sequoia GUI framework — view tree and runtime
Documentation
use sequoia_core::{BrushStroke, Color, Fill, Point, Rect};

use super::painter::Painter;

#[derive(Clone, Copy, Debug, PartialEq)]
pub struct HitCircle {
    pub center: Point,
    pub radius: f32,
}

impl HitCircle {
    pub fn new(center: Point, radius: f32) -> Self {
        Self { center, radius }
    }

    pub fn paint(&self, g: &mut Painter, fill: Fill) -> Rect {
        g.circle(self.center, self.radius, fill)
    }

    pub fn outline(&self, g: &mut Painter, stroke: BrushStroke, color: Color) -> Rect {
        g.ring(self.center, self.radius, stroke.width.max(0.0), color)
    }

    pub fn contains(&self, p: Point, tol: f32) -> bool {
        if !(self.radius > 0.0) {
            return false;
        }
        self.center.distance(p) <= self.radius + tol.max(0.0)
    }
}

#[derive(Clone, Copy, Debug, PartialEq)]
pub struct HitRect {
    pub rect: Rect,
    pub radius: f32,
}

impl HitRect {
    pub fn new(rect: Rect, radius: f32) -> Self {
        Self { rect, radius }
    }

    pub fn paint(&self, g: &mut Painter, fill: Fill) -> Rect {
        g.rounded(self.rect, self.radius, fill)
    }

    pub fn outline(&self, g: &mut Painter, stroke: BrushStroke, color: Color) -> Rect {
        g.rect_outline(self.rect, self.radius, stroke, color)
    }

    pub fn contains(&self, p: Point, tol: f32) -> bool {
        if self.rect.is_empty() {
            return false;
        }
        let t = tol.max(0.0);
        self.rect.inflate(t, t).contains(p)
    }
}