From aa718c5fe6289d20e652a8fde3697a696d86b406 Mon Sep 17 00:00:00 2001 From: Nolan Darilek Date: Tue, 19 May 2020 08:56:41 -0500 Subject: [PATCH] Implement screen reader detection for everything but Android. Android support is waiting on Godot 3.2.2 when the new plugin system lands. --- Cargo.toml | 3 +++ TTS.gd | 22 ++++++++++++++++++---- src/lib.rs | 19 +++++++++++++++++++ 3 files changed, 40 insertions(+), 4 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index c572450..b89a57e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,3 +10,6 @@ crate-type = ["cdylib"] [dependencies] gdnative = "0.8" tts = { git = "https://gitlab.com/ndarilek/tts-rs" } + +[target.'cfg(windows)'.dependencies] +tolk = "0.2" \ No newline at end of file diff --git a/TTS.gd b/TTS.gd index d6e844f..30c2154 100644 --- a/TTS.gd +++ b/TTS.gd @@ -127,13 +127,27 @@ func get_is_rate_supported(): var is_rate_supported setget , get_is_rate_supported -func get_can_detect_screen_reader(): - if OS.get_name() == "Windows": +func _get_can_detect_screen_reader(): + if Engine.has_singleton("AndroidTTS"): return true - else: + elif OS.has_feature('JavaScript'): return false + elif tts != null: + return tts.can_detect_screen_reader + return false -var can_detect_screen_reader setget , get_can_detect_screen_reader +var can_detect_screen_reader setget , _get_can_detect_screen_reader + +func _get_has_screen_reader(): + if Engine.has_singleton("AndroidTTS"): + return tts.has_screen_reader() + elif OS.has_feature('JavaScript'): + return false + elif tts != null: + return tts.has_screen_reader + return false + +var has_screen_reader setget , _get_has_screen_reader func singular_or_plural(count, singular, plural): if count == 1: diff --git a/src/lib.rs b/src/lib.rs index 91ad464..a0c2406 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -79,6 +79,25 @@ impl TTS { } }) .done(); + builder + .add_property("can_detect_screen_reader") + .with_getter(|_: &TTS, _| { + #[cfg(windows)] + return true; + return false; + }) + .done(); + builder + .add_property("has_screen_reader") + .with_getter(|_: &TTS, _| { + #[cfg(windows)] + { + let tolk = tolk::Tolk::new(); + tolk.detect_screen_reader().is_some() + } + false + }) + .done(); } #[export]