Add HAVE_ACCESSIBILITY switch

This commit is contained in:
twinaphex 2020-01-12 21:33:00 +01:00
parent 70e472e9e2
commit 88ee7cbfa8
9 changed files with 72 additions and 25 deletions

View File

@ -1748,6 +1748,11 @@ ifeq ($(HAVE_V4L2),1)
LIBS += $(V4L2_LIBS) LIBS += $(V4L2_LIBS)
endif endif
# Accessibility
ifeq ($(HAVE_ACCESSIBILITY), 1)
DEFINES += -DHAVE_ACCESSIBILITY
endif
# Things that depend on network availability # Things that depend on network availability
ifeq ($(HAVE_NETWORKING), 1) ifeq ($(HAVE_NETWORKING), 1)

View File

@ -27,6 +27,9 @@
#include "../../verbosity.h" #include "../../verbosity.h"
#include "../../content.h" #include "../../content.h"
#ifdef HAVE_ACCESSIBILITY
#include "../../accessibility.h"
#endif
#include "../../retroarch.h" #include "../../retroarch.h"
static enum action_iterate_type action_iterate_type(const char *label) static enum action_iterate_type action_iterate_type(const char *label)
@ -77,6 +80,8 @@ int generic_menu_iterate(void *data, void *userdata, enum menu_action action)
const char *label = NULL; const char *label = NULL;
menu_handle_t *menu = (menu_handle_t*)data; menu_handle_t *menu = (menu_handle_t*)data;
(void)last_iterate_type;
if (!menu) if (!menu)
return 0; return 0;
@ -100,10 +105,10 @@ int generic_menu_iterate(void *data, void *userdata, enum menu_action action)
ret = menu_dialog_iterate( ret = menu_dialog_iterate(
menu->menu_state_msg, sizeof(menu->menu_state_msg), label); menu->menu_state_msg, sizeof(menu->menu_state_msg), label);
#ifdef HAVE_ACCESSIBILITY
if (iterate_type != last_iterate_type && is_accessibility_enabled()) if (iterate_type != last_iterate_type && is_accessibility_enabled())
{
accessibility_speak(menu->menu_state_msg); accessibility_speak(menu->menu_state_msg);
} #endif
BIT64_SET(menu->state, MENU_STATE_RENDER_MESSAGEBOX); BIT64_SET(menu->state, MENU_STATE_RENDER_MESSAGEBOX);
BIT64_SET(menu->state, MENU_STATE_POST_ITERATE); BIT64_SET(menu->state, MENU_STATE_POST_ITERATE);
@ -149,6 +154,8 @@ int generic_menu_iterate(void *data, void *userdata, enum menu_action action)
{ {
ret = menu_hash_get_help_enum(cbs->enum_idx, ret = menu_hash_get_help_enum(cbs->enum_idx,
menu->menu_state_msg, sizeof(menu->menu_state_msg)); menu->menu_state_msg, sizeof(menu->menu_state_msg));
#ifdef HAVE_ACCESSIBILITY
if (iterate_type != last_iterate_type && is_accessibility_enabled()) if (iterate_type != last_iterate_type && is_accessibility_enabled())
{ {
if (string_is_equal(menu->menu_state_msg, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_INFORMATION_AVAILABLE))) if (string_is_equal(menu->menu_state_msg, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_INFORMATION_AVAILABLE)))
@ -163,6 +170,7 @@ int generic_menu_iterate(void *data, void *userdata, enum menu_action action)
else else
accessibility_speak(menu->menu_state_msg); accessibility_speak(menu->menu_state_msg);
} }
#endif
} }
else else
{ {
@ -278,10 +286,10 @@ int generic_menu_iterate(void *data, void *userdata, enum menu_action action)
break; break;
} }
#ifdef HAVE_ACCESSIBILITY
if ((last_iterate_type == ITERATE_TYPE_HELP || last_iterate_type == ITERATE_TYPE_INFO) && last_iterate_type != iterate_type && is_accessibility_enabled()) if ((last_iterate_type == ITERATE_TYPE_HELP || last_iterate_type == ITERATE_TYPE_INFO) && last_iterate_type != iterate_type && is_accessibility_enabled())
{
accessibility_speak("Closed dialog."); accessibility_speak("Closed dialog.");
} #endif
last_iterate_type = iterate_type; last_iterate_type = iterate_type;
BIT64_SET(menu->state, MENU_STATE_BLIT); BIT64_SET(menu->state, MENU_STATE_BLIT);
@ -414,7 +422,10 @@ int generic_menu_entry_action(
} }
} }
if (action != 0 && is_accessibility_enabled() && !is_input_keyboard_display_on()) #ifdef HAVE_ACCESSIBILITY
if ( action != 0
&& is_accessibility_enabled()
&& !is_input_keyboard_display_on())
{ {
char current_label[255]; char current_label[255];
char current_value[255]; char current_value[255];
@ -465,5 +476,7 @@ int generic_menu_entry_action(
if (!string_is_equal(speak_string, "")) if (!string_is_equal(speak_string, ""))
accessibility_speak(speak_string); accessibility_speak(speak_string);
} }
#endif
return ret; return ret;
} }

