Path: blob/master/servers/display/accessibility_server.cpp
45987 views
/**************************************************************************/1/* accessibility_server.cpp */2/**************************************************************************/3/* This file is part of: */4/* GODOT ENGINE */5/* https://godotengine.org */6/**************************************************************************/7/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */8/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */9/* */10/* Permission is hereby granted, free of charge, to any person obtaining */11/* a copy of this software and associated documentation files (the */12/* "Software"), to deal in the Software without restriction, including */13/* without limitation the rights to use, copy, modify, merge, publish, */14/* distribute, sublicense, and/or sell copies of the Software, and to */15/* permit persons to whom the Software is furnished to do so, subject to */16/* the following conditions: */17/* */18/* The above copyright notice and this permission notice shall be */19/* included in all copies or substantial portions of the Software. */20/* */21/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */22/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */23/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */24/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */25/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */26/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */27/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */28/**************************************************************************/2930#include "accessibility_server.h"3132#include "core/object/class_db.h"33#include "servers/display/accessibility_server_dummy.h"3435AccessibilityServer::AccessibilityServerCreate AccessibilityServer::server_create_functions[AccessibilityServer::MAX_SERVERS] = {36{ "dummy", &AccessibilityServerDummy::create_func }37};3839int AccessibilityServer::server_create_count = 1;4041void AccessibilityServer::_bind_methods() {42ClassDB::bind_method(D_METHOD("is_supported"), &AccessibilityServer::is_supported);4344ClassDB::bind_method(D_METHOD("create_element", "window_id", "role"), &AccessibilityServer::create_element);45ClassDB::bind_method(D_METHOD("create_sub_element", "parent_rid", "role", "insert_pos"), &AccessibilityServer::create_sub_element, DEFVAL(-1));46ClassDB::bind_method(D_METHOD("create_sub_text_edit_elements", "parent_rid", "shaped_text", "min_height", "insert_pos", "is_last_line"), &AccessibilityServer::create_sub_text_edit_elements, DEFVAL(-1), DEFVAL(false));47ClassDB::bind_method(D_METHOD("has_element", "id"), &AccessibilityServer::has_element);48ClassDB::bind_method(D_METHOD("free_element", "id"), &AccessibilityServer::free_element);49ClassDB::bind_method(D_METHOD("element_set_meta", "id", "meta"), &AccessibilityServer::element_set_meta);50ClassDB::bind_method(D_METHOD("element_get_meta", "id"), &AccessibilityServer::element_get_meta);5152ClassDB::bind_method(D_METHOD("_update_if_active", "callback"), &AccessibilityServer::update_if_active);5354ClassDB::bind_method(D_METHOD("set_window_rect", "window_id", "rect_out", "rect_in"), &AccessibilityServer::set_window_rect);55ClassDB::bind_method(D_METHOD("set_window_focused", "window_id", "focused"), &AccessibilityServer::set_window_focused);5657ClassDB::bind_method(D_METHOD("update_set_focus", "id"), &AccessibilityServer::update_set_focus);58ClassDB::bind_method(D_METHOD("get_window_root", "window_id"), &AccessibilityServer::get_window_root);59ClassDB::bind_method(D_METHOD("update_set_role", "id", "role"), &AccessibilityServer::update_set_role);60ClassDB::bind_method(D_METHOD("update_set_name", "id", "name"), &AccessibilityServer::update_set_name);61ClassDB::bind_method(D_METHOD("update_set_braille_label", "id", "name"), &AccessibilityServer::update_set_braille_label);62ClassDB::bind_method(D_METHOD("update_set_braille_role_description", "id", "description"), &AccessibilityServer::update_set_braille_role_description);63ClassDB::bind_method(D_METHOD("update_set_extra_info", "id", "name"), &AccessibilityServer::update_set_extra_info);64ClassDB::bind_method(D_METHOD("update_set_description", "id", "description"), &AccessibilityServer::update_set_description);65ClassDB::bind_method(D_METHOD("update_set_value", "id", "value"), &AccessibilityServer::update_set_value);66ClassDB::bind_method(D_METHOD("update_set_tooltip", "id", "tooltip"), &AccessibilityServer::update_set_tooltip);67ClassDB::bind_method(D_METHOD("update_set_bounds", "id", "p_rect"), &AccessibilityServer::update_set_bounds);68ClassDB::bind_method(D_METHOD("update_set_transform", "id", "transform"), &AccessibilityServer::update_set_transform);69ClassDB::bind_method(D_METHOD("update_add_child", "id", "child_id"), &AccessibilityServer::update_add_child);70ClassDB::bind_method(D_METHOD("update_add_related_controls", "id", "related_id"), &AccessibilityServer::update_add_related_controls);71ClassDB::bind_method(D_METHOD("update_add_related_details", "id", "related_id"), &AccessibilityServer::update_add_related_details);72ClassDB::bind_method(D_METHOD("update_add_related_described_by", "id", "related_id"), &AccessibilityServer::update_add_related_described_by);73ClassDB::bind_method(D_METHOD("update_add_related_flow_to", "id", "related_id"), &AccessibilityServer::update_add_related_flow_to);74ClassDB::bind_method(D_METHOD("update_add_related_labeled_by", "id", "related_id"), &AccessibilityServer::update_add_related_labeled_by);75ClassDB::bind_method(D_METHOD("update_add_related_radio_group", "id", "related_id"), &AccessibilityServer::update_add_related_radio_group);76ClassDB::bind_method(D_METHOD("update_set_active_descendant", "id", "other_id"), &AccessibilityServer::update_set_active_descendant);77ClassDB::bind_method(D_METHOD("update_set_next_on_line", "id", "other_id"), &AccessibilityServer::update_set_next_on_line);78ClassDB::bind_method(D_METHOD("update_set_previous_on_line", "id", "other_id"), &AccessibilityServer::update_set_previous_on_line);79ClassDB::bind_method(D_METHOD("update_set_member_of", "id", "group_id"), &AccessibilityServer::update_set_member_of);80ClassDB::bind_method(D_METHOD("update_set_in_page_link_target", "id", "other_id"), &AccessibilityServer::update_set_in_page_link_target);81ClassDB::bind_method(D_METHOD("update_set_error_message", "id", "other_id"), &AccessibilityServer::update_set_error_message);82ClassDB::bind_method(D_METHOD("update_set_live", "id", "live"), &AccessibilityServer::update_set_live);83ClassDB::bind_method(D_METHOD("update_add_action", "id", "action", "callable"), &AccessibilityServer::update_add_action);84ClassDB::bind_method(D_METHOD("update_add_custom_action", "id", "action_id", "action_description"), &AccessibilityServer::update_add_custom_action);85ClassDB::bind_method(D_METHOD("update_set_table_row_count", "id", "count"), &AccessibilityServer::update_set_table_row_count);86ClassDB::bind_method(D_METHOD("update_set_table_column_count", "id", "count"), &AccessibilityServer::update_set_table_column_count);87ClassDB::bind_method(D_METHOD("update_set_table_row_index", "id", "index"), &AccessibilityServer::update_set_table_row_index);88ClassDB::bind_method(D_METHOD("update_set_table_column_index", "id", "index"), &AccessibilityServer::update_set_table_column_index);89ClassDB::bind_method(D_METHOD("update_set_table_cell_position", "id", "row_index", "column_index"), &AccessibilityServer::update_set_table_cell_position);90ClassDB::bind_method(D_METHOD("update_set_table_cell_span", "id", "row_span", "column_span"), &AccessibilityServer::update_set_table_cell_span);91ClassDB::bind_method(D_METHOD("update_set_list_item_count", "id", "size"), &AccessibilityServer::update_set_list_item_count);92ClassDB::bind_method(D_METHOD("update_set_list_item_index", "id", "index"), &AccessibilityServer::update_set_list_item_index);93ClassDB::bind_method(D_METHOD("update_set_list_item_level", "id", "level"), &AccessibilityServer::update_set_list_item_level);94ClassDB::bind_method(D_METHOD("update_set_list_item_selected", "id", "selected"), &AccessibilityServer::update_set_list_item_selected);95ClassDB::bind_method(D_METHOD("update_set_list_item_expanded", "id", "expanded"), &AccessibilityServer::update_set_list_item_expanded);96ClassDB::bind_method(D_METHOD("update_set_popup_type", "id", "popup"), &AccessibilityServer::update_set_popup_type);97ClassDB::bind_method(D_METHOD("update_set_checked", "id", "checekd"), &AccessibilityServer::update_set_checked);98ClassDB::bind_method(D_METHOD("update_set_num_value", "id", "position"), &AccessibilityServer::update_set_num_value);99ClassDB::bind_method(D_METHOD("update_set_num_range", "id", "min", "max"), &AccessibilityServer::update_set_num_range);100ClassDB::bind_method(D_METHOD("update_set_num_step", "id", "step"), &AccessibilityServer::update_set_num_step);101ClassDB::bind_method(D_METHOD("update_set_num_jump", "id", "jump"), &AccessibilityServer::update_set_num_jump);102ClassDB::bind_method(D_METHOD("update_set_scroll_x", "id", "position"), &AccessibilityServer::update_set_scroll_x);103ClassDB::bind_method(D_METHOD("update_set_scroll_x_range", "id", "min", "max"), &AccessibilityServer::update_set_scroll_x_range);104ClassDB::bind_method(D_METHOD("update_set_scroll_y", "id", "position"), &AccessibilityServer::update_set_scroll_y);105ClassDB::bind_method(D_METHOD("update_set_scroll_y_range", "id", "min", "max"), &AccessibilityServer::update_set_scroll_y_range);106ClassDB::bind_method(D_METHOD("update_set_text_decorations", "id", "underline", "strikethrough", "overline", "color"), &AccessibilityServer::update_set_text_decorations, DEFVAL(Color(0, 0, 0, 1)));107ClassDB::bind_method(D_METHOD("update_set_text_align", "id", "align"), &AccessibilityServer::update_set_text_align);108ClassDB::bind_method(D_METHOD("update_set_text_selection", "id", "text_start_id", "start_char", "text_end_id", "end_char"), &AccessibilityServer::update_set_text_selection);109ClassDB::bind_method(D_METHOD("update_set_flag", "id", "flag", "value"), &AccessibilityServer::update_set_flag);110ClassDB::bind_method(D_METHOD("update_set_classname", "id", "classname"), &AccessibilityServer::update_set_classname);111ClassDB::bind_method(D_METHOD("update_set_placeholder", "id", "placeholder"), &AccessibilityServer::update_set_placeholder);112ClassDB::bind_method(D_METHOD("update_set_language", "id", "language"), &AccessibilityServer::update_set_language);113ClassDB::bind_method(D_METHOD("update_set_text_orientation", "id", "vertical"), &AccessibilityServer::update_set_text_orientation);114ClassDB::bind_method(D_METHOD("update_set_list_orientation", "id", "vertical"), &AccessibilityServer::update_set_list_orientation);115ClassDB::bind_method(D_METHOD("update_set_shortcut", "id", "shortcut"), &AccessibilityServer::update_set_shortcut);116ClassDB::bind_method(D_METHOD("update_set_url", "id", "url"), &AccessibilityServer::update_set_url);117ClassDB::bind_method(D_METHOD("update_set_role_description", "id", "description"), &AccessibilityServer::update_set_role_description);118ClassDB::bind_method(D_METHOD("update_set_state_description", "id", "description"), &AccessibilityServer::update_set_state_description);119ClassDB::bind_method(D_METHOD("update_set_color_value", "id", "color"), &AccessibilityServer::update_set_color_value);120ClassDB::bind_method(D_METHOD("update_set_background_color", "id", "color"), &AccessibilityServer::update_set_background_color);121ClassDB::bind_method(D_METHOD("update_set_foreground_color", "id", "color"), &AccessibilityServer::update_set_foreground_color);122123BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_UNKNOWN);124BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_DEFAULT_BUTTON);125BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_AUDIO);126BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_VIDEO);127BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_STATIC_TEXT);128BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_CONTAINER);129BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_PANEL);130BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_BUTTON);131BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_LINK);132BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_CHECK_BOX);133BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_RADIO_BUTTON);134BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_CHECK_BUTTON);135BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_SCROLL_BAR);136BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_SCROLL_VIEW);137BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_SPLITTER);138BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_SLIDER);139BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_SPIN_BUTTON);140BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_PROGRESS_INDICATOR);141BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_TEXT_FIELD);142BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_MULTILINE_TEXT_FIELD);143BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_COLOR_PICKER);144BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_TABLE);145BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_CELL);146BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_ROW);147BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_ROW_GROUP);148BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_ROW_HEADER);149BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_COLUMN_HEADER);150BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_TREE);151BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_TREE_ITEM);152BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_LIST);153BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_LIST_ITEM);154BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_LIST_BOX);155BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_LIST_BOX_OPTION);156BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_TAB_BAR);157BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_TAB);158BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_TAB_PANEL);159BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_MENU_BAR);160BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_MENU);161BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_MENU_ITEM);162BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_MENU_ITEM_CHECK_BOX);163BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_MENU_ITEM_RADIO);164BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_IMAGE);165BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_WINDOW);166BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_TITLE_BAR);167BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_DIALOG);168BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_TOOLTIP);169BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_REGION);170BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_TEXT_RUN);171172BIND_ENUM_CONSTANT(AccessibilityServerEnums::POPUP_MENU);173BIND_ENUM_CONSTANT(AccessibilityServerEnums::POPUP_LIST);174BIND_ENUM_CONSTANT(AccessibilityServerEnums::POPUP_TREE);175BIND_ENUM_CONSTANT(AccessibilityServerEnums::POPUP_DIALOG);176177BIND_ENUM_CONSTANT(AccessibilityServerEnums::FLAG_HIDDEN);178BIND_ENUM_CONSTANT(AccessibilityServerEnums::FLAG_MULTISELECTABLE);179BIND_ENUM_CONSTANT(AccessibilityServerEnums::FLAG_REQUIRED);180BIND_ENUM_CONSTANT(AccessibilityServerEnums::FLAG_VISITED);181BIND_ENUM_CONSTANT(AccessibilityServerEnums::FLAG_BUSY);182BIND_ENUM_CONSTANT(AccessibilityServerEnums::FLAG_MODAL);183BIND_ENUM_CONSTANT(AccessibilityServerEnums::FLAG_TOUCH_PASSTHROUGH);184BIND_ENUM_CONSTANT(AccessibilityServerEnums::FLAG_READONLY);185BIND_ENUM_CONSTANT(AccessibilityServerEnums::FLAG_DISABLED);186BIND_ENUM_CONSTANT(AccessibilityServerEnums::FLAG_CLIPS_CHILDREN);187188BIND_ENUM_CONSTANT(AccessibilityServerEnums::ACTION_CLICK);189BIND_ENUM_CONSTANT(AccessibilityServerEnums::ACTION_FOCUS);190BIND_ENUM_CONSTANT(AccessibilityServerEnums::ACTION_BLUR);191BIND_ENUM_CONSTANT(AccessibilityServerEnums::ACTION_COLLAPSE);192BIND_ENUM_CONSTANT(AccessibilityServerEnums::ACTION_EXPAND);193BIND_ENUM_CONSTANT(AccessibilityServerEnums::ACTION_DECREMENT);194BIND_ENUM_CONSTANT(AccessibilityServerEnums::ACTION_INCREMENT);195BIND_ENUM_CONSTANT(AccessibilityServerEnums::ACTION_HIDE_TOOLTIP);196BIND_ENUM_CONSTANT(AccessibilityServerEnums::ACTION_SHOW_TOOLTIP);197BIND_ENUM_CONSTANT(AccessibilityServerEnums::ACTION_SET_TEXT_SELECTION);198BIND_ENUM_CONSTANT(AccessibilityServerEnums::ACTION_REPLACE_SELECTED_TEXT);199BIND_ENUM_CONSTANT(AccessibilityServerEnums::ACTION_SCROLL_BACKWARD);200BIND_ENUM_CONSTANT(AccessibilityServerEnums::ACTION_SCROLL_DOWN);201BIND_ENUM_CONSTANT(AccessibilityServerEnums::ACTION_SCROLL_FORWARD);202BIND_ENUM_CONSTANT(AccessibilityServerEnums::ACTION_SCROLL_LEFT);203BIND_ENUM_CONSTANT(AccessibilityServerEnums::ACTION_SCROLL_RIGHT);204BIND_ENUM_CONSTANT(AccessibilityServerEnums::ACTION_SCROLL_UP);205BIND_ENUM_CONSTANT(AccessibilityServerEnums::ACTION_SCROLL_INTO_VIEW);206BIND_ENUM_CONSTANT(AccessibilityServerEnums::ACTION_SCROLL_TO_POINT);207BIND_ENUM_CONSTANT(AccessibilityServerEnums::ACTION_SET_SCROLL_OFFSET);208BIND_ENUM_CONSTANT(AccessibilityServerEnums::ACTION_SET_VALUE);209BIND_ENUM_CONSTANT(AccessibilityServerEnums::ACTION_SHOW_CONTEXT_MENU);210BIND_ENUM_CONSTANT(AccessibilityServerEnums::ACTION_CUSTOM);211212BIND_ENUM_CONSTANT(AccessibilityServerEnums::LIVE_OFF);213BIND_ENUM_CONSTANT(AccessibilityServerEnums::LIVE_POLITE);214BIND_ENUM_CONSTANT(AccessibilityServerEnums::LIVE_ASSERTIVE);215216BIND_ENUM_CONSTANT(AccessibilityServerEnums::SCROLL_UNIT_ITEM);217BIND_ENUM_CONSTANT(AccessibilityServerEnums::SCROLL_UNIT_PAGE);218219BIND_ENUM_CONSTANT(AccessibilityServerEnums::SCROLL_HINT_TOP_LEFT);220BIND_ENUM_CONSTANT(AccessibilityServerEnums::SCROLL_HINT_BOTTOM_RIGHT);221BIND_ENUM_CONSTANT(AccessibilityServerEnums::SCROLL_HINT_TOP_EDGE);222BIND_ENUM_CONSTANT(AccessibilityServerEnums::SCROLL_HINT_BOTTOM_EDGE);223BIND_ENUM_CONSTANT(AccessibilityServerEnums::SCROLL_HINT_LEFT_EDGE);224BIND_ENUM_CONSTANT(AccessibilityServerEnums::SCROLL_HINT_RIGHT_EDGE);225}226227AccessibilityServer *AccessibilityServer::create(int p_index, Error &r_error) {228ERR_FAIL_INDEX_V(p_index, server_create_count, nullptr);229return server_create_functions[p_index].create_function(r_error);230}231232void AccessibilityServer::register_create_function(const char *p_name, CreateFunction p_function) {233ERR_FAIL_COND(server_create_count == MAX_SERVERS);234// Dummy server is always last235server_create_functions[server_create_count] = server_create_functions[server_create_count - 1];236server_create_functions[server_create_count - 1].name = p_name;237server_create_functions[server_create_count - 1].create_function = p_function;238server_create_count++;239}240241int AccessibilityServer::get_create_function_count() {242return server_create_count;243}244245const char *AccessibilityServer::get_create_function_name(int p_index) {246ERR_FAIL_INDEX_V(p_index, server_create_count, nullptr);247return server_create_functions[p_index].name;248}249250AccessibilityServer::AccessibilityServer() {251singleton = this;252}253254AccessibilityServer::~AccessibilityServer() {255singleton = nullptr;256}257258259