use crate::model::{geometry::Rect, ids::CompositionItemId, target::SurfaceTarget};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum BackgroundPolicy {
Opaque,
Transparent,
}
impl From<BackgroundPolicy> for cbf::data::background::BackgroundPolicy {
fn from(value: BackgroundPolicy) -> Self {
match value {
BackgroundPolicy::Opaque => Self::Opaque,
BackgroundPolicy::Transparent => Self::Transparent,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum HitTestPolicy {
Passthrough,
Bounds,
RegionSnapshot,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum HitTestRegionMode {
ConsumeListedRegions,
PassthroughListedRegions,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum HitTestCoordinateSpace {
ItemLocalCssPx,
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub struct HitTestRegion {
pub x: f32,
pub y: f32,
pub width: f32,
pub height: f32,
}
impl HitTestRegion {
pub const fn new(x: f32, y: f32, width: f32, height: f32) -> Self {
Self {
x,
y,
width,
height,
}
}
}
#[derive(Debug, Clone, PartialEq)]
pub struct HitTestRegionSnapshot {
pub snapshot_id: u64,
pub coordinate_space: HitTestCoordinateSpace,
pub mode: HitTestRegionMode,
pub regions: Vec<HitTestRegion>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct CompositionItemSpec {
pub item_id: CompositionItemId,
pub target: SurfaceTarget,
pub bounds: Rect,
pub visible: bool,
pub hit_test: HitTestPolicy,
pub background: BackgroundPolicy,
}
#[derive(Debug, Clone, Default, PartialEq)]
pub struct WindowCompositionSpec {
pub items: Vec<CompositionItemSpec>,
}