Skip to main content

cvkg_render_gpu/
accessibility.rs

1use crate::color_blindness::ColorBlindMode;
2use crate::kvasir::node::KvasirNode;
3use crate::kvasir::resource::ResourceId;
4
5#[derive(Debug, Clone)]
6pub enum AccessibilityTransform {
7    ColorBlind(ColorBlindMode),
8    HighContrast(f32),
9    MotionReduction,
10    Magnification { region: [f32; 4], scale: f32 },
11    FocusEnhancement { target: ResourceId },
12}
13
14pub struct AccessibilityService {
15    pub active_transforms: Vec<AccessibilityTransform>,
16}
17
18impl Default for AccessibilityService {
19    fn default() -> Self {
20        Self::new()
21    }
22}
23
24impl AccessibilityService {
25    pub fn new() -> Self {
26        Self {
27            active_transforms: Vec::new(),
28        }
29    }
30
31    pub fn graph_nodes(&self) -> Vec<Box<dyn KvasirNode>> {
32        let mut nodes: Vec<Box<dyn KvasirNode>> = Vec::new();
33        for transform in &self.active_transforms {
34            if let AccessibilityTransform::ColorBlind(_) = transform {
35                nodes.push(Box::new(
36                    crate::passes::accessibility::AccessibilityNode::new(),
37                ));
38            }
39        }
40        nodes
41    }
42}