blob: e0f0127b65d8f757af03b5367b4c928da8a20344 [file]
// Copyright 2025 the Vello Authors
// SPDX-License-Identifier: Apache-2.0 OR MIT
//! Shared render state.
use crate::kurbo::{Cap, Join, Stroke};
use crate::paint::{PaintType, Tint};
use crate::peniko::color::palette::css::BLACK;
use crate::peniko::{BlendMode, Compose, Fill, Mix};
use crate::transforms::Transforms;
/// A render state which contains the style properties for path rendering.
#[derive(Debug, Clone)]
pub struct RenderState {
/// The paint type (solid color, gradient, or image).
pub paint: PaintType,
/// Stroke style for path stroking operations.
pub stroke: Stroke,
/// Fill rule for path filling operations.
pub fill_rule: Fill,
/// Blend mode for compositing.
pub blend_mode: BlendMode,
/// The tint for image painting.
pub tint: Option<Tint>,
/// State of active transforms.
pub transforms: Transforms,
}
impl Default for RenderState {
fn default() -> Self {
Self {
paint: BLACK.into(),
stroke: Stroke {
width: 1.0,
join: Join::Bevel,
start_cap: Cap::Butt,
end_cap: Cap::Butt,
..Default::default()
},
fill_rule: Fill::NonZero,
blend_mode: BlendMode::new(Mix::Normal, Compose::SrcOver),
tint: None,
transforms: Transforms::default(),
}
}
}
impl RenderState {
/// Reset to default state.
pub fn reset(&mut self) {
*self = Self::default();
}
}