View File

@ -332,10 +332,10 @@ void menu_widgets_msg_queue_push(
{ {
menu_widget_msg_t* msg_widget = NULL; menu_widget_msg_t* msg_widget = NULL;
#ifdef HAVE_ACCESSIBILITY
if (is_accessibility_enabled()) if (is_accessibility_enabled())
{
accessibility_speak_priority((char*)msg, 0); accessibility_speak_priority((char*)msg, 0);
} #endif
if (fifo_write_avail(msg_queue) > 0) if (fifo_write_avail(msg_queue) > 0)
{ {
/* Get current msg if it exists */ /* Get current msg if it exists */

View File

@ -507,6 +507,7 @@
OTHER_CFLAGS = ( OTHER_CFLAGS = (
"-DHAVE_RUNAHEAD", "-DHAVE_RUNAHEAD",
"-DHAVE_TRANSLATE", "-DHAVE_TRANSLATE",
"-DHAVE_ACCESSIBILITY",
"-DHAVE_SSL", "-DHAVE_SSL",
"-DHAVE_BUILTINMBEDTLS", "-DHAVE_BUILTINMBEDTLS",
"-DHAVE_GRIFFIN", "-DHAVE_GRIFFIN",
@ -580,6 +581,7 @@
OTHER_CFLAGS = ( OTHER_CFLAGS = (
"-DHAVE_RUNAHEAD", "-DHAVE_RUNAHEAD",
"-DHAVE_TRANSLATE", "-DHAVE_TRANSLATE",
"-DHAVE_ACCESSIBILITY",
"-DHAVE_SSL", "-DHAVE_SSL",
"-DHAVE_BUILTINMBEDTLS", "-DHAVE_BUILTINMBEDTLS",
"-DHAVE_GRIFFIN", "-DHAVE_GRIFFIN",

View File

@ -555,6 +555,7 @@
OTHER_CFLAGS = ( OTHER_CFLAGS = (
"-DHAVE_RUNAHEAD", "-DHAVE_RUNAHEAD",
"-DHAVE_TRANSLATE", "-DHAVE_TRANSLATE",
"-DHAVE_ACCESSIBILITY",
"-DHAVE_SSL", "-DHAVE_SSL",
"-DHAVE_BUILTINMBEDTLS", "-DHAVE_BUILTINMBEDTLS",
"-DHAVE_GRIFFIN", "-DHAVE_GRIFFIN",
@ -632,6 +633,7 @@
OTHER_CFLAGS = ( OTHER_CFLAGS = (
"-DHAVE_RUNAHEAD", "-DHAVE_RUNAHEAD",
"-DHAVE_TRANSLATE", "-DHAVE_TRANSLATE",
"-DHAVE_ACCESSIBILITY",
"-DHAVE_SSL", "-DHAVE_SSL",
"-DHAVE_BUILTINMBEDTLS", "-DHAVE_BUILTINMBEDTLS",
"-DHAVE_GRIFFIN", "-DHAVE_GRIFFIN",

View File

@ -292,6 +292,7 @@
"-DMSB_FIRST", "-DMSB_FIRST",
"-DHAVE_RUNAHEAD", "-DHAVE_RUNAHEAD",
"-DHAVE_TRANSLATE", "-DHAVE_TRANSLATE",
"-DHAVE_ACCESSIBILITY",
"-DHAVE_GRIFFIN", "-DHAVE_GRIFFIN",
"-DHAVE_MINIUPNPC", "-DHAVE_MINIUPNPC",
"-DHAVE_BUILTINMINIUPNPC", "-DHAVE_BUILTINMINIUPNPC",
@ -374,6 +375,7 @@
"-DMSB_FIRST", "-DMSB_FIRST",
"-DHAVE_RUNAHEAD", "-DHAVE_RUNAHEAD",
"-DHAVE_TRANSLATE", "-DHAVE_TRANSLATE",
"-DHAVE_ACCESSIBILITY",
"-DHAVE_GRIFFIN", "-DHAVE_GRIFFIN",
"-DHAVE_MINIUPNPC", "-DHAVE_MINIUPNPC",
"-DHAVE_BUILTINMINIUPNPC", "-DHAVE_BUILTINMINIUPNPC",

View File

@ -135,6 +135,7 @@ HAVE_CHEEVOS=yes # Retro Achievements
HAVE_LUA=no # Lua support (for Retro Achievements) HAVE_LUA=no # Lua support (for Retro Achievements)
HAVE_DISCORD=yes # Discord Integration HAVE_DISCORD=yes # Discord Integration
C89_DISCORD=no C89_DISCORD=no
HAVE_ACCESSIBILITY=yes # Accessibility Integration
HAVE_TRANSLATE=yes # OCR and Translation Server Integration HAVE_TRANSLATE=yes # OCR and Translation Server Integration
HAVE_SHADERPIPELINE=yes # Additional shader-based pipelines HAVE_SHADERPIPELINE=yes # Additional shader-based pipelines
C89_SHADERPIPELINE=no C89_SHADERPIPELINE=no

View File

@ -228,6 +228,10 @@
#include "runahead/mem_util.h" #include "runahead/mem_util.h"
#endif #endif
#ifdef HAVE_ACCESSIBILITY
#include "accessibility.h"
#endif
#ifdef HAVE_THREADS #ifdef HAVE_THREADS
#include "audio/audio_thread_wrapper.h" #include "audio/audio_thread_wrapper.h"
#endif #endif
@ -2476,8 +2480,10 @@ void dir_check_defaults(void)
} }
} }
#ifdef HAVE_ACCESSIBILITY
/* Is text-to-speech accessibility turned on? */ /* Is text-to-speech accessibility turned on? */
static bool accessibility_enabled = false; static bool accessibility_enabled = false;
#endif
#ifdef HAVE_MENU #ifdef HAVE_MENU
/* MENU INPUT GLOBAL VARIABLES */ /* MENU INPUT GLOBAL VARIABLES */
@ -2600,10 +2606,11 @@ bool menu_input_dialog_start_search(void)
input_keyboard_ctl(RARCH_INPUT_KEYBOARD_CTL_LINE_FREE, NULL); input_keyboard_ctl(RARCH_INPUT_KEYBOARD_CTL_LINE_FREE, NULL);
#ifdef HAVE_ACCESSIBILITY
if (is_accessibility_enabled()) if (is_accessibility_enabled())
{ accessibility_speak((char*)
accessibility_speak((char*) msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SEARCH)); msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SEARCH));
} #endif
menu_input_dialog_keyboard_buffer = menu_input_dialog_keyboard_buffer =
input_keyboard_start_line(menu, menu_input_search_cb); input_keyboard_start_line(menu, menu_input_search_cb);
@ -2633,7 +2640,9 @@ bool menu_input_dialog_start(menu_input_ctx_line_t *line)
input_keyboard_ctl(RARCH_INPUT_KEYBOARD_CTL_LINE_FREE, NULL); input_keyboard_ctl(RARCH_INPUT_KEYBOARD_CTL_LINE_FREE, NULL);
#ifdef HAVE_ACCESSIBILITY
accessibility_speak("Keyboard input:"); accessibility_speak("Keyboard input:");
#endif
menu_input_dialog_keyboard_buffer = menu_input_dialog_keyboard_buffer =
input_keyboard_start_line(menu, line->cb); input_keyboard_start_line(menu, line->cb);
@ -4621,8 +4630,10 @@ static void handle_translation_cb(
} }
#endif #endif
#ifdef HAVE_ACCESSIBILITY
if (text_string && is_accessibility_enabled()) if (text_string && is_accessibility_enabled())
accessibility_speak(text_string); accessibility_speak(text_string);
#endif
finish: finish:
if (error) if (error)
@ -6551,8 +6562,10 @@ bool command_event(enum event_command cmd, void *data)
} }
else else
{ {
#ifdef HAVE_ACCESSIBILITY
if (is_accessibility_enabled()) if (is_accessibility_enabled())
accessibility_speak((char*) msg_hash_to_str(MSG_UNPAUSED)); accessibility_speak((char*) msg_hash_to_str(MSG_UNPAUSED));
#endif
command_event(CMD_EVENT_UNPAUSE, NULL); command_event(CMD_EVENT_UNPAUSE, NULL);
} }
} }
@ -7254,6 +7267,8 @@ TODO: Add a setting for these tweaks */
case CMD_EVENT_PAUSE_TOGGLE: case CMD_EVENT_PAUSE_TOGGLE:
boolean = runloop_paused; boolean = runloop_paused;
boolean = !boolean; boolean = !boolean;
#ifdef HAVE_ACCESSIBILITY
if (is_accessibility_enabled()) if (is_accessibility_enabled())
{ {
if (boolean) if (boolean)
@ -7261,6 +7276,7 @@ TODO: Add a setting for these tweaks */
else else
accessibility_speak((char*) msg_hash_to_str(MSG_UNPAUSED)); accessibility_speak((char*) msg_hash_to_str(MSG_UNPAUSED));
} }
#endif
runloop_paused = boolean; runloop_paused = boolean;
retroarch_pause_checks(); retroarch_pause_checks();
@ -7722,12 +7738,16 @@ TODO: Add a setting for these tweaks */
if (settings->uints.ai_service_mode == 1 && is_ai_service_speech_running()) if (settings->uints.ai_service_mode == 1 && is_ai_service_speech_running())
{ {
ai_service_speech_stop(); ai_service_speech_stop();
#ifdef HAVE_ACCESSIBILITY
if (is_accessibility_enabled()) if (is_accessibility_enabled())
accessibility_speak("stopped."); accessibility_speak("stopped.");
#endif
} }
#ifdef HAVE_ACCESSIBILITY
else if (is_accessibility_enabled() && settings->uints.ai_service_mode == 2 && else if (is_accessibility_enabled() && settings->uints.ai_service_mode == 2 &&
is_narrator_running()) is_narrator_running())
accessibility_speak("stopped."); accessibility_speak("stopped.");
#endif
else else
{ {
RARCH_LOG("AI Service Called...\n"); RARCH_LOG("AI Service Called...\n");
@ -16758,6 +16778,7 @@ void input_keyboard_event(bool down, unsigned code,
uint32_t character, uint16_t mod, unsigned device) uint32_t character, uint16_t mod, unsigned device)
{ {
static bool deferred_wait_keys; static bool deferred_wait_keys;
#ifdef HAVE_ACCESSIBILITY
#ifdef HAVE_MENU #ifdef HAVE_MENU
if (menu_input_dialog_get_display_kb() if (menu_input_dialog_get_display_kb()
&& down && is_accessibility_enabled()) && down && is_accessibility_enabled())
@ -16844,6 +16865,7 @@ void input_keyboard_event(bool down, unsigned code,
} }
} }
} }
#endif
#endif #endif
if (deferred_wait_keys) if (deferred_wait_keys)
@ -25090,7 +25112,9 @@ static void retroarch_parse_input_and_config(int argc, char *argv[])
retroarch_print_help(argv[0]); retroarch_print_help(argv[0]);
retroarch_fail(1, "retroarch_parse_input()"); retroarch_fail(1, "retroarch_parse_input()");
case RA_OPT_ACCESSIBILITY: case RA_OPT_ACCESSIBILITY:
#ifdef HAVE_ACCESSIBILITY
accessibility_enabled = true; accessibility_enabled = true;
#endif
break; break;
default: default:
RARCH_ERR("%s\n", msg_hash_to_str(MSG_ERROR_PARSING_ARGUMENTS)); RARCH_ERR("%s\n", msg_hash_to_str(MSG_ERROR_PARSING_ARGUMENTS));
@ -25290,8 +25314,10 @@ bool retroarch_main_init(int argc, char *argv[])
retroarch_parse_input_and_config(argc, argv); retroarch_parse_input_and_config(argc, argv);
#ifdef HAVE_ACCESSIBILITY
if (is_accessibility_enabled()) if (is_accessibility_enabled())
accessibility_startup_message(); accessibility_startup_message();
#endif
if (verbosity_is_enabled()) if (verbosity_is_enabled())
{ {
@ -26601,8 +26627,10 @@ void runloop_msg_queue_push(const char *msg,
enum message_queue_category category) enum message_queue_category category)
{ {
runloop_msg_queue_lock(); runloop_msg_queue_lock();
#ifdef HAVE_ACCESSIBILITY
if (is_accessibility_enabled()) if (is_accessibility_enabled())
accessibility_speak_priority((char*) msg, 0); accessibility_speak_priority((char*) msg, 0);
#endif
#if defined(HAVE_MENU) && defined(HAVE_MENU_WIDGETS) #if defined(HAVE_MENU) && defined(HAVE_MENU_WIDGETS)
if (menu_widgets_inited) if (menu_widgets_inited)
{ {
@ -29267,6 +29295,7 @@ unsigned int retroarch_get_rotation(void)
} }
#ifdef HAVE_ACCESSIBILITY
/* Accessibility */ /* Accessibility */
int speak_pid = 0; int speak_pid = 0;
@ -29277,6 +29306,7 @@ bool is_accessibility_enabled(void)
return true; return true;
return false; return false;
} }
#endif
bool is_input_keyboard_display_on(void) bool is_input_keyboard_display_on(void)
{ {
@ -29287,11 +29317,12 @@ bool is_input_keyboard_display_on(void)
#endif #endif
} }
#ifdef HAVE_ACCESSIBILITY
bool accessibility_speak(const char* speak_text) bool accessibility_speak(const char* speak_text)
{ {
return accessibility_speak_priority(speak_text, 10); return accessibility_speak_priority(speak_text, 10);
} }
#endif
#if defined(__MACH__) && defined(__APPLE__) #if defined(__MACH__) && defined(__APPLE__)
#include <TargetConditionals.h> #include <TargetConditionals.h>
@ -29300,6 +29331,8 @@ bool accessibility_speak(const char* speak_text)
#endif #endif
#endif #endif
#ifdef HAVE_ACCESSIBILITY
#if defined(_IS_OSX) #if defined(_IS_OSX)
static char* accessibility_mac_language_code(const char* language) static char* accessibility_mac_language_code(const char* language)
{ {
@ -29442,7 +29475,6 @@ static bool accessibility_speak_macos(
#endif #endif
#if defined(_WIN32) && !defined(_XBOX) && !defined(__WINRT__) && !defined(EMSCRIPTEN) #if defined(_WIN32) && !defined(_XBOX) && !defined(__WINRT__) && !defined(EMSCRIPTEN)
static const char *accessibility_win_language_code(const char* language) static const char *accessibility_win_language_code(const char* language)
{ {
if (string_is_equal(language,"en")) if (string_is_equal(language,"en"))
@ -29589,8 +29621,6 @@ static bool accessibility_speak_windows(
#endif #endif
#if (defined(__linux__) || defined(__unix__)) && !defined(EMSCRIPTEN) #if (defined(__linux__) || defined(__unix__)) && !defined(EMSCRIPTEN)
bool is_narrator_running_linux(void) bool is_narrator_running_linux(void)
{ {
if (kill(speak_pid, 0) == 0) if (kill(speak_pid, 0) == 0)
@ -29710,8 +29740,8 @@ bool is_narrator_running(void)
return true; return true;
} }
bool accessibility_speak_ai_service(
bool accessibility_speak_ai_service(const char* speak_text, const char* language, int priority) const char* speak_text, const char* language, int priority)
{ {
#if defined(HAVE_NETWORKING) && defined(HAVE_TRANSLATE) #if defined(HAVE_NETWORKING) && defined(HAVE_TRANSLATE)
/* Call the AI service listed to do espeak for us. */ /* Call the AI service listed to do espeak for us. */
@ -29760,3 +29790,4 @@ bool accessibility_startup_message(void)
accessibility_speak("RetroArch accessibility on. Main Menu Load Core."); accessibility_speak("RetroArch accessibility on. Main Menu Load Core.");
return true; return true;
} }
#endif

View File

@ -2020,15 +2020,6 @@ bool menu_widgets_ready(void);
unsigned int retroarch_get_rotation(void); unsigned int retroarch_get_rotation(void);
bool is_input_keyboard_display_on(void); bool is_input_keyboard_display_on(void);
bool is_accessibility_enabled(void);
bool accessibility_speak(const char* speak_text);
bool accessibility_speak_priority(const char* speak_text, int priority);
bool accessibility_startup_message(void);
bool is_narrator_running(void);
bool accessibility_speak_ai_service(
const char* speak_text, const char* voice, int priority);
RETRO_END_DECLS RETRO_END_DECLS