freya_core/accessibility/
screen_reader.rs

1use std::sync::{
2    Arc,
3    atomic::{
4        AtomicBool,
5        Ordering,
6    },
7};
8
9use crate::prelude::consume_root_context;
10
11#[derive(Clone)]
12pub struct ScreenReader {
13    is_on: Arc<AtomicBool>,
14}
15
16impl Default for ScreenReader {
17    fn default() -> Self {
18        Self::new()
19    }
20}
21
22impl ScreenReader {
23    pub fn new() -> Self {
24        Self {
25            is_on: Arc::default(),
26        }
27    }
28
29    pub fn get() -> Self {
30        consume_root_context::<Self>()
31    }
32
33    pub fn set(&self, on: bool) {
34        self.is_on.store(on, Ordering::Relaxed);
35    }
36
37    /// Check if the OS screen reader is running right now.
38    pub fn is_on(&self) -> bool {
39        self.is_on.load(Ordering::Relaxed)
40    }
41}