Move accessibility methods/enums from DisplayServer to the AccessibilityServer dedicated singleton.

This commit is contained in:
Pāvels Nadtočajevs 2025-12-10 13:12:53 +02:00
parent 4683f3806f
commit 1306221592
No known key found for this signature in database
GPG key ID: 8413210218EF35D2
88 changed files with 3156 additions and 1551 deletions

View file

@ -1705,6 +1705,7 @@ ProjectSettings::ProjectSettings() {
GLOBAL_DEF_BASIC(PropertyInfo(Variant::INT, "accessibility/general/accessibility_support", PROPERTY_HINT_ENUM, "Auto (When Screen Reader is Running),Always Active,Disabled"), 0);
GLOBAL_DEF_BASIC(PropertyInfo(Variant::INT, "accessibility/general/updates_per_second", PROPERTY_HINT_RANGE, "1,100,1"), 60);
GLOBAL_DEF(PropertyInfo(Variant::STRING, "accessibility/general/accessibility_driver", PROPERTY_HINT_ENUM, "accesskit,dummy"), "accesskit");
// The default window size is tuned to:
// - Have a 16:9 aspect ratio,

View file

@ -1547,6 +1547,9 @@
</method>
</methods>
<members>
<member name="AccessibilityServer" type="AccessibilityServer" setter="" getter="">
The [AccessibilityServer] singleton.
</member>
<member name="AudioServer" type="AudioServer" setter="" getter="">
The [AudioServer] singleton.
</member>

View file

@ -0,0 +1,927 @@
<?xml version="1.0" encoding="UTF-8" ?>
<class name="AccessibilityServer" inherits="Object" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
<brief_description>
A server interface for screen reader support.
</brief_description>
<description>
</description>
<tutorials>
</tutorials>
<methods>
<method name="create_element">
<return type="RID" />
<param index="0" name="window_id" type="int" />
<param index="1" name="role" type="int" enum="AccessibilityServer.AccessibilityRole" />
<description>
Creates a new, empty accessibility element resource.
[b]Note:[/b] An accessibility element is created and freed automatically for each [Node]. In general, this function should not be called manually.
</description>
</method>
<method name="create_sub_element">
<return type="RID" />
<param index="0" name="parent_rid" type="RID" />
<param index="1" name="role" type="int" enum="AccessibilityServer.AccessibilityRole" />
<param index="2" name="insert_pos" type="int" default="-1" />
<description>
Creates a new, empty accessibility sub-element resource. Sub-elements can be used to provide accessibility information for objects which are not [Node]s, such as list items, table cells, or menu items. Sub-elements are freed automatically when the parent element is freed, or can be freed early using the [method free_element] method.
</description>
</method>
<method name="create_sub_text_edit_elements">
<return type="RID" />
<param index="0" name="parent_rid" type="RID" />
<param index="1" name="shaped_text" type="RID" />
<param index="2" name="min_height" type="float" />
<param index="3" name="insert_pos" type="int" default="-1" />
<param index="4" name="is_last_line" type="bool" default="false" />
<description>
Creates a new, empty accessibility sub-element from the shaped text buffer. Sub-elements are freed automatically when the parent element is freed, or can be freed early using the [method free_element] method.
If [param is_last_line] is [code]true[/code], no trailing newline is appended to the text content. Set to [code]true[/code] for the last line in multi-line text fields and for single-line text fields.
</description>
</method>
<method name="element_get_meta" qualifiers="const">
<return type="Variant" />
<param index="0" name="id" type="RID" />
<description>
Returns the metadata of the accessibility element [param id].
</description>
</method>
<method name="element_set_meta">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="meta" type="Variant" />
<description>
Sets the metadata of the accessibility element [param id] to [param meta].
</description>
</method>
<method name="free_element">
<return type="void" />
<param index="0" name="id" type="RID" />
<description>
Frees the accessibility element [param id] created by [method create_element], [method create_sub_element], or [method create_sub_text_edit_elements].
</description>
</method>
<method name="get_window_root" qualifiers="const">
<return type="RID" />
<param index="0" name="window_id" type="int" />
<description>
Returns the main accessibility element of the OS native window.
</description>
</method>
<method name="has_element" qualifiers="const">
<return type="bool" />
<param index="0" name="id" type="RID" />
<description>
Returns [code]true[/code] if [param id] is a valid accessibility element.
</description>
</method>
<method name="is_supported" qualifiers="const">
<return type="bool" />
<description>
Returns [code]true[/code] if screen reader is support by this implementation.
</description>
</method>
<method name="set_window_focused">
<return type="void" />
<param index="0" name="window_id" type="int" />
<param index="1" name="focused" type="bool" />
<description>
Sets the window focused state for assistive apps.
[b]Note:[/b] This method is implemented on Linux, macOS, and Windows.
[b]Note:[/b] Advanced users only! [Window] objects call this method automatically.
</description>
</method>
<method name="set_window_rect">
<return type="void" />
<param index="0" name="window_id" type="int" />
<param index="1" name="rect_out" type="Rect2" />
<param index="2" name="rect_in" type="Rect2" />
<description>
Sets window outer (with decorations) and inner (without decorations) bounds for assistive apps.
[b]Note:[/b] This method is implemented on Linux, macOS, and Windows.
[b]Note:[/b] Advanced users only! [Window] objects call this method automatically.
</description>
</method>
<method name="update_add_action">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="action" type="int" enum="AccessibilityServer.AccessibilityAction" />
<param index="2" name="callable" type="Callable" />
<description>
Adds a callback for the accessibility action (action which can be performed by using a special screen reader command or buttons on the Braille display), and marks this action as supported. The action callback receives one [Variant] argument, which value depends on action type.
</description>
</method>
<method name="update_add_child">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="child_id" type="RID" />
<description>
Adds a child accessibility element.
[b]Note:[/b] [Node] children and sub-elements are added to the child list automatically.
</description>
</method>
<method name="update_add_custom_action">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="action_id" type="int" />
<param index="2" name="action_description" type="String" />
<description>
Adds support for a custom accessibility action. [param action_id] is passed as an argument to the callback of [constant ACTION_CUSTOM] action.
</description>
</method>
<method name="update_add_related_controls">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="related_id" type="RID" />
<description>
Adds an element that is controlled by this element.
</description>
</method>
<method name="update_add_related_described_by">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="related_id" type="RID" />
<description>
Adds an element that describes this element.
</description>
</method>
<method name="update_add_related_details">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="related_id" type="RID" />
<description>
Adds an element that details this element.
</description>
</method>
<method name="update_add_related_flow_to">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="related_id" type="RID" />
<description>
Adds an element that this element flow into.
</description>
</method>
<method name="update_add_related_labeled_by">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="related_id" type="RID" />
<description>
Adds an element that labels this element.
</description>
</method>
<method name="update_add_related_radio_group">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="related_id" type="RID" />
<description>
Adds an element that is part of the same radio group.
[b]Note:[/b] This method should be called on each element of the group, using all other elements as [param related_id].
</description>
</method>
<method name="update_set_active_descendant">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="other_id" type="RID" />
<description>
Adds an element that is an active descendant of this element.
</description>
</method>
<method name="update_set_background_color">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="color" type="Color" />
<description>
Sets element background color.
</description>
</method>
<method name="update_set_bounds">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="p_rect" type="Rect2" />
<description>
Sets element bounding box, relative to the node position.
</description>
</method>
<method name="update_set_braille_label">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="name" type="String" />
<description>
Sets element accessibility label for Braille display.
</description>
</method>
<method name="update_set_braille_role_description">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="description" type="String" />
<description>
Sets element accessibility role description for Braille display.
</description>
</method>
<method name="update_set_checked">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="checekd" type="bool" />
<description>
Sets element checked state.
</description>
</method>
<method name="update_set_classname">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="classname" type="String" />
<description>
Sets element class name.
</description>
</method>
<method name="update_set_color_value">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="color" type="Color" />
<description>
Sets element color value.
</description>
</method>
<method name="update_set_description">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="description" type="String" />
<description>
Sets element accessibility description.
</description>
</method>
<method name="update_set_error_message">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="other_id" type="RID" />
<description>
Sets an element which contains an error message for this element.
</description>
</method>
<method name="update_set_extra_info">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="name" type="String" />
<description>
Sets element accessibility extra information added to the element name.
</description>
</method>
<method name="update_set_flag">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="flag" type="int" enum="AccessibilityServer.AccessibilityFlags" />
<param index="2" name="value" type="bool" />
<description>
Sets element flag.
</description>
</method>
<method name="update_set_focus">
<return type="void" />
<param index="0" name="id" type="RID" />
<description>
Sets currently focused element.
</description>
</method>
<method name="update_set_foreground_color">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="color" type="Color" />
<description>
Sets element foreground color.
</description>
</method>
<method name="update_set_in_page_link_target">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="other_id" type="RID" />
<description>
Sets target element for the link.
</description>
</method>
<method name="update_set_language">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="language" type="String" />
<description>
Sets element text language.
</description>
</method>
<method name="update_set_list_item_count">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="size" type="int" />
<description>
Sets number of items in the list.
</description>
</method>
<method name="update_set_list_item_expanded">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="expanded" type="bool" />
<description>
Sets list/tree item expanded status.
</description>
</method>
<method name="update_set_list_item_index">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="index" type="int" />
<description>
Sets the position of the element in the list.
</description>
</method>
<method name="update_set_list_item_level">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="level" type="int" />
<description>
Sets the hierarchical level of the element in the list.
</description>
</method>
<method name="update_set_list_item_selected">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="selected" type="bool" />
<description>
Sets list/tree item selected status.
</description>
</method>
<method name="update_set_list_orientation">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="vertical" type="bool" />
<description>
Sets the orientation of the list elements.
</description>
</method>
<method name="update_set_live">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="live" type="int" enum="AccessibilityServer.AccessibilityLiveMode" />
<description>
Sets the priority of the live region updates.
</description>
</method>
<method name="update_set_member_of">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="group_id" type="RID" />
<description>
Sets the element to be a member of the group.
</description>
</method>
<method name="update_set_name">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="name" type="String" />
<description>
Sets element accessibility name.
</description>
</method>
<method name="update_set_next_on_line">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="other_id" type="RID" />
<description>
Sets next element on the line.
</description>
</method>
<method name="update_set_num_jump">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="jump" type="float" />
<description>
Sets numeric value jump.
</description>
</method>
<method name="update_set_num_range">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="min" type="float" />
<param index="2" name="max" type="float" />
<description>
Sets numeric value range.
</description>
</method>
<method name="update_set_num_step">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="step" type="float" />
<description>
Sets numeric value step.
</description>
</method>
<method name="update_set_num_value">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="position" type="float" />
<description>
Sets numeric value.
</description>
</method>
<method name="update_set_placeholder">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="placeholder" type="String" />
<description>
Sets placeholder text.
</description>
</method>
<method name="update_set_popup_type">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="popup" type="int" enum="AccessibilityServer.AccessibilityPopupType" />
<description>
Sets popup type for popup buttons.
</description>
</method>
<method name="update_set_previous_on_line">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="other_id" type="RID" />
<description>
Sets previous element on the line.
</description>
</method>
<method name="update_set_role">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="role" type="int" enum="AccessibilityServer.AccessibilityRole" />
<description>
Sets element accessibility role.
</description>
</method>
<method name="update_set_role_description">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="description" type="String" />
<description>
Sets element accessibility role description text.
</description>
</method>
<method name="update_set_scroll_x">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="position" type="float" />
<description>
Sets scroll bar x position.
</description>
</method>
<method name="update_set_scroll_x_range">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="min" type="float" />
<param index="2" name="max" type="float" />
<description>
Sets scroll bar x range.
</description>
</method>
<method name="update_set_scroll_y">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="position" type="float" />
<description>
Sets scroll bar y position.
</description>
</method>
<method name="update_set_scroll_y_range">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="min" type="float" />
<param index="2" name="max" type="float" />
<description>
Sets scroll bar y range.
</description>
</method>
<method name="update_set_shortcut">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="shortcut" type="String" />
<description>
Sets the list of keyboard shortcuts used by element.
</description>
</method>
<method name="update_set_state_description">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="description" type="String" />
<description>
Sets human-readable description of the current checked state.
</description>
</method>
<method name="update_set_table_cell_position">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="row_index" type="int" />
<param index="2" name="column_index" type="int" />
<description>
Sets cell position in the table.
</description>
</method>
<method name="update_set_table_cell_span">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="row_span" type="int" />
<param index="2" name="column_span" type="int" />
<description>
Sets cell row/column span.
</description>
</method>
<method name="update_set_table_column_count">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="count" type="int" />
<description>
Sets number of columns in the table.
</description>
</method>
<method name="update_set_table_column_index">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="index" type="int" />
<description>
Sets position of the column.
</description>
</method>
<method name="update_set_table_row_count">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="count" type="int" />
<description>
Sets number of rows in the table.
</description>
</method>
<method name="update_set_table_row_index">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="index" type="int" />
<description>
Sets position of the row in the table.
</description>
</method>
<method name="update_set_text_align">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="align" type="int" enum="HorizontalAlignment" />
<description>
Sets element text alignment.
</description>
</method>
<method name="update_set_text_decorations">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="underline" type="bool" />
<param index="2" name="strikethrough" type="bool" />
<param index="3" name="overline" type="bool" />
<param index="4" name="color" type="Color" default="Color(0, 0, 0, 1)" />
<description>
Sets text underline/overline/strikethrough.
</description>
</method>
<method name="update_set_text_orientation">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="vertical" type="bool" />
<description>
Sets text orientation.
</description>
</method>
<method name="update_set_text_selection">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="text_start_id" type="RID" />
<param index="2" name="start_char" type="int" />
<param index="3" name="text_end_id" type="RID" />
<param index="4" name="end_char" type="int" />
<description>
Sets text selection to the text field. [param text_start_id] and [param text_end_id] should be elements created by [method create_sub_text_edit_elements]. Character offsets are relative to the corresponding element.
</description>
</method>
<method name="update_set_tooltip">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="tooltip" type="String" />
<description>
Sets tooltip text.
</description>
</method>
<method name="update_set_transform">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="transform" type="Transform2D" />
<description>
Sets element 2D transform.
</description>
</method>
<method name="update_set_url">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="url" type="String" />
<description>
Sets link URL.
</description>
</method>
<method name="update_set_value">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="value" type="String" />
<description>
Sets element text value.
</description>
</method>
</methods>
<constants>
<constant name="ROLE_UNKNOWN" value="0" enum="AccessibilityRole">
Unknown or custom role.
</constant>
<constant name="ROLE_DEFAULT_BUTTON" value="1" enum="AccessibilityRole">
Default dialog button element.
</constant>
<constant name="ROLE_AUDIO" value="2" enum="AccessibilityRole">
Audio player element.
</constant>
<constant name="ROLE_VIDEO" value="3" enum="AccessibilityRole">
Video player element.
</constant>
<constant name="ROLE_STATIC_TEXT" value="4" enum="AccessibilityRole">
Non-editable text label.
</constant>
<constant name="ROLE_CONTAINER" value="5" enum="AccessibilityRole">
Container element. Elements with this role are used for internal structure and ignored by screen readers.
</constant>
<constant name="ROLE_PANEL" value="6" enum="AccessibilityRole">
Panel container element.
</constant>
<constant name="ROLE_BUTTON" value="7" enum="AccessibilityRole">
Button element.
</constant>
<constant name="ROLE_LINK" value="8" enum="AccessibilityRole">
Link element.
</constant>
<constant name="ROLE_CHECK_BOX" value="9" enum="AccessibilityRole">
Check box element.
</constant>
<constant name="ROLE_RADIO_BUTTON" value="10" enum="AccessibilityRole">
Radio button element.
</constant>
<constant name="ROLE_CHECK_BUTTON" value="11" enum="AccessibilityRole">
Check button element.
</constant>
<constant name="ROLE_SCROLL_BAR" value="12" enum="AccessibilityRole">
Scroll bar element.
</constant>
<constant name="ROLE_SCROLL_VIEW" value="13" enum="AccessibilityRole">
Scroll container element.
</constant>
<constant name="ROLE_SPLITTER" value="14" enum="AccessibilityRole">
Container splitter handle element.
</constant>
<constant name="ROLE_SLIDER" value="15" enum="AccessibilityRole">
Slider element.
</constant>
<constant name="ROLE_SPIN_BUTTON" value="16" enum="AccessibilityRole">
Spin box element.
</constant>
<constant name="ROLE_PROGRESS_INDICATOR" value="17" enum="AccessibilityRole">
Progress indicator element.
</constant>
<constant name="ROLE_TEXT_FIELD" value="18" enum="AccessibilityRole">
Editable text field element.
</constant>
<constant name="ROLE_MULTILINE_TEXT_FIELD" value="19" enum="AccessibilityRole">
Multiline editable text field element.
</constant>
<constant name="ROLE_COLOR_PICKER" value="20" enum="AccessibilityRole">
Color picker element.
</constant>
<constant name="ROLE_TABLE" value="21" enum="AccessibilityRole">
Table element.
</constant>
<constant name="ROLE_CELL" value="22" enum="AccessibilityRole">
Table/tree cell element.
</constant>
<constant name="ROLE_ROW" value="23" enum="AccessibilityRole">
Table/tree row element.
</constant>
<constant name="ROLE_ROW_GROUP" value="24" enum="AccessibilityRole">
Table/tree row group element.
</constant>
<constant name="ROLE_ROW_HEADER" value="25" enum="AccessibilityRole">
Table/tree row header element.
</constant>
<constant name="ROLE_COLUMN_HEADER" value="26" enum="AccessibilityRole">
Table/tree column header element.
</constant>
<constant name="ROLE_TREE" value="27" enum="AccessibilityRole">
Tree view element.
</constant>
<constant name="ROLE_TREE_ITEM" value="28" enum="AccessibilityRole">
Tree view item element.
</constant>
<constant name="ROLE_LIST" value="29" enum="AccessibilityRole">
List element.
</constant>
<constant name="ROLE_LIST_ITEM" value="30" enum="AccessibilityRole">
List item element.
</constant>
<constant name="ROLE_LIST_BOX" value="31" enum="AccessibilityRole">
List view element.
</constant>
<constant name="ROLE_LIST_BOX_OPTION" value="32" enum="AccessibilityRole">
List view item element.
</constant>
<constant name="ROLE_TAB_BAR" value="33" enum="AccessibilityRole">
Tab bar element.
</constant>
<constant name="ROLE_TAB" value="34" enum="AccessibilityRole">
Tab bar item element.
</constant>
<constant name="ROLE_TAB_PANEL" value="35" enum="AccessibilityRole">
Tab panel element.
</constant>
<constant name="ROLE_MENU_BAR" value="36" enum="AccessibilityRole">
Menu bar element.
</constant>
<constant name="ROLE_MENU" value="37" enum="AccessibilityRole">
Popup menu element.
</constant>
<constant name="ROLE_MENU_ITEM" value="38" enum="AccessibilityRole">
Popup menu item element.
</constant>
<constant name="ROLE_MENU_ITEM_CHECK_BOX" value="39" enum="AccessibilityRole">
Popup menu check button item element.
</constant>
<constant name="ROLE_MENU_ITEM_RADIO" value="40" enum="AccessibilityRole">
Popup menu radio button item element.
</constant>
<constant name="ROLE_IMAGE" value="41" enum="AccessibilityRole">
Image element.
</constant>
<constant name="ROLE_WINDOW" value="42" enum="AccessibilityRole">
Window element.
</constant>
<constant name="ROLE_TITLE_BAR" value="43" enum="AccessibilityRole">
Embedded window title bar element.
</constant>
<constant name="ROLE_DIALOG" value="44" enum="AccessibilityRole">
Dialog window element.
</constant>
<constant name="ROLE_TOOLTIP" value="45" enum="AccessibilityRole">
Tooltip element.
</constant>
<constant name="ROLE_REGION" value="46" enum="AccessibilityRole">
Region/landmark element. Screen readers can navigate between regions using landmark navigation.
</constant>
<constant name="ROLE_TEXT_RUN" value="47" enum="AccessibilityRole">
Unifor text run.
Note: This role is used for internal text elements, and should not be assigned to nodes.
</constant>
<constant name="POPUP_MENU" value="0" enum="AccessibilityPopupType">
Popup menu.
</constant>
<constant name="POPUP_LIST" value="1" enum="AccessibilityPopupType">
Popup list.
</constant>
<constant name="POPUP_TREE" value="2" enum="AccessibilityPopupType">
Popup tree view.
</constant>
<constant name="POPUP_DIALOG" value="3" enum="AccessibilityPopupType">
Popup dialog.
</constant>
<constant name="FLAG_HIDDEN" value="0" enum="AccessibilityFlags">
Element is hidden for accessibility tools.
</constant>
<constant name="FLAG_MULTISELECTABLE" value="1" enum="AccessibilityFlags">
Element supports multiple item selection.
</constant>
<constant name="FLAG_REQUIRED" value="2" enum="AccessibilityFlags">
Element require user input.
</constant>
<constant name="FLAG_VISITED" value="3" enum="AccessibilityFlags">
Element is a visited link.
</constant>
<constant name="FLAG_BUSY" value="4" enum="AccessibilityFlags">
Element content is not ready (e.g. loading).
</constant>
<constant name="FLAG_MODAL" value="5" enum="AccessibilityFlags">
Element is modal window.
</constant>
<constant name="FLAG_TOUCH_PASSTHROUGH" value="6" enum="AccessibilityFlags">
Element allows touches to be passed through when a screen reader is in touch exploration mode.
</constant>
<constant name="FLAG_READONLY" value="7" enum="AccessibilityFlags">
Element is text field with selectable but read-only text.
</constant>
<constant name="FLAG_DISABLED" value="8" enum="AccessibilityFlags">
Element is disabled.
</constant>
<constant name="FLAG_CLIPS_CHILDREN" value="9" enum="AccessibilityFlags">
Element clips children.
</constant>
<constant name="ACTION_CLICK" value="0" enum="AccessibilityAction">
Single click action, callback argument is not set.
</constant>
<constant name="ACTION_FOCUS" value="1" enum="AccessibilityAction">
Focus action, callback argument is not set.
</constant>
<constant name="ACTION_BLUR" value="2" enum="AccessibilityAction">
Blur action, callback argument is not set.
</constant>
<constant name="ACTION_COLLAPSE" value="3" enum="AccessibilityAction">
Collapse action, callback argument is not set.
</constant>
<constant name="ACTION_EXPAND" value="4" enum="AccessibilityAction">
Expand action, callback argument is not set.
</constant>
<constant name="ACTION_DECREMENT" value="5" enum="AccessibilityAction">
Decrement action, callback argument is not set.
</constant>
<constant name="ACTION_INCREMENT" value="6" enum="AccessibilityAction">
Increment action, callback argument is not set.
</constant>
<constant name="ACTION_HIDE_TOOLTIP" value="7" enum="AccessibilityAction">
Hide tooltip action, callback argument is not set.
</constant>
<constant name="ACTION_SHOW_TOOLTIP" value="8" enum="AccessibilityAction">
Show tooltip action, callback argument is not set.
</constant>
<constant name="ACTION_SET_TEXT_SELECTION" value="9" enum="AccessibilityAction">
Set text selection action, callback argument is set to [Dictionary] with the following keys:
- [code]"start_element"[/code] accessibility element of the selection start.
- [code]"start_char"[/code] character offset relative to the accessibility element of the selection start.
- [code]"end_element"[/code] accessibility element of the selection end.
- [code]"end_char"[/code] character offset relative to the accessibility element of the selection end.
</constant>
<constant name="ACTION_REPLACE_SELECTED_TEXT" value="10" enum="AccessibilityAction">
Replace text action, callback argument is set to [String] with the replacement text.
</constant>
<constant name="ACTION_SCROLL_BACKWARD" value="11" enum="AccessibilityAction">
Scroll backward action, callback argument is not set.
</constant>
<constant name="ACTION_SCROLL_DOWN" value="12" enum="AccessibilityAction">
Scroll down action, callback argument is set to [enum AccessibilityScrollUnit].
</constant>
<constant name="ACTION_SCROLL_FORWARD" value="13" enum="AccessibilityAction">
Scroll forward action, callback argument is not set.
</constant>
<constant name="ACTION_SCROLL_LEFT" value="14" enum="AccessibilityAction">
Scroll left action, callback argument is set to [enum AccessibilityScrollUnit].
</constant>
<constant name="ACTION_SCROLL_RIGHT" value="15" enum="AccessibilityAction">
Scroll right action, callback argument is set to [enum AccessibilityScrollUnit].
</constant>
<constant name="ACTION_SCROLL_UP" value="16" enum="AccessibilityAction">
Scroll up action, callback argument is set to [enum AccessibilityScrollUnit].
</constant>
<constant name="ACTION_SCROLL_INTO_VIEW" value="17" enum="AccessibilityAction">
Scroll into view action, callback argument is set to [enum AccessibilityScrollHint].
</constant>
<constant name="ACTION_SCROLL_TO_POINT" value="18" enum="AccessibilityAction">
Scroll to point action, callback argument is set to [Vector2] with the relative point coordinates.
</constant>
<constant name="ACTION_SET_SCROLL_OFFSET" value="19" enum="AccessibilityAction">
Set scroll offset action, callback argument is set to [Vector2] with the scroll offset.
</constant>
<constant name="ACTION_SET_VALUE" value="20" enum="AccessibilityAction">
Set value action, callback argument is set to [String] or number with the new value.
</constant>
<constant name="ACTION_SHOW_CONTEXT_MENU" value="21" enum="AccessibilityAction">
Show context menu action, callback argument is not set.
</constant>
<constant name="ACTION_CUSTOM" value="22" enum="AccessibilityAction">
Custom action, callback argument is set to the integer action ID.
</constant>
<constant name="LIVE_OFF" value="0" enum="AccessibilityLiveMode">
Indicates that updates to the live region should not be presented.
</constant>
<constant name="LIVE_POLITE" value="1" enum="AccessibilityLiveMode">
Indicates that updates to the live region should be presented at the next opportunity (for example at the end of speaking the current sentence).
</constant>
<constant name="LIVE_ASSERTIVE" value="2" enum="AccessibilityLiveMode">
Indicates that updates to the live region have the highest priority and should be presented immediately.
</constant>
<constant name="SCROLL_UNIT_ITEM" value="0" enum="AccessibilityScrollUnit">
The amount by which to scroll. A single item of a list, line of text.
</constant>
<constant name="SCROLL_UNIT_PAGE" value="1" enum="AccessibilityScrollUnit">
The amount by which to scroll. A single page.
</constant>
<constant name="SCROLL_HINT_TOP_LEFT" value="0" enum="AccessibilityScrollHint">
A preferred position for the node scrolled into view. Top-left edge of the scroll container.
</constant>
<constant name="SCROLL_HINT_BOTTOM_RIGHT" value="1" enum="AccessibilityScrollHint">
A preferred position for the node scrolled into view. Bottom-right edge of the scroll container.
</constant>
<constant name="SCROLL_HINT_TOP_EDGE" value="2" enum="AccessibilityScrollHint">
A preferred position for the node scrolled into view. Top edge of the scroll container.
</constant>
<constant name="SCROLL_HINT_BOTTOM_EDGE" value="3" enum="AccessibilityScrollHint">
A preferred position for the node scrolled into view. Bottom edge of the scroll container.
</constant>
<constant name="SCROLL_HINT_LEFT_EDGE" value="4" enum="AccessibilityScrollHint">
A preferred position for the node scrolled into view. Left edge of the scroll container.
</constant>
<constant name="SCROLL_HINT_RIGHT_EDGE" value="5" enum="AccessibilityScrollHint">
A preferred position for the node scrolled into view. Right edge of the scroll container.
</constant>
</constants>
</class>

View file

@ -998,7 +998,7 @@
<member name="accessibility_labeled_by_nodes" type="NodePath[]" setter="set_accessibility_labeled_by_nodes" getter="get_accessibility_labeled_by_nodes" default="[]">
The paths to the nodes which label this node.
</member>
<member name="accessibility_live" type="int" setter="set_accessibility_live" getter="get_accessibility_live" enum="DisplayServer.AccessibilityLiveMode" default="0">
<member name="accessibility_live" type="int" setter="set_accessibility_live" getter="get_accessibility_live" enum="AccessibilityServer.AccessibilityLiveMode" default="0">
The mode with which a live region updates. A live region is a [Node] that is updated as a result of an external event when the user's focus may be elsewhere.
</member>
<member name="accessibility_name" type="String" setter="set_accessibility_name" getter="get_accessibility_name" default="&quot;&quot;">

View file

@ -10,7 +10,7 @@
<tutorials>
</tutorials>
<methods>
<method name="accessibility_create_element">
<method name="accessibility_create_element" deprecated="Use [AccessibilityServer] instead.">
<return type="RID" />
<param index="0" name="window_id" type="int" />
<param index="1" name="role" type="int" enum="DisplayServer.AccessibilityRole" />
@ -19,7 +19,7 @@
[b]Note:[/b] An accessibility element is created and freed automatically for each [Node]. In general, this function should not be called manually.
</description>
</method>
<method name="accessibility_create_sub_element">
<method name="accessibility_create_sub_element" deprecated="Use [AccessibilityServer] instead.">
<return type="RID" />
<param index="0" name="parent_rid" type="RID" />
<param index="1" name="role" type="int" enum="DisplayServer.AccessibilityRole" />
@ -28,7 +28,7 @@
Creates a new, empty accessibility sub-element resource. Sub-elements can be used to provide accessibility information for objects which are not [Node]s, such as list items, table cells, or menu items. Sub-elements are freed automatically when the parent element is freed, or can be freed early using the [method accessibility_free_element] method.
</description>
</method>
<method name="accessibility_create_sub_text_edit_elements">
<method name="accessibility_create_sub_text_edit_elements" deprecated="Use [AccessibilityServer] instead.">
<return type="RID" />
<param index="0" name="parent_rid" type="RID" />
<param index="1" name="shaped_text" type="RID" />
@ -40,14 +40,14 @@
If [param is_last_line] is [code]true[/code], no trailing newline is appended to the text content. Set to [code]true[/code] for the last line in multi-line text fields and for single-line text fields.
</description>
</method>
<method name="accessibility_element_get_meta" qualifiers="const">
<method name="accessibility_element_get_meta" qualifiers="const" deprecated="Use [AccessibilityServer] instead.">
<return type="Variant" />
<param index="0" name="id" type="RID" />
<description>
Returns the metadata of the accessibility element [param id].
</description>
</method>
<method name="accessibility_element_set_meta">
<method name="accessibility_element_set_meta" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="meta" type="Variant" />
@ -55,21 +55,21 @@
Sets the metadata of the accessibility element [param id] to [param meta].
</description>
</method>
<method name="accessibility_free_element">
<method name="accessibility_free_element" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<description>
Frees the accessibility element [param id] created by [method accessibility_create_element], [method accessibility_create_sub_element], or [method accessibility_create_sub_text_edit_elements].
</description>
</method>
<method name="accessibility_get_window_root" qualifiers="const">
<method name="accessibility_get_window_root" qualifiers="const" deprecated="Use [AccessibilityServer] instead.">
<return type="RID" />
<param index="0" name="window_id" type="int" />
<description>
Returns the main accessibility element of the OS native window.
</description>
</method>
<method name="accessibility_has_element" qualifiers="const">
<method name="accessibility_has_element" qualifiers="const" deprecated="Use [AccessibilityServer] instead.">
<return type="bool" />
<param index="0" name="id" type="RID" />
<description>
@ -84,7 +84,7 @@
[b]Note:[/b] Accessibility debugging tools, such as Accessibility Insights for Windows, Accessibility Inspector (macOS), or AT-SPI Browser (Linux/BSD), do not count as assistive apps and will not affect this value. To test your project with these tools, set [member ProjectSettings.accessibility/general/accessibility_support] to [code]1[/code].
</description>
</method>
<method name="accessibility_set_window_focused">
<method name="accessibility_set_window_focused" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="window_id" type="int" />
<param index="1" name="focused" type="bool" />
@ -94,7 +94,7 @@
[b]Note:[/b] Advanced users only! [Window] objects call this method automatically.
</description>
</method>
<method name="accessibility_set_window_rect">
<method name="accessibility_set_window_rect" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="window_id" type="int" />
<param index="1" name="rect_out" type="Rect2" />
@ -126,7 +126,7 @@
[b]Note:[/b] This method is implemented on macOS and Windows.
</description>
</method>
<method name="accessibility_update_add_action">
<method name="accessibility_update_add_action" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="action" type="int" enum="DisplayServer.AccessibilityAction" />
@ -135,7 +135,7 @@
Adds a callback for the accessibility action (action which can be performed by using a special screen reader command or buttons on the Braille display), and marks this action as supported. The action callback receives one [Variant] argument, which value depends on action type.
</description>
</method>
<method name="accessibility_update_add_child">
<method name="accessibility_update_add_child" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="child_id" type="RID" />
@ -144,7 +144,7 @@
[b]Note:[/b] [Node] children and sub-elements are added to the child list automatically.
</description>
</method>
<method name="accessibility_update_add_custom_action">
<method name="accessibility_update_add_custom_action" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="action_id" type="int" />
@ -153,7 +153,7 @@
Adds support for a custom accessibility action. [param action_id] is passed as an argument to the callback of [constant ACTION_CUSTOM] action.
</description>
</method>
<method name="accessibility_update_add_related_controls">
<method name="accessibility_update_add_related_controls" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="related_id" type="RID" />
@ -161,7 +161,7 @@
Adds an element that is controlled by this element.
</description>
</method>
<method name="accessibility_update_add_related_described_by">
<method name="accessibility_update_add_related_described_by" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="related_id" type="RID" />
@ -169,7 +169,7 @@
Adds an element that describes this element.
</description>
</method>
<method name="accessibility_update_add_related_details">
<method name="accessibility_update_add_related_details" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="related_id" type="RID" />
@ -177,7 +177,7 @@
Adds an element that details this element.
</description>
</method>
<method name="accessibility_update_add_related_flow_to">
<method name="accessibility_update_add_related_flow_to" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="related_id" type="RID" />
@ -185,7 +185,7 @@
Adds an element that this element flow into.
</description>
</method>
<method name="accessibility_update_add_related_labeled_by">
<method name="accessibility_update_add_related_labeled_by" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="related_id" type="RID" />
@ -193,7 +193,7 @@
Adds an element that labels this element.
</description>
</method>
<method name="accessibility_update_add_related_radio_group">
<method name="accessibility_update_add_related_radio_group" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="related_id" type="RID" />
@ -202,7 +202,7 @@
[b]Note:[/b] This method should be called on each element of the group, using all other elements as [param related_id].
</description>
</method>
<method name="accessibility_update_set_active_descendant">
<method name="accessibility_update_set_active_descendant" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="other_id" type="RID" />
@ -210,7 +210,7 @@
Adds an element that is an active descendant of this element.
</description>
</method>
<method name="accessibility_update_set_background_color">
<method name="accessibility_update_set_background_color" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="color" type="Color" />
@ -218,7 +218,7 @@
Sets element background color.
</description>
</method>
<method name="accessibility_update_set_bounds">
<method name="accessibility_update_set_bounds" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="p_rect" type="Rect2" />
@ -226,7 +226,7 @@
Sets element bounding box, relative to the node position.
</description>
</method>
<method name="accessibility_update_set_checked">
<method name="accessibility_update_set_checked" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="checekd" type="bool" />
@ -234,7 +234,7 @@
Sets element checked state.
</description>
</method>
<method name="accessibility_update_set_classname">
<method name="accessibility_update_set_classname" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="classname" type="String" />
@ -242,7 +242,7 @@
Sets element class name.
</description>
</method>
<method name="accessibility_update_set_color_value">
<method name="accessibility_update_set_color_value" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="color" type="Color" />
@ -250,7 +250,7 @@
Sets element color value.
</description>
</method>
<method name="accessibility_update_set_description">
<method name="accessibility_update_set_description" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="description" type="String" />
@ -258,7 +258,7 @@
Sets element accessibility description.
</description>
</method>
<method name="accessibility_update_set_error_message">
<method name="accessibility_update_set_error_message" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="other_id" type="RID" />
@ -266,7 +266,7 @@
Sets an element which contains an error message for this element.
</description>
</method>
<method name="accessibility_update_set_extra_info">
<method name="accessibility_update_set_extra_info" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="name" type="String" />
@ -274,7 +274,7 @@
Sets element accessibility extra information added to the element name.
</description>
</method>
<method name="accessibility_update_set_flag">
<method name="accessibility_update_set_flag" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="flag" type="int" enum="DisplayServer.AccessibilityFlags" />
@ -283,14 +283,14 @@
Sets element flag.
</description>
</method>
<method name="accessibility_update_set_focus">
<method name="accessibility_update_set_focus" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<description>
Sets currently focused element.
</description>
</method>
<method name="accessibility_update_set_foreground_color">
<method name="accessibility_update_set_foreground_color" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="color" type="Color" />
@ -298,7 +298,7 @@
Sets element foreground color.
</description>
</method>
<method name="accessibility_update_set_in_page_link_target">
<method name="accessibility_update_set_in_page_link_target" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="other_id" type="RID" />
@ -306,7 +306,7 @@
Sets target element for the link.
</description>
</method>
<method name="accessibility_update_set_language">
<method name="accessibility_update_set_language" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="language" type="String" />
@ -314,7 +314,7 @@
Sets element text language.
</description>
</method>
<method name="accessibility_update_set_list_item_count">
<method name="accessibility_update_set_list_item_count" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="size" type="int" />
@ -322,7 +322,7 @@
Sets number of items in the list.
</description>
</method>
<method name="accessibility_update_set_list_item_expanded">
<method name="accessibility_update_set_list_item_expanded" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="expanded" type="bool" />
@ -330,7 +330,7 @@
Sets list/tree item expanded status.
</description>
</method>
<method name="accessibility_update_set_list_item_index">
<method name="accessibility_update_set_list_item_index" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="index" type="int" />
@ -338,7 +338,7 @@
Sets the position of the element in the list.
</description>
</method>
<method name="accessibility_update_set_list_item_level">
<method name="accessibility_update_set_list_item_level" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="level" type="int" />
@ -346,7 +346,7 @@
Sets the hierarchical level of the element in the list.
</description>
</method>
<method name="accessibility_update_set_list_item_selected">
<method name="accessibility_update_set_list_item_selected" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="selected" type="bool" />
@ -354,7 +354,7 @@
Sets list/tree item selected status.
</description>
</method>
<method name="accessibility_update_set_list_orientation">
<method name="accessibility_update_set_list_orientation" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="vertical" type="bool" />
@ -362,7 +362,7 @@
Sets the orientation of the list elements.
</description>
</method>
<method name="accessibility_update_set_live">
<method name="accessibility_update_set_live" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="live" type="int" enum="DisplayServer.AccessibilityLiveMode" />
@ -370,7 +370,7 @@
Sets the priority of the live region updates.
</description>
</method>
<method name="accessibility_update_set_member_of">
<method name="accessibility_update_set_member_of" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="group_id" type="RID" />
@ -378,7 +378,7 @@
Sets the element to be a member of the group.
</description>
</method>
<method name="accessibility_update_set_name">
<method name="accessibility_update_set_name" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="name" type="String" />
@ -386,7 +386,7 @@
Sets element accessibility name.
</description>
</method>
<method name="accessibility_update_set_next_on_line">
<method name="accessibility_update_set_next_on_line" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="other_id" type="RID" />
@ -394,7 +394,7 @@
Sets next element on the line.
</description>
</method>
<method name="accessibility_update_set_num_jump">
<method name="accessibility_update_set_num_jump" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="jump" type="float" />
@ -402,7 +402,7 @@
Sets numeric value jump.
</description>
</method>
<method name="accessibility_update_set_num_range">
<method name="accessibility_update_set_num_range" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="min" type="float" />
@ -411,7 +411,7 @@
Sets numeric value range.
</description>
</method>
<method name="accessibility_update_set_num_step">
<method name="accessibility_update_set_num_step" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="step" type="float" />
@ -419,7 +419,7 @@
Sets numeric value step.
</description>
</method>
<method name="accessibility_update_set_num_value">
<method name="accessibility_update_set_num_value" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="position" type="float" />
@ -427,7 +427,7 @@
Sets numeric value.
</description>
</method>
<method name="accessibility_update_set_placeholder">
<method name="accessibility_update_set_placeholder" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="placeholder" type="String" />
@ -435,7 +435,7 @@
Sets placeholder text.
</description>
</method>
<method name="accessibility_update_set_popup_type">
<method name="accessibility_update_set_popup_type" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="popup" type="int" enum="DisplayServer.AccessibilityPopupType" />
@ -443,7 +443,7 @@
Sets popup type for popup buttons.
</description>
</method>
<method name="accessibility_update_set_previous_on_line">
<method name="accessibility_update_set_previous_on_line" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="other_id" type="RID" />
@ -451,7 +451,7 @@
Sets previous element on the line.
</description>
</method>
<method name="accessibility_update_set_role">
<method name="accessibility_update_set_role" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="role" type="int" enum="DisplayServer.AccessibilityRole" />
@ -459,7 +459,7 @@
Sets element accessibility role.
</description>
</method>
<method name="accessibility_update_set_role_description">
<method name="accessibility_update_set_role_description" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="description" type="String" />
@ -467,7 +467,7 @@
Sets element accessibility role description text.
</description>
</method>
<method name="accessibility_update_set_scroll_x">
<method name="accessibility_update_set_scroll_x" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="position" type="float" />
@ -475,7 +475,7 @@
Sets scroll bar x position.
</description>
</method>
<method name="accessibility_update_set_scroll_x_range">
<method name="accessibility_update_set_scroll_x_range" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="min" type="float" />
@ -484,7 +484,7 @@
Sets scroll bar x range.
</description>
</method>
<method name="accessibility_update_set_scroll_y">
<method name="accessibility_update_set_scroll_y" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="position" type="float" />
@ -492,7 +492,7 @@
Sets scroll bar y position.
</description>
</method>
<method name="accessibility_update_set_scroll_y_range">
<method name="accessibility_update_set_scroll_y_range" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="min" type="float" />
@ -501,7 +501,7 @@
Sets scroll bar y range.
</description>
</method>
<method name="accessibility_update_set_shortcut">
<method name="accessibility_update_set_shortcut" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="shortcut" type="String" />
@ -509,7 +509,7 @@
Sets the list of keyboard shortcuts used by element.
</description>
</method>
<method name="accessibility_update_set_state_description">
<method name="accessibility_update_set_state_description" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="description" type="String" />
@ -517,7 +517,7 @@
Sets human-readable description of the current checked state.
</description>
</method>
<method name="accessibility_update_set_table_cell_position">
<method name="accessibility_update_set_table_cell_position" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="row_index" type="int" />
@ -526,7 +526,7 @@
Sets cell position in the table.
</description>
</method>
<method name="accessibility_update_set_table_cell_span">
<method name="accessibility_update_set_table_cell_span" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="row_span" type="int" />
@ -535,7 +535,7 @@
Sets cell row/column span.
</description>
</method>
<method name="accessibility_update_set_table_column_count">
<method name="accessibility_update_set_table_column_count" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="count" type="int" />
@ -543,7 +543,7 @@
Sets number of columns in the table.
</description>
</method>
<method name="accessibility_update_set_table_column_index">
<method name="accessibility_update_set_table_column_index" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="index" type="int" />
@ -551,7 +551,7 @@
Sets position of the column.
</description>
</method>
<method name="accessibility_update_set_table_row_count">
<method name="accessibility_update_set_table_row_count" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="count" type="int" />
@ -559,7 +559,7 @@
Sets number of rows in the table.
</description>
</method>
<method name="accessibility_update_set_table_row_index">
<method name="accessibility_update_set_table_row_index" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="index" type="int" />
@ -567,7 +567,7 @@
Sets position of the row in the table.
</description>
</method>
<method name="accessibility_update_set_text_align">
<method name="accessibility_update_set_text_align" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="align" type="int" enum="HorizontalAlignment" />
@ -575,7 +575,7 @@
Sets element text alignment.
</description>
</method>
<method name="accessibility_update_set_text_decorations">
<method name="accessibility_update_set_text_decorations" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="underline" type="bool" />
@ -585,7 +585,7 @@
Sets text underline/overline/strikethrough.
</description>
</method>
<method name="accessibility_update_set_text_orientation">
<method name="accessibility_update_set_text_orientation" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="vertical" type="bool" />
@ -593,7 +593,7 @@
Sets text orientation.
</description>
</method>
<method name="accessibility_update_set_text_selection">
<method name="accessibility_update_set_text_selection" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="text_start_id" type="RID" />
@ -604,7 +604,7 @@
Sets text selection to the text field. [param text_start_id] and [param text_end_id] should be elements created by [method accessibility_create_sub_text_edit_elements]. Character offsets are relative to the corresponding element.
</description>
</method>
<method name="accessibility_update_set_tooltip">
<method name="accessibility_update_set_tooltip" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="tooltip" type="String" />
@ -612,7 +612,7 @@
Sets tooltip text.
</description>
</method>
<method name="accessibility_update_set_transform">
<method name="accessibility_update_set_transform" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="transform" type="Transform2D" />
@ -620,7 +620,7 @@
Sets element 2D transform.
</description>
</method>
<method name="accessibility_update_set_url">
<method name="accessibility_update_set_url" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="url" type="String" />
@ -628,7 +628,7 @@
Sets link URL.
</description>
</method>
<method name="accessibility_update_set_value">
<method name="accessibility_update_set_value" deprecated="Use [AccessibilityServer] instead.">
<return type="void" />
<param index="0" name="id" type="RID" />
<param index="1" name="value" type="String" />
@ -2753,293 +2753,297 @@
<constant name="FEATURE_HDR_OUTPUT" value="35" enum="Feature">
Display server supports HDR output. [b]macOS, iOS, visionOS, Windows[/b]
</constant>
<constant name="ROLE_UNKNOWN" value="0" enum="AccessibilityRole">
<constant name="ROLE_UNKNOWN" value="0" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
Unknown or custom role.
</constant>
<constant name="ROLE_DEFAULT_BUTTON" value="1" enum="AccessibilityRole">
<constant name="ROLE_DEFAULT_BUTTON" value="1" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
Default dialog button element.
</constant>
<constant name="ROLE_AUDIO" value="2" enum="AccessibilityRole">
<constant name="ROLE_AUDIO" value="2" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
Audio player element.
</constant>
<constant name="ROLE_VIDEO" value="3" enum="AccessibilityRole">
<constant name="ROLE_VIDEO" value="3" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
Video player element.
</constant>
<constant name="ROLE_STATIC_TEXT" value="4" enum="AccessibilityRole">
<constant name="ROLE_STATIC_TEXT" value="4" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
Non-editable text label.
</constant>
<constant name="ROLE_CONTAINER" value="5" enum="AccessibilityRole">
<constant name="ROLE_CONTAINER" value="5" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
Container element. Elements with this role are used for internal structure and ignored by screen readers.
</constant>
<constant name="ROLE_PANEL" value="6" enum="AccessibilityRole">
<constant name="ROLE_PANEL" value="6" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
Panel container element.
</constant>
<constant name="ROLE_BUTTON" value="7" enum="AccessibilityRole">
<constant name="ROLE_BUTTON" value="7" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
Button element.
</constant>
<constant name="ROLE_LINK" value="8" enum="AccessibilityRole">
<constant name="ROLE_LINK" value="8" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
Link element.
</constant>
<constant name="ROLE_CHECK_BOX" value="9" enum="AccessibilityRole">
<constant name="ROLE_CHECK_BOX" value="9" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
Check box element.
</constant>
<constant name="ROLE_RADIO_BUTTON" value="10" enum="AccessibilityRole">
<constant name="ROLE_RADIO_BUTTON" value="10" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
Radio button element.
</constant>
<constant name="ROLE_CHECK_BUTTON" value="11" enum="AccessibilityRole">
<constant name="ROLE_CHECK_BUTTON" value="11" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
Check button element.
</constant>
<constant name="ROLE_SCROLL_BAR" value="12" enum="AccessibilityRole">
<constant name="ROLE_SCROLL_BAR" value="12" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
Scroll bar element.
</constant>
<constant name="ROLE_SCROLL_VIEW" value="13" enum="AccessibilityRole">
<constant name="ROLE_SCROLL_VIEW" value="13" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
Scroll container element.
</constant>
<constant name="ROLE_SPLITTER" value="14" enum="AccessibilityRole">
<constant name="ROLE_SPLITTER" value="14" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
Container splitter handle element.
</constant>
<constant name="ROLE_SLIDER" value="15" enum="AccessibilityRole">
<constant name="ROLE_SLIDER" value="15" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
Slider element.
</constant>
<constant name="ROLE_SPIN_BUTTON" value="16" enum="AccessibilityRole">
<constant name="ROLE_SPIN_BUTTON" value="16" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
Spin box element.
</constant>
<constant name="ROLE_PROGRESS_INDICATOR" value="17" enum="AccessibilityRole">
<constant name="ROLE_PROGRESS_INDICATOR" value="17" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
Progress indicator element.
</constant>
<constant name="ROLE_TEXT_FIELD" value="18" enum="AccessibilityRole">
<constant name="ROLE_TEXT_FIELD" value="18" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
Editable text field element.
</constant>
<constant name="ROLE_MULTILINE_TEXT_FIELD" value="19" enum="AccessibilityRole">
<constant name="ROLE_MULTILINE_TEXT_FIELD" value="19" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
Multiline editable text field element.
</constant>
<constant name="ROLE_COLOR_PICKER" value="20" enum="AccessibilityRole">
<constant name="ROLE_COLOR_PICKER" value="20" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
Color picker element.
</constant>
<constant name="ROLE_TABLE" value="21" enum="AccessibilityRole">
<constant name="ROLE_TABLE" value="21" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
Table element.
</constant>
<constant name="ROLE_CELL" value="22" enum="AccessibilityRole">
<constant name="ROLE_CELL" value="22" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
Table/tree cell element.
</constant>
<constant name="ROLE_ROW" value="23" enum="AccessibilityRole">
<constant name="ROLE_ROW" value="23" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
Table/tree row element.
</constant>
<constant name="ROLE_ROW_GROUP" value="24" enum="AccessibilityRole">
<constant name="ROLE_ROW_GROUP" value="24" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
Table/tree row group element.
</constant>
<constant name="ROLE_ROW_HEADER" value="25" enum="AccessibilityRole">
<constant name="ROLE_ROW_HEADER" value="25" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
Table/tree row header element.
</constant>
<constant name="ROLE_COLUMN_HEADER" value="26" enum="AccessibilityRole">
<constant name="ROLE_COLUMN_HEADER" value="26" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
Table/tree column header element.
</constant>
<constant name="ROLE_TREE" value="27" enum="AccessibilityRole">
<constant name="ROLE_TREE" value="27" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
Tree view element.
</constant>
<constant name="ROLE_TREE_ITEM" value="28" enum="AccessibilityRole">
<constant name="ROLE_TREE_ITEM" value="28" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
Tree view item element.
</constant>
<constant name="ROLE_LIST" value="29" enum="AccessibilityRole">
<constant name="ROLE_LIST" value="29" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
List element.
</constant>
<constant name="ROLE_LIST_ITEM" value="30" enum="AccessibilityRole">
<constant name="ROLE_LIST_ITEM" value="30" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
List item element.
</constant>
<constant name="ROLE_LIST_BOX" value="31" enum="AccessibilityRole">
<constant name="ROLE_LIST_BOX" value="31" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
List view element.
</constant>
<constant name="ROLE_LIST_BOX_OPTION" value="32" enum="AccessibilityRole">
<constant name="ROLE_LIST_BOX_OPTION" value="32" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
List view item element.
</constant>
<constant name="ROLE_TAB_BAR" value="33" enum="AccessibilityRole">
<constant name="ROLE_TAB_BAR" value="33" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
Tab bar element.
</constant>
<constant name="ROLE_TAB" value="34" enum="AccessibilityRole">
<constant name="ROLE_TAB" value="34" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
Tab bar item element.
</constant>
<constant name="ROLE_TAB_PANEL" value="35" enum="AccessibilityRole">
<constant name="ROLE_TAB_PANEL" value="35" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
Tab panel element.
</constant>
<constant name="ROLE_MENU_BAR" value="36" enum="AccessibilityRole">
<constant name="ROLE_MENU_BAR" value="36" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
Menu bar element.
</constant>
<constant name="ROLE_MENU" value="37" enum="AccessibilityRole">
<constant name="ROLE_MENU" value="37" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
Popup menu element.
</constant>
<constant name="ROLE_MENU_ITEM" value="38" enum="AccessibilityRole">
<constant name="ROLE_MENU_ITEM" value="38" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
Popup menu item element.
</constant>
<constant name="ROLE_MENU_ITEM_CHECK_BOX" value="39" enum="AccessibilityRole">
<constant name="ROLE_MENU_ITEM_CHECK_BOX" value="39" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
Popup menu check button item element.
</constant>
<constant name="ROLE_MENU_ITEM_RADIO" value="40" enum="AccessibilityRole">
<constant name="ROLE_MENU_ITEM_RADIO" value="40" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
Popup menu radio button item element.
</constant>
<constant name="ROLE_IMAGE" value="41" enum="AccessibilityRole">
<constant name="ROLE_IMAGE" value="41" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
Image element.
</constant>
<constant name="ROLE_WINDOW" value="42" enum="AccessibilityRole">
<constant name="ROLE_WINDOW" value="42" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
Window element.
</constant>
<constant name="ROLE_TITLE_BAR" value="43" enum="AccessibilityRole">
<constant name="ROLE_TITLE_BAR" value="43" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
Embedded window title bar element.
</constant>
<constant name="ROLE_DIALOG" value="44" enum="AccessibilityRole">
<constant name="ROLE_DIALOG" value="44" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
Dialog window element.
</constant>
<constant name="ROLE_TOOLTIP" value="45" enum="AccessibilityRole">
<constant name="ROLE_TOOLTIP" value="45" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
Tooltip element.
</constant>
<constant name="ROLE_REGION" value="46" enum="AccessibilityRole">
<constant name="ROLE_REGION" value="46" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
Region/landmark element. Screen readers can navigate between regions using landmark navigation.
</constant>
<constant name="POPUP_MENU" value="0" enum="AccessibilityPopupType">
<constant name="ROLE_TEXT_RUN" value="47" enum="AccessibilityRole" deprecated="Use [AccessibilityServer] instead.">
Unifor text run.
Note: This role is used for internal text elements, and should not be assigned to nodes.
</constant>
<constant name="POPUP_MENU" value="0" enum="AccessibilityPopupType" deprecated="Use [AccessibilityServer] instead.">
Popup menu.
</constant>
<constant name="POPUP_LIST" value="1" enum="AccessibilityPopupType">
<constant name="POPUP_LIST" value="1" enum="AccessibilityPopupType" deprecated="Use [AccessibilityServer] instead.">
Popup list.
</constant>
<constant name="POPUP_TREE" value="2" enum="AccessibilityPopupType">
<constant name="POPUP_TREE" value="2" enum="AccessibilityPopupType" deprecated="Use [AccessibilityServer] instead.">
Popup tree view.
</constant>
<constant name="POPUP_DIALOG" value="3" enum="AccessibilityPopupType">
<constant name="POPUP_DIALOG" value="3" enum="AccessibilityPopupType" deprecated="Use [AccessibilityServer] instead.">
Popup dialog.
</constant>
<constant name="FLAG_HIDDEN" value="0" enum="AccessibilityFlags">
<constant name="FLAG_HIDDEN" value="0" enum="AccessibilityFlags" deprecated="Use [AccessibilityServer] instead.">
Element is hidden for accessibility tools.
</constant>
<constant name="FLAG_MULTISELECTABLE" value="1" enum="AccessibilityFlags">
<constant name="FLAG_MULTISELECTABLE" value="1" enum="AccessibilityFlags" deprecated="Use [AccessibilityServer] instead.">
Element supports multiple item selection.
</constant>
<constant name="FLAG_REQUIRED" value="2" enum="AccessibilityFlags">
<constant name="FLAG_REQUIRED" value="2" enum="AccessibilityFlags" deprecated="Use [AccessibilityServer] instead.">
Element require user input.
</constant>
<constant name="FLAG_VISITED" value="3" enum="AccessibilityFlags">
<constant name="FLAG_VISITED" value="3" enum="AccessibilityFlags" deprecated="Use [AccessibilityServer] instead.">
Element is a visited link.
</constant>
<constant name="FLAG_BUSY" value="4" enum="AccessibilityFlags">
<constant name="FLAG_BUSY" value="4" enum="AccessibilityFlags" deprecated="Use [AccessibilityServer] instead.">
Element content is not ready (e.g. loading).
</constant>
<constant name="FLAG_MODAL" value="5" enum="AccessibilityFlags">
<constant name="FLAG_MODAL" value="5" enum="AccessibilityFlags" deprecated="Use [AccessibilityServer] instead.">
Element is modal window.
</constant>
<constant name="FLAG_TOUCH_PASSTHROUGH" value="6" enum="AccessibilityFlags">
<constant name="FLAG_TOUCH_PASSTHROUGH" value="6" enum="AccessibilityFlags" deprecated="Use [AccessibilityServer] instead.">
Element allows touches to be passed through when a screen reader is in touch exploration mode.
</constant>
<constant name="FLAG_READONLY" value="7" enum="AccessibilityFlags">
<constant name="FLAG_READONLY" value="7" enum="AccessibilityFlags" deprecated="Use [AccessibilityServer] instead.">
Element is text field with selectable but read-only text.
</constant>
<constant name="FLAG_DISABLED" value="8" enum="AccessibilityFlags">
<constant name="FLAG_DISABLED" value="8" enum="AccessibilityFlags" deprecated="Use [AccessibilityServer] instead.">
Element is disabled.
</constant>
<constant name="FLAG_CLIPS_CHILDREN" value="9" enum="AccessibilityFlags">
<constant name="FLAG_CLIPS_CHILDREN" value="9" enum="AccessibilityFlags" deprecated="Use [AccessibilityServer] instead.">
Element clips children.
</constant>
<constant name="ACTION_CLICK" value="0" enum="AccessibilityAction">
<constant name="ACTION_CLICK" value="0" enum="AccessibilityAction" deprecated="Use [AccessibilityServer] instead.">
Single click action, callback argument is not set.
</constant>
<constant name="ACTION_FOCUS" value="1" enum="AccessibilityAction">
<constant name="ACTION_FOCUS" value="1" enum="AccessibilityAction" deprecated="Use [AccessibilityServer] instead.">
Focus action, callback argument is not set.
</constant>
<constant name="ACTION_BLUR" value="2" enum="AccessibilityAction">
<constant name="ACTION_BLUR" value="2" enum="AccessibilityAction" deprecated="Use [AccessibilityServer] instead.">
Blur action, callback argument is not set.
</constant>
<constant name="ACTION_COLLAPSE" value="3" enum="AccessibilityAction">
<constant name="ACTION_COLLAPSE" value="3" enum="AccessibilityAction" deprecated="Use [AccessibilityServer] instead.">
Collapse action, callback argument is not set.
</constant>
<constant name="ACTION_EXPAND" value="4" enum="AccessibilityAction">
<constant name="ACTION_EXPAND" value="4" enum="AccessibilityAction" deprecated="Use [AccessibilityServer] instead.">
Expand action, callback argument is not set.
</constant>
<constant name="ACTION_DECREMENT" value="5" enum="AccessibilityAction">
<constant name="ACTION_DECREMENT" value="5" enum="AccessibilityAction" deprecated="Use [AccessibilityServer] instead.">
Decrement action, callback argument is not set.
</constant>
<constant name="ACTION_INCREMENT" value="6" enum="AccessibilityAction">
<constant name="ACTION_INCREMENT" value="6" enum="AccessibilityAction" deprecated="Use [AccessibilityServer] instead.">
Increment action, callback argument is not set.
</constant>
<constant name="ACTION_HIDE_TOOLTIP" value="7" enum="AccessibilityAction">
<constant name="ACTION_HIDE_TOOLTIP" value="7" enum="AccessibilityAction" deprecated="Use [AccessibilityServer] instead.">
Hide tooltip action, callback argument is not set.
</constant>
<constant name="ACTION_SHOW_TOOLTIP" value="8" enum="AccessibilityAction">
<constant name="ACTION_SHOW_TOOLTIP" value="8" enum="AccessibilityAction" deprecated="Use [AccessibilityServer] instead.">
Show tooltip action, callback argument is not set.
</constant>
<constant name="ACTION_SET_TEXT_SELECTION" value="9" enum="AccessibilityAction">
<constant name="ACTION_SET_TEXT_SELECTION" value="9" enum="AccessibilityAction" deprecated="Use [AccessibilityServer] instead.">
Set text selection action, callback argument is set to [Dictionary] with the following keys:
- [code]"start_element"[/code] accessibility element of the selection start.
- [code]"start_char"[/code] character offset relative to the accessibility element of the selection start.
- [code]"end_element"[/code] accessibility element of the selection end.
- [code]"end_char"[/code] character offset relative to the accessibility element of the selection end.
</constant>
<constant name="ACTION_REPLACE_SELECTED_TEXT" value="10" enum="AccessibilityAction">
<constant name="ACTION_REPLACE_SELECTED_TEXT" value="10" enum="AccessibilityAction" deprecated="Use [AccessibilityServer] instead.">
Replace text action, callback argument is set to [String] with the replacement text.
</constant>
<constant name="ACTION_SCROLL_BACKWARD" value="11" enum="AccessibilityAction">
<constant name="ACTION_SCROLL_BACKWARD" value="11" enum="AccessibilityAction" deprecated="Use [AccessibilityServer] instead.">
Scroll backward action, callback argument is not set.
</constant>
<constant name="ACTION_SCROLL_DOWN" value="12" enum="AccessibilityAction">
<constant name="ACTION_SCROLL_DOWN" value="12" enum="AccessibilityAction" deprecated="Use [AccessibilityServer] instead.">
Scroll down action, callback argument is set to [enum AccessibilityScrollUnit].
</constant>
<constant name="ACTION_SCROLL_FORWARD" value="13" enum="AccessibilityAction">
<constant name="ACTION_SCROLL_FORWARD" value="13" enum="AccessibilityAction" deprecated="Use [AccessibilityServer] instead.">
Scroll forward action, callback argument is not set.
</constant>
<constant name="ACTION_SCROLL_LEFT" value="14" enum="AccessibilityAction">
<constant name="ACTION_SCROLL_LEFT" value="14" enum="AccessibilityAction" deprecated="Use [AccessibilityServer] instead.">
Scroll left action, callback argument is set to [enum AccessibilityScrollUnit].
</constant>
<constant name="ACTION_SCROLL_RIGHT" value="15" enum="AccessibilityAction">
<constant name="ACTION_SCROLL_RIGHT" value="15" enum="AccessibilityAction" deprecated="Use [AccessibilityServer] instead.">
Scroll right action, callback argument is set to [enum AccessibilityScrollUnit].
</constant>
<constant name="ACTION_SCROLL_UP" value="16" enum="AccessibilityAction">
<constant name="ACTION_SCROLL_UP" value="16" enum="AccessibilityAction" deprecated="Use [AccessibilityServer] instead.">
Scroll up action, callback argument is set to [enum AccessibilityScrollUnit].
</constant>
<constant name="ACTION_SCROLL_INTO_VIEW" value="17" enum="AccessibilityAction">
<constant name="ACTION_SCROLL_INTO_VIEW" value="17" enum="AccessibilityAction" deprecated="Use [AccessibilityServer] instead.">
Scroll into view action, callback argument is set to [enum AccessibilityScrollHint].
</constant>
<constant name="ACTION_SCROLL_TO_POINT" value="18" enum="AccessibilityAction">
<constant name="ACTION_SCROLL_TO_POINT" value="18" enum="AccessibilityAction" deprecated="Use [AccessibilityServer] instead.">
Scroll to point action, callback argument is set to [Vector2] with the relative point coordinates.
</constant>
<constant name="ACTION_SET_SCROLL_OFFSET" value="19" enum="AccessibilityAction">
<constant name="ACTION_SET_SCROLL_OFFSET" value="19" enum="AccessibilityAction" deprecated="Use [AccessibilityServer] instead.">
Set scroll offset action, callback argument is set to [Vector2] with the scroll offset.
</constant>
<constant name="ACTION_SET_VALUE" value="20" enum="AccessibilityAction">
<constant name="ACTION_SET_VALUE" value="20" enum="AccessibilityAction" deprecated="Use [AccessibilityServer] instead.">
Set value action, callback argument is set to [String] or number with the new value.
</constant>
<constant name="ACTION_SHOW_CONTEXT_MENU" value="21" enum="AccessibilityAction">
<constant name="ACTION_SHOW_CONTEXT_MENU" value="21" enum="AccessibilityAction" deprecated="Use [AccessibilityServer] instead.">
Show context menu action, callback argument is not set.
</constant>
<constant name="ACTION_CUSTOM" value="22" enum="AccessibilityAction">
<constant name="ACTION_CUSTOM" value="22" enum="AccessibilityAction" deprecated="Use [AccessibilityServer] instead.">
Custom action, callback argument is set to the integer action ID.
</constant>
<constant name="LIVE_OFF" value="0" enum="AccessibilityLiveMode">
<constant name="LIVE_OFF" value="0" enum="AccessibilityLiveMode" deprecated="Use [AccessibilityServer] instead.">
Indicates that updates to the live region should not be presented.
</constant>
<constant name="LIVE_POLITE" value="1" enum="AccessibilityLiveMode">
<constant name="LIVE_POLITE" value="1" enum="AccessibilityLiveMode" deprecated="Use [AccessibilityServer] instead.">
Indicates that updates to the live region should be presented at the next opportunity (for example at the end of speaking the current sentence).
</constant>
<constant name="LIVE_ASSERTIVE" value="2" enum="AccessibilityLiveMode">
<constant name="LIVE_ASSERTIVE" value="2" enum="AccessibilityLiveMode" deprecated="Use [AccessibilityServer] instead.">
Indicates that updates to the live region have the highest priority and should be presented immediately.
</constant>
<constant name="SCROLL_UNIT_ITEM" value="0" enum="AccessibilityScrollUnit">
<constant name="SCROLL_UNIT_ITEM" value="0" enum="AccessibilityScrollUnit" deprecated="Use [AccessibilityServer] instead.">
The amount by which to scroll. A single item of a list, line of text.
</constant>
<constant name="SCROLL_UNIT_PAGE" value="1" enum="AccessibilityScrollUnit">
<constant name="SCROLL_UNIT_PAGE" value="1" enum="AccessibilityScrollUnit" deprecated="Use [AccessibilityServer] instead.">
The amount by which to scroll. A single page.
</constant>
<constant name="SCROLL_HINT_TOP_LEFT" value="0" enum="AccessibilityScrollHint">
<constant name="SCROLL_HINT_TOP_LEFT" value="0" enum="AccessibilityScrollHint" deprecated="Use [AccessibilityServer] instead.">
A preferred position for the node scrolled into view. Top-left edge of the scroll container.
</constant>
<constant name="SCROLL_HINT_BOTTOM_RIGHT" value="1" enum="AccessibilityScrollHint">
<constant name="SCROLL_HINT_BOTTOM_RIGHT" value="1" enum="AccessibilityScrollHint" deprecated="Use [AccessibilityServer] instead.">
A preferred position for the node scrolled into view. Bottom-right edge of the scroll container.
</constant>
<constant name="SCROLL_HINT_TOP_EDGE" value="2" enum="AccessibilityScrollHint">
<constant name="SCROLL_HINT_TOP_EDGE" value="2" enum="AccessibilityScrollHint" deprecated="Use [AccessibilityServer] instead.">
A preferred position for the node scrolled into view. Top edge of the scroll container.
</constant>
<constant name="SCROLL_HINT_BOTTOM_EDGE" value="3" enum="AccessibilityScrollHint">
<constant name="SCROLL_HINT_BOTTOM_EDGE" value="3" enum="AccessibilityScrollHint" deprecated="Use [AccessibilityServer] instead.">
A preferred position for the node scrolled into view. Bottom edge of the scroll container.
</constant>
<constant name="SCROLL_HINT_LEFT_EDGE" value="4" enum="AccessibilityScrollHint">
<constant name="SCROLL_HINT_LEFT_EDGE" value="4" enum="AccessibilityScrollHint" deprecated="Use [AccessibilityServer] instead.">
A preferred position for the node scrolled into view. Left edge of the scroll container.
</constant>
<constant name="SCROLL_HINT_RIGHT_EDGE" value="5" enum="AccessibilityScrollHint">
<constant name="SCROLL_HINT_RIGHT_EDGE" value="5" enum="AccessibilityScrollHint" deprecated="Use [AccessibilityServer] instead.">
A preferred position for the node scrolled into view. Right edge of the scroll container.
</constant>
<constant name="MOUSE_MODE_VISIBLE" value="0" enum="MouseMode">

View file

@ -272,6 +272,11 @@
</method>
</methods>
<members>
<member name="accessibility/general/accessibility_driver" type="String" setter="" getter="" default="&quot;accesskit&quot;">
Accessibility driver:
-[b]accesskit[/b] (default): AccessKit driver.
-[b]dummy[/b]: Dummy driver, screen reader support is disabled.
</member>
<member name="accessibility/general/accessibility_support" type="int" setter="" getter="" default="0" keywords="screen reader">
Accessibility support mode:
- [b]Auto[/b] ([code]0[/code]): Accessibility support is enabled, but updates to the accessibility information are processed only if an assistive app (such as a screen reader or a Braille display) is active (default).

View file

@ -4,7 +4,7 @@ from misc.utility.scons_hints import *
Import("env")
# Driver source files
env.add_source_files(env.drivers_sources, "accessibility_driver_accesskit.cpp")
env.add_source_files(env.drivers_sources, "accessibility_server_accesskit.cpp")
if env["accesskit_sdk_path"] == "":
if env["platform"] == "windows":

View file

@ -1,203 +0,0 @@
/**************************************************************************/
/* accessibility_driver_accesskit.h */
/**************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
/* https://godotengine.org */
/**************************************************************************/
/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */
/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */
/* */
/* Permission is hereby granted, free of charge, to any person obtaining */
/* a copy of this software and associated documentation files (the */
/* "Software"), to deal in the Software without restriction, including */
/* without limitation the rights to use, copy, modify, merge, publish, */
/* distribute, sublicense, and/or sell copies of the Software, and to */
/* permit persons to whom the Software is furnished to do so, subject to */
/* the following conditions: */
/* */
/* The above copyright notice and this permission notice shall be */
/* included in all copies or substantial portions of the Software. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/**************************************************************************/
#pragma once
#ifdef ACCESSKIT_ENABLED
#include "core/templates/rid_owner.h"
#include "servers/display/display_server.h"
#ifdef ACCESSKIT_DYNAMIC
#ifdef LINUXBSD_ENABLED
#include "drivers/accesskit/dynwrappers/accesskit-so_wrap.h"
#endif
#ifdef MACOS_ENABLED
#include "drivers/accesskit/dynwrappers/accesskit-dylib_wrap.h"
#endif
#ifdef WINDOWS_ENABLED
#include "drivers/accesskit/dynwrappers/accesskit-dll_wrap.h"
#endif
#else
#include <accesskit.h>
#endif
class AccessibilityDriverAccessKit : public AccessibilityDriver {
static AccessibilityDriverAccessKit *singleton;
struct AccessibilityElement {
HashMap<accesskit_action, Callable> actions;
DisplayServer::WindowID window_id = DisplayServer::INVALID_WINDOW_ID;
RID parent;
LocalVector<RID> children;
Vector3i run;
Variant meta;
String name;
String name_extra_info;
accesskit_role role = ACCESSKIT_ROLE_UNKNOWN;
accesskit_node *node = nullptr;
};
mutable RID_PtrOwner<AccessibilityElement> rid_owner;
struct WindowData {
// Adapter.
#ifdef WINDOWS_ENABLED
accesskit_windows_subclassing_adapter *adapter = nullptr;
#endif
#ifdef MACOS_ENABLED
accesskit_macos_subclassing_adapter *adapter = nullptr;
#endif
#ifdef LINUXBSD_ENABLED
accesskit_unix_adapter *adapter = nullptr;
#endif
RID root_id;
bool initial_update_completed = false;
HashSet<RID> update;
Callable activate;
Callable deactivate;
};
RID focus;
HashMap<DisplayServer::WindowID, WindowData> windows;
HashMap<DisplayServer::AccessibilityRole, accesskit_role> role_map;
HashMap<DisplayServer::AccessibilityAction, accesskit_action> action_map;
_FORCE_INLINE_ accesskit_role _accessibility_role(DisplayServer::AccessibilityRole p_role) const;
_FORCE_INLINE_ accesskit_action _accessibility_action(DisplayServer::AccessibilityAction p_action) const;
void _free_recursive(WindowData *p_wd, const RID &p_id);
_FORCE_INLINE_ void _ensure_node(const RID &p_id, AccessibilityElement *p_ae);
static void _accessibility_action_callback(struct accesskit_action_request *p_request, void *p_user_data);
static accesskit_tree_update *_accessibility_initial_tree_update_callback(void *p_user_data);
static void _accessibility_deactivation_callback(void *p_user_data);
static accesskit_tree_update *_accessibility_build_tree_update(void *p_user_data);
bool in_accessibility_update = false;
Callable update_cb;
public:
Error init() override;
bool window_create(DisplayServer::WindowID p_window_id, void *p_handle) override;
void window_destroy(DisplayServer::WindowID p_window_id) override;
RID accessibility_create_element(DisplayServer::WindowID p_window_id, DisplayServer::AccessibilityRole p_role) override;
RID accessibility_create_sub_element(const RID &p_parent_rid, DisplayServer::AccessibilityRole p_role, int p_insert_pos = -1) override;
virtual RID accessibility_create_sub_text_edit_elements(const RID &p_parent_rid, const RID &p_shaped_text, float p_min_height, int p_insert_pos = -1, bool p_is_last_line = false) override;
bool accessibility_has_element(const RID &p_id) const override;
void accessibility_free_element(const RID &p_id) override;
void accessibility_element_set_meta(const RID &p_id, const Variant &p_meta) override;
Variant accessibility_element_get_meta(const RID &p_id) const override;
void accessibility_update_if_active(const Callable &p_callable) override;
void accessibility_update_set_focus(const RID &p_id) override;
RID accessibility_get_window_root(DisplayServer::WindowID p_window_id) const override;
void accessibility_set_window_rect(DisplayServer::WindowID p_window_id, const Rect2 &p_rect_out, const Rect2 &p_rect_in) override;
void accessibility_set_window_focused(DisplayServer::WindowID p_window_id, bool p_focused) override;
void accessibility_set_window_callbacks(DisplayServer::WindowID p_window_id, const Callable &p_activate_callable, const Callable &p_deativate_callable) override;
void accessibility_window_activation_completed(DisplayServer::WindowID p_window_id) override;
void accessibility_window_deactivation_completed(DisplayServer::WindowID p_window_id) override;
void accessibility_update_set_role(const RID &p_id, DisplayServer::AccessibilityRole p_role) override;
void accessibility_update_set_name(const RID &p_id, const String &p_name) override;
void accessibility_update_set_extra_info(const RID &p_id, const String &p_name_extra_info) override;
void accessibility_update_set_description(const RID &p_id, const String &p_description) override;
void accessibility_update_set_value(const RID &p_id, const String &p_value) override;
void accessibility_update_set_tooltip(const RID &p_id, const String &p_tooltip) override;
void accessibility_update_set_bounds(const RID &p_id, const Rect2 &p_rect) override;
void accessibility_update_set_transform(const RID &p_id, const Transform2D &p_transform) override;
void accessibility_update_add_child(const RID &p_id, const RID &p_child_id) override;
void accessibility_update_add_related_controls(const RID &p_id, const RID &p_related_id) override;
void accessibility_update_add_related_details(const RID &p_id, const RID &p_related_id) override;
void accessibility_update_add_related_described_by(const RID &p_id, const RID &p_related_id) override;
void accessibility_update_add_related_flow_to(const RID &p_id, const RID &p_related_id) override;
void accessibility_update_add_related_labeled_by(const RID &p_id, const RID &p_related_id) override;
void accessibility_update_add_related_radio_group(const RID &p_id, const RID &p_related_id) override;
void accessibility_update_set_active_descendant(const RID &p_id, const RID &p_other_id) override;
void accessibility_update_set_next_on_line(const RID &p_id, const RID &p_other_id) override;
void accessibility_update_set_previous_on_line(const RID &p_id, const RID &p_other_id) override;
void accessibility_update_set_member_of(const RID &p_id, const RID &p_group_id) override;
void accessibility_update_set_in_page_link_target(const RID &p_id, const RID &p_other_id) override;
void accessibility_update_set_error_message(const RID &p_id, const RID &p_other_id) override;
void accessibility_update_set_live(const RID &p_id, DisplayServer::AccessibilityLiveMode p_live) override;
void accessibility_update_add_action(const RID &p_id, DisplayServer::AccessibilityAction p_action, const Callable &p_callable) override;
void accessibility_update_add_custom_action(const RID &p_id, int p_action_id, const String &p_action_description) override;
void accessibility_update_set_table_row_count(const RID &p_id, int p_count) override;
void accessibility_update_set_table_column_count(const RID &p_id, int p_count) override;
void accessibility_update_set_table_row_index(const RID &p_id, int p_index) override;
void accessibility_update_set_table_column_index(const RID &p_id, int p_index) override;
void accessibility_update_set_table_cell_position(const RID &p_id, int p_row_index, int p_column_index) override;
void accessibility_update_set_table_cell_span(const RID &p_id, int p_row_span, int p_column_span) override;
void accessibility_update_set_list_item_count(const RID &p_id, int p_size) override;
void accessibility_update_set_list_item_index(const RID &p_id, int p_index) override;
void accessibility_update_set_list_item_level(const RID &p_id, int p_level) override;
void accessibility_update_set_list_item_selected(const RID &p_id, bool p_selected) override;
void accessibility_update_set_list_item_expanded(const RID &p_id, bool p_expanded) override;
void accessibility_update_set_popup_type(const RID &p_id, DisplayServer::AccessibilityPopupType p_popup) override;
void accessibility_update_set_checked(const RID &p_id, bool p_checekd) override;
void accessibility_update_set_num_value(const RID &p_id, double p_position) override;
void accessibility_update_set_num_range(const RID &p_id, double p_min, double p_max) override;
void accessibility_update_set_num_step(const RID &p_id, double p_step) override;
void accessibility_update_set_num_jump(const RID &p_id, double p_jump) override;
void accessibility_update_set_scroll_x(const RID &p_id, double p_position) override;
void accessibility_update_set_scroll_x_range(const RID &p_id, double p_min, double p_max) override;
void accessibility_update_set_scroll_y(const RID &p_id, double p_position) override;
void accessibility_update_set_scroll_y_range(const RID &p_id, double p_min, double p_max) override;
void accessibility_update_set_text_decorations(const RID &p_id, bool p_underline, bool p_strikethrough, bool p_overline) override;
void accessibility_update_set_text_align(const RID &p_id, HorizontalAlignment p_align) override;
void accessibility_update_set_text_selection(const RID &p_id, const RID &p_text_start_id, int p_start_char, const RID &p_text_end_id, int p_end_char) override;
void accessibility_update_set_flag(const RID &p_id, DisplayServer::AccessibilityFlags p_flag, bool p_value) override;
void accessibility_update_set_classname(const RID &p_id, const String &p_classname) override;
void accessibility_update_set_placeholder(const RID &p_id, const String &p_placeholder) override;
void accessibility_update_set_language(const RID &p_id, const String &p_language) override;
void accessibility_update_set_text_orientation(const RID &p_id, bool p_vertical) override;
void accessibility_update_set_list_orientation(const RID &p_id, bool p_vertical) override;
void accessibility_update_set_shortcut(const RID &p_id, const String &p_shortcut) override;
void accessibility_update_set_url(const RID &p_id, const String &p_url) override;
void accessibility_update_set_role_description(const RID &p_id, const String &p_description) override;
void accessibility_update_set_state_description(const RID &p_id, const String &p_description) override;
void accessibility_update_set_color_value(const RID &p_id, const Color &p_color) override;
void accessibility_update_set_background_color(const RID &p_id, const Color &p_color) override;
void accessibility_update_set_foreground_color(const RID &p_id, const Color &p_color) override;
AccessibilityDriverAccessKit();
~AccessibilityDriverAccessKit();
};
#endif // ACCESSKIT_ENABLED

View file

@ -0,0 +1,212 @@
/**************************************************************************/
/* accessibility_server_accesskit.h */
/**************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
/* https://godotengine.org */
/**************************************************************************/
/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */
/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */
/* */
/* Permission is hereby granted, free of charge, to any person obtaining */
/* a copy of this software and associated documentation files (the */
/* "Software"), to deal in the Software without restriction, including */
/* without limitation the rights to use, copy, modify, merge, publish, */
/* distribute, sublicense, and/or sell copies of the Software, and to */
/* permit persons to whom the Software is furnished to do so, subject to */
/* the following conditions: */
/* */
/* The above copyright notice and this permission notice shall be */
/* included in all copies or substantial portions of the Software. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/**************************************************************************/
#pragma once
#ifdef ACCESSKIT_ENABLED
#include "core/templates/rid_owner.h"
#include "servers/display/accessibility_server.h"
#ifdef ACCESSKIT_DYNAMIC
#ifdef LINUXBSD_ENABLED
#include "drivers/accesskit/dynwrappers/accesskit-so_wrap.h"
#endif
#ifdef MACOS_ENABLED
#include "drivers/accesskit/dynwrappers/accesskit-dylib_wrap.h"
#endif
#ifdef WINDOWS_ENABLED
#include "drivers/accesskit/dynwrappers/accesskit-dll_wrap.h"
#endif
#else
#include <accesskit.h>
#endif
class AccessibilityServerAccessKit : public AccessibilityServer {
GDSOFTCLASS(AccessibilityServerAccessKit, AccessibilityServer);
static AccessibilityServer *create_func(Error &r_error);
struct AccessibilityElement {
HashMap<accesskit_action, Callable> actions;
DisplayServer::WindowID window_id = DisplayServer::INVALID_WINDOW_ID;
RID parent;
LocalVector<RID> children;
Vector3i run;
Variant meta;
String name;
String name_extra_info;
Variant value;
int64_t flags = 0;
accesskit_role role = ACCESSKIT_ROLE_UNKNOWN;
accesskit_node *node = nullptr;
};
mutable RID_PtrOwner<AccessibilityElement> rid_owner;
struct WindowData {
// Adapter.
#ifdef WINDOWS_ENABLED
accesskit_windows_subclassing_adapter *adapter = nullptr;
#endif
#ifdef MACOS_ENABLED
accesskit_macos_subclassing_adapter *adapter = nullptr;
#endif
#ifdef LINUXBSD_ENABLED
accesskit_unix_adapter *adapter = nullptr;
#endif
RID root_id;
bool initial_update_completed = false;
HashSet<RID> update;
Callable activate;
Callable deactivate;
bool activated = false;
};
RID focus;
HashMap<DisplayServer::WindowID, WindowData> windows;
HashMap<AccessibilityServerEnums::AccessibilityRole, accesskit_role> role_map;
HashMap<AccessibilityServerEnums::AccessibilityAction, accesskit_action> action_map;
_FORCE_INLINE_ accesskit_role _accessibility_role(AccessibilityServerEnums::AccessibilityRole p_role) const;
_FORCE_INLINE_ accesskit_action _accessibility_action(AccessibilityServerEnums::AccessibilityAction p_action) const;
void _free_recursive(WindowData *p_wd, const RID &p_id);
_FORCE_INLINE_ void _ensure_node(const RID &p_id, AccessibilityElement *p_ae);
static void _accessibility_action_callback(struct accesskit_action_request *p_request, void *p_user_data);
static accesskit_tree_update *_accessibility_initial_tree_update_callback(void *p_user_data);
static void _accessibility_deactivation_callback(void *p_user_data);
static accesskit_tree_update *_accessibility_build_tree_update(void *p_user_data);
bool in_accessibility_update = false;
Callable update_cb;
public:
bool is_supported() const override { return true; }
bool window_create(DisplayServer::WindowID p_window_id, void *p_handle) override;
void window_destroy(DisplayServer::WindowID p_window_id) override;
RID create_element(DisplayServer::WindowID p_window_id, AccessibilityServerEnums::AccessibilityRole p_role) override;
RID create_sub_element(const RID &p_parent_rid, AccessibilityServerEnums::AccessibilityRole p_role, int p_insert_pos = -1) override;
virtual RID create_sub_text_edit_elements(const RID &p_parent_rid, const RID &p_shaped_text, float p_min_height, int p_insert_pos = -1, bool p_is_last_line = false) override;
bool has_element(const RID &p_id) const override;
void free_element(const RID &p_id) override;
void element_set_meta(const RID &p_id, const Variant &p_meta) override;
Variant element_get_meta(const RID &p_id) const override;
void update_if_active(const Callable &p_callable) override;
void update_set_focus(const RID &p_id) override;
RID get_window_root(DisplayServer::WindowID p_window_id) const override;
void set_window_rect(DisplayServer::WindowID p_window_id, const Rect2 &p_rect_out, const Rect2 &p_rect_in) override;
void set_window_focused(DisplayServer::WindowID p_window_id, bool p_focused) override;
void set_window_callbacks(DisplayServer::WindowID p_window_id, const Callable &p_activate_callable, const Callable &p_deativate_callable) override;
void window_activation_completed(DisplayServer::WindowID p_window_id) override;
void window_deactivation_completed(DisplayServer::WindowID p_window_id) override;
void update_set_role(const RID &p_id, AccessibilityServerEnums::AccessibilityRole p_role) override;
void update_set_name(const RID &p_id, const String &p_name) override;
void update_set_braille_label(const RID &p_id, const String &p_name) override;
void update_set_braille_role_description(const RID &p_id, const String &p_description) override;
void update_set_extra_info(const RID &p_id, const String &p_name_extra_info) override;
void update_set_description(const RID &p_id, const String &p_description) override;
void update_set_value(const RID &p_id, const String &p_value) override;
void update_set_tooltip(const RID &p_id, const String &p_tooltip) override;
void update_set_bounds(const RID &p_id, const Rect2 &p_rect) override;
void update_set_transform(const RID &p_id, const Transform2D &p_transform) override;
void update_add_child(const RID &p_id, const RID &p_child_id) override;
void update_add_related_controls(const RID &p_id, const RID &p_related_id) override;
void update_add_related_details(const RID &p_id, const RID &p_related_id) override;
void update_add_related_described_by(const RID &p_id, const RID &p_related_id) override;
void update_add_related_flow_to(const RID &p_id, const RID &p_related_id) override;
void update_add_related_labeled_by(const RID &p_id, const RID &p_related_id) override;
void update_add_related_radio_group(const RID &p_id, const RID &p_related_id) override;
void update_set_active_descendant(const RID &p_id, const RID &p_other_id) override;
void update_set_next_on_line(const RID &p_id, const RID &p_other_id) override;
void update_set_previous_on_line(const RID &p_id, const RID &p_other_id) override;
void update_set_member_of(const RID &p_id, const RID &p_group_id) override;
void update_set_in_page_link_target(const RID &p_id, const RID &p_other_id) override;
void update_set_error_message(const RID &p_id, const RID &p_other_id) override;
void update_set_live(const RID &p_id, AccessibilityServerEnums::AccessibilityLiveMode p_live) override;
void update_add_action(const RID &p_id, AccessibilityServerEnums::AccessibilityAction p_action, const Callable &p_callable) override;
void update_add_custom_action(const RID &p_id, int p_action_id, const String &p_action_description) override;
void update_set_table_row_count(const RID &p_id, int p_count) override;
void update_set_table_column_count(const RID &p_id, int p_count) override;
void update_set_table_row_index(const RID &p_id, int p_index) override;
void update_set_table_column_index(const RID &p_id, int p_index) override;
void update_set_table_cell_position(const RID &p_id, int p_row_index, int p_column_index) override;
void update_set_table_cell_span(const RID &p_id, int p_row_span, int p_column_span) override;
void update_set_list_item_count(const RID &p_id, int p_size) override;
void update_set_list_item_index(const RID &p_id, int p_index) override;
void update_set_list_item_level(const RID &p_id, int p_level) override;
void update_set_list_item_selected(const RID &p_id, bool p_selected) override;
void update_set_list_item_expanded(const RID &p_id, bool p_expanded) override;
void update_set_popup_type(const RID &p_id, AccessibilityServerEnums::AccessibilityPopupType p_popup) override;
void update_set_checked(const RID &p_id, bool p_checekd) override;
void update_set_num_value(const RID &p_id, double p_position) override;
void update_set_num_range(const RID &p_id, double p_min, double p_max) override;
void update_set_num_step(const RID &p_id, double p_step) override;
void update_set_num_jump(const RID &p_id, double p_jump) override;
void update_set_scroll_x(const RID &p_id, double p_position) override;
void update_set_scroll_x_range(const RID &p_id, double p_min, double p_max) override;
void update_set_scroll_y(const RID &p_id, double p_position) override;
void update_set_scroll_y_range(const RID &p_id, double p_min, double p_max) override;
void update_set_text_decorations(const RID &p_id, bool p_underline, bool p_strikethrough, bool p_overline, const Color &p_color) override;
void update_set_text_align(const RID &p_id, HorizontalAlignment p_align) override;
void update_set_text_selection(const RID &p_id, const RID &p_text_start_id, int p_start_char, const RID &p_text_end_id, int p_end_char) override;
void update_set_flag(const RID &p_id, AccessibilityServerEnums::AccessibilityFlags p_flag, bool p_value) override;
void update_set_classname(const RID &p_id, const String &p_classname) override;
void update_set_placeholder(const RID &p_id, const String &p_placeholder) override;
void update_set_language(const RID &p_id, const String &p_language) override;
void update_set_text_orientation(const RID &p_id, bool p_vertical) override;
void update_set_list_orientation(const RID &p_id, bool p_vertical) override;
void update_set_shortcut(const RID &p_id, const String &p_shortcut) override;
void update_set_url(const RID &p_id, const String &p_url) override;
void update_set_role_description(const RID &p_id, const String &p_description) override;
void update_set_state_description(const RID &p_id, const String &p_description) override;
void update_set_color_value(const RID &p_id, const Color &p_color) override;
void update_set_background_color(const RID &p_id, const Color &p_color) override;
void update_set_foreground_color(const RID &p_id, const Color &p_color) override;
static void register_create_func();
AccessibilityServerAccessKit();
~AccessibilityServerAccessKit();
};
#endif // ACCESSKIT_ENABLED

View file

@ -33,10 +33,18 @@
#include "drivers/png/image_loader_png.h"
#include "drivers/png/resource_saver_png.h"
#ifdef ACCESSKIT_ENABLED
#include "drivers/accesskit/accessibility_server_accesskit.h"
#endif
static Ref<ImageLoaderPNG> image_loader_png;
static Ref<ResourceSaverPNG> resource_saver_png;
void register_core_driver_types() {
#ifdef ACCESSKIT_ENABLED
AccessibilityServerAccessKit::register_create_func();
#endif
image_loader_png.instantiate();
ImageLoader::add_image_format_loader(image_loader_png);

View file

@ -35,6 +35,7 @@
#include "editor/editor_data.h"
#include "editor/plugins/editor_plugin.h"
#include "editor/settings/editor_folding.h"
#include "servers/display/display_server.h"
typedef void (*EditorNodeInitCallback)();
typedef void (*EditorPluginInitializeCallback)();

View file

@ -38,6 +38,7 @@
#include "scene/gui/label.h"
#include "scene/gui/panel_container.h"
#include "scene/resources/style_box_flat.h"
#include "servers/display/display_server.h"
EditorToaster *EditorToaster::singleton = nullptr;

View file

@ -32,6 +32,7 @@
#include "core/os/time.h"
#include "core/version.h"
#include "servers/display/display_server.h"
String _get_version_string(EditorVersionButton::VersionFormat p_format) {
String main;

View file

@ -39,6 +39,7 @@
#include "scene/gui/color_rect.h"
#include "scene/gui/texture_rect.h"
#include "scene/resources/style_box_flat.h"
#include "servers/display/display_server.h"
void TouchActionsPanel::_notification(int p_what) {
switch (p_what) {

View file

@ -63,6 +63,7 @@
#include "scene/resources/packed_scene.h"
#include "scene/resources/style_box_flat.h"
#include "scene/scene_string_names.h"
#include "servers/display/accessibility_server.h"
#include "servers/rendering/rendering_server.h"
void EditorInspectorActionButton::_notification(int p_what) {
@ -294,18 +295,18 @@ void EditorProperty::_notification(int p_what) {
RID ae = get_accessibility_element();
ERR_FAIL_COND(ae.is_null());
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_BUTTON);
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_BUTTON);
DisplayServer::get_singleton()->accessibility_update_set_name(ae, vformat(TTR("Property: %s"), label));
DisplayServer::get_singleton()->accessibility_update_set_value(ae, vformat(TTR("Property: %s"), label));
AccessibilityServer::get_singleton()->update_set_name(ae, vformat(TTR("Property: %s"), label));
AccessibilityServer::get_singleton()->update_set_value(ae, vformat(TTR("Property: %s"), label));
DisplayServer::get_singleton()->accessibility_update_set_popup_type(ae, DisplayServer::AccessibilityPopupType::POPUP_MENU);
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_SHOW_CONTEXT_MENU, callable_mp(this, &EditorProperty::_accessibility_action_menu));
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_CLICK, callable_mp(this, &EditorProperty::_accessibility_action_click));
AccessibilityServer::get_singleton()->update_set_popup_type(ae, AccessibilityServerEnums::AccessibilityPopupType::POPUP_MENU);
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_SHOW_CONTEXT_MENU, callable_mp(this, &EditorProperty::_accessibility_action_menu));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_CLICK, callable_mp(this, &EditorProperty::_accessibility_action_click));
DisplayServer::get_singleton()->accessibility_update_set_flag(ae, DisplayServer::AccessibilityFlags::FLAG_READONLY, read_only);
AccessibilityServer::get_singleton()->update_set_flag(ae, AccessibilityServerEnums::AccessibilityFlags::FLAG_READONLY, read_only);
if (checkable) {
DisplayServer::get_singleton()->accessibility_update_set_checked(ae, checked);
AccessibilityServer::get_singleton()->update_set_checked(ae, checked);
}
} break;
@ -1740,13 +1741,13 @@ void EditorInspectorCategory::_notification(int p_what) {
RID ae = get_accessibility_element();
ERR_FAIL_COND(ae.is_null());
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_BUTTON);
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_BUTTON);
DisplayServer::get_singleton()->accessibility_update_set_name(ae, vformat(TTR("Category: %s"), label));
DisplayServer::get_singleton()->accessibility_update_set_value(ae, vformat(TTR("Category: %s"), label));
AccessibilityServer::get_singleton()->update_set_name(ae, vformat(TTR("Category: %s"), label));
AccessibilityServer::get_singleton()->update_set_value(ae, vformat(TTR("Category: %s"), label));
DisplayServer::get_singleton()->accessibility_update_set_popup_type(ae, DisplayServer::AccessibilityPopupType::POPUP_MENU);
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_SHOW_CONTEXT_MENU, callable_mp(this, &EditorInspectorCategory::_accessibility_action_menu));
AccessibilityServer::get_singleton()->update_set_popup_type(ae, AccessibilityServerEnums::AccessibilityPopupType::POPUP_MENU);
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_SHOW_CONTEXT_MENU, callable_mp(this, &EditorInspectorCategory::_accessibility_action_menu));
} break;
case NOTIFICATION_TRANSLATION_CHANGED: {
@ -2135,12 +2136,12 @@ void EditorInspectorSection::_notification(int p_what) {
RID ae = get_accessibility_element();
ERR_FAIL_COND(ae.is_null());
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_BUTTON);
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_BUTTON);
DisplayServer::get_singleton()->accessibility_update_set_name(ae, vformat(TTR("Section: %s"), label));
DisplayServer::get_singleton()->accessibility_update_set_value(ae, vformat(TTR("Section: %s"), label));
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_COLLAPSE, callable_mp(this, &EditorInspectorSection::_accessibility_action_collapse));
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_EXPAND, callable_mp(this, &EditorInspectorSection::_accessibility_action_expand));
AccessibilityServer::get_singleton()->update_set_name(ae, vformat(TTR("Section: %s"), label));
AccessibilityServer::get_singleton()->update_set_value(ae, vformat(TTR("Section: %s"), label));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_COLLAPSE, callable_mp(this, &EditorInspectorSection::_accessibility_action_collapse));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_EXPAND, callable_mp(this, &EditorInspectorSection::_accessibility_action_expand));
} break;
case NOTIFICATION_THEME_CHANGED: {
@ -3536,13 +3537,13 @@ void ArrayPanelContainer::_notification(int p_what) {
RID ae = get_accessibility_element();
ERR_FAIL_COND(ae.is_null());
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_BUTTON);
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_BUTTON);
DisplayServer::get_singleton()->accessibility_update_set_name(ae, get_meta("text"));
DisplayServer::get_singleton()->accessibility_update_set_value(ae, get_meta("text"));
AccessibilityServer::get_singleton()->update_set_name(ae, get_meta("text"));
AccessibilityServer::get_singleton()->update_set_value(ae, get_meta("text"));
DisplayServer::get_singleton()->accessibility_update_set_popup_type(ae, DisplayServer::AccessibilityPopupType::POPUP_MENU);
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_SHOW_CONTEXT_MENU, callable_mp(this, &ArrayPanelContainer::_accessibility_action_menu));
AccessibilityServer::get_singleton()->update_set_popup_type(ae, AccessibilityServerEnums::AccessibilityPopupType::POPUP_MENU);
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_SHOW_CONTEXT_MENU, callable_mp(this, &ArrayPanelContainer::_accessibility_action_menu));
} break;
}
}
@ -3557,8 +3558,8 @@ void EditorInspectorArray::_notification(int p_what) {
RID ae = get_accessibility_element();
ERR_FAIL_COND(ae.is_null());
DisplayServer::get_singleton()->accessibility_update_set_name(ae, vformat(TTR("Array: %s"), get_label()));
DisplayServer::get_singleton()->accessibility_update_set_value(ae, vformat(TTR("Array: %s"), get_label()));
AccessibilityServer::get_singleton()->update_set_name(ae, vformat(TTR("Array: %s"), get_label()));
AccessibilityServer::get_singleton()->update_set_value(ae, vformat(TTR("Array: %s"), get_label()));
} break;
case NOTIFICATION_THEME_CHANGED: {

View file

@ -189,20 +189,20 @@ void EngineUpdateLabel::_set_status(UpdateStatus p_status) {
} else {
_set_message(TTR("Update checks disabled."), theme_cache.disabled_color);
}
set_accessibility_live(DisplayServer::AccessibilityLiveMode::LIVE_OFF);
set_accessibility_live(AccessibilityServerEnums::AccessibilityLiveMode::LIVE_OFF);
set_tooltip_text("");
break;
}
case UpdateStatus::ERROR: {
set_disabled(false);
set_accessibility_live(DisplayServer::AccessibilityLiveMode::LIVE_POLITE);
set_accessibility_live(AccessibilityServerEnums::AccessibilityLiveMode::LIVE_POLITE);
set_tooltip_text(TTR("An error has occurred. Click to try again."));
} break;
case UpdateStatus::UPDATE_AVAILABLE: {
set_disabled(false);
set_accessibility_live(DisplayServer::AccessibilityLiveMode::LIVE_POLITE);
set_accessibility_live(AccessibilityServerEnums::AccessibilityLiveMode::LIVE_POLITE);
set_tooltip_text(TTR("Click to open download page."));
} break;

View file

@ -1095,7 +1095,7 @@ ProjectDialog::ProjectDialog() {
msg = memnew(Label);
msg->set_focus_mode(Control::FOCUS_ACCESSIBILITY);
msg->set_accessibility_live(DisplayServer::LIVE_POLITE);
msg->set_accessibility_live(AccessibilityServerEnums::LIVE_POLITE);
msg->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_CENTER);
msg->set_custom_minimum_size(Size2(200, 0) * EDSCALE);
msg->set_autowrap_mode(TextServer::AUTOWRAP_WORD_SMART);

View file

@ -51,6 +51,7 @@
#include "scene/gui/texture_button.h"
#include "scene/gui/texture_rect.h"
#include "scene/resources/image_texture.h"
#include "servers/display/accessibility_server.h"
void ProjectListItemControl::_notification(int p_what) {
switch (p_what) {
@ -107,21 +108,21 @@ void ProjectListItemControl::_notification(int p_what) {
RID ae = get_accessibility_element();
ERR_FAIL_COND(ae.is_null());
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_LIST_BOX_OPTION);
DisplayServer::get_singleton()->accessibility_update_set_name(ae, TTR("Project") + " " + project_title->get_text());
DisplayServer::get_singleton()->accessibility_update_set_value(ae, project_title->get_text());
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_LIST_BOX_OPTION);
AccessibilityServer::get_singleton()->update_set_name(ae, TTR("Project") + " " + project_title->get_text());
AccessibilityServer::get_singleton()->update_set_value(ae, project_title->get_text());
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_CLICK, callable_mp(this, &ProjectListItemControl::_accessibility_action_open));
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_SCROLL_INTO_VIEW, callable_mp(this, &ProjectListItemControl::_accessibility_action_scroll_into_view));
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_FOCUS, callable_mp(this, &ProjectListItemControl::_accessibility_action_focus));
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_BLUR, callable_mp(this, &ProjectListItemControl::_accessibility_action_blur));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_CLICK, callable_mp(this, &ProjectListItemControl::_accessibility_action_open));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_SCROLL_INTO_VIEW, callable_mp(this, &ProjectListItemControl::_accessibility_action_scroll_into_view));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_FOCUS, callable_mp(this, &ProjectListItemControl::_accessibility_action_focus));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_BLUR, callable_mp(this, &ProjectListItemControl::_accessibility_action_blur));
ProjectList *pl = get_list();
if (pl) {
DisplayServer::get_singleton()->accessibility_update_set_list_item_index(ae, pl->get_index(this));
AccessibilityServer::get_singleton()->update_set_list_item_index(ae, pl->get_index(this));
}
DisplayServer::get_singleton()->accessibility_update_set_list_item_level(ae, 0);
DisplayServer::get_singleton()->accessibility_update_set_list_item_selected(ae, is_selected);
AccessibilityServer::get_singleton()->update_set_list_item_level(ae, 0);
AccessibilityServer::get_singleton()->update_set_list_item_selected(ae, is_selected);
} break;
case NOTIFICATION_FOCUS_ENTER: {
@ -536,9 +537,9 @@ void ProjectList::_notification(int p_what) {
RID ae = get_accessibility_element();
ERR_FAIL_COND(ae.is_null());
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_LIST_BOX);
DisplayServer::get_singleton()->accessibility_update_set_list_item_count(ae, _projects.size());
DisplayServer::get_singleton()->accessibility_update_set_flag(ae, DisplayServer::AccessibilityFlags::FLAG_MULTISELECTABLE, false);
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_LIST_BOX);
AccessibilityServer::get_singleton()->update_set_list_item_count(ae, _projects.size());
AccessibilityServer::get_singleton()->update_set_flag(ae, AccessibilityServerEnums::AccessibilityFlags::FLAG_MULTISELECTABLE, false);
}
}
}

View file

@ -31,6 +31,7 @@
#pragma once
#include "core/io/config_file.h"
#include "core/os/os.h"
#include "core/os/time.h"
#include "scene/gui/box_container.h"
#include "scene/gui/scroll_container.h"

View file

@ -1545,7 +1545,7 @@ ProjectManager::ProjectManager() {
hb->add_child(scan_btn);
loading_label = memnew(Label(TTRC("Loading, please wait...")));
loading_label->set_accessibility_live(DisplayServer::AccessibilityLiveMode::LIVE_ASSERTIVE);
loading_label->set_accessibility_live(AccessibilityServerEnums::AccessibilityLiveMode::LIVE_ASSERTIVE);
loading_label->set_h_size_flags(Control::SIZE_EXPAND_FILL);
loading_label->hide();
hb->add_child(loading_label);

View file

@ -30,6 +30,7 @@
#pragma once
#include "core/os/os.h"
#include "scene/gui/control.h"
class ScriptEditorDebugger;

View file

@ -33,6 +33,7 @@
#include "core/input/input_map.h"
#include "core/object/class_db.h"
#include "scene/gui/dialogs.h"
#include "servers/display/accessibility_server.h"
// Maps to 2*axis if value is neg, or 2*axis+1 if value is pos.
static const char *_joy_axis_descriptions[(size_t)JoyAxis::MAX * 2] = {
@ -234,7 +235,7 @@ void EventListenerLineEdit::_notification(int p_what) {
RID ae = get_accessibility_element();
ERR_FAIL_COND(ae.is_null());
DisplayServer::get_singleton()->accessibility_update_set_extra_info(ae, vformat(TTR("Listening for Input. Hold %s to release focus."), InputMap::get_singleton()->get_action_description("ui_cancel")));
AccessibilityServer::get_singleton()->update_set_extra_info(ae, vformat(TTR("Listening for Input. Hold %s to release focus."), InputMap::get_singleton()->get_action_description("ui_cancel")));
} break;
case NOTIFICATION_THEME_CHANGED: {

View file

@ -71,6 +71,7 @@
#include "servers/audio/audio_driver_dummy.h"
#include "servers/audio/audio_server.h"
#include "servers/camera/camera_server.h"
#include "servers/display/accessibility_server.h"
#include "servers/display/display_server.h"
#include "servers/movie_writer/movie_writer.h"
#include "servers/register_server_types.h"
@ -175,6 +176,7 @@ static SteamTracker *steam_tracker = nullptr;
// Initialized in setup2()
static AudioServer *audio_server = nullptr;
static CameraServer *camera_server = nullptr;
static AccessibilityServer *accessibility_server = nullptr;
static DisplayServer *display_server = nullptr;
static RenderingServer *rendering_server = nullptr;
static TextServerManager *tsman = nullptr;
@ -203,7 +205,8 @@ static int audio_driver_idx = -1;
// Engine config/tools
static DisplayServer::AccessibilityMode accessibility_mode = DisplayServer::AccessibilityMode::ACCESSIBILITY_AUTO;
static AccessibilityServerEnums::AccessibilityMode accessibility_mode = AccessibilityServerEnums::AccessibilityMode::ACCESSIBILITY_AUTO;
static String accessibility_driver_name;
static bool accessibility_mode_set = false;
static bool single_window = false;
static bool editor = false;
@ -408,6 +411,7 @@ void finalize_display() {
memdelete(rendering_server);
memdelete(display_server);
memdelete(accessibility_server);
}
void initialize_theme_db() {
@ -634,6 +638,7 @@ void Main::print_help(const char *p_binary) {
#endif
print_help_option("--wid <window_id>", "Request parented to window.\n");
print_help_option("--accessibility <mode>", "Select accessibility mode ['auto' (when screen reader is running, default), 'always', 'disabled'].\n");
print_help_option("--accessibility-driver <driver>", "Select accessibility driver ['accesskit', 'dummy'].\n");
print_help_title("Debug options");
print_help_option("-d, --debug", "Debug (local stdout debugger).\n");
@ -1364,13 +1369,13 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
if (N) {
String string = N->get();
if (string == "auto") {
accessibility_mode = DisplayServer::AccessibilityMode::ACCESSIBILITY_AUTO;
accessibility_mode = AccessibilityServerEnums::AccessibilityMode::ACCESSIBILITY_AUTO;
accessibility_mode_set = true;
} else if (string == "always") {
accessibility_mode = DisplayServer::AccessibilityMode::ACCESSIBILITY_ALWAYS;
accessibility_mode = AccessibilityServerEnums::AccessibilityMode::ACCESSIBILITY_ALWAYS;
accessibility_mode_set = true;
} else if (string == "disabled") {
accessibility_mode = DisplayServer::AccessibilityMode::ACCESSIBILITY_DISABLED;
accessibility_mode = AccessibilityServerEnums::AccessibilityMode::ACCESSIBILITY_DISABLED;
accessibility_mode_set = true;
} else {
OS::get_singleton()->print("Accessibility mode argument not recognized, aborting.\n");
@ -1381,6 +1386,15 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
OS::get_singleton()->print("Missing accessibility mode argument, aborting.\n");
goto error;
}
} else if (arg == "--accessibility-driver") {
if (N) {
String string = N->get();
accessibility_driver_name = string;
N = N->next();
} else {
OS::get_singleton()->print("Missing accessibility driver argument, aborting.\n");
goto error;
}
} else if (arg == "-t" || arg == "--always-on-top") { // force always-on-top window
init_always_on_top = true;
@ -3236,18 +3250,67 @@ Error Main::setup2(bool p_show_boot_logo) {
if (!accessibility_mode_set) {
#ifdef TOOLS_ENABLED
if (editor || project_manager || cmdline_tool) {
accessibility_mode = (DisplayServer::AccessibilityMode)accessibility_mode_editor;
accessibility_mode = (AccessibilityServerEnums::AccessibilityMode)accessibility_mode_editor;
} else {
#else
{
#endif
accessibility_mode = (DisplayServer::AccessibilityMode)GLOBAL_GET("accessibility/general/accessibility_support").operator int64_t();
accessibility_mode = (AccessibilityServerEnums::AccessibilityMode)GLOBAL_GET("accessibility/general/accessibility_support").operator int64_t();
}
}
DisplayServer::accessibility_set_mode(accessibility_mode);
if (accessibility_driver_name.is_empty()) {
if (!editor && !project_manager) {
accessibility_driver_name = GLOBAL_GET("accessibility/general/accessibility_driver");
} else {
accessibility_driver_name = "accesskit";
}
}
if (display_driver == NULL_DISPLAY_DRIVER || display_driver == EMBEDDED_DISPLAY_DRIVER || accessibility_mode == AccessibilityServerEnums::AccessibilityMode::ACCESSIBILITY_DISABLED) {
accessibility_driver_name = "dummy";
}
int accessibility_driver_idx = -1;
if (accessibility_driver_name.is_empty() || accessibility_driver_name == "default") {
accessibility_driver_idx = 0;
} else {
for (int i = 0; i < AccessibilityServer::get_create_function_count(); i++) {
String name = AccessibilityServer::get_create_function_name(i);
if (accessibility_driver_name == name) {
accessibility_driver_idx = i;
break;
}
}
if (accessibility_driver_idx < 0) {
// If the requested driver wasn't found, pick the first entry.
// If all else failed it would be the headless server.
accessibility_driver_idx = 0;
}
}
Error err;
accessibility_server = AccessibilityServer::create(accessibility_driver_idx, err);
if (err != OK || accessibility_server == nullptr) {
String last_name = AccessibilityServer::get_create_function_name(accessibility_driver_idx);
for (int i = 0; i < AccessibilityServer::get_create_function_count() - 1; i++) {
if (i == accessibility_driver_idx) {
continue; // Don't try the same twice.
}
String name = AccessibilityServer::get_create_function_name(i);
WARN_PRINT(vformat("Accessibility driver %s failed, falling back to %s.", last_name, name));
accessibility_server = AccessibilityServer::create(i, err);
if (err == OK && accessibility_server != nullptr) {
break;
}
}
}
if (accessibility_server) {
accessibility_server->set_mode(accessibility_mode);
}
String rendering_driver = OS::get_singleton()->get_current_rendering_driver_name();
Error err;
display_server = DisplayServer::create(display_driver_idx, rendering_driver, window_mode, window_vsync_mode, window_flags, window_position, window_size, init_screen, context, init_embed_parent_window_id, err);
if (err != OK || display_server == nullptr) {
String last_name = DisplayServer::get_create_function_name(display_driver_idx);

View file

@ -0,0 +1,6 @@
GH-116839
---------
Validate extension JSON: Error: Field 'classes/Control/methods/get_accessibility_live/return_value': type changed value in new API, from "enum::DisplayServer.AccessibilityLiveMode" to "enum::AccessibilityServer.AccessibilityLiveMode".
Validate extension JSON: Error: Field 'classes/Control/methods/set_accessibility_live/arguments/0': type changed value in new API, from "enum::DisplayServer.AccessibilityLiveMode" to "enum::AccessibilityServer.AccessibilityLiveMode".
Enum moved to AccessibilityServer. Compatibility methods registered.

View file

@ -43,6 +43,7 @@
#include "core/input/input.h"
#include "core/input/input_event.h"
#include "core/os/main_loop.h"
#include "servers/display/accessibility_server.h"
#include "servers/display/native_menu.h"
#include "servers/rendering/dummy/rasterizer_dummy.h"
#include "servers/rendering/rendering_server.h"
@ -65,10 +66,6 @@
#include "wayland/egl_manager_wayland_gles.h"
#endif
#ifdef ACCESSKIT_ENABLED
#include "drivers/accesskit/accessibility_driver_accesskit.h"
#endif
#ifdef DBUS_ENABLED
#include "freedesktop_at_spi_monitor.h"
#include "freedesktop_portal_desktop.h"
@ -238,11 +235,9 @@ bool DisplayServerWayland::has_feature(Feature p_feature) const {
} break;
#endif
#ifdef ACCESSKIT_ENABLED
case FEATURE_ACCESSIBILITY_SCREEN_READER: {
return (accessibility_driver != nullptr);
return AccessibilityServer::get_singleton()->is_supported();
} break;
#endif
default: {
return false;
@ -747,15 +742,11 @@ DisplayServer::WindowID DisplayServerWayland::create_sub_window(WindowMode p_mod
wd.flags = p_flags;
wd.vsync_mode = p_vsync_mode;
#ifdef ACCESSKIT_ENABLED
if (accessibility_driver && !accessibility_driver->window_create(wd.id, nullptr)) {
if (!AccessibilityServer::get_singleton()->window_create(wd.id, nullptr)) {
if (OS::get_singleton()->is_stdout_verbose()) {
ERR_PRINT("Can't create an accessibility adapter for window, accessibility support disabled!");
}
memdelete(accessibility_driver);
accessibility_driver = nullptr;
}
#endif
// NOTE: Remember to clear its position if this window will be a toplevel. We
// can only know once we show it.
@ -907,11 +898,7 @@ void DisplayServerWayland::delete_sub_window(WindowID p_window_id) {
popup_menu_list.pop_back();
}
#ifdef ACCESSKIT_ENABLED
if (accessibility_driver) {
accessibility_driver->window_destroy(p_window_id);
}
#endif
AccessibilityServer::get_singleton()->window_destroy(p_window_id);
if (wd.visible) {
#ifdef VULKAN_ENABLED
@ -1752,20 +1739,12 @@ void DisplayServerWayland::process_events() {
_send_window_event(winev_msg->event, winev_msg->id);
if (winev_msg->event == WINDOW_EVENT_FOCUS_IN) {
#ifdef ACCESSKIT_ENABLED
if (accessibility_driver) {
accessibility_driver->accessibility_set_window_focused(winev_msg->id, true);
}
#endif
AccessibilityServer::get_singleton()->set_window_focused(winev_msg->id, true);
if (OS::get_singleton()->get_main_loop()) {
OS::get_singleton()->get_main_loop()->notification(MainLoop::NOTIFICATION_APPLICATION_FOCUS_IN);
}
} else if (winev_msg->event == WINDOW_EVENT_FOCUS_OUT) {
#ifdef ACCESSKIT_ENABLED
if (accessibility_driver) {
accessibility_driver->accessibility_set_window_focused(winev_msg->id, false);
}
#endif
AccessibilityServer::get_singleton()->set_window_focused(winev_msg->id, false);
if (OS::get_singleton()->get_main_loop()) {
OS::get_singleton()->get_main_loop()->notification(MainLoop::NOTIFICATION_APPLICATION_FOCUS_OUT);
}
@ -2056,16 +2035,6 @@ DisplayServerWayland::DisplayServerWayland(const String &p_rendering_driver, Win
}
#endif
#ifdef ACCESSKIT_ENABLED
if (accessibility_get_mode() != DisplayServer::AccessibilityMode::ACCESSIBILITY_DISABLED) {
accessibility_driver = memnew(AccessibilityDriverAccessKit);
if (accessibility_driver->init() != OK) {
memdelete(accessibility_driver);
accessibility_driver = nullptr;
}
}
#endif
rendering_driver = p_rendering_driver;
bool driver_found = false;
@ -2243,15 +2212,11 @@ DisplayServerWayland::DisplayServerWayland(const String &p_rendering_driver, Win
wd.rect.size = p_resolution;
wd.title = "Godot";
#ifdef ACCESSKIT_ENABLED
if (accessibility_driver && !accessibility_driver->window_create(wd.id, nullptr)) {
if (!AccessibilityServer::get_singleton()->window_create(wd.id, nullptr)) {
if (OS::get_singleton()->is_stdout_verbose()) {
ERR_PRINT("Can't create an accessibility adapter for window, accessibility support disabled!");
}
memdelete(accessibility_driver);
accessibility_driver = nullptr;
}
#endif
show_window(MAIN_WINDOW_ID);
@ -2321,10 +2286,8 @@ DisplayServerWayland::~DisplayServerWayland() {
if (!window_get_flag(WINDOW_FLAG_POPUP_WM_HINT, id)) {
toplevels.push_back(id);
#ifdef ACCESSKIT_ENABLED
} else if (accessibility_driver) {
accessibility_driver->window_destroy(id);
#endif
} else {
AccessibilityServer::get_singleton()->window_destroy(id);
}
}
@ -2352,12 +2315,6 @@ DisplayServerWayland::~DisplayServerWayland() {
}
#endif
#ifdef ACCESSKIT_ENABLED
if (accessibility_driver) {
memdelete(accessibility_driver);
}
#endif
#ifdef DBUS_ENABLED
if (portal_desktop) {
memdelete(portal_desktop);

View file

@ -45,6 +45,7 @@
#include "drivers/png/png_driver_common.h"
#include "drivers/unix/os_unix.h"
#include "main/main.h"
#include "servers/display/accessibility_server.h"
#include "servers/display/native_menu.h"
#include "servers/rendering/dummy/rasterizer_dummy.h"
@ -81,10 +82,6 @@
#include "drivers/gles3/rasterizer_gles3.h"
#endif
#ifdef ACCESSKIT_ENABLED
#include "drivers/accesskit/accessibility_driver_accesskit.h"
#endif
#ifdef DBUS_ENABLED
#include "freedesktop_at_spi_monitor.h"
#include "freedesktop_portal_desktop.h"
@ -235,11 +232,9 @@ bool DisplayServerX11::has_feature(Feature p_feature) const {
} break;
#endif
#ifdef ACCESSKIT_ENABLED
case FEATURE_ACCESSIBILITY_SCREEN_READER: {
return (accessibility_driver != nullptr);
return AccessibilityServer::get_singleton()->is_supported();
} break;
#endif
default: {
return false;
@ -2109,11 +2104,7 @@ void DisplayServerX11::delete_sub_window(WindowID p_id) {
}
#endif
#ifdef ACCESSKIT_ENABLED
if (accessibility_driver) {
accessibility_driver->window_destroy(p_id);
}
#endif
AccessibilityServer::get_singleton()->window_destroy(p_id);
if (wd.xic) {
XDestroyIC(wd.xic);
@ -5127,11 +5118,7 @@ void DisplayServerX11::process_events() {
static unsigned int focus_order = 0;
wd.focus_order = ++focus_order;
#ifdef ACCESSKIT_ENABLED
if (accessibility_driver) {
accessibility_driver->accessibility_set_window_focused(window_id, true);
}
#endif
AccessibilityServer::get_singleton()->set_window_focused(window_id, true);
_send_window_event(wd, WINDOW_EVENT_FOCUS_IN);
if (mouse_mode_grab) {
@ -5183,11 +5170,8 @@ void DisplayServerX11::process_events() {
wd.focused = false;
Input::get_singleton()->release_pressed_events();
#ifdef ACCESSKIT_ENABLED
if (accessibility_driver) {
accessibility_driver->accessibility_set_window_focused(window_id, false);
}
#endif
AccessibilityServer::get_singleton()->set_window_focused(window_id, false);
_send_window_event(wd, WINDOW_EVENT_FOCUS_OUT);
if (mouse_mode_grab) {
@ -6512,15 +6496,11 @@ DisplayServerX11::WindowID DisplayServerX11::_create_window(WindowMode p_mode, V
wd.xkb_state = xkb_compose_state_new(dead_tbl, XKB_COMPOSE_STATE_NO_FLAGS);
}
#endif
#ifdef ACCESSKIT_ENABLED
if (accessibility_driver && !accessibility_driver->window_create(id, nullptr)) {
if (!AccessibilityServer::get_singleton()->window_create(id, nullptr)) {
if (OS::get_singleton()->is_stdout_verbose()) {
ERR_PRINT("Can't create an accessibility adapter for window, accessibility support disabled!");
}
memdelete(accessibility_driver);
accessibility_driver = nullptr;
}
#endif
// Enable receiving notification when the window is initialized (MapNotify)
// so the focus can be set at the right time.
if (!wd.no_focus && !wd.is_popup) {
@ -7048,16 +7028,6 @@ DisplayServerX11::DisplayServerX11(const String &p_rendering_driver, WindowMode
}
#endif
#ifdef ACCESSKIT_ENABLED
if (accessibility_get_mode() != DisplayServer::AccessibilityMode::ACCESSIBILITY_DISABLED) {
accessibility_driver = memnew(AccessibilityDriverAccessKit);
if (accessibility_driver->init() != OK) {
memdelete(accessibility_driver);
accessibility_driver = nullptr;
}
}
#endif
//!!!!!!!!!!!!!!!!!!!!!!!!!!
//TODO - do Vulkan and OpenGL support checks, driver selection and fallback
rendering_driver = p_rendering_driver;
@ -7466,11 +7436,7 @@ DisplayServerX11::~DisplayServerX11() {
}
#endif
#ifdef ACCESSKIT_ENABLED
if (accessibility_driver) {
accessibility_driver->window_destroy(E.key);
}
#endif
AccessibilityServer::get_singleton()->window_destroy(E.key);
WindowData &wd = E.value;
if (wd.xic) {
@ -7546,11 +7512,7 @@ DisplayServerX11::~DisplayServerX11() {
if (xmbstring) {
memfree(xmbstring);
}
#ifdef ACCESSKIT_ENABLED
if (accessibility_driver) {
memdelete(accessibility_driver);
}
#endif
#ifdef SPEECHD_ENABLED
if (tts) {
memdelete(tts);

View file

@ -61,6 +61,7 @@
#include "drivers/png/png_driver_common.h"
#include "main/main.h"
#include "scene/resources/image_texture.h"
#include "servers/display/accessibility_server.h"
#include "servers/rendering/dummy/rasterizer_dummy.h"
#ifdef TOOLS_ENABLED
@ -77,10 +78,6 @@
#include "servers/rendering/rendering_device.h"
#endif
#if defined(ACCESSKIT_ENABLED)
#include "drivers/accesskit/accessibility_driver_accesskit.h"
#endif
#include <AppKit/AppKit.h>
#import <Carbon/Carbon.h>
#import <Cocoa/Cocoa.h>
@ -141,15 +138,11 @@ DisplayServerMacOS::WindowID DisplayServerMacOS::_create_window(WindowMode p_mod
[wd.window_object setRestorable:NO];
[wd.window_object setColorSpace:[NSColorSpace sRGBColorSpace]];
#ifdef ACCESSKIT_ENABLED
if (accessibility_driver && !accessibility_driver->window_create(id, (__bridge void *)wd.window_object)) {
if (!AccessibilityServer::get_singleton()->window_create(id, (__bridge void *)wd.window_object)) {
if (OS::get_singleton()->is_stdout_verbose()) {
ERR_PRINT("Can't create an accessibility adapter for window, accessibility support disabled!");
}
memdelete(accessibility_driver);
accessibility_driver = nullptr;
}
#endif
if ([wd.window_object respondsToSelector:@selector(setTabbingMode:)]) {
[wd.window_object setTabbingMode:NSWindowTabbingModeDisallowed];
@ -192,11 +185,11 @@ DisplayServerMacOS::WindowID DisplayServerMacOS::_create_window(WindowMode p_mod
}
#endif
Error err = rendering_context->window_create(window_id_counter, &wpd);
#ifdef ACCESSKIT_ENABLED
if (err != OK && accessibility_driver) {
accessibility_driver->window_destroy(id);
if (err != OK) {
AccessibilityServer::get_singleton()->window_destroy(id);
}
#endif
ERR_FAIL_COND_V_MSG(err != OK, INVALID_WINDOW_ID, vformat("Can't create a %s context", rendering_driver));
rendering_context->window_set_size(window_id_counter, p_rect.size.width, p_rect.size.height);
@ -219,11 +212,8 @@ DisplayServerMacOS::WindowID DisplayServerMacOS::_create_window(WindowMode p_mod
}
}
if (gl_failed) {
#ifdef ACCESSKIT_ENABLED
if (accessibility_driver) {
accessibility_driver->window_destroy(id);
}
#endif
AccessibilityServer::get_singleton()->window_destroy(id);
windows.erase(id);
ERR_FAIL_V_MSG(INVALID_WINDOW_ID, "Can't create an OpenGL context.");
}
@ -772,11 +762,8 @@ void DisplayServerMacOS::window_destroy(WindowID p_window) {
rendering_context->window_destroy(p_window);
}
#endif
#ifdef ACCESSKIT_ENABLED
if (accessibility_driver) {
accessibility_driver->window_destroy(p_window);
}
#endif
AccessibilityServer::get_singleton()->window_destroy(p_window);
windows.erase(p_window);
if (last_focused_window == p_window) {
@ -838,11 +825,9 @@ bool DisplayServerMacOS::has_feature(Feature p_feature) const {
case FEATURE_WINDOW_EMBEDDING:
case FEATURE_HDR_OUTPUT:
return true;
#ifdef ACCESSKIT_ENABLED
case FEATURE_ACCESSIBILITY_SCREEN_READER: {
return (accessibility_driver != nullptr);
return AccessibilityServer::get_singleton()->is_supported();
} break;
#endif
default: {
}
}
@ -3660,16 +3645,6 @@ DisplayServerMacOS::DisplayServerMacOS(const String &p_rendering_driver, WindowM
native_menu = memnew(NativeMenuMacOS);
#ifdef ACCESSKIT_ENABLED
if (accessibility_get_mode() != DisplayServer::AccessibilityMode::ACCESSIBILITY_DISABLED) {
accessibility_driver = memnew(AccessibilityDriverAccessKit);
if (accessibility_driver->init() != OK) {
memdelete(accessibility_driver);
accessibility_driver = nullptr;
}
}
#endif
NSMenuItem *menu_item;
NSString *title;
@ -3935,11 +3910,7 @@ DisplayServerMacOS::~DisplayServerMacOS() {
rendering_context = nullptr;
}
#endif
#ifdef ACCESSKIT_ENABLED
if (accessibility_driver) {
memdelete(accessibility_driver);
}
#endif
[NSNotificationCenter.defaultCenter removeObserver:screen_observer];
CGDisplayRemoveReconfigurationCallback(_displays_arrangement_changed, nullptr);

View file

@ -31,6 +31,7 @@
#pragma once
#include "editor/run/embedded_process.h"
#include "servers/display/display_server.h"
class DisplayServerMacOS;
class EmbeddedProcessMacOS;

View file

@ -35,6 +35,8 @@
#import "godot_content_view.h"
#import "godot_window.h"
#include "servers/display/accessibility_server.h"
@implementation GodotWindowDelegate {
DisplayServer::WindowID window_id;
DisplayServerMacOS *ds;
@ -329,9 +331,8 @@
wd.focused = true;
ds->set_last_focused_window(window_id);
#ifdef ACCESSKIT_ENABLED
ds->accessibility_set_window_focused(window_id, true);
#endif
AccessibilityServer::get_singleton()->set_window_focused(window_id, true);
ds->send_window_event(wd, DisplayServerMacOS::WINDOW_EVENT_FOCUS_IN);
}
@ -348,9 +349,8 @@
wd.focused = false;
ds->release_pressed_events();
#ifdef ACCESSKIT_ENABLED
ds->accessibility_set_window_focused(window_id, false);
#endif
AccessibilityServer::get_singleton()->set_window_focused(window_id, false);
ds->send_window_event(wd, DisplayServerMacOS::WINDOW_EVENT_FOCUS_OUT);
}
@ -363,9 +363,8 @@
wd.focused = false;
ds->release_pressed_events();
#ifdef ACCESSKIT_ENABLED
ds->accessibility_set_window_focused(window_id, false);
#endif
AccessibilityServer::get_singleton()->set_window_focused(window_id, false);
ds->send_window_event(wd, DisplayServerMacOS::WINDOW_EVENT_FOCUS_OUT);
}
@ -379,9 +378,8 @@
if ([wd.window_object isKeyWindow]) {
wd.focused = true;
ds->set_last_focused_window(window_id);
#ifdef ACCESSKIT_ENABLED
ds->accessibility_set_window_focused(window_id, true);
#endif
AccessibilityServer::get_singleton()->set_window_focused(window_id, true);
ds->send_window_event(wd, DisplayServerMacOS::WINDOW_EVENT_FOCUS_IN);
}
}

View file

@ -47,6 +47,7 @@
#include "main/main.h"
#include "scene/main/window.h"
#include "scene/resources/texture.h"
#include "servers/display/accessibility_server.h"
#include "servers/rendering/dummy/rasterizer_dummy.h"
#ifdef SDL_ENABLED
@ -64,10 +65,6 @@
#include "drivers/gles3/rasterizer_gles3.h"
#endif
#if defined(ACCESSKIT_ENABLED)
#include "drivers/accesskit/accessibility_driver_accesskit.h"
#endif
#include <avrt.h>
#include <dwmapi.h>
#include <propkey.h>
@ -158,11 +155,9 @@ bool DisplayServerWindows::has_feature(Feature p_feature) const {
return (os_ver.dwBuildNumber >= 19041); // Fully supported on Windows 10 Vibranium R1 (2004)+ only, captured as black rect on older versions.
case FEATURE_EMOJI_AND_SYMBOL_PICKER:
return (os_ver.dwBuildNumber >= 17134); // Windows 10 Redstone 4 (1803)+ only.
#ifdef ACCESSKIT_ENABLED
case FEATURE_ACCESSIBILITY_SCREEN_READER: {
return (accessibility_driver != nullptr);
return AccessibilityServer::get_singleton()->is_supported();
} break;
#endif
default:
return false;
}
@ -5158,15 +5153,11 @@ LRESULT DisplayServerWindows::_handle_early_window_message(HWND hWnd, UINT uMsg,
// Fix this up so we can recognize the remaining messages.
pWindowData->hWnd = hWnd;
#ifdef ACCESSKIT_ENABLED
if (accessibility_driver && !accessibility_driver->window_create(pWindowData->id, (void *)hWnd)) {
if (!AccessibilityServer::get_singleton()->window_create(pWindowData->id, (void *)hWnd)) {
if (OS::get_singleton()->is_stdout_verbose()) {
ERR_PRINT("Can't create an accessibility adapter for window, accessibility support disabled!");
}
memdelete(accessibility_driver);
accessibility_driver = nullptr;
}
#endif
} break;
default: {
// Additional messages during window creation should happen after we fixed
@ -6537,11 +6528,8 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA
} break;
case WM_DESTROY: {
#ifdef ACCESSKIT_ENABLED
if (accessibility_driver) {
accessibility_driver->window_destroy(window_id);
}
#endif
AccessibilityServer::get_singleton()->window_destroy(window_id);
Input::get_singleton()->flush_buffered_events();
if (window_mouseover_id == window_id) {
window_mouseover_id = INVALID_WINDOW_ID;
@ -6595,11 +6583,8 @@ void DisplayServerWindows::_process_activate_event(WindowID p_window_id) {
SetFocus(wd.hWnd);
}
wd.window_focused = true;
#ifdef ACCESSKIT_ENABLED
if (accessibility_driver) {
accessibility_driver->accessibility_set_window_focused(p_window_id, true);
}
#endif
AccessibilityServer::get_singleton()->set_window_focused(p_window_id, true);
_send_window_event(wd, WINDOW_EVENT_FOCUS_IN);
} else { // WM_INACTIVE.
Input::get_singleton()->release_pressed_events();
@ -6613,11 +6598,8 @@ void DisplayServerWindows::_process_activate_event(WindowID p_window_id) {
ReleaseCapture();
}
wd.window_focused = false;
#ifdef ACCESSKIT_ENABLED
if (accessibility_driver) {
accessibility_driver->accessibility_set_window_focused(p_window_id, false);
}
#endif
AccessibilityServer::get_singleton()->set_window_focused(p_window_id, false);
_send_window_event(wd, WINDOW_EVENT_FOCUS_OUT);
}
@ -7441,19 +7423,6 @@ DisplayServerWindows::DisplayServerWindows(const String &p_rendering_driver, Win
}
native_menu = memnew(NativeMenuWindows);
#ifdef ACCESSKIT_ENABLED
if (accessibility_get_mode() != DisplayServer::AccessibilityMode::ACCESSIBILITY_DISABLED) {
accessibility_driver = memnew(AccessibilityDriverAccessKit);
if (accessibility_driver->init() != OK) {
if (OS::get_singleton()->is_stdout_verbose()) {
ERR_PRINT("Can't create an accessibility driver, accessibility support disabled!");
}
memdelete(accessibility_driver);
accessibility_driver = nullptr;
}
}
#endif
// Enforce default keep screen on value.
screen_set_keep_on(GLOBAL_GET("display/window/energy_saving/keep_screen_on"));
@ -8197,11 +8166,6 @@ DisplayServerWindows::~DisplayServerWindows() {
memdelete(gl_manager_native);
gl_manager_native = nullptr;
}
#endif
#ifdef ACCESSKIT_ENABLED
if (accessibility_driver) {
memdelete(accessibility_driver);
}
#endif
if (tts) {
memdelete(tts);

View file

@ -32,6 +32,7 @@
#include "core/object/class_db.h"
#include "scene/main/viewport.h"
#include "servers/display/accessibility_server.h"
#ifdef TOOLS_ENABLED
Dictionary AnimatedSprite2D::_edit_get_state() const {
@ -181,9 +182,9 @@ void AnimatedSprite2D::_notification(int p_what) {
Rect2 dst_rect = _get_rect();
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_IMAGE);
DisplayServer::get_singleton()->accessibility_update_set_transform(ae, get_transform());
DisplayServer::get_singleton()->accessibility_update_set_bounds(ae, dst_rect);
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_IMAGE);
AccessibilityServer::get_singleton()->update_set_transform(ae, get_transform());
AccessibilityServer::get_singleton()->update_set_bounds(ae, dst_rect);
} break;
case NOTIFICATION_READY: {

View file

@ -32,6 +32,7 @@
#include "core/object/class_db.h"
#include "scene/main/viewport.h"
#include "servers/display/accessibility_server.h"
#include "servers/rendering/rendering_server.h"
#ifdef TOOLS_ENABLED
@ -435,7 +436,7 @@ void Node2D::_notification(int p_notification) {
RID ae = get_accessibility_element();
ERR_FAIL_COND(ae.is_null());
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_CONTAINER);
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_CONTAINER);
} break;
case NOTIFICATION_ENTER_TREE: {

View file

@ -33,6 +33,7 @@
#include "core/input/input.h"
#include "core/object/class_db.h"
#include "scene/main/viewport.h"
#include "servers/display/accessibility_server.h"
void TouchScreenButton::set_texture_normal(const Ref<Texture2D> &p_texture) {
if (texture_normal == p_texture) {
@ -127,12 +128,12 @@ void TouchScreenButton::_notification(int p_what) {
Rect2 dst_rect(Point2(), texture_normal.is_valid() ? texture_normal->get_size() : Size2());
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_BUTTON);
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_BUTTON);
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_CLICK, callable_mp(this, &TouchScreenButton::_accessibility_action_click));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_CLICK, callable_mp(this, &TouchScreenButton::_accessibility_action_click));
DisplayServer::get_singleton()->accessibility_update_set_transform(ae, get_transform());
DisplayServer::get_singleton()->accessibility_update_set_bounds(ae, dst_rect);
AccessibilityServer::get_singleton()->update_set_transform(ae, get_transform());
AccessibilityServer::get_singleton()->update_set_bounds(ae, dst_rect);
} break;
case NOTIFICATION_DRAW: {

View file

@ -33,6 +33,7 @@
#include "core/input/input.h"
#include "core/object/class_db.h"
#include "scene/main/viewport.h"
#include "servers/display/accessibility_server.h"
#ifdef TOOLS_ENABLED
Dictionary Sprite2D::_edit_get_state() const {
@ -151,9 +152,9 @@ void Sprite2D::_notification(int p_what) {
Rect2 dst_rect = get_rect();
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_IMAGE);
DisplayServer::get_singleton()->accessibility_update_set_transform(ae, get_transform());
DisplayServer::get_singleton()->accessibility_update_set_bounds(ae, dst_rect);
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_IMAGE);
AccessibilityServer::get_singleton()->update_set_transform(ae, get_transform());
AccessibilityServer::get_singleton()->update_set_bounds(ae, dst_rect);
} break;
case NOTIFICATION_DRAW: {

View file

@ -35,6 +35,7 @@
#include "scene/3d/visual_instance_3d.h"
#include "scene/main/viewport.h"
#include "scene/property_utils.h"
#include "servers/display/accessibility_server.h"
#include "servers/rendering/rendering_server.h"
/*
@ -141,7 +142,7 @@ void Node3D::_notification(int p_what) {
RID ae = get_accessibility_element();
ERR_FAIL_COND(ae.is_null());
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_CONTAINER);
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_CONTAINER);
} break;
case NOTIFICATION_ENTER_TREE: {

View file

@ -34,14 +34,14 @@
#include "core/object/class_db.h"
#include "scene/audio/audio_stream_player_internal.h"
#include "servers/audio/audio_stream.h"
#include "servers/display/display_server.h"
#include "servers/display/accessibility_server.h"
void AudioStreamPlayer::_notification(int p_what) {
if (p_what == NOTIFICATION_ACCESSIBILITY_UPDATE) {
RID ae = get_accessibility_element();
ERR_FAIL_COND(ae.is_null());
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_AUDIO);
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_AUDIO);
} else {
internal->notification(p_what);
}

View file

@ -34,7 +34,7 @@
#include "core/object/class_db.h"
#include "scene/gui/label.h"
#include "scene/main/timer.h"
#include "scene/main/window.h"
#include "servers/display/accessibility_server.h"
void BaseButton::_unpress_group() {
if (button_group.is_null()) {
@ -112,19 +112,19 @@ void BaseButton::_notification(int p_what) {
RID ae = get_accessibility_element();
ERR_FAIL_COND(ae.is_null());
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_BUTTON);
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_BUTTON);
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_CLICK, callable_mp(this, &BaseButton::_accessibility_action_click));
DisplayServer::get_singleton()->accessibility_update_set_flag(ae, DisplayServer::AccessibilityFlags::FLAG_DISABLED, status.disabled);
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_CLICK, callable_mp(this, &BaseButton::_accessibility_action_click));
AccessibilityServer::get_singleton()->update_set_flag(ae, AccessibilityServerEnums::AccessibilityFlags::FLAG_DISABLED, status.disabled);
if (toggle_mode) {
DisplayServer::get_singleton()->accessibility_update_set_checked(ae, status.pressed);
AccessibilityServer::get_singleton()->update_set_checked(ae, status.pressed);
}
if (button_group.is_valid()) {
for (const BaseButton *btn : button_group->buttons) {
if (btn->is_part_of_edited_scene()) {
continue;
}
DisplayServer::get_singleton()->accessibility_update_add_related_radio_group(ae, btn->get_accessibility_element());
AccessibilityServer::get_singleton()->update_add_related_radio_group(ae, btn->get_accessibility_element());
}
}
if (shortcut_in_tooltip && shortcut.is_valid() && shortcut->has_valid_event()) {
@ -133,7 +133,7 @@ void BaseButton::_notification(int p_what) {
if (!tooltip.is_empty() && shortcut->get_name().nocasecmp_to(tooltip) != 0) {
text += "\n" + atr(tooltip);
}
DisplayServer::get_singleton()->accessibility_update_set_tooltip(ae, text);
AccessibilityServer::get_singleton()->update_set_tooltip(ae, text);
}
} break;

View file

@ -33,6 +33,7 @@
#include "core/object/class_db.h"
#include "scene/gui/dialogs.h"
#include "scene/theme/theme_db.h"
#include "servers/display/accessibility_server.h"
Size2 Button::get_minimum_size() const {
Ref<Texture2D> _icon = icon;
@ -159,15 +160,15 @@ void Button::_notification(int p_what) {
const String &ac_name = get_accessibility_name();
if (!xl_text.is_empty() && ac_name.is_empty()) {
DisplayServer::get_singleton()->accessibility_update_set_name(ae, xl_text);
AccessibilityServer::get_singleton()->update_set_name(ae, xl_text);
} else if (!xl_text.is_empty() && !ac_name.is_empty() && ac_name != xl_text) {
DisplayServer::get_singleton()->accessibility_update_set_name(ae, ac_name + ": " + xl_text);
AccessibilityServer::get_singleton()->update_set_name(ae, ac_name + ": " + xl_text);
} else if (xl_text.is_empty() && ac_name.is_empty() && !get_tooltip_text().is_empty()) {
DisplayServer::get_singleton()->accessibility_update_set_name(ae, get_tooltip_text()); // Fall back to tooltip.
AccessibilityServer::get_singleton()->update_set_name(ae, get_tooltip_text()); // Fall back to tooltip.
}
AcceptDialog *dlg = Object::cast_to<AcceptDialog>(get_parent());
if (dlg && dlg->get_ok_button() == this) {
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_DEFAULT_BUTTON);
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_DEFAULT_BUTTON);
}
} break;

View file

@ -32,6 +32,7 @@
#include "core/object/class_db.h"
#include "scene/theme/theme_db.h"
#include "servers/display/accessibility_server.h"
Size2 CheckBox::get_icon_size() const {
Size2 tex_size = Size2(0, 0);
@ -87,9 +88,9 @@ void CheckBox::_notification(int p_what) {
ERR_FAIL_COND(ae.is_null());
if (is_radio()) {
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_RADIO_BUTTON);
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_RADIO_BUTTON);
} else {
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_CHECK_BOX);
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_CHECK_BOX);
}
} break;

View file

@ -32,6 +32,7 @@
#include "core/object/class_db.h"
#include "scene/theme/theme_db.h"
#include "servers/display/accessibility_server.h"
Size2 CheckButton::get_icon_size() const {
Ref<Texture2D> on_tex;
@ -90,7 +91,7 @@ void CheckButton::_notification(int p_what) {
RID ae = get_accessibility_element();
ERR_FAIL_COND(ae.is_null());
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_CHECK_BUTTON);
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_CHECK_BUTTON);
} break;
case NOTIFICATION_THEME_CHANGED:

View file

@ -54,6 +54,7 @@
#include "scene/resources/style_box_flat.h"
#include "scene/resources/style_box_texture.h"
#include "scene/theme/theme_db.h"
#include "servers/display/accessibility_server.h"
static inline bool is_color_overbright(const Color &color) {
return (color.r > 1.0) || (color.g > 1.0) || (color.b > 1.0);
@ -82,8 +83,8 @@ void ColorPicker::_notification(int p_what) {
RID ae = get_accessibility_element();
ERR_FAIL_COND(ae.is_null());
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_COLOR_PICKER);
DisplayServer::get_singleton()->accessibility_update_set_color_value(ae, color);
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_COLOR_PICKER);
AccessibilityServer::get_singleton()->update_set_color_value(ae, color);
} break;
case NOTIFICATION_ENTER_TREE: {
@ -2434,9 +2435,9 @@ void ColorPickerButton::_notification(int p_what) {
RID ae = get_accessibility_element();
ERR_FAIL_COND(ae.is_null());
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_BUTTON);
DisplayServer::get_singleton()->accessibility_update_set_popup_type(ae, DisplayServer::AccessibilityPopupType::POPUP_DIALOG);
DisplayServer::get_singleton()->accessibility_update_set_color_value(ae, color);
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_BUTTON);
AccessibilityServer::get_singleton()->update_set_popup_type(ae, AccessibilityServerEnums::AccessibilityPopupType::POPUP_DIALOG);
AccessibilityServer::get_singleton()->update_set_color_value(ae, color);
} break;
case NOTIFICATION_DRAW: {
@ -2575,8 +2576,8 @@ void ColorPresetButton::_notification(int p_what) {
RID ae = get_accessibility_element();
ERR_FAIL_COND(ae.is_null());
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_BUTTON);
DisplayServer::get_singleton()->accessibility_update_set_color_value(ae, preset_color);
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_BUTTON);
AccessibilityServer::get_singleton()->update_set_color_value(ae, preset_color);
} break;
case NOTIFICATION_DRAW: {

View file

@ -31,6 +31,7 @@
#include "color_rect.h"
#include "core/object/class_db.h"
#include "servers/display/accessibility_server.h"
void ColorRect::set_color(const Color &p_color) {
if (color == p_color) {
@ -51,7 +52,7 @@ void ColorRect::_notification(int p_what) {
RID ae = get_accessibility_element();
ERR_FAIL_COND(ae.is_null());
DisplayServer::get_singleton()->accessibility_update_set_color_value(ae, color);
AccessibilityServer::get_singleton()->update_set_color_value(ae, color);
} break;
case NOTIFICATION_DRAW: {

View file

@ -31,6 +31,7 @@
#include "container.h"
#include "core/object/class_db.h"
#include "servers/display/accessibility_server.h"
void Container::_child_minsize_changed() {
update_minimum_size();
@ -191,9 +192,9 @@ void Container::_notification(int p_what) {
ERR_FAIL_COND(ae.is_null());
if (accessibility_region) {
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_REGION);
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_REGION);
} else {
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_CONTAINER);
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_CONTAINER);
}
} break;

View file

@ -33,6 +33,7 @@
#include "control.h"
#include "core/object/class_db.h"
#include "servers/display/display_server.h"
bool Control::_has_focus_bind_compat_110250() const {
return has_focus(false);
@ -45,6 +46,9 @@ void Control::_grab_focus_bind_compat_110250() {
void Control::_bind_compatibility_methods() {
ClassDB::bind_compatibility_method(D_METHOD("has_focus"), &Control::_has_focus_bind_compat_110250);
ClassDB::bind_compatibility_method(D_METHOD("grab_focus"), &Control::_grab_focus_bind_compat_110250);
ClassDB::bind_compatibility_method(D_METHOD("set_accessibility_live", "mode"), (void (Control::*)(DisplayServer::AccessibilityLiveMode))&Control::set_accessibility_live);
ClassDB::bind_compatibility_method(D_METHOD("get_accessibility_live"), (DisplayServer::AccessibilityLiveMode (Control::*)() const) & Control::get_accessibility_live);
}
#endif // DISABLE_DEPRECATED

View file

@ -44,6 +44,7 @@ STATIC_ASSERT_INCOMPLETE_TYPE(class, RenderingServer);
#include "scene/main/window.h"
#include "scene/theme/theme_db.h"
#include "scene/theme/theme_owner.h"
#include "servers/display/accessibility_server.h"
#include "servers/rendering/rendering_server.h"
#include "servers/text/text_server.h"
@ -2195,7 +2196,7 @@ String Control::get_accessibility_description() const {
return tr(data.accessibility_description);
}
void Control::set_accessibility_live(DisplayServer::AccessibilityLiveMode p_mode) {
void Control::set_accessibility_live(AccessibilityServerEnums::AccessibilityLiveMode p_mode) {
ERR_THREAD_GUARD
if (data.accessibility_live != p_mode) {
data.accessibility_live = p_mode;
@ -2203,7 +2204,7 @@ void Control::set_accessibility_live(DisplayServer::AccessibilityLiveMode p_mode
}
}
DisplayServer::AccessibilityLiveMode Control::get_accessibility_live() const {
AccessibilityServerEnums::AccessibilityLiveMode Control::get_accessibility_live() const {
return data.accessibility_live;
}
@ -3757,31 +3758,31 @@ void Control::_notification(int p_notification) {
// Base info.
if (get_parent_control()) {
String container_info = get_parent_control()->get_accessibility_container_name(this);
DisplayServer::get_singleton()->accessibility_update_set_name(ae, container_info.is_empty() ? get_accessibility_name() : get_accessibility_name() + " " + container_info);
AccessibilityServer::get_singleton()->update_set_name(ae, container_info.is_empty() ? get_accessibility_name() : get_accessibility_name() + " " + container_info);
} else {
DisplayServer::get_singleton()->accessibility_update_set_name(ae, get_accessibility_name());
AccessibilityServer::get_singleton()->update_set_name(ae, get_accessibility_name());
}
DisplayServer::get_singleton()->accessibility_update_set_description(ae, get_accessibility_description());
DisplayServer::get_singleton()->accessibility_update_set_live(ae, get_accessibility_live());
AccessibilityServer::get_singleton()->update_set_description(ae, get_accessibility_description());
AccessibilityServer::get_singleton()->update_set_live(ae, get_accessibility_live());
DisplayServer::get_singleton()->accessibility_update_set_transform(ae, get_transform());
DisplayServer::get_singleton()->accessibility_update_set_bounds(ae, Rect2(Vector2(), data.size_cache));
DisplayServer::get_singleton()->accessibility_update_set_tooltip(ae, data.tooltip);
DisplayServer::get_singleton()->accessibility_update_set_flag(ae, DisplayServer::AccessibilityFlags::FLAG_CLIPS_CHILDREN, data.clip_contents);
DisplayServer::get_singleton()->accessibility_update_set_flag(ae, DisplayServer::AccessibilityFlags::FLAG_TOUCH_PASSTHROUGH, data.mouse_filter == MOUSE_FILTER_PASS);
AccessibilityServer::get_singleton()->update_set_transform(ae, get_transform());
AccessibilityServer::get_singleton()->update_set_bounds(ae, Rect2(Vector2(), data.size_cache));
AccessibilityServer::get_singleton()->update_set_tooltip(ae, data.tooltip);
AccessibilityServer::get_singleton()->update_set_flag(ae, AccessibilityServerEnums::AccessibilityFlags::FLAG_CLIPS_CHILDREN, data.clip_contents);
AccessibilityServer::get_singleton()->update_set_flag(ae, AccessibilityServerEnums::AccessibilityFlags::FLAG_TOUCH_PASSTHROUGH, data.mouse_filter == MOUSE_FILTER_PASS);
if (_is_focusable()) {
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_FOCUS, callable_mp(this, &Control::_accessibility_action_foucs));
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_BLUR, callable_mp(this, &Control::_accessibility_action_blur));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_FOCUS, callable_mp(this, &Control::_accessibility_action_foucs));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_BLUR, callable_mp(this, &Control::_accessibility_action_blur));
}
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_SHOW_TOOLTIP, callable_mp(this, &Control::_accessibility_action_show_tooltip));
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_HIDE_TOOLTIP, callable_mp(this, &Control::_accessibility_action_hide_tooltip));
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_SCROLL_INTO_VIEW, callable_mp(this, &Control::_accessibility_action_scroll_into_view));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_SHOW_TOOLTIP, callable_mp(this, &Control::_accessibility_action_show_tooltip));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_HIDE_TOOLTIP, callable_mp(this, &Control::_accessibility_action_hide_tooltip));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_SCROLL_INTO_VIEW, callable_mp(this, &Control::_accessibility_action_scroll_into_view));
if (is_inside_tree() && get_viewport()->gui_is_dragging()) {
if (can_drop_data(Vector2(Math::INF, Math::INF), get_viewport()->gui_get_drag_data())) {
DisplayServer::get_singleton()->accessibility_update_set_extra_info(ae, vformat(RTR("%s can be dropped here. Use %s to drop, use %s to cancel."), get_viewport()->gui_get_drag_description(), InputMap::get_singleton()->get_action_description("ui_accessibility_drag_and_drop"), InputMap::get_singleton()->get_action_description("ui_cancel")));
AccessibilityServer::get_singleton()->update_set_extra_info(ae, vformat(RTR("%s can be dropped here. Use %s to drop, use %s to cancel."), get_viewport()->gui_get_drag_description(), InputMap::get_singleton()->get_action_description("ui_accessibility_drag_and_drop"), InputMap::get_singleton()->get_action_description("ui_cancel")));
} else {
DisplayServer::get_singleton()->accessibility_update_set_extra_info(ae, vformat(RTR("%s can not be dropped here. Use %s to cancel."), get_viewport()->gui_get_drag_description(), InputMap::get_singleton()->get_action_description("ui_cancel")));
AccessibilityServer::get_singleton()->update_set_extra_info(ae, vformat(RTR("%s can not be dropped here. Use %s to cancel."), get_viewport()->gui_get_drag_description(), InputMap::get_singleton()->get_action_description("ui_cancel")));
}
}
@ -3791,7 +3792,7 @@ void Control::_notification(int p_notification) {
if (!np.is_empty()) {
Node *n = get_node(np);
if (n && !n->is_part_of_edited_scene()) {
DisplayServer::get_singleton()->accessibility_update_add_related_controls(ae, n->get_accessibility_element());
AccessibilityServer::get_singleton()->update_add_related_controls(ae, n->get_accessibility_element());
}
}
}
@ -3800,7 +3801,7 @@ void Control::_notification(int p_notification) {
if (!np.is_empty()) {
Node *n = get_node(np);
if (n && !n->is_part_of_edited_scene()) {
DisplayServer::get_singleton()->accessibility_update_add_related_described_by(ae, n->get_accessibility_element());
AccessibilityServer::get_singleton()->update_add_related_described_by(ae, n->get_accessibility_element());
}
}
}
@ -3809,7 +3810,7 @@ void Control::_notification(int p_notification) {
if (!np.is_empty()) {
Node *n = get_node(np);
if (n && !n->is_part_of_edited_scene()) {
DisplayServer::get_singleton()->accessibility_update_add_related_labeled_by(ae, n->get_accessibility_element());
AccessibilityServer::get_singleton()->update_add_related_labeled_by(ae, n->get_accessibility_element());
}
}
}
@ -3818,7 +3819,7 @@ void Control::_notification(int p_notification) {
if (!np.is_empty()) {
Node *n = get_node(np);
if (n && !n->is_part_of_edited_scene()) {
DisplayServer::get_singleton()->accessibility_update_add_related_flow_to(ae, n->get_accessibility_element());
AccessibilityServer::get_singleton()->update_add_related_flow_to(ae, n->get_accessibility_element());
}
}
}

View file

@ -34,7 +34,7 @@
#include "core/object/gdvirtual.gen.h"
#include "scene/main/canvas_item.h"
#include "scene/resources/theme.h"
#include "servers/display/display_server.h"
#include "servers/display/accessibility_server_enums.h"
class Viewport;
class Label;
@ -257,7 +257,7 @@ private:
String accessibility_name;
String accessibility_description;
DisplayServer::AccessibilityLiveMode accessibility_live = DisplayServer::AccessibilityLiveMode::LIVE_OFF;
AccessibilityServerEnums::AccessibilityLiveMode accessibility_live = AccessibilityServerEnums::AccessibilityLiveMode::LIVE_OFF;
TypedArray<NodePath> accessibility_controls_nodes;
TypedArray<NodePath> accessibility_described_by_nodes;
@ -631,8 +631,8 @@ public:
void set_accessibility_description(const String &p_description);
String get_accessibility_description() const;
void set_accessibility_live(DisplayServer::AccessibilityLiveMode p_mode);
DisplayServer::AccessibilityLiveMode get_accessibility_live() const;
void set_accessibility_live(AccessibilityServerEnums::AccessibilityLiveMode p_mode);
AccessibilityServerEnums::AccessibilityLiveMode get_accessibility_live() const;
void set_accessibility_controls_nodes(const TypedArray<NodePath> &p_node_path);
TypedArray<NodePath> get_accessibility_controls_nodes() const;

View file

@ -34,6 +34,7 @@
#include "core/object/class_db.h"
#include "scene/gui/line_edit.h"
#include "scene/theme/theme_db.h"
#include "servers/display/accessibility_server.h"
// AcceptDialog
@ -56,7 +57,7 @@ void AcceptDialog::_notification(int p_what) {
RID ae = get_accessibility_element();
ERR_FAIL_COND(ae.is_null());
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_DIALOG);
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_DIALOG);
} break;
case NOTIFICATION_POST_ENTER_TREE: {
if (is_visible()) {

View file

@ -30,6 +30,7 @@
#include "graph_frame.h"
#include "core/config/engine.h"
#include "core/object/class_db.h"
#include "scene/gui/box_container.h"
#include "scene/gui/label.h"

View file

@ -35,6 +35,7 @@
#include "scene/gui/graph_edit.h"
#include "scene/gui/label.h"
#include "scene/theme/theme_db.h"
#include "servers/display/accessibility_server.h"
bool GraphNode::_set(const StringName &p_name, const Variant &p_value) {
String str = p_name;
@ -607,13 +608,13 @@ void GraphNode::_notification(int p_what) {
} else {
name += ", " + vformat(ETR("has %d slots"), slot_count);
}
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_LIST);
DisplayServer::get_singleton()->accessibility_update_set_name(ae, name);
DisplayServer::get_singleton()->accessibility_update_add_custom_action(ae, CustomAccessibilityAction::ACTION_CONNECT_INPUT, ETR("Edit Input Port Connection"));
DisplayServer::get_singleton()->accessibility_update_add_custom_action(ae, CustomAccessibilityAction::ACTION_CONNECT_OUTPUT, ETR("Edit Output Port Connection"));
DisplayServer::get_singleton()->accessibility_update_add_custom_action(ae, CustomAccessibilityAction::ACTION_FOLLOW_INPUT, ETR("Follow Input Port Connection"));
DisplayServer::get_singleton()->accessibility_update_add_custom_action(ae, CustomAccessibilityAction::ACTION_FOLLOW_OUTPUT, ETR("Follow Output Port Connection"));
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_CUSTOM, callable_mp(this, &GraphNode::_accessibility_action_slot));
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_LIST);
AccessibilityServer::get_singleton()->update_set_name(ae, name);
AccessibilityServer::get_singleton()->update_add_custom_action(ae, CustomAccessibilityAction::ACTION_CONNECT_INPUT, ETR("Edit Input Port Connection"));
AccessibilityServer::get_singleton()->update_add_custom_action(ae, CustomAccessibilityAction::ACTION_CONNECT_OUTPUT, ETR("Edit Output Port Connection"));
AccessibilityServer::get_singleton()->update_add_custom_action(ae, CustomAccessibilityAction::ACTION_FOLLOW_INPUT, ETR("Follow Input Port Connection"));
AccessibilityServer::get_singleton()->update_add_custom_action(ae, CustomAccessibilityAction::ACTION_FOLLOW_OUTPUT, ETR("Follow Output Port Connection"));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_CUSTOM, callable_mp(this, &GraphNode::_accessibility_action_slot));
} break;
case NOTIFICATION_FOCUS_EXIT: {
selected_slot = -1;

View file

@ -34,6 +34,7 @@
#include "core/object/class_db.h"
#include "core/os/os.h"
#include "scene/theme/theme_db.h"
#include "servers/display/accessibility_server.h"
#include "servers/rendering/rendering_server.h"
void ItemList::_shape_text(int p_idx) {
@ -535,7 +536,7 @@ void ItemList::set_item_count(int p_count) {
if (items.size() > p_count) {
for (int i = p_count; i < items.size(); i++) {
if (items[i].accessibility_item_element.is_valid()) {
DisplayServer::get_singleton()->accessibility_free_element(items.write[i].accessibility_item_element);
AccessibilityServer::get_singleton()->free_element(items.write[i].accessibility_item_element);
items.write[i].accessibility_item_element = RID();
}
}
@ -556,7 +557,7 @@ void ItemList::remove_item(int p_idx) {
ERR_FAIL_INDEX(p_idx, items.size());
if (items[p_idx].accessibility_item_element.is_valid()) {
DisplayServer::get_singleton()->accessibility_free_element(items.write[p_idx].accessibility_item_element);
AccessibilityServer::get_singleton()->free_element(items.write[p_idx].accessibility_item_element);
items.write[p_idx].accessibility_item_element = RID();
}
items.remove_at(p_idx);
@ -573,7 +574,7 @@ void ItemList::remove_item(int p_idx) {
void ItemList::clear() {
for (int i = 0; i < items.size(); i++) {
if (items[i].accessibility_item_element.is_valid()) {
DisplayServer::get_singleton()->accessibility_free_element(items.write[i].accessibility_item_element);
AccessibilityServer::get_singleton()->free_element(items.write[i].accessibility_item_element);
items.write[i].accessibility_item_element = RID();
}
}
@ -1246,7 +1247,7 @@ void ItemList::_accessibility_action_scroll_set(const Variant &p_data) {
}
void ItemList::_accessibility_action_scroll_up(const Variant &p_data) {
if ((DisplayServer::AccessibilityScrollUnit)p_data == DisplayServer::SCROLL_UNIT_ITEM) {
if ((AccessibilityServerEnums::AccessibilityScrollUnit)p_data == AccessibilityServerEnums::SCROLL_UNIT_ITEM) {
scroll_bar_v->set_value(scroll_bar_v->get_value() - scroll_bar_v->get_page() / 4);
} else {
scroll_bar_v->set_value(scroll_bar_v->get_value() - scroll_bar_v->get_page());
@ -1254,7 +1255,7 @@ void ItemList::_accessibility_action_scroll_up(const Variant &p_data) {
}
void ItemList::_accessibility_action_scroll_down(const Variant &p_data) {
if ((DisplayServer::AccessibilityScrollUnit)p_data == DisplayServer::SCROLL_UNIT_ITEM) {
if ((AccessibilityServerEnums::AccessibilityScrollUnit)p_data == AccessibilityServerEnums::SCROLL_UNIT_ITEM) {
scroll_bar_v->set_value(scroll_bar_v->get_value() + scroll_bar_v->get_page() / 4);
} else {
scroll_bar_v->set_value(scroll_bar_v->get_value() + scroll_bar_v->get_page());
@ -1262,7 +1263,7 @@ void ItemList::_accessibility_action_scroll_down(const Variant &p_data) {
}
void ItemList::_accessibility_action_scroll_left(const Variant &p_data) {
if ((DisplayServer::AccessibilityScrollUnit)p_data == DisplayServer::SCROLL_UNIT_ITEM) {
if ((AccessibilityServerEnums::AccessibilityScrollUnit)p_data == AccessibilityServerEnums::SCROLL_UNIT_ITEM) {
scroll_bar_h->set_value(scroll_bar_h->get_value() - scroll_bar_h->get_page() / 4);
} else {
scroll_bar_h->set_value(scroll_bar_h->get_value() - scroll_bar_h->get_page());
@ -1270,7 +1271,7 @@ void ItemList::_accessibility_action_scroll_left(const Variant &p_data) {
}
void ItemList::_accessibility_action_scroll_right(const Variant &p_data) {
if ((DisplayServer::AccessibilityScrollUnit)p_data == DisplayServer::SCROLL_UNIT_ITEM) {
if ((AccessibilityServerEnums::AccessibilityScrollUnit)p_data == AccessibilityServerEnums::SCROLL_UNIT_ITEM) {
scroll_bar_h->set_value(scroll_bar_h->get_value() + scroll_bar_h->get_page() / 4);
} else {
scroll_bar_h->set_value(scroll_bar_h->get_value() + scroll_bar_h->get_page());
@ -1322,47 +1323,47 @@ void ItemList::_notification(int p_what) {
force_update_list_size();
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_LIST_BOX);
DisplayServer::get_singleton()->accessibility_update_set_list_item_count(ae, items.size());
DisplayServer::get_singleton()->accessibility_update_set_flag(ae, DisplayServer::AccessibilityFlags::FLAG_MULTISELECTABLE, select_mode == SELECT_MULTI);
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_SCROLL_DOWN, callable_mp(this, &ItemList::_accessibility_action_scroll_down));
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_SCROLL_UP, callable_mp(this, &ItemList::_accessibility_action_scroll_up));
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_SCROLL_LEFT, callable_mp(this, &ItemList::_accessibility_action_scroll_left));
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_SCROLL_RIGHT, callable_mp(this, &ItemList::_accessibility_action_scroll_right));
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_SET_SCROLL_OFFSET, callable_mp(this, &ItemList::_accessibility_action_scroll_set));
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_LIST_BOX);
AccessibilityServer::get_singleton()->update_set_list_item_count(ae, items.size());
AccessibilityServer::get_singleton()->update_set_flag(ae, AccessibilityServerEnums::AccessibilityFlags::FLAG_MULTISELECTABLE, select_mode == SELECT_MULTI);
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_SCROLL_DOWN, callable_mp(this, &ItemList::_accessibility_action_scroll_down));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_SCROLL_UP, callable_mp(this, &ItemList::_accessibility_action_scroll_up));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_SCROLL_LEFT, callable_mp(this, &ItemList::_accessibility_action_scroll_left));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_SCROLL_RIGHT, callable_mp(this, &ItemList::_accessibility_action_scroll_right));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_SET_SCROLL_OFFSET, callable_mp(this, &ItemList::_accessibility_action_scroll_set));
if (accessibility_scroll_element.is_null()) {
accessibility_scroll_element = DisplayServer::get_singleton()->accessibility_create_sub_element(ae, DisplayServer::AccessibilityRole::ROLE_CONTAINER);
accessibility_scroll_element = AccessibilityServer::get_singleton()->create_sub_element(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_CONTAINER);
}
Transform2D scroll_xform;
scroll_xform.set_origin(Vector2i(-scroll_bar_h->get_value(), -scroll_bar_v->get_value()));
DisplayServer::get_singleton()->accessibility_update_set_transform(accessibility_scroll_element, scroll_xform);
DisplayServer::get_singleton()->accessibility_update_set_bounds(accessibility_scroll_element, Rect2(0, 0, scroll_bar_h->get_max(), scroll_bar_v->get_max()));
AccessibilityServer::get_singleton()->update_set_transform(accessibility_scroll_element, scroll_xform);
AccessibilityServer::get_singleton()->update_set_bounds(accessibility_scroll_element, Rect2(0, 0, scroll_bar_h->get_max(), scroll_bar_v->get_max()));
for (int i = 0; i < items.size(); i++) {
const Item &item = items.write[i];
if (item.accessibility_item_element.is_null()) {
item.accessibility_item_element = DisplayServer::get_singleton()->accessibility_create_sub_element(accessibility_scroll_element, DisplayServer::AccessibilityRole::ROLE_LIST_BOX_OPTION);
item.accessibility_item_element = AccessibilityServer::get_singleton()->create_sub_element(accessibility_scroll_element, AccessibilityServerEnums::AccessibilityRole::ROLE_LIST_BOX_OPTION);
item.accessibility_item_dirty = true;
}
if (item.accessibility_item_dirty || i == hovered || i == prev_hovered) {
DisplayServer::get_singleton()->accessibility_update_add_action(item.accessibility_item_element, DisplayServer::AccessibilityAction::ACTION_SCROLL_INTO_VIEW, callable_mp(this, &ItemList::_accessibility_action_scroll_into_view).bind(i));
DisplayServer::get_singleton()->accessibility_update_add_action(item.accessibility_item_element, DisplayServer::AccessibilityAction::ACTION_FOCUS, callable_mp(this, &ItemList::_accessibility_action_focus).bind(i));
DisplayServer::get_singleton()->accessibility_update_add_action(item.accessibility_item_element, DisplayServer::AccessibilityAction::ACTION_BLUR, callable_mp(this, &ItemList::_accessibility_action_blur).bind(i));
AccessibilityServer::get_singleton()->update_add_action(item.accessibility_item_element, AccessibilityServerEnums::AccessibilityAction::ACTION_SCROLL_INTO_VIEW, callable_mp(this, &ItemList::_accessibility_action_scroll_into_view).bind(i));
AccessibilityServer::get_singleton()->update_add_action(item.accessibility_item_element, AccessibilityServerEnums::AccessibilityAction::ACTION_FOCUS, callable_mp(this, &ItemList::_accessibility_action_focus).bind(i));
AccessibilityServer::get_singleton()->update_add_action(item.accessibility_item_element, AccessibilityServerEnums::AccessibilityAction::ACTION_BLUR, callable_mp(this, &ItemList::_accessibility_action_blur).bind(i));
DisplayServer::get_singleton()->accessibility_update_set_list_item_index(item.accessibility_item_element, i);
DisplayServer::get_singleton()->accessibility_update_set_list_item_level(item.accessibility_item_element, 0);
DisplayServer::get_singleton()->accessibility_update_set_list_item_selected(item.accessibility_item_element, item.selected);
DisplayServer::get_singleton()->accessibility_update_set_name(item.accessibility_item_element, item.xl_text);
DisplayServer::get_singleton()->accessibility_update_set_flag(item.accessibility_item_element, DisplayServer::AccessibilityFlags::FLAG_DISABLED, item.disabled);
AccessibilityServer::get_singleton()->update_set_list_item_index(item.accessibility_item_element, i);
AccessibilityServer::get_singleton()->update_set_list_item_level(item.accessibility_item_element, 0);
AccessibilityServer::get_singleton()->update_set_list_item_selected(item.accessibility_item_element, item.selected);
AccessibilityServer::get_singleton()->update_set_name(item.accessibility_item_element, item.xl_text);
AccessibilityServer::get_singleton()->update_set_flag(item.accessibility_item_element, AccessibilityServerEnums::AccessibilityFlags::FLAG_DISABLED, item.disabled);
if (item.tooltip_enabled) {
DisplayServer::get_singleton()->accessibility_update_set_tooltip(item.accessibility_item_element, item.tooltip);
AccessibilityServer::get_singleton()->update_set_tooltip(item.accessibility_item_element, item.tooltip);
}
Rect2 r = get_item_rect(i);
DisplayServer::get_singleton()->accessibility_update_set_bounds(item.accessibility_item_element, Rect2(r.position, r.size));
AccessibilityServer::get_singleton()->update_set_bounds(item.accessibility_item_element, Rect2(r.position, r.size));
item.accessibility_item_dirty = false;
}

View file

@ -33,6 +33,7 @@
#include "core/object/class_db.h"
#include "scene/gui/container.h"
#include "scene/theme/theme_db.h"
#include "servers/display/accessibility_server.h"
#include "servers/rendering/rendering_server.h"
#include "servers/text/text_server.h"
@ -707,9 +708,9 @@ void Label::_notification(int p_what) {
RID ae = get_accessibility_element();
ERR_FAIL_COND(ae.is_null());
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_STATIC_TEXT);
DisplayServer::get_singleton()->accessibility_update_set_value(ae, xl_text);
DisplayServer::get_singleton()->accessibility_update_set_text_align(ae, horizontal_alignment);
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_STATIC_TEXT);
AccessibilityServer::get_singleton()->update_set_value(ae, xl_text);
AccessibilityServer::get_singleton()->update_set_text_align(ae, horizontal_alignment);
} break;
case NOTIFICATION_TRANSLATION_CHANGED: {

View file

@ -42,7 +42,7 @@
#include "scene/gui/label.h"
#include "scene/main/window.h"
#include "scene/theme/theme_db.h"
#include "servers/display/display_server.h"
#include "servers/display/accessibility_server.h"
#include "servers/rendering/rendering_server.h"
#include "servers/text/text_server.h"
@ -1234,22 +1234,22 @@ void LineEdit::_notification(int p_what) {
RID ae = get_accessibility_element();
ERR_FAIL_COND(ae.is_null());
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_TEXT_FIELD);
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_TEXT_FIELD);
bool using_placeholder = text.is_empty() && ime_text.is_empty();
if (using_placeholder && !placeholder.is_empty()) {
DisplayServer::get_singleton()->accessibility_update_set_placeholder(ae, atr(placeholder));
AccessibilityServer::get_singleton()->update_set_placeholder(ae, atr(placeholder));
}
if (!placeholder.is_empty() && get_accessibility_name().is_empty()) {
DisplayServer::get_singleton()->accessibility_update_set_name(ae, atr(placeholder));
AccessibilityServer::get_singleton()->update_set_name(ae, atr(placeholder));
}
DisplayServer::get_singleton()->accessibility_update_set_flag(ae, DisplayServer::AccessibilityFlags::FLAG_READONLY, !editable);
AccessibilityServer::get_singleton()->update_set_flag(ae, AccessibilityServerEnums::AccessibilityFlags::FLAG_READONLY, !editable);
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_SET_TEXT_SELECTION, callable_mp(this, &LineEdit::_accessibility_action_set_selection));
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_REPLACE_SELECTED_TEXT, callable_mp(this, &LineEdit::_accessibility_action_replace_selected));
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_SET_VALUE, callable_mp(this, &LineEdit::_accessibility_action_set_value));
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_SHOW_CONTEXT_MENU, callable_mp(this, &LineEdit::_accessibility_action_menu));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_SET_TEXT_SELECTION, callable_mp(this, &LineEdit::_accessibility_action_set_selection));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_REPLACE_SELECTED_TEXT, callable_mp(this, &LineEdit::_accessibility_action_replace_selected));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_SET_VALUE, callable_mp(this, &LineEdit::_accessibility_action_set_value));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_SHOW_CONTEXT_MENU, callable_mp(this, &LineEdit::_accessibility_action_menu));
const String &lang = language.is_empty() ? _get_locale() : language;
DisplayServer::get_singleton()->accessibility_update_set_language(ae, lang);
AccessibilityServer::get_singleton()->update_set_language(ae, lang);
bool rtl = is_layout_rtl();
Ref<StyleBox> style = theme_cache.normal;
@ -1314,16 +1314,16 @@ void LineEdit::_notification(int p_what) {
float text_off_x = x_ofs + scroll_offset;
if (accessibility_text_root_element.is_null()) {
accessibility_text_root_element = DisplayServer::get_singleton()->accessibility_create_sub_text_edit_elements(ae, using_placeholder ? RID() : text_rid, text_height, -1, true);
accessibility_text_root_element = AccessibilityServer::get_singleton()->create_sub_text_edit_elements(ae, using_placeholder ? RID() : text_rid, text_height, -1, true);
}
Transform2D text_xform;
text_xform.set_origin(Vector2i(text_off_x, y_ofs));
DisplayServer::get_singleton()->accessibility_update_set_transform(accessibility_text_root_element, text_xform);
AccessibilityServer::get_singleton()->update_set_transform(accessibility_text_root_element, text_xform);
if (selection.enabled) {
DisplayServer::get_singleton()->accessibility_update_set_text_selection(ae, accessibility_text_root_element, selection.begin, accessibility_text_root_element, selection.end);
AccessibilityServer::get_singleton()->update_set_text_selection(ae, accessibility_text_root_element, selection.begin, accessibility_text_root_element, selection.end);
} else {
DisplayServer::get_singleton()->accessibility_update_set_text_selection(ae, accessibility_text_root_element, caret_column, accessibility_text_root_element, caret_column);
AccessibilityServer::get_singleton()->update_set_text_selection(ae, accessibility_text_root_element, caret_column, accessibility_text_root_element, caret_column);
}
} break;
@ -3124,7 +3124,7 @@ void LineEdit::_shape() {
}
if (accessibility_text_root_element.is_valid()) {
DisplayServer::get_singleton()->accessibility_free_element(accessibility_text_root_element);
AccessibilityServer::get_singleton()->free_element(accessibility_text_root_element);
accessibility_text_root_element = RID();
}

View file

@ -32,6 +32,7 @@
#include "core/object/class_db.h"
#include "scene/theme/theme_db.h"
#include "servers/display/accessibility_server.h"
void LinkButton::_shape() {
Ref<Font> font = theme_cache.font;
@ -210,16 +211,16 @@ void LinkButton::_notification(int p_what) {
RID ae = get_accessibility_element();
ERR_FAIL_COND(ae.is_null());
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_LINK);
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_LINK);
const String &ac_name = get_accessibility_name();
if (!xl_text.is_empty() && ac_name.is_empty()) {
DisplayServer::get_singleton()->accessibility_update_set_name(ae, xl_text);
AccessibilityServer::get_singleton()->update_set_name(ae, xl_text);
} else if (!xl_text.is_empty() && !ac_name.is_empty() && ac_name != xl_text) {
DisplayServer::get_singleton()->accessibility_update_set_name(ae, ac_name + ": " + xl_text);
AccessibilityServer::get_singleton()->update_set_name(ae, ac_name + ": " + xl_text);
} else if (xl_text.is_empty() && ac_name.is_empty() && !get_tooltip_text().is_empty()) {
DisplayServer::get_singleton()->accessibility_update_set_name(ae, get_tooltip_text()); // Fall back to tooltip.
AccessibilityServer::get_singleton()->update_set_name(ae, get_tooltip_text()); // Fall back to tooltip.
}
DisplayServer::get_singleton()->accessibility_update_set_url(ae, uri);
AccessibilityServer::get_singleton()->update_set_url(ae, uri);
} break;
case NOTIFICATION_TRANSLATION_CHANGED: {

View file

@ -33,6 +33,7 @@
#include "core/object/class_db.h"
#include "scene/main/window.h"
#include "scene/theme/theme_db.h"
#include "servers/display/accessibility_server.h"
void MenuBar::gui_input(const Ref<InputEvent> &p_event) {
ERR_FAIL_COND(p_event.is_null());
@ -293,7 +294,7 @@ void MenuBar::_notification(int p_what) {
RID ae = get_accessibility_element();
ERR_FAIL_COND(ae.is_null());
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_MENU_BAR);
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_MENU_BAR);
} break;
case NOTIFICATION_ENTER_TREE: {
if (get_menu_count() > 0) {

View file

@ -32,6 +32,7 @@
#include "core/object/class_db.h"
#include "scene/main/window.h"
#include "servers/display/accessibility_server.h"
#include "servers/rendering/rendering_server.h"
void MenuButton::shortcut_input(const Ref<InputEvent> &p_event) {
@ -143,8 +144,8 @@ void MenuButton::_notification(int p_what) {
RID ae = get_accessibility_element();
ERR_FAIL_COND(ae.is_null());
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_BUTTON);
DisplayServer::get_singleton()->accessibility_update_set_popup_type(ae, DisplayServer::AccessibilityPopupType::POPUP_MENU);
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_BUTTON);
AccessibilityServer::get_singleton()->update_set_popup_type(ae, AccessibilityServerEnums::AccessibilityPopupType::POPUP_MENU);
} break;
case NOTIFICATION_TRANSLATION_CHANGED:

View file

@ -32,6 +32,7 @@
#include "core/object/class_db.h"
#include "scene/theme/theme_db.h"
#include "servers/display/accessibility_server.h"
static const int NONE_SELECTED = -1;
@ -78,8 +79,8 @@ void OptionButton::_notification(int p_what) {
RID ae = get_accessibility_element();
ERR_FAIL_COND(ae.is_null());
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_BUTTON);
DisplayServer::get_singleton()->accessibility_update_set_popup_type(ae, DisplayServer::AccessibilityPopupType::POPUP_LIST);
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_BUTTON);
AccessibilityServer::get_singleton()->update_set_popup_type(ae, AccessibilityServerEnums::AccessibilityPopupType::POPUP_LIST);
} break;
case NOTIFICATION_POSTINITIALIZE: {

View file

@ -32,6 +32,7 @@
#include "core/object/class_db.h"
#include "scene/theme/theme_db.h"
#include "servers/display/accessibility_server.h"
void Panel::_notification(int p_what) {
switch (p_what) {
@ -39,7 +40,7 @@ void Panel::_notification(int p_what) {
RID ae = get_accessibility_element();
ERR_FAIL_COND(ae.is_null());
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_PANEL);
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_PANEL);
} break;
case NOTIFICATION_DRAW: {

View file

@ -42,6 +42,7 @@
#include "scene/main/timer.h"
#include "scene/resources/style_box_flat.h"
#include "scene/theme/theme_db.h"
#include "servers/display/accessibility_server.h"
HashMap<NativeMenu::SystemMenus, PopupMenu *> PopupMenu::system_menus;
@ -1245,19 +1246,19 @@ void PopupMenu::_notification(int p_what) {
ERR_FAIL_COND(ae.is_null());
if (has_meta("_menu_name")) {
DisplayServer::get_singleton()->accessibility_update_set_name(ae, get_meta("_menu_name", get_name()));
AccessibilityServer::get_singleton()->update_set_name(ae, get_meta("_menu_name", get_name()));
}
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_MENU);
DisplayServer::get_singleton()->accessibility_update_set_list_item_count(ae, items.size());
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_MENU);
AccessibilityServer::get_singleton()->update_set_list_item_count(ae, items.size());
if (accessibility_scroll_element.is_null()) {
accessibility_scroll_element = DisplayServer::get_singleton()->accessibility_create_sub_element(ae, DisplayServer::AccessibilityRole::ROLE_CONTAINER);
accessibility_scroll_element = AccessibilityServer::get_singleton()->create_sub_element(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_CONTAINER);
}
Transform2D scroll_xform;
scroll_xform.set_origin(Vector2i(0, -scroll_container->get_v_scroll_bar()->get_value()));
DisplayServer::get_singleton()->accessibility_update_set_transform(accessibility_scroll_element, scroll_xform);
DisplayServer::get_singleton()->accessibility_update_set_bounds(accessibility_scroll_element, Rect2(0, 0, get_size().x, scroll_container->get_v_scroll_bar()->get_max()));
AccessibilityServer::get_singleton()->update_set_transform(accessibility_scroll_element, scroll_xform);
AccessibilityServer::get_singleton()->update_set_bounds(accessibility_scroll_element, Rect2(0, 0, get_size().x, scroll_container->get_v_scroll_bar()->get_max()));
float scroll_width = scroll_container->get_v_scroll_bar()->is_visible_in_tree() ? scroll_container->get_v_scroll_bar()->get_size().width : 0;
float display_width = control->get_size().width - scroll_width;
@ -1271,7 +1272,7 @@ void PopupMenu::_notification(int p_what) {
Point2 item_ofs = ofs;
if (item.accessibility_item_element.is_null()) {
item.accessibility_item_element = DisplayServer::get_singleton()->accessibility_create_sub_element(accessibility_scroll_element, DisplayServer::AccessibilityRole::ROLE_MENU_ITEM);
item.accessibility_item_element = AccessibilityServer::get_singleton()->create_sub_element(accessibility_scroll_element, AccessibilityServerEnums::AccessibilityRole::ROLE_MENU_ITEM);
item.accessibility_item_dirty = true;
}
@ -1281,27 +1282,27 @@ void PopupMenu::_notification(int p_what) {
if (item.accessibility_item_dirty || i == prev_mouse_over || i == mouse_over) {
switch (item.checkable_type) {
case Item::CHECKABLE_TYPE_NONE: {
DisplayServer::get_singleton()->accessibility_update_set_role(item.accessibility_item_element, DisplayServer::AccessibilityRole::ROLE_MENU_ITEM);
AccessibilityServer::get_singleton()->update_set_role(item.accessibility_item_element, AccessibilityServerEnums::AccessibilityRole::ROLE_MENU_ITEM);
} break;
case Item::CHECKABLE_TYPE_CHECK_BOX: {
DisplayServer::get_singleton()->accessibility_update_set_role(item.accessibility_item_element, DisplayServer::AccessibilityRole::ROLE_MENU_ITEM_CHECK_BOX);
DisplayServer::get_singleton()->accessibility_update_set_checked(item.accessibility_item_element, item.checked);
AccessibilityServer::get_singleton()->update_set_role(item.accessibility_item_element, AccessibilityServerEnums::AccessibilityRole::ROLE_MENU_ITEM_CHECK_BOX);
AccessibilityServer::get_singleton()->update_set_checked(item.accessibility_item_element, item.checked);
} break;
case Item::CHECKABLE_TYPE_RADIO_BUTTON: {
DisplayServer::get_singleton()->accessibility_update_set_role(item.accessibility_item_element, DisplayServer::AccessibilityRole::ROLE_MENU_ITEM_RADIO);
DisplayServer::get_singleton()->accessibility_update_set_checked(item.accessibility_item_element, item.checked);
AccessibilityServer::get_singleton()->update_set_role(item.accessibility_item_element, AccessibilityServerEnums::AccessibilityRole::ROLE_MENU_ITEM_RADIO);
AccessibilityServer::get_singleton()->update_set_checked(item.accessibility_item_element, item.checked);
} break;
}
DisplayServer::get_singleton()->accessibility_update_add_action(item.accessibility_item_element, DisplayServer::AccessibilityAction::ACTION_CLICK, callable_mp(this, &PopupMenu::_accessibility_action_click).bind(i));
DisplayServer::get_singleton()->accessibility_update_set_list_item_index(item.accessibility_item_element, i);
DisplayServer::get_singleton()->accessibility_update_set_list_item_level(item.accessibility_item_element, 0);
DisplayServer::get_singleton()->accessibility_update_set_list_item_selected(item.accessibility_item_element, i == mouse_over);
DisplayServer::get_singleton()->accessibility_update_set_name(item.accessibility_item_element, item.xl_text);
DisplayServer::get_singleton()->accessibility_update_set_flag(item.accessibility_item_element, DisplayServer::AccessibilityFlags::FLAG_DISABLED, item.disabled);
DisplayServer::get_singleton()->accessibility_update_set_tooltip(item.accessibility_item_element, item.tooltip);
AccessibilityServer::get_singleton()->update_add_action(item.accessibility_item_element, AccessibilityServerEnums::AccessibilityAction::ACTION_CLICK, callable_mp(this, &PopupMenu::_accessibility_action_click).bind(i));
AccessibilityServer::get_singleton()->update_set_list_item_index(item.accessibility_item_element, i);
AccessibilityServer::get_singleton()->update_set_list_item_level(item.accessibility_item_element, 0);
AccessibilityServer::get_singleton()->update_set_list_item_selected(item.accessibility_item_element, i == mouse_over);
AccessibilityServer::get_singleton()->update_set_name(item.accessibility_item_element, item.xl_text);
AccessibilityServer::get_singleton()->update_set_flag(item.accessibility_item_element, AccessibilityServerEnums::AccessibilityFlags::FLAG_DISABLED, item.disabled);
AccessibilityServer::get_singleton()->update_set_tooltip(item.accessibility_item_element, item.tooltip);
DisplayServer::get_singleton()->accessibility_update_set_bounds(item.accessibility_item_element, Rect2(item_ofs, Size2(display_width, h + theme_cache.v_separation)));
AccessibilityServer::get_singleton()->update_set_bounds(item.accessibility_item_element, Rect2(item_ofs, Size2(display_width, h + theme_cache.v_separation)));
item.accessibility_item_dirty = false;
}
@ -2743,7 +2744,7 @@ void PopupMenu::set_item_count(int p_count) {
for (int i = prev_size - 1; i >= p_count; i--) {
nmenu->remove_item(global_menu, i);
if (items[i].accessibility_item_element.is_valid()) {
DisplayServer::get_singleton()->accessibility_free_element(items.write[i].accessibility_item_element);
AccessibilityServer::get_singleton()->free_element(items.write[i].accessibility_item_element);
items.write[i].accessibility_item_element = RID();
}
}
@ -2927,7 +2928,7 @@ void PopupMenu::remove_item(int p_idx) {
ERR_FAIL_INDEX(p_idx, items.size());
if (items[p_idx].accessibility_item_element.is_valid()) {
DisplayServer::get_singleton()->accessibility_free_element(items.write[p_idx].accessibility_item_element);
AccessibilityServer::get_singleton()->free_element(items.write[p_idx].accessibility_item_element);
items.write[p_idx].accessibility_item_element = RID();
}
if (items[p_idx].shortcut.is_valid()) {
@ -2967,7 +2968,7 @@ void PopupMenu::add_separator(const String &p_text, int p_id) {
void PopupMenu::clear(bool p_free_submenus) {
for (Item &I : items) {
if (I.accessibility_item_element.is_valid()) {
DisplayServer::get_singleton()->accessibility_free_element(I.accessibility_item_element);
AccessibilityServer::get_singleton()->free_element(I.accessibility_item_element);
I.accessibility_item_element = RID();
}
if (I.shortcut.is_valid()) {

View file

@ -34,6 +34,7 @@
#include "core/string/translation_server.h"
#include "scene/resources/text_line.h"
#include "scene/theme/theme_db.h"
#include "servers/display/accessibility_server.h"
Size2 ProgressBar::get_minimum_size() const {
Size2 minimum_size = theme_cache.background_style->get_minimum_size();
@ -61,7 +62,7 @@ void ProgressBar::_notification(int p_what) {
RID ae = get_accessibility_element();
ERR_FAIL_COND(ae.is_null());
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_PROGRESS_INDICATOR);
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_PROGRESS_INDICATOR);
} break;
case NOTIFICATION_DRAW: {

View file

@ -31,6 +31,7 @@
#include "range.h"
#include "core/object/class_db.h"
#include "servers/display/accessibility_server.h"
#include "thirdparty/misc/r128.h"
double Range::_snapped_r128(double p_value, double p_step) {
@ -113,17 +114,17 @@ void Range::_notification(int p_what) {
RID ae = get_accessibility_element();
ERR_FAIL_COND(ae.is_null());
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_SPIN_BUTTON);
DisplayServer::get_singleton()->accessibility_update_set_num_value(ae, shared->val);
DisplayServer::get_singleton()->accessibility_update_set_num_range(ae, shared->min, shared->max);
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_SPIN_BUTTON);
AccessibilityServer::get_singleton()->update_set_num_value(ae, shared->val);
AccessibilityServer::get_singleton()->update_set_num_range(ae, shared->min, shared->max);
if (shared->step > 0) {
DisplayServer::get_singleton()->accessibility_update_set_num_step(ae, shared->step);
AccessibilityServer::get_singleton()->update_set_num_step(ae, shared->step);
} else {
DisplayServer::get_singleton()->accessibility_update_set_num_step(ae, 1);
AccessibilityServer::get_singleton()->update_set_num_step(ae, 1);
}
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_DECREMENT, callable_mp(this, &Range::_accessibility_action_dec));
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_INCREMENT, callable_mp(this, &Range::_accessibility_action_inc));
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_SET_VALUE, callable_mp(this, &Range::_accessibility_action_set_value));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_DECREMENT, callable_mp(this, &Range::_accessibility_action_dec));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_INCREMENT, callable_mp(this, &Range::_accessibility_action_inc));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_SET_VALUE, callable_mp(this, &Range::_accessibility_action_set_value));
} break;
}
}

View file

@ -43,7 +43,7 @@
#include "scene/main/timer.h"
#include "scene/resources/atlas_texture.h"
#include "scene/theme/theme_db.h"
#include "servers/display/display_server.h"
#include "servers/display/accessibility_server.h"
#include "servers/rendering/rendering_server.h"
#include "modules/modules_enabled.gen.h" // For regex.
@ -71,6 +71,14 @@ Rect2i _merge_or_copy_rect(const Rect2i &p_a, const Rect2i &p_b) {
}
}
RichTextLabel::Line::~Line() {
if (accessibility_line_element.is_valid()) {
AccessibilityServer::get_singleton()->free_element(accessibility_line_element);
accessibility_line_element = RID();
accessibility_text_element = RID();
}
}
RichTextLabel::Item *RichTextLabel::_get_next_item(Item *p_item, bool p_free) const {
if (!p_item) {
return nullptr;
@ -2133,14 +2141,14 @@ void RichTextLabel::_accessibility_update_line(RID p_id, ItemFrame *p_frame, int
if (l.accessibility_line_element.is_valid()) {
return;
}
l.accessibility_line_element = DisplayServer::get_singleton()->accessibility_create_sub_element(p_id, DisplayServer::AccessibilityRole::ROLE_CONTAINER);
l.accessibility_line_element = AccessibilityServer::get_singleton()->create_sub_element(p_id, AccessibilityServerEnums::AccessibilityRole::ROLE_CONTAINER);
MutexLock lock(l.text_buf->get_mutex());
const RID &line_ae = l.accessibility_line_element;
Rect2 ae_rect = Rect2(p_ofs, Size2(p_width, l.text_buf->get_size().y + l.text_buf->get_line_count() * theme_cache.line_separation));
DisplayServer::get_singleton()->accessibility_update_set_bounds(line_ae, ae_rect);
AccessibilityServer::get_singleton()->update_set_bounds(line_ae, ae_rect);
ac_element_bounds_cache[line_ae] = ae_rect;
Item *it_from = l.from;
@ -2178,15 +2186,15 @@ void RichTextLabel::_accessibility_update_line(RID p_id, ItemFrame *p_frame, int
}
}
l.accessibility_text_element = DisplayServer::get_singleton()->accessibility_create_sub_element(line_ae, DisplayServer::AccessibilityRole::ROLE_STATIC_TEXT);
DisplayServer::get_singleton()->accessibility_update_set_value(l.accessibility_text_element, l_text);
l.accessibility_text_element = AccessibilityServer::get_singleton()->create_sub_element(line_ae, AccessibilityServerEnums::AccessibilityRole::ROLE_STATIC_TEXT);
AccessibilityServer::get_singleton()->update_set_value(l.accessibility_text_element, l_text);
ae_rect = Rect2(p_ofs + off, text_buf->get_size());
DisplayServer::get_singleton()->accessibility_update_set_bounds(l.accessibility_text_element, ae_rect);
AccessibilityServer::get_singleton()->update_set_bounds(l.accessibility_text_element, ae_rect);
ac_element_bounds_cache[l.accessibility_text_element] = ae_rect;
DisplayServer::get_singleton()->accessibility_update_add_action(l.accessibility_text_element, DisplayServer::AccessibilityAction::ACTION_FOCUS, callable_mp(this, &RichTextLabel::_accessibility_focus_item).bind((uint64_t)l.from, true, true));
DisplayServer::get_singleton()->accessibility_update_add_action(l.accessibility_text_element, DisplayServer::AccessibilityAction::ACTION_BLUR, callable_mp(this, &RichTextLabel::_accessibility_focus_item).bind((uint64_t)l.from, true, false));
DisplayServer::get_singleton()->accessibility_update_add_action(l.accessibility_text_element, DisplayServer::AccessibilityAction::ACTION_SCROLL_INTO_VIEW, callable_mp(this, &RichTextLabel::_accessibility_scroll_to_item).bind((uint64_t)l.from));
AccessibilityServer::get_singleton()->update_add_action(l.accessibility_text_element, AccessibilityServerEnums::AccessibilityAction::ACTION_FOCUS, callable_mp(this, &RichTextLabel::_accessibility_focus_item).bind((uint64_t)l.from, true, true));
AccessibilityServer::get_singleton()->update_add_action(l.accessibility_text_element, AccessibilityServerEnums::AccessibilityAction::ACTION_BLUR, callable_mp(this, &RichTextLabel::_accessibility_focus_item).bind((uint64_t)l.from, true, false));
AccessibilityServer::get_singleton()->update_add_action(l.accessibility_text_element, AccessibilityServerEnums::AccessibilityAction::ACTION_SCROLL_INTO_VIEW, callable_mp(this, &RichTextLabel::_accessibility_scroll_to_item).bind((uint64_t)l.from));
}
Vector2 off;
@ -2250,9 +2258,9 @@ void RichTextLabel::_accessibility_update_line(RID p_id, ItemFrame *p_frame, int
switch (it->type) {
case ITEM_IMAGE: {
ItemImage *img = static_cast<ItemImage *>(it);
RID img_ae = DisplayServer::get_singleton()->accessibility_create_sub_element(line_ae, DisplayServer::AccessibilityRole::ROLE_IMAGE);
RID img_ae = AccessibilityServer::get_singleton()->create_sub_element(line_ae, AccessibilityServerEnums::AccessibilityRole::ROLE_IMAGE);
DisplayServer::get_singleton()->accessibility_update_set_name(img_ae, img->alt_text);
AccessibilityServer::get_singleton()->update_set_name(img_ae, img->alt_text);
if (img->pad) {
Size2 pad_size = rect.size.min(img->image->get_size());
Vector2 pad_off = (rect.size - pad_size) / 2;
@ -2260,12 +2268,12 @@ void RichTextLabel::_accessibility_update_line(RID p_id, ItemFrame *p_frame, int
} else {
ae_rect = Rect2(p_ofs + rect.position + off, rect.size);
}
DisplayServer::get_singleton()->accessibility_update_set_bounds(img_ae, ae_rect);
AccessibilityServer::get_singleton()->update_set_bounds(img_ae, ae_rect);
ac_element_bounds_cache[img_ae] = ae_rect;
DisplayServer::get_singleton()->accessibility_update_add_action(img_ae, DisplayServer::AccessibilityAction::ACTION_FOCUS, callable_mp(this, &RichTextLabel::_accessibility_focus_item).bind((uint64_t)it, false, true));
DisplayServer::get_singleton()->accessibility_update_add_action(img_ae, DisplayServer::AccessibilityAction::ACTION_BLUR, callable_mp(this, &RichTextLabel::_accessibility_focus_item).bind((uint64_t)it, false, false));
DisplayServer::get_singleton()->accessibility_update_add_action(img_ae, DisplayServer::AccessibilityAction::ACTION_SCROLL_INTO_VIEW, callable_mp(this, &RichTextLabel::_accessibility_scroll_to_item).bind((uint64_t)it));
AccessibilityServer::get_singleton()->update_add_action(img_ae, AccessibilityServerEnums::AccessibilityAction::ACTION_FOCUS, callable_mp(this, &RichTextLabel::_accessibility_focus_item).bind((uint64_t)it, false, true));
AccessibilityServer::get_singleton()->update_add_action(img_ae, AccessibilityServerEnums::AccessibilityAction::ACTION_BLUR, callable_mp(this, &RichTextLabel::_accessibility_focus_item).bind((uint64_t)it, false, false));
AccessibilityServer::get_singleton()->update_add_action(img_ae, AccessibilityServerEnums::AccessibilityAction::ACTION_SCROLL_INTO_VIEW, callable_mp(this, &RichTextLabel::_accessibility_scroll_to_item).bind((uint64_t)it));
it->accessibility_item_element = img_ae;
} break;
@ -2274,31 +2282,31 @@ void RichTextLabel::_accessibility_update_line(RID p_id, ItemFrame *p_frame, int
float h_separation = theme_cache.table_h_separation;
float v_separation = theme_cache.table_v_separation;
RID table_ae = DisplayServer::get_singleton()->accessibility_create_sub_element(line_ae, DisplayServer::AccessibilityRole::ROLE_TABLE);
RID table_ae = AccessibilityServer::get_singleton()->create_sub_element(line_ae, AccessibilityServerEnums::AccessibilityRole::ROLE_TABLE);
int col_count = table->columns.size();
int row_count = table->rows.size();
DisplayServer::get_singleton()->accessibility_update_set_name(table_ae, table->name);
DisplayServer::get_singleton()->accessibility_update_set_role(table_ae, DisplayServer::AccessibilityRole::ROLE_TABLE);
DisplayServer::get_singleton()->accessibility_update_set_table_column_count(table_ae, col_count);
DisplayServer::get_singleton()->accessibility_update_set_table_row_count(table_ae, row_count);
AccessibilityServer::get_singleton()->update_set_name(table_ae, table->name);
AccessibilityServer::get_singleton()->update_set_role(table_ae, AccessibilityServerEnums::AccessibilityRole::ROLE_TABLE);
AccessibilityServer::get_singleton()->update_set_table_column_count(table_ae, col_count);
AccessibilityServer::get_singleton()->update_set_table_row_count(table_ae, row_count);
ae_rect = Rect2(p_ofs + rect.position + off + Vector2(0, TS->shaped_text_get_ascent(rid)), rect.size);
DisplayServer::get_singleton()->accessibility_update_set_bounds(table_ae, ae_rect);
AccessibilityServer::get_singleton()->update_set_bounds(table_ae, ae_rect);
ac_element_bounds_cache[table_ae] = ae_rect;
DisplayServer::get_singleton()->accessibility_update_add_action(table_ae, DisplayServer::AccessibilityAction::ACTION_FOCUS, callable_mp(this, &RichTextLabel::_accessibility_focus_item).bind((uint64_t)it, false, true));
DisplayServer::get_singleton()->accessibility_update_add_action(table_ae, DisplayServer::AccessibilityAction::ACTION_BLUR, callable_mp(this, &RichTextLabel::_accessibility_focus_item).bind((uint64_t)it, false, false));
DisplayServer::get_singleton()->accessibility_update_add_action(table_ae, DisplayServer::AccessibilityAction::ACTION_SCROLL_INTO_VIEW, callable_mp(this, &RichTextLabel::_accessibility_scroll_to_item).bind((uint64_t)it));
AccessibilityServer::get_singleton()->update_add_action(table_ae, AccessibilityServerEnums::AccessibilityAction::ACTION_FOCUS, callable_mp(this, &RichTextLabel::_accessibility_focus_item).bind((uint64_t)it, false, true));
AccessibilityServer::get_singleton()->update_add_action(table_ae, AccessibilityServerEnums::AccessibilityAction::ACTION_BLUR, callable_mp(this, &RichTextLabel::_accessibility_focus_item).bind((uint64_t)it, false, false));
AccessibilityServer::get_singleton()->update_add_action(table_ae, AccessibilityServerEnums::AccessibilityAction::ACTION_SCROLL_INTO_VIEW, callable_mp(this, &RichTextLabel::_accessibility_scroll_to_item).bind((uint64_t)it));
Vector<RID> row_aes;
Vector2 row_off = Vector2(0, TS->shaped_text_get_ascent(rid));
for (int j = 0; j < row_count; j++) {
RID row_ae = DisplayServer::get_singleton()->accessibility_create_sub_element(table_ae, DisplayServer::AccessibilityRole::ROLE_ROW);
RID row_ae = AccessibilityServer::get_singleton()->create_sub_element(table_ae, AccessibilityServerEnums::AccessibilityRole::ROLE_ROW);
DisplayServer::get_singleton()->accessibility_update_set_table_row_index(row_ae, j);
AccessibilityServer::get_singleton()->update_set_table_row_index(row_ae, j);
ae_rect = Rect2(p_ofs + rect.position + off + row_off, Size2(rect.size.x, table->rows[j]));
DisplayServer::get_singleton()->accessibility_update_set_bounds(row_ae, ae_rect);
AccessibilityServer::get_singleton()->update_set_bounds(row_ae, ae_rect);
ac_element_bounds_cache[row_ae] = ae_rect;
row_off.y += table->rows[j];
@ -2313,7 +2321,7 @@ void RichTextLabel::_accessibility_update_line(RID p_id, ItemFrame *p_frame, int
int row = idx / col_count;
for (int j = 0; j < (int)frame->lines.size(); j++) {
RID cell_ae = DisplayServer::get_singleton()->accessibility_create_sub_element(row_aes[row], DisplayServer::AccessibilityRole::ROLE_CELL);
RID cell_ae = AccessibilityServer::get_singleton()->create_sub_element(row_aes[row], AccessibilityServerEnums::AccessibilityRole::ROLE_CELL);
if (frame->lines.size() != 0 && row < row_count) {
Vector2 coff = frame->lines[0].offset;
@ -2322,10 +2330,10 @@ void RichTextLabel::_accessibility_update_line(RID p_id, ItemFrame *p_frame, int
coff.x = rect.size.width - table->columns[col].width - coff.x;
}
ae_rect = Rect2(p_ofs + rect.position + off + coff - frame->padding.position - Vector2(h_separation * 0.5, v_separation * 0.5).floor(), Size2(table->columns[col].width + h_separation + frame->padding.position.x + frame->padding.size.x, table->rows[row]));
DisplayServer::get_singleton()->accessibility_update_set_bounds(cell_ae, ae_rect);
AccessibilityServer::get_singleton()->update_set_bounds(cell_ae, ae_rect);
ac_element_bounds_cache[cell_ae] = ae_rect;
}
DisplayServer::get_singleton()->accessibility_update_set_table_cell_position(cell_ae, row, col);
AccessibilityServer::get_singleton()->update_set_table_cell_position(cell_ae, row, col);
_accessibility_update_line(cell_ae, frame, j, p_ofs + rect.position + off + Vector2(0, frame->lines[j].offset.y), rect.size.x, p_vsep);
}
@ -2416,7 +2424,7 @@ void RichTextLabel::_invalidate_accessibility() {
ItemFrame *fr = static_cast<ItemFrame *>(it);
for (size_t i = 0; i < fr->lines.size(); i++) {
if (fr->lines[i].accessibility_line_element.is_valid()) {
DisplayServer::get_singleton()->accessibility_free_element(fr->lines[i].accessibility_line_element);
AccessibilityServer::get_singleton()->free_element(fr->lines[i].accessibility_line_element);
}
fr->lines[i].accessibility_line_element = RID();
fr->lines[i].accessibility_text_element = RID();
@ -2471,29 +2479,29 @@ void RichTextLabel::_notification(int p_what) {
RID ae = get_accessibility_element();
ERR_FAIL_COND(ae.is_null());
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_CONTAINER);
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_CONTAINER);
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_SHOW_CONTEXT_MENU, callable_mp(this, &RichTextLabel::_accessibility_action_menu));
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_SCROLL_DOWN, callable_mp(this, &RichTextLabel::_accessibility_scroll_down));
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_SCROLL_UP, callable_mp(this, &RichTextLabel::_accessibility_scroll_up));
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_SET_SCROLL_OFFSET, callable_mp(this, &RichTextLabel::_accessibility_scroll_set));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_SHOW_CONTEXT_MENU, callable_mp(this, &RichTextLabel::_accessibility_action_menu));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_SCROLL_DOWN, callable_mp(this, &RichTextLabel::_accessibility_scroll_down));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_SCROLL_UP, callable_mp(this, &RichTextLabel::_accessibility_scroll_up));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_SET_SCROLL_OFFSET, callable_mp(this, &RichTextLabel::_accessibility_scroll_set));
if (_validate_line_caches()) {
DisplayServer::get_singleton()->accessibility_update_set_flag(ae, DisplayServer::AccessibilityFlags::FLAG_BUSY, false);
AccessibilityServer::get_singleton()->update_set_flag(ae, AccessibilityServerEnums::AccessibilityFlags::FLAG_BUSY, false);
} else {
DisplayServer::get_singleton()->accessibility_update_set_flag(ae, DisplayServer::AccessibilityFlags::FLAG_BUSY, true);
AccessibilityServer::get_singleton()->update_set_flag(ae, AccessibilityServerEnums::AccessibilityFlags::FLAG_BUSY, true);
return; // Do not update internal elements if threaded procesisng is not done.
}
if (accessibility_scroll_element.is_null()) {
accessibility_scroll_element = DisplayServer::get_singleton()->accessibility_create_sub_element(ae, DisplayServer::AccessibilityRole::ROLE_CONTAINER);
accessibility_scroll_element = AccessibilityServer::get_singleton()->create_sub_element(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_CONTAINER);
}
Rect2 text_rect = _get_text_rect();
Transform2D scroll_xform;
scroll_xform.set_origin(Vector2i(0, -vscroll->get_value()));
DisplayServer::get_singleton()->accessibility_update_set_transform(accessibility_scroll_element, scroll_xform);
DisplayServer::get_singleton()->accessibility_update_set_bounds(accessibility_scroll_element, text_rect);
AccessibilityServer::get_singleton()->update_set_transform(accessibility_scroll_element, scroll_xform);
AccessibilityServer::get_singleton()->update_set_bounds(accessibility_scroll_element, text_rect);
MutexLock data_lock(data_mutex);

View file

@ -184,13 +184,7 @@ private:
Line() {
text_buf.instantiate();
}
~Line() {
if (accessibility_line_element.is_valid()) {
DisplayServer::get_singleton()->accessibility_free_element(accessibility_line_element);
accessibility_line_element = RID();
accessibility_text_element = RID();
}
}
~Line();
_FORCE_INLINE_ float get_height(float p_line_separation, float p_paragraph_separation) const {
return offset.y + text_buf->get_size().y + text_buf->get_line_count() * p_line_separation + p_paragraph_separation;

View file

@ -33,6 +33,7 @@
#include "core/object/class_db.h"
#include "scene/main/window.h"
#include "scene/theme/theme_db.h"
#include "servers/display/accessibility_server.h"
bool ScrollBar::focus_by_default = false;
@ -260,7 +261,7 @@ void ScrollBar::_notification(int p_what) {
RID ae = get_accessibility_element();
ERR_FAIL_COND(ae.is_null());
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_SCROLL_BAR);
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_SCROLL_BAR);
} break;
case NOTIFICATION_DRAW: {

View file

@ -36,6 +36,7 @@
#include "scene/gui/texture_rect.h"
#include "scene/main/window.h"
#include "scene/theme/theme_db.h"
#include "servers/display/accessibility_server.h"
Size2 ScrollContainer::get_minimum_size() const {
// Calculated in this function, as it needs to traverse all child controls once to calculate;
@ -398,7 +399,7 @@ void ScrollContainer::_accessibility_action_scroll_set(const Variant &p_data) {
}
void ScrollContainer::_accessibility_action_scroll_up(const Variant &p_data) {
if ((DisplayServer::AccessibilityScrollUnit)p_data == DisplayServer::SCROLL_UNIT_ITEM) {
if ((AccessibilityServerEnums::AccessibilityScrollUnit)p_data == AccessibilityServerEnums::SCROLL_UNIT_ITEM) {
v_scroll->set_value(v_scroll->get_value() - v_scroll->get_page() / ScrollBar::PAGE_DIVISOR);
} else {
v_scroll->set_value(v_scroll->get_value() - v_scroll->get_page());
@ -406,7 +407,7 @@ void ScrollContainer::_accessibility_action_scroll_up(const Variant &p_data) {
}
void ScrollContainer::_accessibility_action_scroll_down(const Variant &p_data) {
if ((DisplayServer::AccessibilityScrollUnit)p_data == DisplayServer::SCROLL_UNIT_ITEM) {
if ((AccessibilityServerEnums::AccessibilityScrollUnit)p_data == AccessibilityServerEnums::SCROLL_UNIT_ITEM) {
v_scroll->set_value(v_scroll->get_value() + v_scroll->get_page() / ScrollBar::PAGE_DIVISOR);
} else {
v_scroll->set_value(v_scroll->get_value() + v_scroll->get_page());
@ -414,7 +415,7 @@ void ScrollContainer::_accessibility_action_scroll_down(const Variant &p_data) {
}
void ScrollContainer::_accessibility_action_scroll_left(const Variant &p_data) {
if ((DisplayServer::AccessibilityScrollUnit)p_data == DisplayServer::SCROLL_UNIT_ITEM) {
if ((AccessibilityServerEnums::AccessibilityScrollUnit)p_data == AccessibilityServerEnums::SCROLL_UNIT_ITEM) {
h_scroll->set_value(h_scroll->get_value() - h_scroll->get_page() / ScrollBar::PAGE_DIVISOR);
} else {
h_scroll->set_value(h_scroll->get_value() - h_scroll->get_page());
@ -422,7 +423,7 @@ void ScrollContainer::_accessibility_action_scroll_left(const Variant &p_data) {
}
void ScrollContainer::_accessibility_action_scroll_right(const Variant &p_data) {
if ((DisplayServer::AccessibilityScrollUnit)p_data == DisplayServer::SCROLL_UNIT_ITEM) {
if ((AccessibilityServerEnums::AccessibilityScrollUnit)p_data == AccessibilityServerEnums::SCROLL_UNIT_ITEM) {
h_scroll->set_value(h_scroll->get_value() + h_scroll->get_page() / ScrollBar::PAGE_DIVISOR);
} else {
h_scroll->set_value(h_scroll->get_value() + h_scroll->get_page());
@ -436,16 +437,16 @@ void ScrollContainer::_notification(int p_what) {
ERR_FAIL_COND(ae.is_null());
if (is_accessibility_region()) {
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_REGION);
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_REGION);
} else {
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_SCROLL_VIEW);
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_SCROLL_VIEW);
}
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_SCROLL_DOWN, callable_mp(this, &ScrollContainer::_accessibility_action_scroll_down));
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_SCROLL_LEFT, callable_mp(this, &ScrollContainer::_accessibility_action_scroll_left));
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_SCROLL_RIGHT, callable_mp(this, &ScrollContainer::_accessibility_action_scroll_right));
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_SCROLL_UP, callable_mp(this, &ScrollContainer::_accessibility_action_scroll_up));
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_SET_SCROLL_OFFSET, callable_mp(this, &ScrollContainer::_accessibility_action_scroll_set));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_SCROLL_DOWN, callable_mp(this, &ScrollContainer::_accessibility_action_scroll_down));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_SCROLL_LEFT, callable_mp(this, &ScrollContainer::_accessibility_action_scroll_left));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_SCROLL_RIGHT, callable_mp(this, &ScrollContainer::_accessibility_action_scroll_right));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_SCROLL_UP, callable_mp(this, &ScrollContainer::_accessibility_action_scroll_up));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_SET_SCROLL_OFFSET, callable_mp(this, &ScrollContainer::_accessibility_action_scroll_set));
} break;
case NOTIFICATION_THEME_CHANGED: {

View file

@ -33,6 +33,7 @@
#include "core/input/input.h"
#include "core/object/class_db.h"
#include "scene/theme/theme_db.h"
#include "servers/display/accessibility_server.h"
Size2 Slider::get_minimum_size() const {
Size2i ss = theme_cache.slider_style->get_minimum_size();
@ -245,7 +246,7 @@ void Slider::_notification(int p_what) {
RID ae = get_accessibility_element();
ERR_FAIL_COND(ae.is_null());
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_SLIDER);
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_SLIDER);
} break;
case NOTIFICATION_THEME_CHANGED: {

View file

@ -35,6 +35,7 @@
#include "core/object/class_db.h"
#include "core/string/translation_server.h"
#include "scene/theme/theme_db.h"
#include "servers/display/accessibility_server.h"
void SpinBoxLineEdit::_accessibility_action_inc(const Variant &p_data) {
SpinBox *parent_sb = Object::cast_to<SpinBox>(get_parent());
@ -61,20 +62,20 @@ void SpinBoxLineEdit::_notification(int p_what) {
SpinBox *parent_sb = Object::cast_to<SpinBox>(get_parent());
if (parent_sb) {
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_SPIN_BUTTON);
DisplayServer::get_singleton()->accessibility_update_set_name(ae, parent_sb->get_accessibility_name());
DisplayServer::get_singleton()->accessibility_update_set_description(ae, parent_sb->get_accessibility_description());
DisplayServer::get_singleton()->accessibility_update_set_live(ae, parent_sb->get_accessibility_live());
DisplayServer::get_singleton()->accessibility_update_set_num_value(ae, parent_sb->get_value());
DisplayServer::get_singleton()->accessibility_update_set_num_range(ae, parent_sb->get_min(), parent_sb->get_max());
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_SPIN_BUTTON);
AccessibilityServer::get_singleton()->update_set_name(ae, parent_sb->get_accessibility_name());
AccessibilityServer::get_singleton()->update_set_description(ae, parent_sb->get_accessibility_description());
AccessibilityServer::get_singleton()->update_set_live(ae, parent_sb->get_accessibility_live());
AccessibilityServer::get_singleton()->update_set_num_value(ae, parent_sb->get_value());
AccessibilityServer::get_singleton()->update_set_num_range(ae, parent_sb->get_min(), parent_sb->get_max());
if (parent_sb->get_step() > 0) {
DisplayServer::get_singleton()->accessibility_update_set_num_step(ae, parent_sb->get_step());
AccessibilityServer::get_singleton()->update_set_num_step(ae, parent_sb->get_step());
} else {
DisplayServer::get_singleton()->accessibility_update_set_num_step(ae, 1);
AccessibilityServer::get_singleton()->update_set_num_step(ae, 1);
}
//DisplayServer::get_singleton()->accessibility_update_set_num_jump(ae, ???);
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_DECREMENT, callable_mp(this, &SpinBoxLineEdit::_accessibility_action_dec));
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_INCREMENT, callable_mp(this, &SpinBoxLineEdit::_accessibility_action_inc));
//AccessibilityServer::get_singleton()->update_set_num_jump(ae, ???);
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_DECREMENT, callable_mp(this, &SpinBoxLineEdit::_accessibility_action_dec));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_INCREMENT, callable_mp(this, &SpinBoxLineEdit::_accessibility_action_inc));
}
} break;
}

View file

@ -35,6 +35,7 @@
#include "scene/gui/texture_rect.h"
#include "scene/main/viewport.h"
#include "scene/theme/theme_db.h"
#include "servers/display/accessibility_server.h"
void SplitContainerDragger::gui_input(const Ref<InputEvent> &p_event) {
ERR_FAIL_COND(p_event.is_null());
@ -206,19 +207,19 @@ void SplitContainerDragger::_notification(int p_what) {
RID ae = get_accessibility_element();
ERR_FAIL_COND(ae.is_null());
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_SPLITTER);
DisplayServer::get_singleton()->accessibility_update_set_name(ae, RTR("Drag to resize"));
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_SPLITTER);
AccessibilityServer::get_singleton()->update_set_name(ae, RTR("Drag to resize"));
SplitContainer *sc = Object::cast_to<SplitContainer>(get_parent());
if (sc->collapsed || sc->valid_children.size() < 2u || !sc->dragging_enabled) {
return;
}
sc->clamp_split_offset(dragger_index);
DisplayServer::get_singleton()->accessibility_update_set_num_value(ae, sc->get_split_offset(dragger_index));
AccessibilityServer::get_singleton()->update_set_num_value(ae, sc->get_split_offset(dragger_index));
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_DECREMENT, callable_mp(this, &SplitContainerDragger::_accessibility_action_dec));
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_INCREMENT, callable_mp(this, &SplitContainerDragger::_accessibility_action_inc));
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_SET_VALUE, callable_mp(this, &SplitContainerDragger::_accessibility_action_set_value));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_DECREMENT, callable_mp(this, &SplitContainerDragger::_accessibility_action_dec));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_INCREMENT, callable_mp(this, &SplitContainerDragger::_accessibility_action_inc));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_SET_VALUE, callable_mp(this, &SplitContainerDragger::_accessibility_action_set_value));
} break;
case NOTIFICATION_THEME_CHANGED: {

View file

@ -38,6 +38,7 @@
#include "scene/main/timer.h"
#include "scene/main/viewport.h"
#include "scene/theme/theme_db.h"
#include "servers/display/accessibility_server.h"
static inline Color _select_color(const Color &p_override_color, const Color &p_default_color) {
return p_override_color.a > 0 ? p_override_color : p_default_color;
@ -373,7 +374,7 @@ RID TabBar::get_tab_accessibility_element(int p_tab) const {
const Tab &item = tabs[p_tab];
if (item.accessibility_item_element.is_null()) {
item.accessibility_item_element = DisplayServer::get_singleton()->accessibility_create_sub_element(ae, DisplayServer::AccessibilityRole::ROLE_TAB);
item.accessibility_item_element = AccessibilityServer::get_singleton()->create_sub_element(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_TAB);
item.accessibility_item_dirty = true;
}
return item.accessibility_item_element;
@ -439,29 +440,29 @@ void TabBar::_notification(int p_what) {
RID ae = get_accessibility_element();
ERR_FAIL_COND(ae.is_null());
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_TAB_BAR);
DisplayServer::get_singleton()->accessibility_update_set_list_item_count(ae, tabs.size());
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_TAB_BAR);
AccessibilityServer::get_singleton()->update_set_list_item_count(ae, tabs.size());
for (int i = 0; i < tabs.size(); i++) {
const Tab &item = tabs[i];
if (item.accessibility_item_element.is_null()) {
item.accessibility_item_element = DisplayServer::get_singleton()->accessibility_create_sub_element(ae, DisplayServer::AccessibilityRole::ROLE_TAB);
item.accessibility_item_element = AccessibilityServer::get_singleton()->create_sub_element(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_TAB);
item.accessibility_item_dirty = true;
}
if (item.accessibility_item_dirty) {
DisplayServer::get_singleton()->accessibility_update_add_action(item.accessibility_item_element, DisplayServer::AccessibilityAction::ACTION_SCROLL_INTO_VIEW, callable_mp(this, &TabBar::_accessibility_action_scroll_into_view).bind(i));
DisplayServer::get_singleton()->accessibility_update_add_action(item.accessibility_item_element, DisplayServer::AccessibilityAction::ACTION_FOCUS, callable_mp(this, &TabBar::_accessibility_action_focus).bind(i));
AccessibilityServer::get_singleton()->update_add_action(item.accessibility_item_element, AccessibilityServerEnums::AccessibilityAction::ACTION_SCROLL_INTO_VIEW, callable_mp(this, &TabBar::_accessibility_action_scroll_into_view).bind(i));
AccessibilityServer::get_singleton()->update_add_action(item.accessibility_item_element, AccessibilityServerEnums::AccessibilityAction::ACTION_FOCUS, callable_mp(this, &TabBar::_accessibility_action_focus).bind(i));
DisplayServer::get_singleton()->accessibility_update_set_list_item_index(item.accessibility_item_element, i);
DisplayServer::get_singleton()->accessibility_update_set_name(item.accessibility_item_element, atr(item.text));
DisplayServer::get_singleton()->accessibility_update_set_list_item_selected(item.accessibility_item_element, i == current);
DisplayServer::get_singleton()->accessibility_update_set_flag(item.accessibility_item_element, DisplayServer::AccessibilityFlags::FLAG_DISABLED, item.disabled);
DisplayServer::get_singleton()->accessibility_update_set_flag(item.accessibility_item_element, DisplayServer::AccessibilityFlags::FLAG_HIDDEN, item.hidden);
DisplayServer::get_singleton()->accessibility_update_set_tooltip(item.accessibility_item_element, item.tooltip);
AccessibilityServer::get_singleton()->update_set_list_item_index(item.accessibility_item_element, i);
AccessibilityServer::get_singleton()->update_set_name(item.accessibility_item_element, atr(item.text));
AccessibilityServer::get_singleton()->update_set_list_item_selected(item.accessibility_item_element, i == current);
AccessibilityServer::get_singleton()->update_set_flag(item.accessibility_item_element, AccessibilityServerEnums::AccessibilityFlags::FLAG_DISABLED, item.disabled);
AccessibilityServer::get_singleton()->update_set_flag(item.accessibility_item_element, AccessibilityServerEnums::AccessibilityFlags::FLAG_HIDDEN, item.hidden);
AccessibilityServer::get_singleton()->update_set_tooltip(item.accessibility_item_element, item.tooltip);
DisplayServer::get_singleton()->accessibility_update_set_bounds(item.accessibility_item_element, Rect2(Point2(item.ofs_cache, 0), Size2(item.size_cache, get_size().height)));
AccessibilityServer::get_singleton()->update_set_bounds(item.accessibility_item_element, Rect2(Point2(item.ofs_cache, 0), Size2(item.size_cache, get_size().height)));
item.accessibility_item_dirty = false;
}
@ -749,7 +750,7 @@ void TabBar::set_tab_count(int p_count) {
if (tabs.size() > p_count) {
for (int i = p_count; i < tabs.size(); i++) {
if (tabs[i].accessibility_item_element.is_valid()) {
DisplayServer::get_singleton()->accessibility_free_element(tabs.write[i].accessibility_item_element);
AccessibilityServer::get_singleton()->free_element(tabs.write[i].accessibility_item_element);
tabs.write[i].accessibility_item_element = RID();
}
}
@ -1340,7 +1341,7 @@ void TabBar::clear_tabs() {
for (int i = 0; i < tabs.size(); i++) {
if (tabs[i].accessibility_item_element.is_valid()) {
DisplayServer::get_singleton()->accessibility_free_element(tabs.write[i].accessibility_item_element);
AccessibilityServer::get_singleton()->free_element(tabs.write[i].accessibility_item_element);
tabs.write[i].accessibility_item_element = RID();
}
}
@ -1360,7 +1361,7 @@ void TabBar::remove_tab(int p_idx) {
ERR_FAIL_INDEX(p_idx, tabs.size());
if (tabs[p_idx].accessibility_item_element.is_valid()) {
DisplayServer::get_singleton()->accessibility_free_element(tabs.write[p_idx].accessibility_item_element);
AccessibilityServer::get_singleton()->free_element(tabs.write[p_idx].accessibility_item_element);
tabs.write[p_idx].accessibility_item_element = RID();
}
tabs.remove_at(p_idx);

View file

@ -35,6 +35,7 @@
#include "scene/gui/button.h"
#include "scene/gui/popup.h"
#include "scene/theme/theme_db.h"
#include "servers/display/accessibility_server.h"
TabContainer::CachedTab &TabContainer::get_pending_tab(int p_idx) const {
if (p_idx >= pending_tabs.size()) {
@ -115,18 +116,18 @@ void TabContainer::_notification(int p_what) {
}
Control *control = _as_tab_control(child_node);
if (!control) {
DisplayServer::get_singleton()->accessibility_update_add_child(ae, child_node->get_accessibility_element());
AccessibilityServer::get_singleton()->update_add_child(ae, child_node->get_accessibility_element());
} else {
if (!tab_panels.has(child_node)) {
tab_panels[child_node] = DisplayServer::get_singleton()->accessibility_create_sub_element(ae, DisplayServer::AccessibilityRole::ROLE_TAB_PANEL);
tab_panels[child_node] = AccessibilityServer::get_singleton()->create_sub_element(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_TAB_PANEL);
}
RID panel = tab_panels[child_node];
RID tab = tab_bar->get_tab_accessibility_element(tab_index);
DisplayServer::get_singleton()->accessibility_update_add_related_controls(tab, panel);
DisplayServer::get_singleton()->accessibility_update_add_related_labeled_by(panel, tab);
DisplayServer::get_singleton()->accessibility_update_set_flag(panel, DisplayServer::AccessibilityFlags::FLAG_HIDDEN, tab_index != tab_cur);
DisplayServer::get_singleton()->accessibility_update_add_child(panel, child_node->get_accessibility_element());
AccessibilityServer::get_singleton()->update_add_related_controls(tab, panel);
AccessibilityServer::get_singleton()->update_add_related_labeled_by(panel, tab);
AccessibilityServer::get_singleton()->update_set_flag(panel, AccessibilityServerEnums::AccessibilityFlags::FLAG_HIDDEN, tab_index != tab_cur);
AccessibilityServer::get_singleton()->update_add_child(panel, child_node->get_accessibility_element());
tab_index++;
}
@ -619,7 +620,7 @@ void TabContainer::remove_child_notify(Node *p_child) {
Container::remove_child_notify(p_child);
if (tab_panels.has(p_child)) {
DisplayServer::get_singleton()->accessibility_free_element(tab_panels[p_child]);
AccessibilityServer::get_singleton()->free_element(tab_panels[p_child]);
tab_panels.erase(p_child);
}

View file

@ -43,6 +43,7 @@
#include "scene/gui/label.h"
#include "scene/main/window.h"
#include "scene/theme/theme_db.h"
#include "servers/display/accessibility_server.h"
#include "servers/rendering/rendering_server.h"
#include "servers/rendering/rendering_server_enums.h"
@ -247,7 +248,7 @@ void TextEdit::Text::update_accessibility(int p_line, RID p_root) {
if (l.accessibility_text_root_element.is_empty()) {
for (int i = 0; i < l.data_buf->get_line_count(); i++) {
bool is_last_line = (p_line == text.size() - 1) && (i == l.data_buf->get_line_count() - 1);
RID rid = DisplayServer::get_singleton()->accessibility_create_sub_text_edit_elements(p_root, l.data_buf->get_line_rid(i), max_line_height, p_line, is_last_line);
RID rid = AccessibilityServer::get_singleton()->create_sub_text_edit_elements(p_root, l.data_buf->get_line_rid(i), max_line_height, p_line, is_last_line);
l.accessibility_text_root_element.push_back(rid);
}
}
@ -270,7 +271,7 @@ void TextEdit::Text::invalidate_cache(int p_line, bool p_text_changed) {
Line &l = text.write[p_line];
for (const RID rid : l.accessibility_text_root_element) {
if (rid.is_valid()) {
DisplayServer::get_singleton()->accessibility_free_element(rid);
AccessibilityServer::get_singleton()->free_element(rid);
}
}
l.accessibility_text_root_element.clear();
@ -649,11 +650,11 @@ String TextEdit::Text::get_enabled_word_separators() const {
void TextEdit::_accessibility_action_set_selection(const Variant &p_data) {
Dictionary new_selection = p_data;
RID sel_start = new_selection["start_element"];
Vector2i sel_start_line = DisplayServer::get_singleton()->accessibility_element_get_meta(sel_start);
Vector2i sel_start_line = AccessibilityServer::get_singleton()->element_get_meta(sel_start);
int sel_start_pos = new_selection["start_char"];
RID sel_end = new_selection["end_element"];
Vector2i sel_end_line = DisplayServer::get_singleton()->accessibility_element_get_meta(sel_end);
Vector2i sel_end_line = AccessibilityServer::get_singleton()->element_get_meta(sel_end);
int sel_end_pos = new_selection["end_char"];
remove_secondary_carets();
@ -682,7 +683,7 @@ void TextEdit::_accessibility_action_menu(const Variant &p_data) {
}
void TextEdit::_accessibility_scroll_down(const Variant &p_data) {
if ((DisplayServer::AccessibilityScrollUnit)p_data == DisplayServer::SCROLL_UNIT_ITEM) {
if ((AccessibilityServerEnums::AccessibilityScrollUnit)p_data == AccessibilityServerEnums::SCROLL_UNIT_ITEM) {
v_scroll->set_value(v_scroll->get_value() + v_scroll->get_page() / 4);
} else {
v_scroll->set_value(v_scroll->get_value() + v_scroll->get_page());
@ -691,7 +692,7 @@ void TextEdit::_accessibility_scroll_down(const Variant &p_data) {
}
void TextEdit::_accessibility_scroll_left(const Variant &p_data) {
if ((DisplayServer::AccessibilityScrollUnit)p_data == DisplayServer::SCROLL_UNIT_ITEM) {
if ((AccessibilityServerEnums::AccessibilityScrollUnit)p_data == AccessibilityServerEnums::SCROLL_UNIT_ITEM) {
h_scroll->set_value(h_scroll->get_value() - h_scroll->get_page() / 4);
} else {
h_scroll->set_value(h_scroll->get_value() - h_scroll->get_page());
@ -700,7 +701,7 @@ void TextEdit::_accessibility_scroll_left(const Variant &p_data) {
}
void TextEdit::_accessibility_scroll_right(const Variant &p_data) {
if ((DisplayServer::AccessibilityScrollUnit)p_data == DisplayServer::SCROLL_UNIT_ITEM) {
if ((AccessibilityServerEnums::AccessibilityScrollUnit)p_data == AccessibilityServerEnums::SCROLL_UNIT_ITEM) {
h_scroll->set_value(h_scroll->get_value() + h_scroll->get_page() / 4);
} else {
h_scroll->set_value(h_scroll->get_value() + h_scroll->get_page());
@ -709,7 +710,7 @@ void TextEdit::_accessibility_scroll_right(const Variant &p_data) {
}
void TextEdit::_accessibility_scroll_up(const Variant &p_data) {
if ((DisplayServer::AccessibilityScrollUnit)p_data == DisplayServer::SCROLL_UNIT_ITEM) {
if ((AccessibilityServerEnums::AccessibilityScrollUnit)p_data == AccessibilityServerEnums::SCROLL_UNIT_ITEM) {
v_scroll->set_value(v_scroll->get_value() - v_scroll->get_page() / 4);
} else {
v_scroll->set_value(v_scroll->get_value() - v_scroll->get_page());
@ -748,24 +749,24 @@ void TextEdit::_notification(int p_what) {
RID ae = get_accessibility_element();
ERR_FAIL_COND(ae.is_null());
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_MULTILINE_TEXT_FIELD);
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_MULTILINE_TEXT_FIELD);
if (text.size() == 1 && text[0].is_empty()) {
DisplayServer::get_singleton()->accessibility_update_set_placeholder(ae, atr(placeholder_text));
AccessibilityServer::get_singleton()->update_set_placeholder(ae, atr(placeholder_text));
}
if (!placeholder_text.is_empty() && get_accessibility_name().is_empty()) {
DisplayServer::get_singleton()->accessibility_update_set_name(ae, atr(placeholder_text));
AccessibilityServer::get_singleton()->update_set_name(ae, atr(placeholder_text));
}
DisplayServer::get_singleton()->accessibility_update_set_flag(ae, DisplayServer::AccessibilityFlags::FLAG_READONLY, !editable);
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_SET_TEXT_SELECTION, callable_mp(this, &TextEdit::_accessibility_action_set_selection));
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_REPLACE_SELECTED_TEXT, callable_mp(this, &TextEdit::_accessibility_action_replace_selected));
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_SET_VALUE, callable_mp(this, &TextEdit::_accessibility_action_set_value));
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_SHOW_CONTEXT_MENU, callable_mp(this, &TextEdit::_accessibility_action_menu));
AccessibilityServer::get_singleton()->update_set_flag(ae, AccessibilityServerEnums::AccessibilityFlags::FLAG_READONLY, !editable);
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_SET_TEXT_SELECTION, callable_mp(this, &TextEdit::_accessibility_action_set_selection));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_REPLACE_SELECTED_TEXT, callable_mp(this, &TextEdit::_accessibility_action_replace_selected));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_SET_VALUE, callable_mp(this, &TextEdit::_accessibility_action_set_value));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_SHOW_CONTEXT_MENU, callable_mp(this, &TextEdit::_accessibility_action_menu));
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_SCROLL_DOWN, callable_mp(this, &TextEdit::_accessibility_scroll_down));
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_SCROLL_LEFT, callable_mp(this, &TextEdit::_accessibility_scroll_left));
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_SCROLL_RIGHT, callable_mp(this, &TextEdit::_accessibility_scroll_right));
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_SCROLL_UP, callable_mp(this, &TextEdit::_accessibility_scroll_up));
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_SET_SCROLL_OFFSET, callable_mp(this, &TextEdit::_accessibility_scroll_set));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_SCROLL_DOWN, callable_mp(this, &TextEdit::_accessibility_scroll_down));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_SCROLL_LEFT, callable_mp(this, &TextEdit::_accessibility_scroll_left));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_SCROLL_RIGHT, callable_mp(this, &TextEdit::_accessibility_scroll_right));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_SCROLL_UP, callable_mp(this, &TextEdit::_accessibility_scroll_up));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_SET_SCROLL_OFFSET, callable_mp(this, &TextEdit::_accessibility_scroll_set));
int first_vis_line = get_first_visible_line();
int row_height = get_line_height();
@ -800,13 +801,13 @@ void TextEdit::_notification(int p_what) {
char_margin += wrap_indent;
}
DisplayServer::get_singleton()->accessibility_update_set_flag(text_aes[j], DisplayServer::AccessibilityFlags::FLAG_HIDDEN, _is_line_hidden(i));
AccessibilityServer::get_singleton()->update_set_flag(text_aes[j], AccessibilityServerEnums::AccessibilityFlags::FLAG_HIDDEN, _is_line_hidden(i));
Transform2D tr;
tr.set_origin(Point2(char_margin, text_off_y));
DisplayServer::get_singleton()->accessibility_update_set_transform(text_aes[j], tr);
DisplayServer::get_singleton()->accessibility_update_set_name(text_aes[j], vformat(RTR("Line %d"), i));
DisplayServer::get_singleton()->accessibility_element_set_meta(text_aes[j], Vector2i(i, j));
DisplayServer::get_singleton()->accessibility_update_add_action(text_aes[j], DisplayServer::AccessibilityAction::ACTION_SCROLL_INTO_VIEW, callable_mp(this, &TextEdit::_accessibility_action_scroll_into_view).bind(i, j));
AccessibilityServer::get_singleton()->update_set_transform(text_aes[j], tr);
AccessibilityServer::get_singleton()->update_set_name(text_aes[j], vformat(RTR("Line %d"), i));
AccessibilityServer::get_singleton()->element_set_meta(text_aes[j], Vector2i(i, j));
AccessibilityServer::get_singleton()->update_add_action(text_aes[j], AccessibilityServerEnums::AccessibilityAction::ACTION_SCROLL_INTO_VIEW, callable_mp(this, &TextEdit::_accessibility_action_scroll_into_view).bind(i, j));
}
lines_drawn += ac_buf->get_line_count();
}
@ -819,11 +820,11 @@ void TextEdit::_notification(int p_what) {
int end_wrap = get_line_wrap_index_at_column(carets[0].line, carets[0].column);
RID end_rid = text.get_accessibility_elements(carets[0].line)[end_wrap];
DisplayServer::get_singleton()->accessibility_update_set_text_selection(ae, start_rid, carets[0].selection.origin_column, end_rid, carets[0].column);
AccessibilityServer::get_singleton()->update_set_text_selection(ae, start_rid, carets[0].selection.origin_column, end_rid, carets[0].column);
} else {
int caret_wrap = get_line_wrap_index_at_column(carets[0].line, carets[0].column);
RID caret_rid = text.get_accessibility_elements(carets[0].line)[caret_wrap];
DisplayServer::get_singleton()->accessibility_update_set_text_selection(ae, caret_rid, carets[0].column, caret_rid, carets[0].column);
AccessibilityServer::get_singleton()->update_set_text_selection(ae, caret_rid, carets[0].column, caret_rid, carets[0].column);
}
}
} break;

View file

@ -31,6 +31,7 @@
#include "texture_progress_bar.h"
#include "core/object/class_db.h"
#include "servers/display/accessibility_server.h"
#include "servers/rendering/rendering_server.h"
void TextureProgressBar::set_under_texture(const Ref<Texture2D> &p_texture) {
@ -436,7 +437,7 @@ void TextureProgressBar::_notification(int p_what) {
RID ae = get_accessibility_element();
ERR_FAIL_COND(ae.is_null());
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_PROGRESS_INDICATOR);
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_PROGRESS_INDICATOR);
} break;
case NOTIFICATION_DRAW: {

View file

@ -161,17 +161,17 @@ void TreeItem::_change_tree(Tree *p_tree) {
tree = p_tree;
if (accessibility_row_element.is_valid()) {
DisplayServer::get_singleton()->accessibility_free_element(accessibility_row_element);
AccessibilityServer::get_singleton()->free_element(accessibility_row_element);
accessibility_row_element = RID();
}
for (Cell &cell : cells) {
if (cell.accessibility_cell_element.is_valid()) {
DisplayServer::get_singleton()->accessibility_free_element(cell.accessibility_cell_element);
AccessibilityServer::get_singleton()->free_element(cell.accessibility_cell_element);
cell.accessibility_cell_element = RID();
}
for (Cell::Button &btn : cell.buttons) {
if (btn.accessibility_button_element.is_valid()) {
DisplayServer::get_singleton()->accessibility_free_element(btn.accessibility_button_element);
AccessibilityServer::get_singleton()->free_element(btn.accessibility_button_element);
btn.accessibility_button_element = RID();
}
}
@ -1367,7 +1367,7 @@ void TreeItem::clear_buttons() {
if (!cell.buttons.is_empty()) {
for (Cell::Button &btn : cell.buttons) {
if (btn.accessibility_button_element.is_valid()) {
DisplayServer::get_singleton()->accessibility_free_element(btn.accessibility_button_element);
AccessibilityServer::get_singleton()->free_element(btn.accessibility_button_element);
}
}
cell.buttons.clear();
@ -1426,7 +1426,7 @@ void TreeItem::erase_button(int p_column, int p_index) {
ERR_FAIL_INDEX(p_column, cells.size());
ERR_FAIL_INDEX(p_index, cells[p_column].buttons.size());
if (cells[p_column].buttons[p_index].accessibility_button_element.is_valid()) {
DisplayServer::get_singleton()->accessibility_free_element(cells.write[p_column].buttons.write[p_index].accessibility_button_element);
AccessibilityServer::get_singleton()->free_element(cells.write[p_column].buttons.write[p_index].accessibility_button_element);
}
cells.write[p_column].buttons.remove_at(p_index);
_changed_notify(p_column);
@ -4706,7 +4706,7 @@ PackedStringArray Tree::get_accessibility_configuration_warnings() const {
}
void Tree::_accessibility_action_scroll_down(const Variant &p_data) {
if ((DisplayServer::AccessibilityScrollUnit)p_data == DisplayServer::SCROLL_UNIT_ITEM) {
if ((AccessibilityServerEnums::AccessibilityScrollUnit)p_data == AccessibilityServerEnums::SCROLL_UNIT_ITEM) {
v_scroll->set_value(v_scroll->get_value() + v_scroll->get_page() / 4);
} else {
v_scroll->set_value(v_scroll->get_value() + v_scroll->get_page());
@ -4714,7 +4714,7 @@ void Tree::_accessibility_action_scroll_down(const Variant &p_data) {
}
void Tree::_accessibility_action_scroll_left(const Variant &p_data) {
if ((DisplayServer::AccessibilityScrollUnit)p_data == DisplayServer::SCROLL_UNIT_ITEM) {
if ((AccessibilityServerEnums::AccessibilityScrollUnit)p_data == AccessibilityServerEnums::SCROLL_UNIT_ITEM) {
h_scroll->set_value(h_scroll->get_value() - h_scroll->get_page() / 4);
} else {
h_scroll->set_value(h_scroll->get_value() - h_scroll->get_page());
@ -4722,7 +4722,7 @@ void Tree::_accessibility_action_scroll_left(const Variant &p_data) {
}
void Tree::_accessibility_action_scroll_right(const Variant &p_data) {
if ((DisplayServer::AccessibilityScrollUnit)p_data == DisplayServer::SCROLL_UNIT_ITEM) {
if ((AccessibilityServerEnums::AccessibilityScrollUnit)p_data == AccessibilityServerEnums::SCROLL_UNIT_ITEM) {
h_scroll->set_value(h_scroll->get_value() + h_scroll->get_page() / 4);
} else {
h_scroll->set_value(h_scroll->get_value() + h_scroll->get_page());
@ -4730,7 +4730,7 @@ void Tree::_accessibility_action_scroll_right(const Variant &p_data) {
}
void Tree::_accessibility_action_scroll_up(const Variant &p_data) {
if ((DisplayServer::AccessibilityScrollUnit)p_data == DisplayServer::SCROLL_UNIT_ITEM) {
if ((AccessibilityServerEnums::AccessibilityScrollUnit)p_data == AccessibilityServerEnums::SCROLL_UNIT_ITEM) {
v_scroll->set_value(v_scroll->get_value() - v_scroll->get_page() / 4);
} else {
v_scroll->set_value(v_scroll->get_value() - v_scroll->get_page());
@ -4841,27 +4841,27 @@ void Tree::_accessibility_update_item(Point2 &r_ofs, TreeItem *p_item, int &r_ro
// Row.
if ((p_item != root || !hide_root) && p_item->is_visible()) {
if (p_item->accessibility_row_element.is_null()) {
p_item->accessibility_row_element = DisplayServer::get_singleton()->accessibility_create_sub_element(accessibility_scroll_element, DisplayServer::AccessibilityRole::ROLE_TREE_ITEM);
p_item->accessibility_row_element = AccessibilityServer::get_singleton()->create_sub_element(accessibility_scroll_element, AccessibilityServerEnums::AccessibilityRole::ROLE_TREE_ITEM);
p_item->accessibility_row_dirty = true;
}
DisplayServer::get_singleton()->accessibility_update_set_table_row_index(p_item->accessibility_row_element, r_row);
DisplayServer::get_singleton()->accessibility_update_set_list_item_level(p_item->accessibility_row_element, p_level);
DisplayServer::get_singleton()->accessibility_update_set_list_item_expanded(p_item->accessibility_row_element, !p_item->collapsed);
DisplayServer::get_singleton()->accessibility_update_set_flag(p_item->accessibility_row_element, DisplayServer::AccessibilityFlags::FLAG_HIDDEN, !(p_item->visible && !p_item->parent_visible_in_tree));
DisplayServer::get_singleton()->accessibility_update_add_action(p_item->accessibility_row_element, DisplayServer::AccessibilityAction::ACTION_COLLAPSE, callable_mp(this, &Tree::_accessibility_action_collapse).bind(p_item));
DisplayServer::get_singleton()->accessibility_update_add_action(p_item->accessibility_row_element, DisplayServer::AccessibilityAction::ACTION_EXPAND, callable_mp(this, &Tree::_accessibility_action_expand).bind(p_item));
AccessibilityServer::get_singleton()->update_set_table_row_index(p_item->accessibility_row_element, r_row);
AccessibilityServer::get_singleton()->update_set_list_item_level(p_item->accessibility_row_element, p_level);
AccessibilityServer::get_singleton()->update_set_list_item_expanded(p_item->accessibility_row_element, !p_item->collapsed);
AccessibilityServer::get_singleton()->update_set_flag(p_item->accessibility_row_element, AccessibilityServerEnums::AccessibilityFlags::FLAG_HIDDEN, !(p_item->visible && !p_item->parent_visible_in_tree));
AccessibilityServer::get_singleton()->update_add_action(p_item->accessibility_row_element, AccessibilityServerEnums::AccessibilityAction::ACTION_COLLAPSE, callable_mp(this, &Tree::_accessibility_action_collapse).bind(p_item));
AccessibilityServer::get_singleton()->update_add_action(p_item->accessibility_row_element, AccessibilityServerEnums::AccessibilityAction::ACTION_EXPAND, callable_mp(this, &Tree::_accessibility_action_expand).bind(p_item));
DisplayServer::get_singleton()->accessibility_update_set_list_item_selected(p_item->accessibility_row_element, selected_item == p_item);
AccessibilityServer::get_singleton()->update_set_list_item_selected(p_item->accessibility_row_element, selected_item == p_item);
if (p_item == root && is_root_hidden()) {
DisplayServer::get_singleton()->accessibility_update_set_flag(p_item->accessibility_row_element, DisplayServer::AccessibilityFlags::FLAG_HIDDEN, true);
AccessibilityServer::get_singleton()->update_set_flag(p_item->accessibility_row_element, AccessibilityServerEnums::AccessibilityFlags::FLAG_HIDDEN, true);
}
Transform2D row_xform;
row_xform.set_origin(r_ofs);
DisplayServer::get_singleton()->accessibility_update_set_transform(p_item->accessibility_row_element, row_xform);
AccessibilityServer::get_singleton()->update_set_transform(p_item->accessibility_row_element, row_xform);
Size2 item_size = Size2(get_size().width, compute_item_height(p_item));
DisplayServer::get_singleton()->accessibility_update_set_bounds(p_item->accessibility_row_element, Rect2(Vector2(), item_size));
AccessibilityServer::get_singleton()->update_set_bounds(p_item->accessibility_row_element, Rect2(Vector2(), item_size));
if (p_item->accessibility_row_dirty) {
// Cells.
@ -4870,82 +4870,82 @@ void Tree::_accessibility_update_item(Point2 &r_ofs, TreeItem *p_item, int &r_ro
TreeItem::Cell &cell = p_item->cells.write[i];
if (cell.accessibility_cell_element.is_null()) {
cell.accessibility_cell_element = DisplayServer::get_singleton()->accessibility_create_sub_element(p_item->accessibility_row_element, DisplayServer::AccessibilityRole::ROLE_CELL);
cell.accessibility_cell_element = AccessibilityServer::get_singleton()->create_sub_element(p_item->accessibility_row_element, AccessibilityServerEnums::AccessibilityRole::ROLE_CELL);
}
float cw = get_column_width(i);
DisplayServer::get_singleton()->accessibility_update_add_action(cell.accessibility_cell_element, DisplayServer::AccessibilityAction::ACTION_SCROLL_INTO_VIEW, callable_mp(this, &Tree::_accessibility_action_scroll_into_view).bind(p_item, i));
DisplayServer::get_singleton()->accessibility_update_add_action(cell.accessibility_cell_element, DisplayServer::AccessibilityAction::ACTION_FOCUS, callable_mp(this, &Tree::_accessibility_action_focus).bind(p_item, i));
DisplayServer::get_singleton()->accessibility_update_add_action(cell.accessibility_cell_element, DisplayServer::AccessibilityAction::ACTION_BLUR, callable_mp(this, &Tree::_accessibility_action_blur).bind(p_item, i));
DisplayServer::get_singleton()->accessibility_update_add_action(cell.accessibility_cell_element, DisplayServer::AccessibilityAction::ACTION_COLLAPSE, callable_mp(this, &Tree::_accessibility_action_collapse).bind(p_item));
DisplayServer::get_singleton()->accessibility_update_add_action(cell.accessibility_cell_element, DisplayServer::AccessibilityAction::ACTION_EXPAND, callable_mp(this, &Tree::_accessibility_action_expand).bind(p_item));
AccessibilityServer::get_singleton()->update_add_action(cell.accessibility_cell_element, AccessibilityServerEnums::AccessibilityAction::ACTION_SCROLL_INTO_VIEW, callable_mp(this, &Tree::_accessibility_action_scroll_into_view).bind(p_item, i));
AccessibilityServer::get_singleton()->update_add_action(cell.accessibility_cell_element, AccessibilityServerEnums::AccessibilityAction::ACTION_FOCUS, callable_mp(this, &Tree::_accessibility_action_focus).bind(p_item, i));
AccessibilityServer::get_singleton()->update_add_action(cell.accessibility_cell_element, AccessibilityServerEnums::AccessibilityAction::ACTION_BLUR, callable_mp(this, &Tree::_accessibility_action_blur).bind(p_item, i));
AccessibilityServer::get_singleton()->update_add_action(cell.accessibility_cell_element, AccessibilityServerEnums::AccessibilityAction::ACTION_COLLAPSE, callable_mp(this, &Tree::_accessibility_action_collapse).bind(p_item));
AccessibilityServer::get_singleton()->update_add_action(cell.accessibility_cell_element, AccessibilityServerEnums::AccessibilityAction::ACTION_EXPAND, callable_mp(this, &Tree::_accessibility_action_expand).bind(p_item));
DisplayServer::get_singleton()->accessibility_update_set_table_cell_position(cell.accessibility_cell_element, r_row, i);
DisplayServer::get_singleton()->accessibility_update_set_list_item_selected(cell.accessibility_cell_element, cell.selected);
AccessibilityServer::get_singleton()->update_set_table_cell_position(cell.accessibility_cell_element, r_row, i);
AccessibilityServer::get_singleton()->update_set_list_item_selected(cell.accessibility_cell_element, cell.selected);
if (cell.description.is_empty()) {
DisplayServer::get_singleton()->accessibility_update_set_name(cell.accessibility_cell_element, cell.xl_text);
AccessibilityServer::get_singleton()->update_set_name(cell.accessibility_cell_element, cell.xl_text);
} else {
DisplayServer::get_singleton()->accessibility_update_set_name(cell.accessibility_cell_element, cell.description);
AccessibilityServer::get_singleton()->update_set_name(cell.accessibility_cell_element, cell.description);
}
DisplayServer::get_singleton()->accessibility_update_set_text_align(cell.accessibility_cell_element, cell.text_alignment);
DisplayServer::get_singleton()->accessibility_update_set_flag(cell.accessibility_cell_element, DisplayServer::AccessibilityFlags::FLAG_HIDDEN, !(p_item->visible && !p_item->parent_visible_in_tree));
DisplayServer::get_singleton()->accessibility_update_set_flag(cell.accessibility_cell_element, DisplayServer::AccessibilityFlags::FLAG_READONLY, !cell.editable);
DisplayServer::get_singleton()->accessibility_update_set_tooltip(cell.accessibility_cell_element, cell.tooltip);
AccessibilityServer::get_singleton()->update_set_text_align(cell.accessibility_cell_element, cell.text_alignment);
AccessibilityServer::get_singleton()->update_set_flag(cell.accessibility_cell_element, AccessibilityServerEnums::AccessibilityFlags::FLAG_HIDDEN, !(p_item->visible && !p_item->parent_visible_in_tree));
AccessibilityServer::get_singleton()->update_set_flag(cell.accessibility_cell_element, AccessibilityServerEnums::AccessibilityFlags::FLAG_READONLY, !cell.editable);
AccessibilityServer::get_singleton()->update_set_tooltip(cell.accessibility_cell_element, cell.tooltip);
switch (cell.mode) {
case TreeItem::CELL_MODE_STRING: {
DisplayServer::get_singleton()->accessibility_update_add_action(cell.accessibility_cell_element, DisplayServer::AccessibilityAction::ACTION_SET_VALUE, callable_mp(this, &Tree::_accessibility_action_set_text_value).bind(p_item, i));
DisplayServer::get_singleton()->accessibility_update_set_value(cell.accessibility_cell_element, cell.xl_text);
AccessibilityServer::get_singleton()->update_add_action(cell.accessibility_cell_element, AccessibilityServerEnums::AccessibilityAction::ACTION_SET_VALUE, callable_mp(this, &Tree::_accessibility_action_set_text_value).bind(p_item, i));
AccessibilityServer::get_singleton()->update_set_value(cell.accessibility_cell_element, cell.xl_text);
} break;
case TreeItem::CELL_MODE_CHECK: {
DisplayServer::get_singleton()->accessibility_update_add_action(cell.accessibility_cell_element, DisplayServer::AccessibilityAction::ACTION_CLICK, callable_mp(this, &Tree::_accessibility_action_set_bool_value).bind(p_item, i));
DisplayServer::get_singleton()->accessibility_update_set_checked(cell.accessibility_cell_element, cell.checked);
AccessibilityServer::get_singleton()->update_add_action(cell.accessibility_cell_element, AccessibilityServerEnums::AccessibilityAction::ACTION_CLICK, callable_mp(this, &Tree::_accessibility_action_set_bool_value).bind(p_item, i));
AccessibilityServer::get_singleton()->update_set_checked(cell.accessibility_cell_element, cell.checked);
} break;
case TreeItem::CELL_MODE_RANGE: {
DisplayServer::get_singleton()->accessibility_update_add_action(cell.accessibility_cell_element, DisplayServer::AccessibilityAction::ACTION_DECREMENT, callable_mp(this, &Tree::_accessibility_action_set_dec).bind(p_item, i));
DisplayServer::get_singleton()->accessibility_update_add_action(cell.accessibility_cell_element, DisplayServer::AccessibilityAction::ACTION_INCREMENT, callable_mp(this, &Tree::_accessibility_action_set_inc).bind(p_item, i));
DisplayServer::get_singleton()->accessibility_update_add_action(cell.accessibility_cell_element, DisplayServer::AccessibilityAction::ACTION_SET_VALUE, callable_mp(this, &Tree::_accessibility_action_set_num_value).bind(p_item, i));
DisplayServer::get_singleton()->accessibility_update_set_num_value(cell.accessibility_cell_element, cell.val);
DisplayServer::get_singleton()->accessibility_update_set_num_range(cell.accessibility_cell_element, cell.min, cell.max);
AccessibilityServer::get_singleton()->update_add_action(cell.accessibility_cell_element, AccessibilityServerEnums::AccessibilityAction::ACTION_DECREMENT, callable_mp(this, &Tree::_accessibility_action_set_dec).bind(p_item, i));
AccessibilityServer::get_singleton()->update_add_action(cell.accessibility_cell_element, AccessibilityServerEnums::AccessibilityAction::ACTION_INCREMENT, callable_mp(this, &Tree::_accessibility_action_set_inc).bind(p_item, i));
AccessibilityServer::get_singleton()->update_add_action(cell.accessibility_cell_element, AccessibilityServerEnums::AccessibilityAction::ACTION_SET_VALUE, callable_mp(this, &Tree::_accessibility_action_set_num_value).bind(p_item, i));
AccessibilityServer::get_singleton()->update_set_num_value(cell.accessibility_cell_element, cell.val);
AccessibilityServer::get_singleton()->update_set_num_range(cell.accessibility_cell_element, cell.min, cell.max);
if (cell.step > 0) {
DisplayServer::get_singleton()->accessibility_update_set_num_step(cell.accessibility_cell_element, cell.step);
AccessibilityServer::get_singleton()->update_set_num_step(cell.accessibility_cell_element, cell.step);
} else {
DisplayServer::get_singleton()->accessibility_update_set_num_step(cell.accessibility_cell_element, 1);
AccessibilityServer::get_singleton()->update_set_num_step(cell.accessibility_cell_element, 1);
}
} break;
case TreeItem::CELL_MODE_ICON: {
// NOP
} break;
case TreeItem::CELL_MODE_CUSTOM: {
DisplayServer::get_singleton()->accessibility_update_add_action(cell.accessibility_cell_element, DisplayServer::AccessibilityAction::ACTION_CLICK, callable_mp(this, &Tree::_accessibility_action_edit_custom).bind(p_item, i));
AccessibilityServer::get_singleton()->update_add_action(cell.accessibility_cell_element, AccessibilityServerEnums::AccessibilityAction::ACTION_CLICK, callable_mp(this, &Tree::_accessibility_action_edit_custom).bind(p_item, i));
} break;
}
DisplayServer::get_singleton()->accessibility_update_set_background_color(cell.accessibility_cell_element, cell.color);
DisplayServer::get_singleton()->accessibility_update_set_foreground_color(cell.accessibility_cell_element, cell.bg_color);
AccessibilityServer::get_singleton()->update_set_background_color(cell.accessibility_cell_element, cell.color);
AccessibilityServer::get_singleton()->update_set_foreground_color(cell.accessibility_cell_element, cell.bg_color);
DisplayServer::get_singleton()->accessibility_update_set_bounds(cell.accessibility_cell_element, Rect2(Point2(col_offset, 0), Size2(cw, item_size.y)));
AccessibilityServer::get_singleton()->update_set_bounds(cell.accessibility_cell_element, Rect2(Point2(col_offset, 0), Size2(cw, item_size.y)));
Vector2 ofst = Vector2(col_offset + cw, 0);
for (int j = cell.buttons.size() - 1; j >= 0; j--) {
if (cell.buttons[j].accessibility_button_element.is_null()) {
cell.buttons[j].accessibility_button_element = DisplayServer::get_singleton()->accessibility_create_sub_element(cell.accessibility_cell_element, DisplayServer::AccessibilityRole::ROLE_BUTTON);
cell.buttons[j].accessibility_button_element = AccessibilityServer::get_singleton()->create_sub_element(cell.accessibility_cell_element, AccessibilityServerEnums::AccessibilityRole::ROLE_BUTTON);
}
DisplayServer::get_singleton()->accessibility_update_add_action(cell.buttons[j].accessibility_button_element, DisplayServer::AccessibilityAction::ACTION_CLICK, callable_mp(this, &Tree::_accessibility_action_button_press).bind(p_item, i, j));
DisplayServer::get_singleton()->accessibility_update_set_flag(cell.buttons[j].accessibility_button_element, DisplayServer::AccessibilityFlags::FLAG_DISABLED, cell.buttons[j].disabled);
DisplayServer::get_singleton()->accessibility_update_set_tooltip(cell.buttons[j].accessibility_button_element, cell.buttons[j].tooltip);
AccessibilityServer::get_singleton()->update_add_action(cell.buttons[j].accessibility_button_element, AccessibilityServerEnums::AccessibilityAction::ACTION_CLICK, callable_mp(this, &Tree::_accessibility_action_button_press).bind(p_item, i, j));
AccessibilityServer::get_singleton()->update_set_flag(cell.buttons[j].accessibility_button_element, AccessibilityServerEnums::AccessibilityFlags::FLAG_DISABLED, cell.buttons[j].disabled);
AccessibilityServer::get_singleton()->update_set_tooltip(cell.buttons[j].accessibility_button_element, cell.buttons[j].tooltip);
if (cell.buttons[j].description.is_empty()) {
DisplayServer::get_singleton()->accessibility_update_set_name(cell.buttons[j].accessibility_button_element, cell.buttons[j].tooltip);
AccessibilityServer::get_singleton()->update_set_name(cell.buttons[j].accessibility_button_element, cell.buttons[j].tooltip);
} else {
DisplayServer::get_singleton()->accessibility_update_set_name(cell.buttons[j].accessibility_button_element, cell.buttons[j].description);
AccessibilityServer::get_singleton()->update_set_name(cell.buttons[j].accessibility_button_element, cell.buttons[j].description);
}
Ref<Texture2D> b = cell.buttons[j].texture;
Size2 b_size = b->get_size() + theme_cache.button_pressed->get_minimum_size();
ofst.x -= b_size.x;
DisplayServer::get_singleton()->accessibility_update_set_bounds(cell.buttons[j].accessibility_button_element, Rect2(ofst, b_size));
AccessibilityServer::get_singleton()->update_set_bounds(cell.buttons[j].accessibility_button_element, Rect2(ofst, b_size));
}
col_offset += cw;
}
@ -4985,13 +4985,13 @@ void Tree::_notification(int p_what) {
RID ae = get_accessibility_element();
ERR_FAIL_COND(ae.is_null());
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_TREE);
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_TREE);
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_SCROLL_DOWN, callable_mp(this, &Tree::_accessibility_action_scroll_down));
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_SCROLL_LEFT, callable_mp(this, &Tree::_accessibility_action_scroll_left));
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_SCROLL_RIGHT, callable_mp(this, &Tree::_accessibility_action_scroll_right));
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_SCROLL_UP, callable_mp(this, &Tree::_accessibility_action_scroll_up));
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_SET_SCROLL_OFFSET, callable_mp(this, &Tree::_accessibility_action_scroll_set));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_SCROLL_DOWN, callable_mp(this, &Tree::_accessibility_action_scroll_down));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_SCROLL_LEFT, callable_mp(this, &Tree::_accessibility_action_scroll_left));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_SCROLL_RIGHT, callable_mp(this, &Tree::_accessibility_action_scroll_right));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_SCROLL_UP, callable_mp(this, &Tree::_accessibility_action_scroll_up));
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_SET_SCROLL_OFFSET, callable_mp(this, &Tree::_accessibility_action_scroll_set));
Ref<StyleBox> bg = theme_cache.panel_style;
int tbh = _get_title_button_height();
@ -5003,32 +5003,32 @@ void Tree::_notification(int p_what) {
ColumnInfo &column = columns.write[i];
if (column.accessibility_col_element.is_null()) {
column.accessibility_col_element = DisplayServer::get_singleton()->accessibility_create_sub_element(ae, DisplayServer::AccessibilityRole::ROLE_COLUMN_HEADER);
column.accessibility_col_element = AccessibilityServer::get_singleton()->create_sub_element(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_COLUMN_HEADER);
}
DisplayServer::get_singleton()->accessibility_update_set_table_column_index(column.accessibility_col_element, i);
DisplayServer::get_singleton()->accessibility_update_set_name(column.accessibility_col_element, column.xl_title);
DisplayServer::get_singleton()->accessibility_update_set_text_align(column.accessibility_col_element, column.title_alignment);
AccessibilityServer::get_singleton()->update_set_table_column_index(column.accessibility_col_element, i);
AccessibilityServer::get_singleton()->update_set_name(column.accessibility_col_element, column.xl_title);
AccessibilityServer::get_singleton()->update_set_text_align(column.accessibility_col_element, column.title_alignment);
Rect2 tbrect = Rect2(ofs - theme_cache.offset.x, bg->get_margin(SIDE_TOP), get_column_width(i), tbh);
if (cache.rtl) {
tbrect.position.x = get_size().width - tbrect.size.x - tbrect.position.x;
}
ofs += tbrect.size.width;
DisplayServer::get_singleton()->accessibility_update_set_bounds(column.accessibility_col_element, Rect2(tbrect.position, tbrect.size));
AccessibilityServer::get_singleton()->update_set_bounds(column.accessibility_col_element, Rect2(tbrect.position, tbrect.size));
}
DisplayServer::get_singleton()->accessibility_update_set_table_column_count(ae, cs);
AccessibilityServer::get_singleton()->update_set_table_column_count(ae, cs);
// Scroll container.
if (accessibility_scroll_element.is_null()) {
accessibility_scroll_element = DisplayServer::get_singleton()->accessibility_create_sub_element(ae, DisplayServer::AccessibilityRole::ROLE_CONTAINER);
accessibility_scroll_element = AccessibilityServer::get_singleton()->create_sub_element(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_CONTAINER);
}
Transform2D scroll_xform;
scroll_xform.set_origin(Vector2i(-h_scroll->get_value(), -v_scroll->get_value()));
DisplayServer::get_singleton()->accessibility_update_set_transform(accessibility_scroll_element, scroll_xform);
DisplayServer::get_singleton()->accessibility_update_set_bounds(accessibility_scroll_element, Rect2(0, 0, h_scroll->get_max(), v_scroll->get_max()));
AccessibilityServer::get_singleton()->update_set_transform(accessibility_scroll_element, scroll_xform);
AccessibilityServer::get_singleton()->update_set_bounds(accessibility_scroll_element, Rect2(0, 0, h_scroll->get_max(), v_scroll->get_max()));
// Rows (and cells).
Point2 origin = Point2(theme_cache.panel_style->get_margin(SIDE_LEFT) - theme_cache.offset.x, bg->get_margin(SIDE_TOP) + tbh);
@ -5036,7 +5036,7 @@ void Tree::_notification(int p_what) {
if (root) {
_accessibility_update_item(origin, root, rows, 0);
}
DisplayServer::get_singleton()->accessibility_update_set_table_row_count(ae, rows);
AccessibilityServer::get_singleton()->update_set_table_row_count(ae, rows);
} break;
@ -5746,12 +5746,12 @@ void Tree::propagate_set_columns(TreeItem *p_item) {
p_item->accessibility_row_dirty = true;
for (TreeItem::Cell &cell : p_item->cells) {
if (cell.accessibility_cell_element.is_valid()) {
DisplayServer::get_singleton()->accessibility_free_element(cell.accessibility_cell_element);
AccessibilityServer::get_singleton()->free_element(cell.accessibility_cell_element);
cell.accessibility_cell_element = RID();
}
for (TreeItem::Cell::Button &btn : cell.buttons) {
if (btn.accessibility_button_element.is_valid()) {
DisplayServer::get_singleton()->accessibility_free_element(btn.accessibility_button_element);
AccessibilityServer::get_singleton()->free_element(btn.accessibility_button_element);
btn.accessibility_button_element = RID();
}
}
@ -5771,7 +5771,7 @@ void Tree::set_columns(int p_columns) {
if (columns.size() > p_columns) {
for (int i = p_columns; i < columns.size(); i++) {
if (columns[i].accessibility_col_element.is_valid()) {
DisplayServer::get_singleton()->accessibility_free_element(columns[i].accessibility_col_element);
AccessibilityServer::get_singleton()->free_element(columns[i].accessibility_col_element);
columns.write[i].accessibility_col_element = RID();
}
}

View file

@ -32,6 +32,7 @@
#include "scene/gui/control.h"
#include "scene/resources/text_paragraph.h"
#include "servers/display/accessibility_server.h"
class VBoxContainer;
class HScrollBar;
@ -181,17 +182,17 @@ private:
_FORCE_INLINE_ void _unlink_from_tree() {
if (accessibility_row_element.is_valid()) {
DisplayServer::get_singleton()->accessibility_free_element(accessibility_row_element);
AccessibilityServer::get_singleton()->free_element(accessibility_row_element);
accessibility_row_element = RID();
}
for (Cell &cell : cells) {
if (cell.accessibility_cell_element.is_valid()) {
DisplayServer::get_singleton()->accessibility_free_element(cell.accessibility_cell_element);
AccessibilityServer::get_singleton()->free_element(cell.accessibility_cell_element);
cell.accessibility_cell_element = RID();
}
for (Cell::Button &btn : cell.buttons) {
if (btn.accessibility_button_element.is_valid()) {
DisplayServer::get_singleton()->accessibility_free_element(btn.accessibility_button_element);
AccessibilityServer::get_singleton()->free_element(btn.accessibility_button_element);
btn.accessibility_button_element = RID();
}
}

View file

@ -33,6 +33,7 @@
#include "core/object/class_db.h"
#include "core/os/os.h"
#include "servers/audio/audio_server.h"
#include "servers/display/accessibility_server.h"
int VideoStreamPlayer::sp_get_channel_count() const {
if (playback.is_null()) {
@ -132,7 +133,7 @@ void VideoStreamPlayer::_notification(int p_notification) {
RID ae = get_accessibility_element();
ERR_FAIL_COND(ae.is_null());
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_VIDEO);
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_VIDEO);
} break;
case NOTIFICATION_ENTER_TREE: {

View file

@ -30,6 +30,7 @@
#include "virtual_joystick.h"
#include "core/config/engine.h"
#include "core/input/input.h"
#include "core/input/input_map.h"
#include "core/object/class_db.h"

View file

@ -43,6 +43,7 @@ STATIC_ASSERT_INCOMPLETE_TYPE(class, RenderingServer);
#include "scene/resources/multimesh.h"
#include "scene/resources/style_box.h"
#include "scene/resources/world_2d.h"
#include "servers/display/accessibility_server.h"
#include "servers/rendering/rendering_server.h"
#define ERR_DRAW_GUARD \
@ -305,7 +306,7 @@ void CanvasItem::_notification(int p_what) {
RID ae = get_accessibility_element();
ERR_FAIL_COND(ae.is_null());
DisplayServer::get_singleton()->accessibility_update_set_flag(ae, DisplayServer::AccessibilityFlags::FLAG_HIDDEN, !visible);
AccessibilityServer::get_singleton()->update_set_flag(ae, AccessibilityServerEnums::AccessibilityFlags::FLAG_HIDDEN, !visible);
} break;
case NOTIFICATION_ENTER_TREE: {

View file

@ -52,6 +52,7 @@ STATIC_ASSERT_INCOMPLETE_TYPE(class, Engine);
#include "scene/main/viewport.h"
#include "scene/main/window.h"
#include "scene/resources/packed_scene.h"
#include "servers/display/accessibility_server.h"
#ifdef DEBUG_ENABLED
#include "scene/debugger/scene_debugger.h"
@ -67,7 +68,7 @@ void Node::_notification(int p_notification) {
switch (p_notification) {
case NOTIFICATION_ACCESSIBILITY_INVALIDATE: {
if (data.accessibility_element.is_valid()) {
DisplayServer::get_singleton()->accessibility_free_element(data.accessibility_element);
AccessibilityServer::get_singleton()->free_element(data.accessibility_element);
data.accessibility_element = RID();
}
} break;
@ -76,7 +77,7 @@ void Node::_notification(int p_notification) {
RID ae = get_accessibility_element();
ERR_FAIL_COND(ae.is_null());
DisplayServer::get_singleton()->accessibility_update_set_name(ae, get_name());
AccessibilityServer::get_singleton()->update_set_name(ae, get_name());
// Node children.
if (!accessibility_override_tree_hierarchy()) {
@ -89,7 +90,7 @@ void Node::_notification(int p_notification) {
if (child_node->is_part_of_edited_scene()) {
continue;
}
DisplayServer::get_singleton()->accessibility_update_add_child(ae, child_node->get_accessibility_element());
AccessibilityServer::get_singleton()->update_add_child(ae, child_node->get_accessibility_element());
}
}
} break;
@ -195,7 +196,7 @@ void Node::_notification(int p_notification) {
if (data.tree->is_accessibility_supported() && !is_part_of_edited_scene()) {
if (data.accessibility_element.is_valid()) {
DisplayServer::get_singleton()->accessibility_free_element(data.accessibility_element);
AccessibilityServer::get_singleton()->free_element(data.accessibility_element);
data.accessibility_element = RID();
}
data.tree->_accessibility_notify_change(this, true);
@ -3721,7 +3722,7 @@ RID Node::get_accessibility_element() const {
if (unlikely(data.accessibility_element.is_null())) {
Window *w = get_non_popup_window();
if (w && w->get_window_id() != DisplayServer::INVALID_WINDOW_ID && get_window()->is_visible()) {
data.accessibility_element = DisplayServer::get_singleton()->accessibility_create_element(w->get_window_id(), DisplayServer::ROLE_CONTAINER);
data.accessibility_element = AccessibilityServer::get_singleton()->create_element(w->get_window_id(), AccessibilityServerEnums::ROLE_CONTAINER);
}
}
return data.accessibility_element;

View file

@ -54,6 +54,7 @@ STATIC_ASSERT_INCOMPLETE_TYPE(class, RenderingServer);
#include "scene/resources/mesh.h"
#include "scene/resources/packed_scene.h"
#include "scene/resources/world_2d.h"
#include "servers/display/accessibility_server.h"
#include "servers/rendering/rendering_server.h"
#ifndef _3D_DISABLED
@ -212,9 +213,9 @@ bool SceneTree::is_accessibility_enabled() const {
return false;
}
DisplayServer::AccessibilityMode accessibility_mode = DisplayServer::accessibility_get_mode();
AccessibilityServerEnums::AccessibilityMode accessibility_mode = AccessibilityServer::get_singleton()->get_mode();
int screen_reader_active = DisplayServer::get_singleton()->accessibility_screen_reader_active();
if ((accessibility_mode == DisplayServer::AccessibilityMode::ACCESSIBILITY_DISABLED) || ((accessibility_mode == DisplayServer::AccessibilityMode::ACCESSIBILITY_AUTO) && (screen_reader_active != 1))) {
if ((accessibility_mode == AccessibilityServerEnums::AccessibilityMode::ACCESSIBILITY_DISABLED) || ((accessibility_mode == AccessibilityServerEnums::AccessibilityMode::ACCESSIBILITY_AUTO) && (screen_reader_active != 1))) {
return false;
}
return true;
@ -225,8 +226,8 @@ bool SceneTree::is_accessibility_supported() const {
return false;
}
DisplayServer::AccessibilityMode accessibility_mode = DisplayServer::accessibility_get_mode();
if (accessibility_mode == DisplayServer::AccessibilityMode::ACCESSIBILITY_DISABLED) {
AccessibilityServerEnums::AccessibilityMode accessibility_mode = AccessibilityServer::get_singleton()->get_mode();
if (accessibility_mode == AccessibilityServerEnums::AccessibilityMode::ACCESSIBILITY_DISABLED) {
return false;
}
return true;
@ -289,7 +290,7 @@ void SceneTree::_process_accessibility_changes(DisplayServer::WindowID p_window_
new_focus_element = w_this->get_focused_accessibility_element();
}
DisplayServer::get_singleton()->accessibility_update_set_focus(new_focus_element);
AccessibilityServer::get_singleton()->update_set_focus(new_focus_element);
}
// Cleanup.
@ -310,7 +311,7 @@ void SceneTree::_flush_accessibility_changes() {
accessibility_last_update = time;
// Push update to the accessibility driver.
DisplayServer::get_singleton()->accessibility_update_if_active(callable_mp(this, &SceneTree::_process_accessibility_changes));
AccessibilityServer::get_singleton()->update_if_active(callable_mp(this, &SceneTree::_process_accessibility_changes));
}
}

View file

@ -39,6 +39,7 @@ STATIC_ASSERT_INCOMPLETE_TYPE(class, RenderingServer);
#include "scene/gui/control.h"
#include "scene/theme/theme_db.h"
#include "scene/theme/theme_owner.h"
#include "servers/display/accessibility_server.h"
#include "servers/rendering/rendering_server.h"
#include "servers/rendering/rendering_server_enums.h"
@ -725,7 +726,7 @@ void Window::_make_window() {
DisplayServer::get_singleton()->window_set_title(displayed_title, window_id);
DisplayServer::get_singleton()->window_attach_instance_id(get_instance_id(), window_id);
DisplayServer::get_singleton()->window_request_hdr_output(hdr_output_requested, window_id);
DisplayServer::get_singleton()->accessibility_set_window_callbacks(window_id, callable_mp(this, &Window::_accessibility_activate), callable_mp(this, &Window::_accessibility_deactivate));
AccessibilityServer::get_singleton()->set_window_callbacks(window_id, callable_mp(this, &Window::_accessibility_activate), callable_mp(this, &Window::_accessibility_deactivate));
_update_window_size();
@ -813,7 +814,7 @@ void Window::_rect_changed_callback(const Rect2i &p_callback) {
Vector2 pos_out = DisplayServer::get_singleton()->window_get_position_with_decorations(window_id);
Vector2 sz_in = DisplayServer::get_singleton()->window_get_size(window_id);
Vector2 pos_in = DisplayServer::get_singleton()->window_get_position(window_id);
DisplayServer::get_singleton()->accessibility_set_window_rect(window_id, Rect2(pos_out, sz_out), Rect2(pos_in, sz_in));
AccessibilityServer::get_singleton()->set_window_rect(window_id, Rect2(pos_out, sz_out), Rect2(pos_in, sz_in));
}
queue_accessibility_update();
}
@ -951,12 +952,12 @@ void Window::hide() {
void Window::_accessibility_activate() {
_accessibility_notify_enter(this);
DisplayServer::get_singleton()->accessibility_window_activation_completed(get_window_id());
AccessibilityServer::get_singleton()->window_activation_completed(get_window_id());
}
void Window::_accessibility_deactivate() {
_accessibility_notify_exit(this);
DisplayServer::get_singleton()->accessibility_window_deactivation_completed(get_window_id());
AccessibilityServer::get_singleton()->window_deactivation_completed(get_window_id());
}
void Window::_accessibility_notify_enter(Node *p_node) {
@ -1048,12 +1049,12 @@ void Window::set_visible(bool p_visible) {
if (get_tree() && get_tree()->is_accessibility_supported()) {
get_tree()->_accessibility_force_update();
_accessibility_notify_enter(this);
DisplayServer::get_singleton()->accessibility_window_activation_completed(get_window_id());
AccessibilityServer::get_singleton()->window_activation_completed(get_window_id());
}
} else {
if (get_tree() && get_tree()->is_accessibility_supported()) {
_accessibility_notify_exit(this);
DisplayServer::get_singleton()->accessibility_window_deactivation_completed(get_window_id());
AccessibilityServer::get_singleton()->window_deactivation_completed(get_window_id());
}
focused = false;
if (focused_window == this) {
@ -1485,7 +1486,7 @@ RID Window::get_accessibility_element() const {
if (get_embedder() || is_popup()) {
return Node::get_accessibility_element();
} else if (window_id != DisplayServer::INVALID_WINDOW_ID) {
return DisplayServer::get_singleton()->accessibility_get_window_root(window_id);
return AccessibilityServer::get_singleton()->get_window_root(window_id);
} else {
return RID();
}
@ -1505,11 +1506,11 @@ void Window::_notification(int p_what) {
switch (p_what) {
case NOTIFICATION_ACCESSIBILITY_INVALIDATE: {
if (accessibility_title_element.is_valid()) {
DisplayServer::get_singleton()->accessibility_free_element(accessibility_title_element);
AccessibilityServer::get_singleton()->free_element(accessibility_title_element);
accessibility_title_element = RID();
}
if (accessibility_announcement_element.is_valid()) {
DisplayServer::get_singleton()->accessibility_free_element(accessibility_announcement_element);
AccessibilityServer::get_singleton()->free_element(accessibility_announcement_element);
accessibility_announcement_element = RID();
}
} break;
@ -1518,16 +1519,16 @@ void Window::_notification(int p_what) {
RID ae = get_accessibility_element();
ERR_FAIL_COND(ae.is_null());
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_WINDOW);
AccessibilityServer::get_singleton()->update_set_role(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_WINDOW);
if (accessibility_name.is_empty()) {
DisplayServer::get_singleton()->accessibility_update_set_name(ae, displayed_title);
AccessibilityServer::get_singleton()->update_set_name(ae, displayed_title);
} else {
DisplayServer::get_singleton()->accessibility_update_set_name(ae, accessibility_name);
AccessibilityServer::get_singleton()->update_set_name(ae, accessibility_name);
}
DisplayServer::get_singleton()->accessibility_update_set_description(ae, accessibility_description);
DisplayServer::get_singleton()->accessibility_update_set_flag(ae, DisplayServer::AccessibilityFlags::FLAG_MODAL, exclusive);
DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_FOCUS, callable_mp(this, &Window::_accessibility_action_grab_focus));
DisplayServer::get_singleton()->accessibility_update_set_flag(ae, DisplayServer::AccessibilityFlags::FLAG_HIDDEN, !visible);
AccessibilityServer::get_singleton()->update_set_description(ae, accessibility_description);
AccessibilityServer::get_singleton()->update_set_flag(ae, AccessibilityServerEnums::AccessibilityFlags::FLAG_MODAL, exclusive);
AccessibilityServer::get_singleton()->update_add_action(ae, AccessibilityServerEnums::AccessibilityAction::ACTION_FOCUS, callable_mp(this, &Window::_accessibility_action_grab_focus));
AccessibilityServer::get_singleton()->update_set_flag(ae, AccessibilityServerEnums::AccessibilityFlags::FLAG_HIDDEN, !visible);
if (get_embedder() || is_popup()) {
Control *parent_ctrl = Object::cast_to<Control>(get_parent());
@ -1541,33 +1542,33 @@ void Window::_notification(int p_what) {
tr.set_origin(get_position() - np->get_position());
}
}
DisplayServer::get_singleton()->accessibility_update_set_transform(ae, parent_tr.affine_inverse() * tr);
DisplayServer::get_singleton()->accessibility_update_set_bounds(ae, Rect2(Point2(), size));
AccessibilityServer::get_singleton()->update_set_transform(ae, parent_tr.affine_inverse() * tr);
AccessibilityServer::get_singleton()->update_set_bounds(ae, Rect2(Point2(), size));
if (accessibility_title_element.is_null()) {
accessibility_title_element = DisplayServer::get_singleton()->accessibility_create_sub_element(ae, DisplayServer::AccessibilityRole::ROLE_TITLE_BAR);
accessibility_title_element = AccessibilityServer::get_singleton()->create_sub_element(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_TITLE_BAR);
}
int w = get_theme_constant(SNAME("title_height"));
DisplayServer::get_singleton()->accessibility_update_set_name(accessibility_title_element, displayed_title);
DisplayServer::get_singleton()->accessibility_update_set_bounds(accessibility_title_element, Rect2(Vector2(0, -w), Size2(size.x, w)));
AccessibilityServer::get_singleton()->update_set_name(accessibility_title_element, displayed_title);
AccessibilityServer::get_singleton()->update_set_bounds(accessibility_title_element, Rect2(Vector2(0, -w), Size2(size.x, w)));
} else {
DisplayServer::get_singleton()->accessibility_update_set_transform(ae, get_final_transform());
AccessibilityServer::get_singleton()->update_set_transform(ae, get_final_transform());
if (_get_size_2d_override() != Size2()) {
DisplayServer::get_singleton()->accessibility_update_set_bounds(ae, Rect2(Point2(), _get_size_2d_override()));
AccessibilityServer::get_singleton()->update_set_bounds(ae, Rect2(Point2(), _get_size_2d_override()));
} else {
DisplayServer::get_singleton()->accessibility_update_set_bounds(ae, Rect2(Point2(), _get_size()));
AccessibilityServer::get_singleton()->update_set_bounds(ae, Rect2(Point2(), _get_size()));
}
if (accessibility_announcement_element.is_null()) {
accessibility_announcement_element = DisplayServer::get_singleton()->accessibility_create_sub_element(ae, DisplayServer::AccessibilityRole::ROLE_STATIC_TEXT);
accessibility_announcement_element = AccessibilityServer::get_singleton()->create_sub_element(ae, AccessibilityServerEnums::AccessibilityRole::ROLE_STATIC_TEXT);
}
if (announcement.is_empty()) {
DisplayServer::get_singleton()->accessibility_update_set_live(accessibility_announcement_element, DisplayServer::LIVE_OFF);
AccessibilityServer::get_singleton()->update_set_live(accessibility_announcement_element, AccessibilityServerEnums::AccessibilityLiveMode::LIVE_OFF);
} else {
DisplayServer::get_singleton()->accessibility_update_set_name(accessibility_announcement_element, announcement);
DisplayServer::get_singleton()->accessibility_update_set_live(accessibility_announcement_element, DisplayServer::LIVE_ASSERTIVE);
AccessibilityServer::get_singleton()->update_set_name(accessibility_announcement_element, announcement);
AccessibilityServer::get_singleton()->update_set_live(accessibility_announcement_element, AccessibilityServerEnums::AccessibilityLiveMode::LIVE_ASSERTIVE);
}
}
} break;
@ -1631,7 +1632,7 @@ void Window::_notification(int p_what) {
window_id = DisplayServer::MAIN_WINDOW_ID;
focused_window = this;
DisplayServer::get_singleton()->window_attach_instance_id(get_instance_id(), window_id);
DisplayServer::get_singleton()->accessibility_set_window_callbacks(window_id, callable_mp(this, &Window::_accessibility_activate), callable_mp(this, &Window::_accessibility_deactivate));
AccessibilityServer::get_singleton()->set_window_callbacks(window_id, callable_mp(this, &Window::_accessibility_activate), callable_mp(this, &Window::_accessibility_deactivate));
_update_from_window();
// Since this window already exists (created on start), we must update pos and size from it.
{
@ -1670,7 +1671,7 @@ void Window::_notification(int p_what) {
if (window_id != DisplayServer::MAIN_WINDOW_ID && get_tree() && get_tree()->is_accessibility_supported()) {
get_tree()->_accessibility_force_update();
_accessibility_notify_enter(this);
DisplayServer::get_singleton()->accessibility_window_activation_completed(get_window_id());
AccessibilityServer::get_singleton()->window_activation_completed(get_window_id());
}
notification(NOTIFICATION_VISIBILITY_CHANGED);
emit_signal(SceneStringName(visibility_changed));
@ -1725,7 +1726,7 @@ void Window::_notification(int p_what) {
if (visible && window_id != DisplayServer::MAIN_WINDOW_ID) {
if (get_tree() && get_tree()->is_accessibility_supported()) {
_accessibility_notify_exit(this);
DisplayServer::get_singleton()->accessibility_window_deactivation_completed(get_window_id());
AccessibilityServer::get_singleton()->window_deactivation_completed(get_window_id());
if (get_parent()) {
get_parent()->queue_accessibility_update();
}

View file

@ -0,0 +1,257 @@
/**************************************************************************/
/* accessibility_server.cpp */
/**************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
/* https://godotengine.org */
/**************************************************************************/
/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */
/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */
/* */
/* Permission is hereby granted, free of charge, to any person obtaining */
/* a copy of this software and associated documentation files (the */
/* "Software"), to deal in the Software without restriction, including */
/* without limitation the rights to use, copy, modify, merge, publish, */
/* distribute, sublicense, and/or sell copies of the Software, and to */
/* permit persons to whom the Software is furnished to do so, subject to */
/* the following conditions: */
/* */
/* The above copyright notice and this permission notice shall be */
/* included in all copies or substantial portions of the Software. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/**************************************************************************/
#include "accessibility_server.h"
#include "core/object/class_db.h"
#include "servers/display/accessibility_server_dummy.h"
AccessibilityServer::AccessibilityServerCreate AccessibilityServer::server_create_functions[AccessibilityServer::MAX_SERVERS] = {
{ "dummy", &AccessibilityServerDummy::create_func }
};
int AccessibilityServer::server_create_count = 1;
void AccessibilityServer::_bind_methods() {
ClassDB::bind_method(D_METHOD("is_supported"), &AccessibilityServer::is_supported);
ClassDB::bind_method(D_METHOD("create_element", "window_id", "role"), &AccessibilityServer::create_element);
ClassDB::bind_method(D_METHOD("create_sub_element", "parent_rid", "role", "insert_pos"), &AccessibilityServer::create_sub_element, DEFVAL(-1));
ClassDB::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));
ClassDB::bind_method(D_METHOD("has_element", "id"), &AccessibilityServer::has_element);
ClassDB::bind_method(D_METHOD("free_element", "id"), &AccessibilityServer::free_element);
ClassDB::bind_method(D_METHOD("element_set_meta", "id", "meta"), &AccessibilityServer::element_set_meta);
ClassDB::bind_method(D_METHOD("element_get_meta", "id"), &AccessibilityServer::element_get_meta);
ClassDB::bind_method(D_METHOD("_update_if_active", "callback"), &AccessibilityServer::update_if_active);
ClassDB::bind_method(D_METHOD("set_window_rect", "window_id", "rect_out", "rect_in"), &AccessibilityServer::set_window_rect);
ClassDB::bind_method(D_METHOD("set_window_focused", "window_id", "focused"), &AccessibilityServer::set_window_focused);
ClassDB::bind_method(D_METHOD("update_set_focus", "id"), &AccessibilityServer::update_set_focus);
ClassDB::bind_method(D_METHOD("get_window_root", "window_id"), &AccessibilityServer::get_window_root);
ClassDB::bind_method(D_METHOD("update_set_role", "id", "role"), &AccessibilityServer::update_set_role);
ClassDB::bind_method(D_METHOD("update_set_name", "id", "name"), &AccessibilityServer::update_set_name);
ClassDB::bind_method(D_METHOD("update_set_braille_label", "id", "name"), &AccessibilityServer::update_set_braille_label);
ClassDB::bind_method(D_METHOD("update_set_braille_role_description", "id", "description"), &AccessibilityServer::update_set_braille_role_description);
ClassDB::bind_method(D_METHOD("update_set_extra_info", "id", "name"), &AccessibilityServer::update_set_extra_info);
ClassDB::bind_method(D_METHOD("update_set_description", "id", "description"), &AccessibilityServer::update_set_description);
ClassDB::bind_method(D_METHOD("update_set_value", "id", "value"), &AccessibilityServer::update_set_value);
ClassDB::bind_method(D_METHOD("update_set_tooltip", "id", "tooltip"), &AccessibilityServer::update_set_tooltip);
ClassDB::bind_method(D_METHOD("update_set_bounds", "id", "p_rect"), &AccessibilityServer::update_set_bounds);
ClassDB::bind_method(D_METHOD("update_set_transform", "id", "transform"), &AccessibilityServer::update_set_transform);
ClassDB::bind_method(D_METHOD("update_add_child", "id", "child_id"), &AccessibilityServer::update_add_child);
ClassDB::bind_method(D_METHOD("update_add_related_controls", "id", "related_id"), &AccessibilityServer::update_add_related_controls);
ClassDB::bind_method(D_METHOD("update_add_related_details", "id", "related_id"), &AccessibilityServer::update_add_related_details);
ClassDB::bind_method(D_METHOD("update_add_related_described_by", "id", "related_id"), &AccessibilityServer::update_add_related_described_by);
ClassDB::bind_method(D_METHOD("update_add_related_flow_to", "id", "related_id"), &AccessibilityServer::update_add_related_flow_to);
ClassDB::bind_method(D_METHOD("update_add_related_labeled_by", "id", "related_id"), &AccessibilityServer::update_add_related_labeled_by);
ClassDB::bind_method(D_METHOD("update_add_related_radio_group", "id", "related_id"), &AccessibilityServer::update_add_related_radio_group);
ClassDB::bind_method(D_METHOD("update_set_active_descendant", "id", "other_id"), &AccessibilityServer::update_set_active_descendant);
ClassDB::bind_method(D_METHOD("update_set_next_on_line", "id", "other_id"), &AccessibilityServer::update_set_next_on_line);
ClassDB::bind_method(D_METHOD("update_set_previous_on_line", "id", "other_id"), &AccessibilityServer::update_set_previous_on_line);
ClassDB::bind_method(D_METHOD("update_set_member_of", "id", "group_id"), &AccessibilityServer::update_set_member_of);
ClassDB::bind_method(D_METHOD("update_set_in_page_link_target", "id", "other_id"), &AccessibilityServer::update_set_in_page_link_target);
ClassDB::bind_method(D_METHOD("update_set_error_message", "id", "other_id"), &AccessibilityServer::update_set_error_message);
ClassDB::bind_method(D_METHOD("update_set_live", "id", "live"), &AccessibilityServer::update_set_live);
ClassDB::bind_method(D_METHOD("update_add_action", "id", "action", "callable"), &AccessibilityServer::update_add_action);
ClassDB::bind_method(D_METHOD("update_add_custom_action", "id", "action_id", "action_description"), &AccessibilityServer::update_add_custom_action);
ClassDB::bind_method(D_METHOD("update_set_table_row_count", "id", "count"), &AccessibilityServer::update_set_table_row_count);
ClassDB::bind_method(D_METHOD("update_set_table_column_count", "id", "count"), &AccessibilityServer::update_set_table_column_count);
ClassDB::bind_method(D_METHOD("update_set_table_row_index", "id", "index"), &AccessibilityServer::update_set_table_row_index);
ClassDB::bind_method(D_METHOD("update_set_table_column_index", "id", "index"), &AccessibilityServer::update_set_table_column_index);
ClassDB::bind_method(D_METHOD("update_set_table_cell_position", "id", "row_index", "column_index"), &AccessibilityServer::update_set_table_cell_position);
ClassDB::bind_method(D_METHOD("update_set_table_cell_span", "id", "row_span", "column_span"), &AccessibilityServer::update_set_table_cell_span);
ClassDB::bind_method(D_METHOD("update_set_list_item_count", "id", "size"), &AccessibilityServer::update_set_list_item_count);
ClassDB::bind_method(D_METHOD("update_set_list_item_index", "id", "index"), &AccessibilityServer::update_set_list_item_index);
ClassDB::bind_method(D_METHOD("update_set_list_item_level", "id", "level"), &AccessibilityServer::update_set_list_item_level);
ClassDB::bind_method(D_METHOD("update_set_list_item_selected", "id", "selected"), &AccessibilityServer::update_set_list_item_selected);
ClassDB::bind_method(D_METHOD("update_set_list_item_expanded", "id", "expanded"), &AccessibilityServer::update_set_list_item_expanded);
ClassDB::bind_method(D_METHOD("update_set_popup_type", "id", "popup"), &AccessibilityServer::update_set_popup_type);
ClassDB::bind_method(D_METHOD("update_set_checked", "id", "checekd"), &AccessibilityServer::update_set_checked);
ClassDB::bind_method(D_METHOD("update_set_num_value", "id", "position"), &AccessibilityServer::update_set_num_value);
ClassDB::bind_method(D_METHOD("update_set_num_range", "id", "min", "max"), &AccessibilityServer::update_set_num_range);
ClassDB::bind_method(D_METHOD("update_set_num_step", "id", "step"), &AccessibilityServer::update_set_num_step);
ClassDB::bind_method(D_METHOD("update_set_num_jump", "id", "jump"), &AccessibilityServer::update_set_num_jump);
ClassDB::bind_method(D_METHOD("update_set_scroll_x", "id", "position"), &AccessibilityServer::update_set_scroll_x);
ClassDB::bind_method(D_METHOD("update_set_scroll_x_range", "id", "min", "max"), &AccessibilityServer::update_set_scroll_x_range);
ClassDB::bind_method(D_METHOD("update_set_scroll_y", "id", "position"), &AccessibilityServer::update_set_scroll_y);
ClassDB::bind_method(D_METHOD("update_set_scroll_y_range", "id", "min", "max"), &AccessibilityServer::update_set_scroll_y_range);
ClassDB::bind_method(D_METHOD("update_set_text_decorations", "id", "underline", "strikethrough", "overline", "color"), &AccessibilityServer::update_set_text_decorations, DEFVAL(Color(0, 0, 0, 1)));
ClassDB::bind_method(D_METHOD("update_set_text_align", "id", "align"), &AccessibilityServer::update_set_text_align);
ClassDB::bind_method(D_METHOD("update_set_text_selection", "id", "text_start_id", "start_char", "text_end_id", "end_char"), &AccessibilityServer::update_set_text_selection);
ClassDB::bind_method(D_METHOD("update_set_flag", "id", "flag", "value"), &AccessibilityServer::update_set_flag);
ClassDB::bind_method(D_METHOD("update_set_classname", "id", "classname"), &AccessibilityServer::update_set_classname);
ClassDB::bind_method(D_METHOD("update_set_placeholder", "id", "placeholder"), &AccessibilityServer::update_set_placeholder);
ClassDB::bind_method(D_METHOD("update_set_language", "id", "language"), &AccessibilityServer::update_set_language);
ClassDB::bind_method(D_METHOD("update_set_text_orientation", "id", "vertical"), &AccessibilityServer::update_set_text_orientation);
ClassDB::bind_method(D_METHOD("update_set_list_orientation", "id", "vertical"), &AccessibilityServer::update_set_list_orientation);
ClassDB::bind_method(D_METHOD("update_set_shortcut", "id", "shortcut"), &AccessibilityServer::update_set_shortcut);
ClassDB::bind_method(D_METHOD("update_set_url", "id", "url"), &AccessibilityServer::update_set_url);
ClassDB::bind_method(D_METHOD("update_set_role_description", "id", "description"), &AccessibilityServer::update_set_role_description);
ClassDB::bind_method(D_METHOD("update_set_state_description", "id", "description"), &AccessibilityServer::update_set_state_description);
ClassDB::bind_method(D_METHOD("update_set_color_value", "id", "color"), &AccessibilityServer::update_set_color_value);
ClassDB::bind_method(D_METHOD("update_set_background_color", "id", "color"), &AccessibilityServer::update_set_background_color);
ClassDB::bind_method(D_METHOD("update_set_foreground_color", "id", "color"), &AccessibilityServer::update_set_foreground_color);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_UNKNOWN);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_DEFAULT_BUTTON);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_AUDIO);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_VIDEO);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_STATIC_TEXT);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_CONTAINER);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_PANEL);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_BUTTON);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_LINK);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_CHECK_BOX);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_RADIO_BUTTON);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_CHECK_BUTTON);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_SCROLL_BAR);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_SCROLL_VIEW);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_SPLITTER);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_SLIDER);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_SPIN_BUTTON);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_PROGRESS_INDICATOR);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_TEXT_FIELD);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_MULTILINE_TEXT_FIELD);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_COLOR_PICKER);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_TABLE);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_CELL);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_ROW);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_ROW_GROUP);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_ROW_HEADER);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_COLUMN_HEADER);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_TREE);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_TREE_ITEM);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_LIST);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_LIST_ITEM);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_LIST_BOX);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_LIST_BOX_OPTION);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_TAB_BAR);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_TAB);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_TAB_PANEL);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_MENU_BAR);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_MENU);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_MENU_ITEM);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_MENU_ITEM_CHECK_BOX);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_MENU_ITEM_RADIO);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_IMAGE);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_WINDOW);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_TITLE_BAR);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_DIALOG);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_TOOLTIP);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_REGION);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ROLE_TEXT_RUN);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::POPUP_MENU);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::POPUP_LIST);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::POPUP_TREE);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::POPUP_DIALOG);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::FLAG_HIDDEN);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::FLAG_MULTISELECTABLE);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::FLAG_REQUIRED);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::FLAG_VISITED);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::FLAG_BUSY);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::FLAG_MODAL);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::FLAG_TOUCH_PASSTHROUGH);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::FLAG_READONLY);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::FLAG_DISABLED);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::FLAG_CLIPS_CHILDREN);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ACTION_CLICK);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ACTION_FOCUS);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ACTION_BLUR);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ACTION_COLLAPSE);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ACTION_EXPAND);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ACTION_DECREMENT);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ACTION_INCREMENT);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ACTION_HIDE_TOOLTIP);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ACTION_SHOW_TOOLTIP);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ACTION_SET_TEXT_SELECTION);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ACTION_REPLACE_SELECTED_TEXT);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ACTION_SCROLL_BACKWARD);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ACTION_SCROLL_DOWN);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ACTION_SCROLL_FORWARD);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ACTION_SCROLL_LEFT);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ACTION_SCROLL_RIGHT);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ACTION_SCROLL_UP);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ACTION_SCROLL_INTO_VIEW);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ACTION_SCROLL_TO_POINT);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ACTION_SET_SCROLL_OFFSET);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ACTION_SET_VALUE);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ACTION_SHOW_CONTEXT_MENU);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::ACTION_CUSTOM);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::LIVE_OFF);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::LIVE_POLITE);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::LIVE_ASSERTIVE);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::SCROLL_UNIT_ITEM);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::SCROLL_UNIT_PAGE);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::SCROLL_HINT_TOP_LEFT);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::SCROLL_HINT_BOTTOM_RIGHT);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::SCROLL_HINT_TOP_EDGE);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::SCROLL_HINT_BOTTOM_EDGE);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::SCROLL_HINT_LEFT_EDGE);
BIND_ENUM_CONSTANT(AccessibilityServerEnums::SCROLL_HINT_RIGHT_EDGE);
}
AccessibilityServer *AccessibilityServer::create(int p_index, Error &r_error) {
ERR_FAIL_INDEX_V(p_index, server_create_count, nullptr);
return server_create_functions[p_index].create_function(r_error);
}
void AccessibilityServer::register_create_function(const char *p_name, CreateFunction p_function) {
ERR_FAIL_COND(server_create_count == MAX_SERVERS);
// Dummy server is always last
server_create_functions[server_create_count] = server_create_functions[server_create_count - 1];
server_create_functions[server_create_count - 1].name = p_name;
server_create_functions[server_create_count - 1].create_function = p_function;
server_create_count++;
}
int AccessibilityServer::get_create_function_count() {
return server_create_count;
}
const char *AccessibilityServer::get_create_function_name(int p_index) {
ERR_FAIL_INDEX_V(p_index, server_create_count, nullptr);
return server_create_functions[p_index].name;
}
AccessibilityServer::AccessibilityServer() {
singleton = this;
}
AccessibilityServer::~AccessibilityServer() {
singleton = nullptr;
}

View file

@ -0,0 +1,171 @@
/**************************************************************************/
/* accessibility_server.h */
/**************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
/* https://godotengine.org */
/**************************************************************************/
/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */
/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */
/* */
/* Permission is hereby granted, free of charge, to any person obtaining */
/* a copy of this software and associated documentation files (the */
/* "Software"), to deal in the Software without restriction, including */
/* without limitation the rights to use, copy, modify, merge, publish, */
/* distribute, sublicense, and/or sell copies of the Software, and to */
/* permit persons to whom the Software is furnished to do so, subject to */
/* the following conditions: */
/* */
/* The above copyright notice and this permission notice shall be */
/* included in all copies or substantial portions of the Software. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/**************************************************************************/
#pragma once
#include "core/object/object.h"
#include "servers/display/accessibility_server_enums.h"
#include "servers/display/display_server.h"
class AccessibilityServer : public Object {
GDCLASS(AccessibilityServer, Object)
public:
typedef AccessibilityServer *(*CreateFunction)(Error &r_error);
protected:
static inline AccessibilityServer *singleton = nullptr;
static inline AccessibilityServerEnums::AccessibilityMode accessibility_mode = AccessibilityServerEnums::AccessibilityMode::ACCESSIBILITY_AUTO;
static void _bind_methods();
enum {
MAX_SERVERS = 64
};
struct AccessibilityServerCreate {
const char *name;
CreateFunction create_function;
};
static AccessibilityServerCreate server_create_functions[MAX_SERVERS];
static int server_create_count;
public:
_FORCE_INLINE_ static AccessibilityServerEnums::AccessibilityMode get_mode() { return accessibility_mode; }
static void set_mode(AccessibilityServerEnums::AccessibilityMode p_mode) { accessibility_mode = p_mode; }
_FORCE_INLINE_ static AccessibilityServer *get_singleton() { return singleton; }
virtual bool is_supported() const { return false; }
virtual bool window_create(DisplayServer::WindowID p_window_id, void *p_handle) = 0;
virtual void window_destroy(DisplayServer::WindowID p_window_id) = 0;
virtual RID create_element(DisplayServer::WindowID p_window_id, AccessibilityServerEnums::AccessibilityRole p_role) = 0;
virtual RID create_sub_element(const RID &p_parent_rid, AccessibilityServerEnums::AccessibilityRole p_role, int p_insert_pos = -1) = 0;
virtual RID create_sub_text_edit_elements(const RID &p_parent_rid, const RID &p_shaped_text, float p_min_height, int p_insert_pos = -1, bool p_is_last_line = false) = 0;
virtual bool has_element(const RID &p_id) const = 0;
virtual void free_element(const RID &p_id) = 0;
virtual void element_set_meta(const RID &p_id, const Variant &p_meta) = 0;
virtual Variant element_get_meta(const RID &p_id) const = 0;
virtual void update_if_active(const Callable &p_callable) = 0;
virtual RID get_window_root(DisplayServer::WindowID p_window_id) const = 0;
virtual void update_set_focus(const RID &p_id) = 0;
virtual void set_window_rect(DisplayServer::WindowID p_window_id, const Rect2 &p_rect_out, const Rect2 &p_rect_in) = 0;
virtual void set_window_focused(DisplayServer::WindowID p_window_id, bool p_focused) = 0;
virtual void set_window_callbacks(DisplayServer::WindowID p_window_id, const Callable &p_activate_callable, const Callable &p_deativate_callable) = 0;
virtual void window_activation_completed(DisplayServer::WindowID p_window_id) = 0;
virtual void window_deactivation_completed(DisplayServer::WindowID p_window_id) = 0;
virtual void update_set_role(const RID &p_id, AccessibilityServerEnums::AccessibilityRole p_role) = 0;
virtual void update_set_name(const RID &p_id, const String &p_name) = 0;
virtual void update_set_braille_label(const RID &p_id, const String &p_name) = 0;
virtual void update_set_braille_role_description(const RID &p_id, const String &p_description) = 0;
virtual void update_set_extra_info(const RID &p_id, const String &p_name_extra_info) = 0;
virtual void update_set_description(const RID &p_id, const String &p_description) = 0;
virtual void update_set_value(const RID &p_id, const String &p_value) = 0;
virtual void update_set_tooltip(const RID &p_id, const String &p_tooltip) = 0;
virtual void update_set_bounds(const RID &p_id, const Rect2 &p_rect) = 0;
virtual void update_set_transform(const RID &p_id, const Transform2D &p_transform) = 0;
virtual void update_add_child(const RID &p_id, const RID &p_child_id) = 0;
virtual void update_add_related_controls(const RID &p_id, const RID &p_related_id) = 0;
virtual void update_add_related_details(const RID &p_id, const RID &p_related_id) = 0;
virtual void update_add_related_described_by(const RID &p_id, const RID &p_related_id) = 0;
virtual void update_add_related_flow_to(const RID &p_id, const RID &p_related_id) = 0;
virtual void update_add_related_labeled_by(const RID &p_id, const RID &p_related_id) = 0;
virtual void update_add_related_radio_group(const RID &p_id, const RID &p_related_id) = 0;
virtual void update_set_active_descendant(const RID &p_id, const RID &p_other_id) = 0;
virtual void update_set_next_on_line(const RID &p_id, const RID &p_other_id) = 0;
virtual void update_set_previous_on_line(const RID &p_id, const RID &p_other_id) = 0;
virtual void update_set_member_of(const RID &p_id, const RID &p_group_id) = 0;
virtual void update_set_in_page_link_target(const RID &p_id, const RID &p_other_id) = 0;
virtual void update_set_error_message(const RID &p_id, const RID &p_other_id) = 0;
virtual void update_set_live(const RID &p_id, AccessibilityServerEnums::AccessibilityLiveMode p_live) = 0;
virtual void update_add_action(const RID &p_id, AccessibilityServerEnums::AccessibilityAction p_action, const Callable &p_callable) = 0;
virtual void update_add_custom_action(const RID &p_id, int p_action_id, const String &p_action_description) = 0;
virtual void update_set_table_row_count(const RID &p_id, int p_count) = 0;
virtual void update_set_table_column_count(const RID &p_id, int p_count) = 0;
virtual void update_set_table_row_index(const RID &p_id, int p_index) = 0;
virtual void update_set_table_column_index(const RID &p_id, int p_index) = 0;
virtual void update_set_table_cell_position(const RID &p_id, int p_row_index, int p_column_index) = 0;
virtual void update_set_table_cell_span(const RID &p_id, int p_row_span, int p_column_span) = 0;
virtual void update_set_list_item_count(const RID &p_id, int p_size) = 0;
virtual void update_set_list_item_index(const RID &p_id, int p_index) = 0;
virtual void update_set_list_item_level(const RID &p_id, int p_level) = 0;
virtual void update_set_list_item_selected(const RID &p_id, bool p_selected) = 0;
virtual void update_set_list_item_expanded(const RID &p_id, bool p_expanded) = 0;
virtual void update_set_popup_type(const RID &p_id, AccessibilityServerEnums::AccessibilityPopupType p_popup) = 0;
virtual void update_set_checked(const RID &p_id, bool p_checekd) = 0;
virtual void update_set_num_value(const RID &p_id, double p_position) = 0;
virtual void update_set_num_range(const RID &p_id, double p_min, double p_max) = 0;
virtual void update_set_num_step(const RID &p_id, double p_step) = 0;
virtual void update_set_num_jump(const RID &p_id, double p_jump) = 0;
virtual void update_set_scroll_x(const RID &p_id, double p_position) = 0;
virtual void update_set_scroll_x_range(const RID &p_id, double p_min, double p_max) = 0;
virtual void update_set_scroll_y(const RID &p_id, double p_position) = 0;
virtual void update_set_scroll_y_range(const RID &p_id, double p_min, double p_max) = 0;
virtual void update_set_text_decorations(const RID &p_id, bool p_underline, bool p_strikethrough, bool p_overline, const Color &p_color) = 0;
virtual void update_set_text_align(const RID &p_id, HorizontalAlignment p_align) = 0;
virtual void update_set_text_selection(const RID &p_id, const RID &p_text_start_id, int p_start_char, const RID &p_text_end_id, int p_end_char) = 0;
virtual void update_set_flag(const RID &p_id, AccessibilityServerEnums::AccessibilityFlags p_flag, bool p_value) = 0;
virtual void update_set_classname(const RID &p_id, const String &p_classname) = 0;
virtual void update_set_placeholder(const RID &p_id, const String &p_placeholder) = 0;
virtual void update_set_language(const RID &p_id, const String &p_language) = 0;
virtual void update_set_text_orientation(const RID &p_id, bool p_vertical) = 0;
virtual void update_set_list_orientation(const RID &p_id, bool p_vertical) = 0;
virtual void update_set_shortcut(const RID &p_id, const String &p_shortcut) = 0;
virtual void update_set_url(const RID &p_id, const String &p_url) = 0;
virtual void update_set_role_description(const RID &p_id, const String &p_description) = 0;
virtual void update_set_state_description(const RID &p_id, const String &p_description) = 0;
virtual void update_set_color_value(const RID &p_id, const Color &p_color) = 0;
virtual void update_set_background_color(const RID &p_id, const Color &p_color) = 0;
virtual void update_set_foreground_color(const RID &p_id, const Color &p_color) = 0;
static void register_create_function(const char *p_name, CreateFunction p_function);
static int get_create_function_count();
static const char *get_create_function_name(int p_index);
static AccessibilityServer *create(int p_index, Error &r_error);
AccessibilityServer();
virtual ~AccessibilityServer();
};
VARIANT_ENUM_CAST_EXT(AccessibilityServerEnums::AccessibilityAction, AccessibilityServer::AccessibilityAction)
VARIANT_ENUM_CAST_EXT(AccessibilityServerEnums::AccessibilityFlags, AccessibilityServer::AccessibilityFlags)
VARIANT_ENUM_CAST_EXT(AccessibilityServerEnums::AccessibilityLiveMode, AccessibilityServer::AccessibilityLiveMode)
VARIANT_ENUM_CAST_EXT(AccessibilityServerEnums::AccessibilityPopupType, AccessibilityServer::AccessibilityPopupType)
VARIANT_ENUM_CAST_EXT(AccessibilityServerEnums::AccessibilityRole, AccessibilityServer::AccessibilityRole)
VARIANT_ENUM_CAST_EXT(AccessibilityServerEnums::AccessibilityScrollUnit, AccessibilityServer::AccessibilityScrollUnit)
VARIANT_ENUM_CAST_EXT(AccessibilityServerEnums::AccessibilityScrollHint, AccessibilityServer::AccessibilityScrollHint)

View file

@ -0,0 +1,135 @@
/**************************************************************************/
/* accessibility_server_dummy.h */
/**************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
/* https://godotengine.org */
/**************************************************************************/
/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */
/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */
/* */
/* Permission is hereby granted, free of charge, to any person obtaining */
/* a copy of this software and associated documentation files (the */
/* "Software"), to deal in the Software without restriction, including */
/* without limitation the rights to use, copy, modify, merge, publish, */
/* distribute, sublicense, and/or sell copies of the Software, and to */
/* permit persons to whom the Software is furnished to do so, subject to */
/* the following conditions: */
/* */
/* The above copyright notice and this permission notice shall be */
/* included in all copies or substantial portions of the Software. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/**************************************************************************/
#pragma once
#include "servers/display/accessibility_server.h"
class AccessibilityServerDummy : public AccessibilityServer {
GDSOFTCLASS(AccessibilityServerDummy, AccessibilityServer)
friend class AccessibilityServer;
protected:
static AccessibilityServer *create_func(Error &r_error) {
r_error = OK;
return memnew(AccessibilityServerDummy);
}
public:
virtual bool window_create(DisplayServer::WindowID p_window_id, void *p_handle) override { return true; }
virtual void window_destroy(DisplayServer::WindowID p_window_id) override {}
virtual RID create_element(DisplayServer::WindowID p_window_id, AccessibilityServerEnums::AccessibilityRole p_role) override { return RID(); }
virtual RID create_sub_element(const RID &p_parent_rid, AccessibilityServerEnums::AccessibilityRole p_role, int p_insert_pos = -1) override { return RID(); }
virtual RID create_sub_text_edit_elements(const RID &p_parent_rid, const RID &p_shaped_text, float p_min_height, int p_insert_pos = -1, bool p_is_last_line = false) override { return RID(); }
virtual bool has_element(const RID &p_id) const override { return false; }
virtual void free_element(const RID &p_id) override {}
virtual void element_set_meta(const RID &p_id, const Variant &p_meta) override {}
virtual Variant element_get_meta(const RID &p_id) const override { return Variant(); }
virtual void update_if_active(const Callable &p_callable) override {}
virtual RID get_window_root(DisplayServer::WindowID p_window_id) const override { return RID(); }
virtual void update_set_focus(const RID &p_id) override {}
virtual void set_window_rect(DisplayServer::WindowID p_window_id, const Rect2 &p_rect_out, const Rect2 &p_rect_in) override {}
virtual void set_window_focused(DisplayServer::WindowID p_window_id, bool p_focused) override {}
virtual void set_window_callbacks(DisplayServer::WindowID p_window_id, const Callable &p_activate_callable, const Callable &p_deativate_callable) override {}
virtual void window_activation_completed(DisplayServer::WindowID p_window_id) override {}
virtual void window_deactivation_completed(DisplayServer::WindowID p_window_id) override {}
virtual void update_set_role(const RID &p_id, AccessibilityServerEnums::AccessibilityRole p_role) override {}
virtual void update_set_name(const RID &p_id, const String &p_name) override {}
virtual void update_set_braille_label(const RID &p_id, const String &p_name) override {}
virtual void update_set_braille_role_description(const RID &p_id, const String &p_description) override {}
virtual void update_set_extra_info(const RID &p_id, const String &p_name_extra_info) override {}
virtual void update_set_description(const RID &p_id, const String &p_description) override {}
virtual void update_set_value(const RID &p_id, const String &p_value) override {}
virtual void update_set_tooltip(const RID &p_id, const String &p_tooltip) override {}
virtual void update_set_bounds(const RID &p_id, const Rect2 &p_rect) override {}
virtual void update_set_transform(const RID &p_id, const Transform2D &p_transform) override {}
virtual void update_add_child(const RID &p_id, const RID &p_child_id) override {}
virtual void update_add_related_controls(const RID &p_id, const RID &p_related_id) override {}
virtual void update_add_related_details(const RID &p_id, const RID &p_related_id) override {}
virtual void update_add_related_described_by(const RID &p_id, const RID &p_related_id) override {}
virtual void update_add_related_flow_to(const RID &p_id, const RID &p_related_id) override {}
virtual void update_add_related_labeled_by(const RID &p_id, const RID &p_related_id) override {}
virtual void update_add_related_radio_group(const RID &p_id, const RID &p_related_id) override {}
virtual void update_set_active_descendant(const RID &p_id, const RID &p_other_id) override {}
virtual void update_set_next_on_line(const RID &p_id, const RID &p_other_id) override {}
virtual void update_set_previous_on_line(const RID &p_id, const RID &p_other_id) override {}
virtual void update_set_member_of(const RID &p_id, const RID &p_group_id) override {}
virtual void update_set_in_page_link_target(const RID &p_id, const RID &p_other_id) override {}
virtual void update_set_error_message(const RID &p_id, const RID &p_other_id) override {}
virtual void update_set_live(const RID &p_id, AccessibilityServerEnums::AccessibilityLiveMode p_live) override {}
virtual void update_add_action(const RID &p_id, AccessibilityServerEnums::AccessibilityAction p_action, const Callable &p_callable) override {}
virtual void update_add_custom_action(const RID &p_id, int p_action_id, const String &p_action_description) override {}
virtual void update_set_table_row_count(const RID &p_id, int p_count) override {}
virtual void update_set_table_column_count(const RID &p_id, int p_count) override {}
virtual void update_set_table_row_index(const RID &p_id, int p_index) override {}
virtual void update_set_table_column_index(const RID &p_id, int p_index) override {}
virtual void update_set_table_cell_position(const RID &p_id, int p_row_index, int p_column_index) override {}
virtual void update_set_table_cell_span(const RID &p_id, int p_row_span, int p_column_span) override {}
virtual void update_set_list_item_count(const RID &p_id, int p_size) override {}
virtual void update_set_list_item_index(const RID &p_id, int p_index) override {}
virtual void update_set_list_item_level(const RID &p_id, int p_level) override {}
virtual void update_set_list_item_selected(const RID &p_id, bool p_selected) override {}
virtual void update_set_list_item_expanded(const RID &p_id, bool p_expanded) override {}
virtual void update_set_popup_type(const RID &p_id, AccessibilityServerEnums::AccessibilityPopupType p_popup) override {}
virtual void update_set_checked(const RID &p_id, bool p_checekd) override {}
virtual void update_set_num_value(const RID &p_id, double p_position) override {}
virtual void update_set_num_range(const RID &p_id, double p_min, double p_max) override {}
virtual void update_set_num_step(const RID &p_id, double p_step) override {}
virtual void update_set_num_jump(const RID &p_id, double p_jump) override {}
virtual void update_set_scroll_x(const RID &p_id, double p_position) override {}
virtual void update_set_scroll_x_range(const RID &p_id, double p_min, double p_max) override {}
virtual void update_set_scroll_y(const RID &p_id, double p_position) override {}
virtual void update_set_scroll_y_range(const RID &p_id, double p_min, double p_max) override {}
virtual void update_set_text_decorations(const RID &p_id, bool p_underline, bool p_strikethrough, bool p_overline, const Color &p_color) override {}
virtual void update_set_text_align(const RID &p_id, HorizontalAlignment p_align) override {}
virtual void update_set_text_selection(const RID &p_id, const RID &p_text_start_id, int p_start_char, const RID &p_text_end_id, int p_end_char) override {}
virtual void update_set_flag(const RID &p_id, AccessibilityServerEnums::AccessibilityFlags p_flag, bool p_value) override {}
virtual void update_set_classname(const RID &p_id, const String &p_classname) override {}
virtual void update_set_placeholder(const RID &p_id, const String &p_placeholder) override {}
virtual void update_set_language(const RID &p_id, const String &p_language) override {}
virtual void update_set_text_orientation(const RID &p_id, bool p_vertical) override {}
virtual void update_set_list_orientation(const RID &p_id, bool p_vertical) override {}
virtual void update_set_shortcut(const RID &p_id, const String &p_shortcut) override {}
virtual void update_set_url(const RID &p_id, const String &p_url) override {}
virtual void update_set_role_description(const RID &p_id, const String &p_description) override {}
virtual void update_set_state_description(const RID &p_id, const String &p_description) override {}
virtual void update_set_color_value(const RID &p_id, const Color &p_color) override {}
virtual void update_set_background_color(const RID &p_id, const Color &p_color) override {}
virtual void update_set_foreground_color(const RID &p_id, const Color &p_color) override {}
AccessibilityServerDummy() {}
virtual ~AccessibilityServerDummy() {}
};

View file

@ -0,0 +1,158 @@
/**************************************************************************/
/* accessibility_server_enums.h */
/**************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
/* https://godotengine.org */
/**************************************************************************/
/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */
/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */
/* */
/* Permission is hereby granted, free of charge, to any person obtaining */
/* a copy of this software and associated documentation files (the */
/* "Software"), to deal in the Software without restriction, including */
/* without limitation the rights to use, copy, modify, merge, publish, */
/* distribute, sublicense, and/or sell copies of the Software, and to */
/* permit persons to whom the Software is furnished to do so, subject to */
/* the following conditions: */
/* */
/* The above copyright notice and this permission notice shall be */
/* included in all copies or substantial portions of the Software. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/**************************************************************************/
#pragma once
namespace AccessibilityServerEnums {
enum AccessibilityMode {
ACCESSIBILITY_AUTO,
ACCESSIBILITY_ALWAYS,
ACCESSIBILITY_DISABLED,
};
enum AccessibilityRole {
ROLE_UNKNOWN,
ROLE_DEFAULT_BUTTON,
ROLE_AUDIO,
ROLE_VIDEO,
ROLE_STATIC_TEXT,
ROLE_CONTAINER,
ROLE_PANEL,
ROLE_BUTTON,
ROLE_LINK,
ROLE_CHECK_BOX,
ROLE_RADIO_BUTTON,
ROLE_CHECK_BUTTON,
ROLE_SCROLL_BAR,
ROLE_SCROLL_VIEW,
ROLE_SPLITTER,
ROLE_SLIDER,
ROLE_SPIN_BUTTON,
ROLE_PROGRESS_INDICATOR,
ROLE_TEXT_FIELD,
ROLE_MULTILINE_TEXT_FIELD,
ROLE_COLOR_PICKER,
ROLE_TABLE,
ROLE_CELL,
ROLE_ROW,
ROLE_ROW_GROUP,
ROLE_ROW_HEADER,
ROLE_COLUMN_HEADER,
ROLE_TREE,
ROLE_TREE_ITEM,
ROLE_LIST,
ROLE_LIST_ITEM,
ROLE_LIST_BOX,
ROLE_LIST_BOX_OPTION,
ROLE_TAB_BAR,
ROLE_TAB,
ROLE_TAB_PANEL,
ROLE_MENU_BAR,
ROLE_MENU,
ROLE_MENU_ITEM,
ROLE_MENU_ITEM_CHECK_BOX,
ROLE_MENU_ITEM_RADIO,
ROLE_IMAGE,
ROLE_WINDOW,
ROLE_TITLE_BAR,
ROLE_DIALOG,
ROLE_TOOLTIP,
ROLE_REGION,
ROLE_TEXT_RUN,
};
enum AccessibilityPopupType {
POPUP_MENU,
POPUP_LIST,
POPUP_TREE,
POPUP_DIALOG,
};
enum AccessibilityFlags {
FLAG_HIDDEN,
FLAG_MULTISELECTABLE,
FLAG_REQUIRED,
FLAG_VISITED,
FLAG_BUSY,
FLAG_MODAL,
FLAG_TOUCH_PASSTHROUGH,
FLAG_READONLY,
FLAG_DISABLED,
FLAG_CLIPS_CHILDREN,
};
enum AccessibilityAction {
ACTION_CLICK,
ACTION_FOCUS,
ACTION_BLUR,
ACTION_COLLAPSE,
ACTION_EXPAND,
ACTION_DECREMENT,
ACTION_INCREMENT,
ACTION_HIDE_TOOLTIP,
ACTION_SHOW_TOOLTIP,
ACTION_SET_TEXT_SELECTION,
ACTION_REPLACE_SELECTED_TEXT,
ACTION_SCROLL_BACKWARD,
ACTION_SCROLL_DOWN,
ACTION_SCROLL_FORWARD,
ACTION_SCROLL_LEFT,
ACTION_SCROLL_RIGHT,
ACTION_SCROLL_UP,
ACTION_SCROLL_INTO_VIEW,
ACTION_SCROLL_TO_POINT,
ACTION_SET_SCROLL_OFFSET,
ACTION_SET_VALUE,
ACTION_SHOW_CONTEXT_MENU,
ACTION_CUSTOM,
};
enum AccessibilityLiveMode {
LIVE_OFF,
LIVE_POLITE,
LIVE_ASSERTIVE,
};
enum AccessibilityScrollUnit {
SCROLL_UNIT_ITEM,
SCROLL_UNIT_PAGE,
};
enum AccessibilityScrollHint {
SCROLL_HINT_TOP_LEFT,
SCROLL_HINT_BOTTOM_RIGHT,
SCROLL_HINT_TOP_EDGE,
SCROLL_HINT_BOTTOM_EDGE,
SCROLL_HINT_LEFT_EDGE,
SCROLL_HINT_RIGHT_EDGE,
};
}; // namespace AccessibilityServerEnums

View file

@ -39,6 +39,7 @@ STATIC_ASSERT_INCOMPLETE_TYPE(class, RenderingServer);
#include "core/input/input.h"
#include "core/object/class_db.h"
#include "scene/resources/texture.h"
#include "servers/display/accessibility_server.h"
#include "servers/display/display_server_headless.h"
#include "servers/display/native_menu.h"
#include "servers/rendering/rendering_server.h"
@ -59,8 +60,6 @@ STATIC_ASSERT_INCOMPLETE_TYPE(class, RenderingServer);
DisplayServer *DisplayServer::singleton = nullptr;
DisplayServer::AccessibilityMode DisplayServer::accessibility_mode = DisplayServer::AccessibilityMode::ACCESSIBILITY_AUTO;
bool DisplayServer::hidpi_allowed = false;
bool DisplayServer::window_early_clear_override_enabled = false;
@ -643,474 +642,478 @@ void DisplayServer::window_set_ime_position(const Point2i &p_pos, WindowID p_win
WARN_PRINT("IME not supported by this display server.");
}
RID DisplayServer::accessibility_create_element(WindowID p_window, DisplayServer::AccessibilityRole p_role) {
if (accessibility_driver) {
return accessibility_driver->accessibility_create_element(p_window, p_role);
#ifndef DISABLE_DEPRECATED
RID DisplayServer::accessibility_create_element(WindowID p_window, AccessibilityRole p_role) {
if (AccessibilityServer::get_singleton()) {
return AccessibilityServer::get_singleton()->create_element(p_window, (AccessibilityServerEnums::AccessibilityRole)p_role);
} else {
return RID();
}
}
RID DisplayServer::accessibility_create_sub_element(const RID &p_parent_rid, DisplayServer::AccessibilityRole p_role, int p_insert_pos) {
if (accessibility_driver) {
return accessibility_driver->accessibility_create_sub_element(p_parent_rid, p_role, p_insert_pos);
RID DisplayServer::accessibility_create_sub_element(const RID &p_parent_rid, AccessibilityRole p_role, int p_insert_pos) {
if (AccessibilityServer::get_singleton()) {
return AccessibilityServer::get_singleton()->create_sub_element(p_parent_rid, (AccessibilityServerEnums::AccessibilityRole)p_role, p_insert_pos);
} else {
return RID();
}
}
RID DisplayServer::accessibility_create_sub_text_edit_elements(const RID &p_parent_rid, const RID &p_shaped_text, float p_min_height, int p_insert_pos, bool p_is_last_line) {
if (accessibility_driver) {
return accessibility_driver->accessibility_create_sub_text_edit_elements(p_parent_rid, p_shaped_text, p_min_height, p_insert_pos, p_is_last_line);
if (AccessibilityServer::get_singleton()) {
return AccessibilityServer::get_singleton()->create_sub_text_edit_elements(p_parent_rid, p_shaped_text, p_min_height, p_insert_pos, p_is_last_line);
} else {
return RID();
}
}
bool DisplayServer::accessibility_has_element(const RID &p_id) const {
if (accessibility_driver) {
return accessibility_driver->accessibility_has_element(p_id);
if (AccessibilityServer::get_singleton()) {
return AccessibilityServer::get_singleton()->has_element(p_id);
} else {
return false;
}
}
void DisplayServer::accessibility_free_element(const RID &p_id) {
if (accessibility_driver) {
accessibility_driver->accessibility_free_element(p_id);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->free_element(p_id);
}
}
void DisplayServer::accessibility_element_set_meta(const RID &p_id, const Variant &p_meta) {
if (accessibility_driver) {
accessibility_driver->accessibility_element_set_meta(p_id, p_meta);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->element_set_meta(p_id, p_meta);
}
}
Variant DisplayServer::accessibility_element_get_meta(const RID &p_id) const {
if (accessibility_driver) {
return accessibility_driver->accessibility_element_get_meta(p_id);
if (AccessibilityServer::get_singleton()) {
return AccessibilityServer::get_singleton()->element_get_meta(p_id);
} else {
return Variant();
}
}
void DisplayServer::accessibility_update_if_active(const Callable &p_callable) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_if_active(p_callable);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_if_active(p_callable);
}
}
void DisplayServer::accessibility_update_set_focus(const RID &p_id) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_focus(p_id);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_focus(p_id);
}
}
RID DisplayServer::accessibility_get_window_root(DisplayServer::WindowID p_window_id) const {
if (accessibility_driver) {
return accessibility_driver->accessibility_get_window_root(p_window_id);
if (AccessibilityServer::get_singleton()) {
return AccessibilityServer::get_singleton()->get_window_root(p_window_id);
} else {
return RID();
}
}
void DisplayServer::accessibility_set_window_rect(DisplayServer::WindowID p_window_id, const Rect2 &p_rect_out, const Rect2 &p_rect_in) {
if (accessibility_driver) {
accessibility_driver->accessibility_set_window_rect(p_window_id, p_rect_out, p_rect_in);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->set_window_rect(p_window_id, p_rect_out, p_rect_in);
}
}
void DisplayServer::accessibility_set_window_focused(DisplayServer::WindowID p_window_id, bool p_focused) {
if (accessibility_driver) {
accessibility_driver->accessibility_set_window_focused(p_window_id, p_focused);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->set_window_focused(p_window_id, p_focused);
}
}
void DisplayServer::accessibility_set_window_callbacks(DisplayServer::WindowID p_window_id, const Callable &p_activate_callable, const Callable &p_deativate_callable) {
if (accessibility_driver) {
accessibility_driver->accessibility_set_window_callbacks(p_window_id, p_activate_callable, p_deativate_callable);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->set_window_callbacks(p_window_id, p_activate_callable, p_deativate_callable);
}
}
void DisplayServer::accessibility_window_activation_completed(DisplayServer::WindowID p_window_id) {
if (accessibility_driver) {
accessibility_driver->accessibility_window_activation_completed(p_window_id);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->window_activation_completed(p_window_id);
}
}
void DisplayServer::accessibility_window_deactivation_completed(DisplayServer::WindowID p_window_id) {
if (accessibility_driver) {
accessibility_driver->accessibility_window_deactivation_completed(p_window_id);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->window_deactivation_completed(p_window_id);
}
}
void DisplayServer::accessibility_update_set_role(const RID &p_id, DisplayServer::AccessibilityRole p_role) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_role(p_id, p_role);
void DisplayServer::accessibility_update_set_role(const RID &p_id, AccessibilityRole p_role) {
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_role(p_id, (AccessibilityServerEnums::AccessibilityRole)p_role);
}
}
void DisplayServer::accessibility_update_set_name(const RID &p_id, const String &p_name) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_name(p_id, p_name);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_name(p_id, p_name);
}
}
void DisplayServer::accessibility_update_set_description(const RID &p_id, const String &p_description) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_description(p_id, p_description);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_description(p_id, p_description);
}
}
void DisplayServer::accessibility_update_set_extra_info(const RID &p_id, const String &p_name_extra_info) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_extra_info(p_id, p_name_extra_info);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_extra_info(p_id, p_name_extra_info);
}
}
void DisplayServer::accessibility_update_set_value(const RID &p_id, const String &p_value) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_value(p_id, p_value);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_value(p_id, p_value);
}
}
void DisplayServer::accessibility_update_set_tooltip(const RID &p_id, const String &p_tooltip) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_tooltip(p_id, p_tooltip);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_tooltip(p_id, p_tooltip);
}
}
void DisplayServer::accessibility_update_set_bounds(const RID &p_id, const Rect2 &p_rect) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_bounds(p_id, p_rect);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_bounds(p_id, p_rect);
}
}
void DisplayServer::accessibility_update_set_transform(const RID &p_id, const Transform2D &p_transform) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_transform(p_id, p_transform);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_transform(p_id, p_transform);
}
}
void DisplayServer::accessibility_update_add_child(const RID &p_id, const RID &p_child_id) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_add_child(p_id, p_child_id);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_add_child(p_id, p_child_id);
}
}
void DisplayServer::accessibility_update_add_related_controls(const RID &p_id, const RID &p_related_id) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_add_related_controls(p_id, p_related_id);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_add_related_controls(p_id, p_related_id);
}
}
void DisplayServer::accessibility_update_add_related_details(const RID &p_id, const RID &p_related_id) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_add_related_details(p_id, p_related_id);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_add_related_details(p_id, p_related_id);
}
}
void DisplayServer::accessibility_update_add_related_described_by(const RID &p_id, const RID &p_related_id) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_add_related_described_by(p_id, p_related_id);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_add_related_described_by(p_id, p_related_id);
}
}
void DisplayServer::accessibility_update_add_related_flow_to(const RID &p_id, const RID &p_related_id) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_add_related_flow_to(p_id, p_related_id);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_add_related_flow_to(p_id, p_related_id);
}
}
void DisplayServer::accessibility_update_add_related_labeled_by(const RID &p_id, const RID &p_related_id) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_add_related_labeled_by(p_id, p_related_id);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_add_related_labeled_by(p_id, p_related_id);
}
}
void DisplayServer::accessibility_update_add_related_radio_group(const RID &p_id, const RID &p_related_id) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_add_related_radio_group(p_id, p_related_id);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_add_related_radio_group(p_id, p_related_id);
}
}
void DisplayServer::accessibility_update_set_active_descendant(const RID &p_id, const RID &p_other_id) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_active_descendant(p_id, p_other_id);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_active_descendant(p_id, p_other_id);
}
}
void DisplayServer::accessibility_update_set_next_on_line(const RID &p_id, const RID &p_other_id) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_next_on_line(p_id, p_other_id);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_next_on_line(p_id, p_other_id);
}
}
void DisplayServer::accessibility_update_set_previous_on_line(const RID &p_id, const RID &p_other_id) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_previous_on_line(p_id, p_other_id);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_previous_on_line(p_id, p_other_id);
}
}
void DisplayServer::accessibility_update_set_member_of(const RID &p_id, const RID &p_group_id) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_member_of(p_id, p_group_id);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_member_of(p_id, p_group_id);
}
}
void DisplayServer::accessibility_update_set_in_page_link_target(const RID &p_id, const RID &p_other_id) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_in_page_link_target(p_id, p_other_id);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_in_page_link_target(p_id, p_other_id);
}
}
void DisplayServer::accessibility_update_set_error_message(const RID &p_id, const RID &p_other_id) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_error_message(p_id, p_other_id);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_error_message(p_id, p_other_id);
}
}
void DisplayServer::accessibility_update_set_live(const RID &p_id, DisplayServer::AccessibilityLiveMode p_live) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_live(p_id, p_live);
void DisplayServer::accessibility_update_set_live(const RID &p_id, AccessibilityLiveMode p_live) {
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_live(p_id, (AccessibilityServerEnums::AccessibilityLiveMode)p_live);
}
}
void DisplayServer::accessibility_update_add_action(const RID &p_id, DisplayServer::AccessibilityAction p_action, const Callable &p_callable) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_add_action(p_id, p_action, p_callable);
void DisplayServer::accessibility_update_add_action(const RID &p_id, AccessibilityAction p_action, const Callable &p_callable) {
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_add_action(p_id, (AccessibilityServerEnums::AccessibilityAction)p_action, p_callable);
}
}
void DisplayServer::accessibility_update_add_custom_action(const RID &p_id, int p_action_id, const String &p_action_description) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_add_custom_action(p_id, p_action_id, p_action_description);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_add_custom_action(p_id, p_action_id, p_action_description);
}
}
void DisplayServer::accessibility_update_set_table_row_count(const RID &p_id, int p_count) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_table_row_count(p_id, p_count);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_table_row_count(p_id, p_count);
}
}
void DisplayServer::accessibility_update_set_table_column_count(const RID &p_id, int p_count) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_table_column_count(p_id, p_count);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_table_column_count(p_id, p_count);
}
}
void DisplayServer::accessibility_update_set_table_row_index(const RID &p_id, int p_index) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_table_row_index(p_id, p_index);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_table_row_index(p_id, p_index);
}
}
void DisplayServer::accessibility_update_set_table_column_index(const RID &p_id, int p_index) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_table_column_index(p_id, p_index);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_table_column_index(p_id, p_index);
}
}
void DisplayServer::accessibility_update_set_table_cell_position(const RID &p_id, int p_row_index, int p_column_index) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_table_cell_position(p_id, p_row_index, p_column_index);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_table_cell_position(p_id, p_row_index, p_column_index);
}
}
void DisplayServer::accessibility_update_set_table_cell_span(const RID &p_id, int p_row_span, int p_column_span) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_table_cell_span(p_id, p_row_span, p_column_span);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_table_cell_span(p_id, p_row_span, p_column_span);
}
}
void DisplayServer::accessibility_update_set_list_item_count(const RID &p_id, int p_size) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_list_item_count(p_id, p_size);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_list_item_count(p_id, p_size);
}
}
void DisplayServer::accessibility_update_set_list_item_index(const RID &p_id, int p_index) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_list_item_index(p_id, p_index);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_list_item_index(p_id, p_index);
}
}
void DisplayServer::accessibility_update_set_list_item_level(const RID &p_id, int p_level) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_list_item_level(p_id, p_level);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_list_item_level(p_id, p_level);
}
}
void DisplayServer::accessibility_update_set_list_item_selected(const RID &p_id, bool p_selected) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_list_item_selected(p_id, p_selected);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_list_item_selected(p_id, p_selected);
}
}
void DisplayServer::accessibility_update_set_list_item_expanded(const RID &p_id, bool p_expanded) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_list_item_expanded(p_id, p_expanded);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_list_item_expanded(p_id, p_expanded);
}
}
void DisplayServer::accessibility_update_set_popup_type(const RID &p_id, DisplayServer::AccessibilityPopupType p_popup) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_popup_type(p_id, p_popup);
void DisplayServer::accessibility_update_set_popup_type(const RID &p_id, AccessibilityPopupType p_popup) {
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_popup_type(p_id, (AccessibilityServerEnums::AccessibilityPopupType)p_popup);
}
}
void DisplayServer::accessibility_update_set_checked(const RID &p_id, bool p_checekd) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_checked(p_id, p_checekd);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_checked(p_id, p_checekd);
}
}
void DisplayServer::accessibility_update_set_num_value(const RID &p_id, double p_position) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_num_value(p_id, p_position);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_num_value(p_id, p_position);
}
}
void DisplayServer::accessibility_update_set_num_range(const RID &p_id, double p_min, double p_max) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_num_range(p_id, p_min, p_max);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_num_range(p_id, p_min, p_max);
}
}
void DisplayServer::accessibility_update_set_num_step(const RID &p_id, double p_step) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_num_step(p_id, p_step);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_num_step(p_id, p_step);
}
}
void DisplayServer::accessibility_update_set_num_jump(const RID &p_id, double p_jump) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_num_jump(p_id, p_jump);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_num_jump(p_id, p_jump);
}
}
void DisplayServer::accessibility_update_set_scroll_x(const RID &p_id, double p_position) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_scroll_x(p_id, p_position);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_scroll_x(p_id, p_position);
}
}
void DisplayServer::accessibility_update_set_scroll_x_range(const RID &p_id, double p_min, double p_max) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_scroll_x_range(p_id, p_min, p_max);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_scroll_x_range(p_id, p_min, p_max);
}
}
void DisplayServer::accessibility_update_set_scroll_y(const RID &p_id, double p_position) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_scroll_y(p_id, p_position);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_scroll_y(p_id, p_position);
}
}
void DisplayServer::accessibility_update_set_scroll_y_range(const RID &p_id, double p_min, double p_max) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_scroll_y_range(p_id, p_min, p_max);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_scroll_y_range(p_id, p_min, p_max);
}
}
void DisplayServer::accessibility_update_set_text_decorations(const RID &p_id, bool p_underline, bool p_strikethrough, bool p_overline) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_text_decorations(p_id, p_underline, p_strikethrough, p_overline);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_text_decorations(p_id, p_underline, p_strikethrough, p_overline, Color(0, 0, 0, 1));
}
}
void DisplayServer::accessibility_update_set_text_align(const RID &p_id, HorizontalAlignment p_align) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_text_align(p_id, p_align);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_text_align(p_id, p_align);
}
}
void DisplayServer::accessibility_update_set_text_selection(const RID &p_id, const RID &p_text_start_id, int p_start_char, const RID &p_text_end_id, int p_end_char) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_text_selection(p_id, p_text_start_id, p_start_char, p_text_end_id, p_end_char);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_text_selection(p_id, p_text_start_id, p_start_char, p_text_end_id, p_end_char);
}
}
void DisplayServer::accessibility_update_set_flag(const RID &p_id, DisplayServer::AccessibilityFlags p_flag, bool p_value) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_flag(p_id, p_flag, p_value);
void DisplayServer::accessibility_update_set_flag(const RID &p_id, AccessibilityFlags p_flag, bool p_value) {
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_flag(p_id, (AccessibilityServerEnums::AccessibilityFlags)p_flag, p_value);
}
}
void DisplayServer::accessibility_update_set_classname(const RID &p_id, const String &p_classname) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_classname(p_id, p_classname);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_classname(p_id, p_classname);
}
}
void DisplayServer::accessibility_update_set_placeholder(const RID &p_id, const String &p_placeholder) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_placeholder(p_id, p_placeholder);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_placeholder(p_id, p_placeholder);
}
}
void DisplayServer::accessibility_update_set_language(const RID &p_id, const String &p_language) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_language(p_id, p_language);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_language(p_id, p_language);
}
}
void DisplayServer::accessibility_update_set_text_orientation(const RID &p_id, bool p_vertical) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_text_orientation(p_id, p_vertical);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_text_orientation(p_id, p_vertical);
}
}
void DisplayServer::accessibility_update_set_list_orientation(const RID &p_id, bool p_vertical) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_list_orientation(p_id, p_vertical);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_list_orientation(p_id, p_vertical);
}
}
void DisplayServer::accessibility_update_set_shortcut(const RID &p_id, const String &p_shortcut) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_shortcut(p_id, p_shortcut);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_shortcut(p_id, p_shortcut);
}
}
void DisplayServer::accessibility_update_set_url(const RID &p_id, const String &p_url) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_url(p_id, p_url);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_url(p_id, p_url);
}
}
void DisplayServer::accessibility_update_set_role_description(const RID &p_id, const String &p_description) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_role_description(p_id, p_description);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_role_description(p_id, p_description);
}
}
void DisplayServer::accessibility_update_set_state_description(const RID &p_id, const String &p_description) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_state_description(p_id, p_description);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_state_description(p_id, p_description);
}
}
void DisplayServer::accessibility_update_set_color_value(const RID &p_id, const Color &p_color) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_color_value(p_id, p_color);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_color_value(p_id, p_color);
}
}
void DisplayServer::accessibility_update_set_background_color(const RID &p_id, const Color &p_color) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_background_color(p_id, p_color);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_background_color(p_id, p_color);
}
}
void DisplayServer::accessibility_update_set_foreground_color(const RID &p_id, const Color &p_color) {
if (accessibility_driver) {
accessibility_driver->accessibility_update_set_foreground_color(p_id, p_color);
if (AccessibilityServer::get_singleton()) {
AccessibilityServer::get_singleton()->update_set_foreground_color(p_id, p_color);
}
}
#endif // DISABLE_DEPRECATED
Point2i DisplayServer::ime_get_selection() const {
ERR_FAIL_V_MSG(Point2i(), "IME or NOTIFICATION_WM_IME_UPDATE not supported by this display server.");
}
@ -1424,7 +1427,7 @@ void DisplayServer::_bind_methods() {
ClassDB::bind_method(D_METHOD("global_menu_clear", "menu_root"), &DisplayServer::global_menu_clear);
ClassDB::bind_method(D_METHOD("global_menu_get_system_menu_roots"), &DisplayServer::global_menu_get_system_menu_roots);
#endif
#endif // DISABLE_DEPRECATED
ClassDB::bind_method(D_METHOD("tts_is_speaking"), &DisplayServer::tts_is_speaking);
ClassDB::bind_method(D_METHOD("tts_is_paused"), &DisplayServer::tts_is_paused);
@ -1578,6 +1581,7 @@ void DisplayServer::_bind_methods() {
ClassDB::bind_method(D_METHOD("accessibility_should_reduce_transparency"), &DisplayServer::accessibility_should_reduce_transparency);
ClassDB::bind_method(D_METHOD("accessibility_screen_reader_active"), &DisplayServer::accessibility_screen_reader_active);
#ifndef DISABLE_DEPRECATED
ClassDB::bind_method(D_METHOD("accessibility_create_element", "window_id", "role"), &DisplayServer::accessibility_create_element);
ClassDB::bind_method(D_METHOD("accessibility_create_sub_element", "parent_rid", "role", "insert_pos"), &DisplayServer::accessibility_create_sub_element, DEFVAL(-1));
ClassDB::bind_method(D_METHOD("accessibility_create_sub_text_edit_elements", "parent_rid", "shaped_text", "min_height", "insert_pos", "is_last_line"), &DisplayServer::accessibility_create_sub_text_edit_elements, DEFVAL(-1), DEFVAL(false));
@ -1654,6 +1658,7 @@ void DisplayServer::_bind_methods() {
ClassDB::bind_method(D_METHOD("accessibility_update_set_color_value", "id", "color"), &DisplayServer::accessibility_update_set_color_value);
ClassDB::bind_method(D_METHOD("accessibility_update_set_background_color", "id", "color"), &DisplayServer::accessibility_update_set_background_color);
ClassDB::bind_method(D_METHOD("accessibility_update_set_foreground_color", "id", "color"), &DisplayServer::accessibility_update_set_foreground_color);
#endif // DISABLE_DEPRECATED
ClassDB::bind_method(D_METHOD("ime_get_selection"), &DisplayServer::ime_get_selection);
ClassDB::bind_method(D_METHOD("ime_get_text"), &DisplayServer::ime_get_text);
@ -1720,7 +1725,7 @@ void DisplayServer::_bind_methods() {
#ifndef DISABLE_DEPRECATED
BIND_ENUM_CONSTANT(FEATURE_GLOBAL_MENU);
#endif
#endif // DISABLE_DEPRECATED
BIND_ENUM_CONSTANT(FEATURE_SUBWINDOWS);
BIND_ENUM_CONSTANT(FEATURE_TOUCHSCREEN);
BIND_ENUM_CONSTANT(FEATURE_MOUSE);
@ -1756,6 +1761,7 @@ void DisplayServer::_bind_methods() {
BIND_ENUM_CONSTANT(FEATURE_ACCESSIBILITY_SCREEN_READER);
BIND_ENUM_CONSTANT(FEATURE_HDR_OUTPUT);
#ifndef DISABLE_DEPRECATED
BIND_ENUM_CONSTANT(ROLE_UNKNOWN);
BIND_ENUM_CONSTANT(ROLE_DEFAULT_BUTTON);
BIND_ENUM_CONSTANT(ROLE_AUDIO);
@ -1803,6 +1809,7 @@ void DisplayServer::_bind_methods() {
BIND_ENUM_CONSTANT(ROLE_DIALOG);
BIND_ENUM_CONSTANT(ROLE_TOOLTIP);
BIND_ENUM_CONSTANT(ROLE_REGION);
BIND_ENUM_CONSTANT(ROLE_TEXT_RUN);
BIND_ENUM_CONSTANT(POPUP_MENU);
BIND_ENUM_CONSTANT(POPUP_LIST);
@ -1864,6 +1871,7 @@ void DisplayServer::_bind_methods() {
BIND_ENUM_CONSTANT(MOUSE_MODE_CONFINED);
BIND_ENUM_CONSTANT(MOUSE_MODE_CONFINED_HIDDEN);
BIND_ENUM_CONSTANT(MOUSE_MODE_MAX);
#endif // DISABLE_DEPRECATED
BIND_CONSTANT(INVALID_SCREEN);
BIND_CONSTANT(SCREEN_WITH_MOUSE_FOCUS);

View file

@ -38,7 +38,6 @@
#include "core/variant/callable.h"
#include "core/variant/typed_array.h"
class AccessibilityDriver;
class NativeMenu;
class Texture2D;
@ -251,7 +250,7 @@ public:
virtual void global_menu_clear(const String &p_menu_root);
virtual Dictionary global_menu_get_system_menu_roots() const;
#endif
#endif // DISABLE_DEPRECATED
struct TTSUtterance {
String text;
@ -584,17 +583,13 @@ public:
// Accessibility.
enum AccessibilityMode {
ACCESSIBILITY_AUTO,
ACCESSIBILITY_ALWAYS,
ACCESSIBILITY_DISABLED,
};
protected:
AccessibilityDriver *accessibility_driver = nullptr;
static AccessibilityMode accessibility_mode;
public:
virtual int accessibility_should_increase_contrast() const { return -1; }
virtual int accessibility_should_reduce_animation() const { return -1; }
virtual int accessibility_should_reduce_transparency() const { return -1; }
virtual int accessibility_screen_reader_active() const { return -1; }
#ifndef DISABLE_DEPRECATED
enum AccessibilityRole {
ROLE_UNKNOWN,
ROLE_DEFAULT_BUTTON,
@ -643,6 +638,7 @@ public:
ROLE_DIALOG,
ROLE_TOOLTIP,
ROLE_REGION,
ROLE_TEXT_RUN,
};
enum AccessibilityPopupType {
@ -711,16 +707,8 @@ public:
SCROLL_HINT_RIGHT_EDGE,
};
static AccessibilityMode accessibility_get_mode() { return accessibility_mode; }
static void accessibility_set_mode(AccessibilityMode p_mode) { accessibility_mode = p_mode; }
virtual int accessibility_should_increase_contrast() const { return -1; }
virtual int accessibility_should_reduce_animation() const { return -1; }
virtual int accessibility_should_reduce_transparency() const { return -1; }
virtual int accessibility_screen_reader_active() const { return -1; }
virtual RID accessibility_create_element(WindowID p_window_id, DisplayServer::AccessibilityRole p_role);
virtual RID accessibility_create_sub_element(const RID &p_parent_rid, DisplayServer::AccessibilityRole p_role, int p_insert_pos = -1);
virtual RID accessibility_create_element(WindowID p_window_id, AccessibilityRole p_role);
virtual RID accessibility_create_sub_element(const RID &p_parent_rid, AccessibilityRole p_role, int p_insert_pos = -1);
virtual RID accessibility_create_sub_text_edit_elements(const RID &p_parent_rid, const RID &p_shaped_text, float p_min_height, int p_insert_pos = -1, bool p_is_last_line = false);
virtual bool accessibility_has_element(const RID &p_id) const;
virtual void accessibility_free_element(const RID &p_id);
@ -739,7 +727,7 @@ public:
virtual void accessibility_window_activation_completed(DisplayServer::WindowID p_window_id); // Note: internal method used by Window, do not expose.
virtual void accessibility_window_deactivation_completed(DisplayServer::WindowID p_window_id); // Note: internal method used by Window, do not expose.
virtual void accessibility_update_set_role(const RID &p_id, DisplayServer::AccessibilityRole p_role);
virtual void accessibility_update_set_role(const RID &p_id, AccessibilityRole p_role);
virtual void accessibility_update_set_name(const RID &p_id, const String &p_name);
virtual void accessibility_update_set_extra_info(const RID &p_id, const String &p_name_extra_info);
virtual void accessibility_update_set_description(const RID &p_id, const String &p_description);
@ -760,8 +748,8 @@ public:
virtual void accessibility_update_set_member_of(const RID &p_id, const RID &p_group_id);
virtual void accessibility_update_set_in_page_link_target(const RID &p_id, const RID &p_other_id);
virtual void accessibility_update_set_error_message(const RID &p_id, const RID &p_other_id);
virtual void accessibility_update_set_live(const RID &p_id, DisplayServer::AccessibilityLiveMode p_live);
virtual void accessibility_update_add_action(const RID &p_id, DisplayServer::AccessibilityAction p_action, const Callable &p_callable);
virtual void accessibility_update_set_live(const RID &p_id, AccessibilityLiveMode p_live);
virtual void accessibility_update_add_action(const RID &p_id, AccessibilityAction p_action, const Callable &p_callable);
virtual void accessibility_update_add_custom_action(const RID &p_id, int p_action_id, const String &p_action_description);
virtual void accessibility_update_set_table_row_count(const RID &p_id, int p_count);
virtual void accessibility_update_set_table_column_count(const RID &p_id, int p_count);
@ -774,7 +762,7 @@ public:
virtual void accessibility_update_set_list_item_level(const RID &p_id, int p_level);
virtual void accessibility_update_set_list_item_selected(const RID &p_id, bool p_selected);
virtual void accessibility_update_set_list_item_expanded(const RID &p_id, bool p_expanded);
virtual void accessibility_update_set_popup_type(const RID &p_id, DisplayServer::AccessibilityPopupType p_popup);
virtual void accessibility_update_set_popup_type(const RID &p_id, AccessibilityPopupType p_popup);
virtual void accessibility_update_set_checked(const RID &p_id, bool p_checekd);
virtual void accessibility_update_set_num_value(const RID &p_id, double p_position);
virtual void accessibility_update_set_num_range(const RID &p_id, double p_min, double p_max);
@ -787,7 +775,7 @@ public:
virtual void accessibility_update_set_text_decorations(const RID &p_id, bool p_underline, bool p_strikethrough, bool p_overline);
virtual void accessibility_update_set_text_align(const RID &p_id, HorizontalAlignment p_align);
virtual void accessibility_update_set_text_selection(const RID &p_id, const RID &p_text_start_id, int p_start_char, const RID &p_text_end_id, int p_end_char);
virtual void accessibility_update_set_flag(const RID &p_id, DisplayServer::AccessibilityFlags p_flag, bool p_value);
virtual void accessibility_update_set_flag(const RID &p_id, AccessibilityFlags p_flag, bool p_value);
virtual void accessibility_update_set_classname(const RID &p_id, const String &p_classname);
virtual void accessibility_update_set_placeholder(const RID &p_id, const String &p_placeholder);
virtual void accessibility_update_set_language(const RID &p_id, const String &p_language);
@ -800,6 +788,7 @@ public:
virtual void accessibility_update_set_color_value(const RID &p_id, const Color &p_color);
virtual void accessibility_update_set_background_color(const RID &p_id, const Color &p_color);
virtual void accessibility_update_set_foreground_color(const RID &p_id, const Color &p_color);
#endif // DISABLE_DEPRECATED
// necessary for GL focus, may be able to use one of the existing functions for this, not sure yet
virtual void gl_window_make_current(DisplayServer::WindowID p_window_id);
@ -945,101 +934,7 @@ public:
~DisplayServer();
};
/**************************************************************************/
class AccessibilityDriver {
public:
virtual Error init() = 0;
virtual bool window_create(DisplayServer::WindowID p_window_id, void *p_handle) = 0;
virtual void window_destroy(DisplayServer::WindowID p_window_id) = 0;
virtual RID accessibility_create_element(DisplayServer::WindowID p_window_id, DisplayServer::AccessibilityRole p_role) = 0;
virtual RID accessibility_create_sub_element(const RID &p_parent_rid, DisplayServer::AccessibilityRole p_role, int p_insert_pos = -1) = 0;
virtual RID accessibility_create_sub_text_edit_elements(const RID &p_parent_rid, const RID &p_shaped_text, float p_min_height, int p_insert_pos = -1, bool p_is_last_line = false) = 0;
virtual bool accessibility_has_element(const RID &p_id) const = 0;
virtual void accessibility_free_element(const RID &p_id) = 0;
virtual void accessibility_element_set_meta(const RID &p_id, const Variant &p_meta) = 0;
virtual Variant accessibility_element_get_meta(const RID &p_id) const = 0;
virtual void accessibility_update_if_active(const Callable &p_callable) = 0;
virtual RID accessibility_get_window_root(DisplayServer::WindowID p_window_id) const = 0;
virtual void accessibility_update_set_focus(const RID &p_id) = 0;
virtual void accessibility_set_window_rect(DisplayServer::WindowID p_window_id, const Rect2 &p_rect_out, const Rect2 &p_rect_in) = 0;
virtual void accessibility_set_window_focused(DisplayServer::WindowID p_window_id, bool p_focused) = 0;
virtual void accessibility_set_window_callbacks(DisplayServer::WindowID p_window_id, const Callable &p_activate_callable, const Callable &p_deativate_callable) = 0;
virtual void accessibility_window_activation_completed(DisplayServer::WindowID p_window_id) = 0;
virtual void accessibility_window_deactivation_completed(DisplayServer::WindowID p_window_id) = 0;
virtual void accessibility_update_set_role(const RID &p_id, DisplayServer::AccessibilityRole p_role) = 0;
virtual void accessibility_update_set_name(const RID &p_id, const String &p_name) = 0;
virtual void accessibility_update_set_extra_info(const RID &p_id, const String &p_name_extra_info) = 0;
virtual void accessibility_update_set_description(const RID &p_id, const String &p_description) = 0;
virtual void accessibility_update_set_value(const RID &p_id, const String &p_value) = 0;
virtual void accessibility_update_set_tooltip(const RID &p_id, const String &p_tooltip) = 0;
virtual void accessibility_update_set_bounds(const RID &p_id, const Rect2 &p_rect) = 0;
virtual void accessibility_update_set_transform(const RID &p_id, const Transform2D &p_transform) = 0;
virtual void accessibility_update_add_child(const RID &p_id, const RID &p_child_id) = 0;
virtual void accessibility_update_add_related_controls(const RID &p_id, const RID &p_related_id) = 0;
virtual void accessibility_update_add_related_details(const RID &p_id, const RID &p_related_id) = 0;
virtual void accessibility_update_add_related_described_by(const RID &p_id, const RID &p_related_id) = 0;
virtual void accessibility_update_add_related_flow_to(const RID &p_id, const RID &p_related_id) = 0;
virtual void accessibility_update_add_related_labeled_by(const RID &p_id, const RID &p_related_id) = 0;
virtual void accessibility_update_add_related_radio_group(const RID &p_id, const RID &p_related_id) = 0;
virtual void accessibility_update_set_active_descendant(const RID &p_id, const RID &p_other_id) = 0;
virtual void accessibility_update_set_next_on_line(const RID &p_id, const RID &p_other_id) = 0;
virtual void accessibility_update_set_previous_on_line(const RID &p_id, const RID &p_other_id) = 0;
virtual void accessibility_update_set_member_of(const RID &p_id, const RID &p_group_id) = 0;
virtual void accessibility_update_set_in_page_link_target(const RID &p_id, const RID &p_other_id) = 0;
virtual void accessibility_update_set_error_message(const RID &p_id, const RID &p_other_id) = 0;
virtual void accessibility_update_set_live(const RID &p_id, DisplayServer::AccessibilityLiveMode p_live) = 0;
virtual void accessibility_update_add_action(const RID &p_id, DisplayServer::AccessibilityAction p_action, const Callable &p_callable) = 0;
virtual void accessibility_update_add_custom_action(const RID &p_id, int p_action_id, const String &p_action_description) = 0;
virtual void accessibility_update_set_table_row_count(const RID &p_id, int p_count) = 0;
virtual void accessibility_update_set_table_column_count(const RID &p_id, int p_count) = 0;
virtual void accessibility_update_set_table_row_index(const RID &p_id, int p_index) = 0;
virtual void accessibility_update_set_table_column_index(const RID &p_id, int p_index) = 0;
virtual void accessibility_update_set_table_cell_position(const RID &p_id, int p_row_index, int p_column_index) = 0;
virtual void accessibility_update_set_table_cell_span(const RID &p_id, int p_row_span, int p_column_span) = 0;
virtual void accessibility_update_set_list_item_count(const RID &p_id, int p_size) = 0;
virtual void accessibility_update_set_list_item_index(const RID &p_id, int p_index) = 0;
virtual void accessibility_update_set_list_item_level(const RID &p_id, int p_level) = 0;
virtual void accessibility_update_set_list_item_selected(const RID &p_id, bool p_selected) = 0;
virtual void accessibility_update_set_list_item_expanded(const RID &p_id, bool p_expanded) = 0;
virtual void accessibility_update_set_popup_type(const RID &p_id, DisplayServer::AccessibilityPopupType p_popup) = 0;
virtual void accessibility_update_set_checked(const RID &p_id, bool p_checekd) = 0;
virtual void accessibility_update_set_num_value(const RID &p_id, double p_position) = 0;
virtual void accessibility_update_set_num_range(const RID &p_id, double p_min, double p_max) = 0;
virtual void accessibility_update_set_num_step(const RID &p_id, double p_step) = 0;
virtual void accessibility_update_set_num_jump(const RID &p_id, double p_jump) = 0;
virtual void accessibility_update_set_scroll_x(const RID &p_id, double p_position) = 0;
virtual void accessibility_update_set_scroll_x_range(const RID &p_id, double p_min, double p_max) = 0;
virtual void accessibility_update_set_scroll_y(const RID &p_id, double p_position) = 0;
virtual void accessibility_update_set_scroll_y_range(const RID &p_id, double p_min, double p_max) = 0;
virtual void accessibility_update_set_text_decorations(const RID &p_id, bool p_underline, bool p_strikethrough, bool p_overline) = 0;
virtual void accessibility_update_set_text_align(const RID &p_id, HorizontalAlignment p_align) = 0;
virtual void accessibility_update_set_text_selection(const RID &p_id, const RID &p_text_start_id, int p_start_char, const RID &p_text_end_id, int p_end_char) = 0;
virtual void accessibility_update_set_flag(const RID &p_id, DisplayServer::AccessibilityFlags p_flag, bool p_value) = 0;
virtual void accessibility_update_set_classname(const RID &p_id, const String &p_classname) = 0;
virtual void accessibility_update_set_placeholder(const RID &p_id, const String &p_placeholder) = 0;
virtual void accessibility_update_set_language(const RID &p_id, const String &p_language) = 0;
virtual void accessibility_update_set_text_orientation(const RID &p_id, bool p_vertical) = 0;
virtual void accessibility_update_set_list_orientation(const RID &p_id, bool p_vertical) = 0;
virtual void accessibility_update_set_shortcut(const RID &p_id, const String &p_shortcut) = 0;
virtual void accessibility_update_set_url(const RID &p_id, const String &p_url) = 0;
virtual void accessibility_update_set_role_description(const RID &p_id, const String &p_description) = 0;
virtual void accessibility_update_set_state_description(const RID &p_id, const String &p_description) = 0;
virtual void accessibility_update_set_color_value(const RID &p_id, const Color &p_color) = 0;
virtual void accessibility_update_set_background_color(const RID &p_id, const Color &p_color) = 0;
virtual void accessibility_update_set_foreground_color(const RID &p_id, const Color &p_color) = 0;
AccessibilityDriver() {}
virtual ~AccessibilityDriver() {}
};
#ifndef DISABLE_DEPRECATED
VARIANT_ENUM_CAST(DisplayServer::AccessibilityAction)
VARIANT_ENUM_CAST(DisplayServer::AccessibilityFlags)
VARIANT_ENUM_CAST(DisplayServer::AccessibilityLiveMode)
@ -1047,6 +942,7 @@ VARIANT_ENUM_CAST(DisplayServer::AccessibilityPopupType)
VARIANT_ENUM_CAST(DisplayServer::AccessibilityRole)
VARIANT_ENUM_CAST(DisplayServer::AccessibilityScrollUnit)
VARIANT_ENUM_CAST(DisplayServer::AccessibilityScrollHint)
#endif // DISABLE_DEPRECATED
VARIANT_ENUM_CAST(DisplayServer::WindowEvent)
VARIANT_ENUM_CAST(DisplayServer::Feature)

View file

@ -56,6 +56,7 @@
#include "camera/camera_feed.h"
#include "camera/camera_server.h"
#include "debugger/servers_debugger.h"
#include "display/accessibility_server.h"
#include "display/display_server.h"
#include "display/native_menu.h"
#include "movie_writer/movie_writer.h"
@ -157,6 +158,7 @@ void register_server_types() {
OS::get_singleton()->set_has_server_feature_callback(has_server_feature_callback);
GDREGISTER_ABSTRACT_CLASS(AccessibilityServer);
GDREGISTER_ABSTRACT_CLASS(DisplayServer);
GDREGISTER_ABSTRACT_CLASS(RenderingServer);
GDREGISTER_CLASS(AudioServer);
@ -385,6 +387,7 @@ void unregister_server_types() {
void register_server_singletons() {
OS::get_singleton()->benchmark_begin_measure("Servers", "Register Singletons");
Engine::get_singleton()->add_singleton(Engine::Singleton("AccessibilityServer", AccessibilityServer::get_singleton(), "AccessibilityServer"));
Engine::get_singleton()->add_singleton(Engine::Singleton("AudioServer", AudioServer::get_singleton(), "AudioServer"));
Engine::get_singleton()->add_singleton(Engine::Singleton("CameraServer", CameraServer::get_singleton(), "CameraServer"));
Engine::get_singleton()->add_singleton(Engine::Singleton("DisplayServer", DisplayServer::get_singleton(), "DisplayServer"));

View file

@ -37,6 +37,7 @@
#include "scene/main/window.h"
#include "scene/theme/theme_db.h"
#include "servers/audio/audio_server.h"
#include "servers/display/accessibility_server.h"
#include "servers/rendering/rendering_server.h"
#include "servers/rendering/rendering_server_default.h"
#include "tests/display_server_mock.h"
@ -177,6 +178,14 @@ struct GodotTestCaseListener : public doctest::IReporter {
Error err = OK;
OS::get_singleton()->set_has_server_feature_callback(nullptr);
for (int i = 0; i < AccessibilityServer::get_create_function_count(); i++) {
if (String("dummy") == AccessibilityServer::get_create_function_name(i)) {
AccessibilityServer::create(i, err);
break;
}
}
for (int i = 0; i < DisplayServer::get_create_function_count(); i++) {
if (String("mock") == DisplayServer::get_create_function_name(i)) {
DisplayServer::create(i, "", DisplayServer::WindowMode::WINDOW_MODE_MINIMIZED, DisplayServer::VSyncMode::VSYNC_ENABLED, 0, nullptr, Vector2i(0, 0), DisplayServer::SCREEN_PRIMARY, DisplayServer::CONTEXT_EDITOR, 0, err);
@ -338,6 +347,10 @@ struct GodotTestCaseListener : public doctest::IReporter {
memdelete(RenderingServer::get_singleton());
}
if (AccessibilityServer::get_singleton()) {
memdelete(AccessibilityServer::get_singleton());
}
if (DisplayServer::get_singleton()) {
memdelete(DisplayServer::get_singleton());
}