Initial editor accessibility.

This commit is contained in:
Pāvels Nadtočajevs 2025-03-21 09:55:22 +02:00
parent 4310cb82b8
commit 302fa831cc
No known key found for this signature in database
GPG key ID: 8413210218EF35D2
137 changed files with 1544 additions and 93 deletions

View file

@ -1485,6 +1485,15 @@ void AnimationTimelineEdit::_notification(int p_what) {
len_hb->set_size(Size2(get_buttons_width(), get_size().height));
} break;
case NOTIFICATION_ACCESSIBILITY_UPDATE: {
RID ae = get_accessibility_element();
ERR_FAIL_COND(ae.is_null());
//TODO
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_STATIC_TEXT);
DisplayServer::get_singleton()->accessibility_update_set_value(ae, TTR(vformat("The %s is not accessible at this time.", "Animation timeline editor")));
} break;
case NOTIFICATION_DRAW: {
int key_range = get_size().width - get_buttons_width() - get_name_limit();
@ -2008,10 +2017,12 @@ AnimationTimelineEdit::AnimationTimelineEdit() {
expander->set_h_size_flags(SIZE_EXPAND_FILL);
expander->set_mouse_filter(MOUSE_FILTER_IGNORE);
len_hb->add_child(expander);
time_icon = memnew(TextureRect);
time_icon->set_v_size_flags(SIZE_SHRINK_CENTER);
time_icon->set_tooltip_text(TTR("Animation length (seconds)"));
len_hb->add_child(time_icon);
length = memnew(EditorSpinSlider);
length->set_min(SECOND_DECIMAL);
length->set_max(36000);
@ -2020,11 +2031,14 @@ AnimationTimelineEdit::AnimationTimelineEdit() {
length->set_custom_minimum_size(Vector2(70 * EDSCALE, 0));
length->set_hide_slider(true);
length->set_tooltip_text(TTR("Animation length (seconds)"));
length->set_accessibility_name(TTRC("Animation length"));
length->connect(SceneStringName(value_changed), callable_mp(this, &AnimationTimelineEdit::_anim_length_changed));
len_hb->add_child(length);
loop = memnew(Button);
loop->set_flat(true);
loop->set_tooltip_text(TTR("Animation Looping"));
loop->set_accessibility_name(TTRC("Animation Looping"));
loop->connect(SceneStringName(pressed), callable_mp(this, &AnimationTimelineEdit::_anim_loop_pressed));
loop->set_toggle_mode(true);
len_hb->add_child(loop);
@ -2056,6 +2070,15 @@ void AnimationTrackEdit::_notification(int p_what) {
selected_icon = get_editor_theme_icon(SNAME("KeySelected"));
} break;
case NOTIFICATION_ACCESSIBILITY_UPDATE: {
RID ae = get_accessibility_element();
ERR_FAIL_COND(ae.is_null());
//TODO
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_STATIC_TEXT);
DisplayServer::get_singleton()->accessibility_update_set_value(ae, TTR(vformat("The %s is not accessible at this time.", "Animation track editor")));
} break;
case NOTIFICATION_DRAW: {
if (animation.is_null()) {
return;
@ -3604,6 +3627,15 @@ void AnimationTrackEditGroup::_notification(int p_what) {
icon_size = Vector2(1, 1) * get_theme_constant(SNAME("class_icon_size"), EditorStringName(Editor));
} break;
case NOTIFICATION_ACCESSIBILITY_UPDATE: {
RID ae = get_accessibility_element();
ERR_FAIL_COND(ae.is_null());
//TODO
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_STATIC_TEXT);
DisplayServer::get_singleton()->accessibility_update_set_value(ae, TTR(vformat("The %s is not accessible at this time.", "Animation track group")));
} break;
case NOTIFICATION_DRAW: {
const Ref<Font> font = get_theme_font(SceneStringName(font), SNAME("Label"));
const int font_size = get_theme_font_size(SceneStringName(font_size), SNAME("Label"));
@ -7674,6 +7706,7 @@ AnimationTrackEditor::AnimationTrackEditor() {
bezier_edit_icon->set_toggle_mode(true);
bezier_edit_icon->connect(SceneStringName(pressed), callable_mp(this, &AnimationTrackEditor::_toggle_bezier_edit));
bezier_edit_icon->set_tooltip_text(TTR("Toggle between the bezier curve editor and track editor."));
bezier_edit_icon->set_accessibility_name(TTRC("Bezier Curve Editor"));
bottom_hf->add_child(bezier_edit_icon);
@ -7692,6 +7725,7 @@ AnimationTrackEditor::AnimationTrackEditor() {
selected_filter->connect(SceneStringName(pressed), callable_mp(this, &AnimationTrackEditor::_view_group_toggle)); // Same function works the same.
selected_filter->set_toggle_mode(true);
selected_filter->set_tooltip_text(TTR("Only show tracks from nodes selected in tree."));
selected_filter->set_accessibility_name(TTRC("Show Tracks from Selected Nodes"));
bottom_hf->add_child(selected_filter);
@ -7700,6 +7734,7 @@ AnimationTrackEditor::AnimationTrackEditor() {
view_group->connect(SceneStringName(pressed), callable_mp(this, &AnimationTrackEditor::_view_group_toggle));
view_group->set_toggle_mode(true);
view_group->set_tooltip_text(TTR("Group tracks by node or display them as plain list."));
view_group->set_accessibility_name(TTRC("Group Tracks by Node"));
bottom_hf->add_child(view_group);
bottom_hf->add_child(memnew(VSeparator));
@ -7711,6 +7746,7 @@ AnimationTrackEditor::AnimationTrackEditor() {
snap_timeline->set_toggle_mode(true);
snap_timeline->set_pressed(false);
snap_timeline->set_tooltip_text(TTR("Apply snapping to timeline cursor."));
snap_timeline->set_accessibility_name(TTRC("Apply Snapping to Cursor"));
snap_keys = memnew(Button);
snap_keys->set_flat(true);
@ -7719,6 +7755,7 @@ AnimationTrackEditor::AnimationTrackEditor() {
snap_keys->set_toggle_mode(true);
snap_keys->set_pressed(true);
snap_keys->set_tooltip_text(TTR("Apply snapping to selected key(s)."));
snap_keys->set_accessibility_name(TTRC("Apply Snapping to Selected Key"));
fps_compat = memnew(Button);
fps_compat->set_flat(true);
@ -7727,6 +7764,7 @@ AnimationTrackEditor::AnimationTrackEditor() {
fps_compat->set_toggle_mode(true);
fps_compat->set_pressed(true);
fps_compat->set_tooltip_text(TTR("Apply snapping to the nearest integer FPS."));
fps_compat->set_accessibility_name(TTRC("Apply Snapping to Nearest Integer FPS"));
fps_compat->connect(SceneStringName(toggled), callable_mp(this, &AnimationTrackEditor::_update_fps_compat_mode));
nearest_fps_label = memnew(Label);
@ -7740,6 +7778,7 @@ AnimationTrackEditor::AnimationTrackEditor() {
step->set_hide_slider(true);
step->set_custom_minimum_size(Size2(100, 0) * EDSCALE);
step->set_tooltip_text(TTR("Animation step value."));
step->set_accessibility_name(TTRC("Animation Step Value"));
bottom_hf->add_child(step);
step->connect(SceneStringName(value_changed), callable_mp(this, &AnimationTrackEditor::_update_step));
step->set_read_only(true);
@ -7747,6 +7786,7 @@ AnimationTrackEditor::AnimationTrackEditor() {
snap_mode = memnew(OptionButton);
snap_mode->add_item(TTR("Seconds"));
snap_mode->add_item(TTR("FPS"));
snap_mode->set_accessibility_name(TTRC("Snap Mode"));
snap_mode->set_disabled(true);
bottom_hf->add_child(snap_mode);
snap_mode->connect(SceneStringName(item_selected), callable_mp(this, &AnimationTrackEditor::_snap_mode_changed));
@ -7764,6 +7804,7 @@ AnimationTrackEditor::AnimationTrackEditor() {
zoom->set_value(1.0);
zoom->set_custom_minimum_size(Size2(200, 0) * EDSCALE);
zoom->set_v_size_flags(SIZE_SHRINK_CENTER);
zoom->set_accessibility_name(TTRC("Zoom"));
zoom_hb->add_child(zoom);
bottom_hf->add_child(zoom_hb);
timeline->set_zoom(zoom);
@ -7774,6 +7815,7 @@ AnimationTrackEditor::AnimationTrackEditor() {
auto_fit->set_flat(true);
auto_fit->connect(SceneStringName(pressed), callable_mp(this, &AnimationTrackEditor::_auto_fit));
auto_fit->set_shortcut(ED_GET_SHORTCUT("animation_editor/auto_fit"));
auto_fit->set_accessibility_name(TTRC("Auto Fit"));
bottom_hf->add_child(auto_fit);
auto_fit_bezier = memnew(Button);
@ -7781,6 +7823,7 @@ AnimationTrackEditor::AnimationTrackEditor() {
auto_fit_bezier->set_visible(false);
auto_fit_bezier->connect(SceneStringName(pressed), callable_mp(this, &AnimationTrackEditor::_auto_fit_bezier));
auto_fit_bezier->set_shortcut(ED_GET_SHORTCUT("animation_editor/auto_fit"));
auto_fit_bezier->set_accessibility_name(TTRC("Auto Fit Bezier"));
bottom_hf->add_child(auto_fit_bezier);
edit = memnew(MenuButton);
@ -7789,6 +7832,7 @@ AnimationTrackEditor::AnimationTrackEditor() {
edit->set_flat(false);
edit->set_disabled(true);
edit->set_tooltip_text(TTR("Animation properties."));
edit->set_accessibility_name(TTRC("Animation Properties"));
edit->get_popup()->add_item(TTR("Copy Tracks..."), EDIT_COPY_TRACKS);
edit->get_popup()->add_item(TTR("Paste Tracks"), EDIT_PASTE_TRACKS);
edit->get_popup()->add_separator();
@ -7833,10 +7877,12 @@ AnimationTrackEditor::AnimationTrackEditor() {
prop_selector = memnew(PropertySelector);
add_child(prop_selector);
prop_selector->connect("selected", callable_mp(this, &AnimationTrackEditor::_new_track_property_selected));
prop_selector->set_accessibility_name(TTRC("Track Property"));
method_selector = memnew(PropertySelector);
add_child(method_selector);
method_selector->connect("selected", callable_mp(this, &AnimationTrackEditor::_add_method_key));
method_selector->set_accessibility_name(TTRC("Method Key"));
insert_confirm = memnew(ConfirmationDialog);
add_child(insert_confirm);
@ -7881,18 +7927,21 @@ AnimationTrackEditor::AnimationTrackEditor() {
optimize_velocity_error->set_min(0.001);
optimize_velocity_error->set_step(0.001);
optimize_velocity_error->set_value(0.01);
optimize_velocity_error->set_accessibility_name(TTRC("Max Velocity Error"));
optimize_vb->add_margin_child(TTR("Max Velocity Error:"), optimize_velocity_error);
optimize_angular_error = memnew(SpinBox);
optimize_angular_error->set_max(1.0);
optimize_angular_error->set_min(0.001);
optimize_angular_error->set_step(0.001);
optimize_angular_error->set_value(0.01);
optimize_angular_error->set_accessibility_name(TTRC("Max Angular Error"));
optimize_vb->add_margin_child(TTR("Max Angular Error:"), optimize_angular_error);
optimize_precision_error = memnew(SpinBox);
optimize_precision_error->set_max(6);
optimize_precision_error->set_min(1);
optimize_precision_error->set_step(1);
optimize_precision_error->set_value(3);
optimize_precision_error->set_accessibility_name(TTRC("Max Precision Error"));
optimize_vb->add_margin_child(TTR("Max Precision Error:"), optimize_precision_error);
optimize_dialog->set_ok_button_text(TTR("Optimize"));
@ -7943,6 +7992,7 @@ AnimationTrackEditor::AnimationTrackEditor() {
scale->set_max(99999);
scale->set_step(0.001);
scale->set_select_all_on_focus(true);
scale->set_accessibility_name(TTRC("Scale Ratio"));
vbc->add_margin_child(TTR("Scale Ratio:"), scale);
scale_dialog->connect(SceneStringName(confirmed), callable_mp(this, &AnimationTrackEditor::_edit_menu_pressed).bind(EDIT_SCALE_CONFIRM), CONNECT_DEFERRED);
add_child(scale_dialog);
@ -7958,6 +8008,7 @@ AnimationTrackEditor::AnimationTrackEditor() {
ease_grid->set_columns(2);
ease_dialog->add_child(ease_grid);
transition_selection = memnew(OptionButton);
transition_selection->set_accessibility_name(TTRC("Transition Type"));
transition_selection->add_item(TTR("Linear", "Transition Type"), Tween::TRANS_LINEAR);
transition_selection->add_item(TTR("Sine", "Transition Type"), Tween::TRANS_SINE);
transition_selection->add_item(TTR("Quint", "Transition Type"), Tween::TRANS_QUINT);
@ -7973,6 +8024,7 @@ AnimationTrackEditor::AnimationTrackEditor() {
transition_selection->select(Tween::TRANS_LINEAR); // Default
transition_selection->set_auto_translate_mode(AUTO_TRANSLATE_MODE_DISABLED); // Translation context is needed.
ease_selection = memnew(OptionButton);
ease_selection->set_accessibility_name(TTRC("Ease Type"));
ease_selection->add_item(TTR("In", "Ease Type"), Tween::EASE_IN);
ease_selection->add_item(TTR("Out", "Ease Type"), Tween::EASE_OUT);
ease_selection->add_item(TTR("InOut", "Ease Type"), Tween::EASE_IN_OUT);
@ -7984,6 +8036,7 @@ AnimationTrackEditor::AnimationTrackEditor() {
ease_fps->set_max(999);
ease_fps->set_step(FPS_DECIMAL);
ease_fps->set_value(30); // Default
ease_fps->set_accessibility_name(TTRC("FPS"));
ease_grid->add_child(memnew(Label(TTR("Transition Type:"))));
ease_grid->add_child(transition_selection);
ease_grid->add_child(memnew(Label(TTR("Ease Type:"))));
@ -8000,12 +8053,16 @@ AnimationTrackEditor::AnimationTrackEditor() {
bake_grid->set_columns(2);
bake_dialog->add_child(bake_grid);
bake_trs = memnew(CheckBox);
bake_trs->set_accessibility_name(TTRC("3D Pos/Rot/Scl Track"));
bake_trs->set_pressed(true);
bake_blendshape = memnew(CheckBox);
bake_blendshape->set_accessibility_name(TTRC("Blendshape Track"));
bake_blendshape->set_pressed(true);
bake_value = memnew(CheckBox);
bake_value->set_accessibility_name(TTRC("Value Track"));
bake_value->set_pressed(true);
bake_fps = memnew(SpinBox);
bake_fps->set_accessibility_name(TTRC("FPS"));
bake_fps->set_min(FPS_DECIMAL);
bake_fps->set_max(999);
bake_fps->set_step(FPS_DECIMAL);
@ -8033,6 +8090,7 @@ AnimationTrackEditor::AnimationTrackEditor() {
track_copy_vbox->add_child(select_all_button);
track_copy_select = memnew(Tree);
track_copy_select->set_accessibility_name(TTRC("Copy Selection"));
track_copy_select->set_auto_translate_mode(AUTO_TRANSLATE_MODE_DISABLED);
track_copy_select->set_h_size_flags(SIZE_EXPAND_FILL);
track_copy_select->set_v_size_flags(SIZE_EXPAND_FILL);
@ -8369,6 +8427,15 @@ void AnimationMarkerEdit::_notification(int p_what) {
selected_icon = get_editor_theme_icon(SNAME("MarkerSelected"));
} break;
case NOTIFICATION_ACCESSIBILITY_UPDATE: {
RID ae = get_accessibility_element();
ERR_FAIL_COND(ae.is_null());
//TODO
DisplayServer::get_singleton()->accessibility_update_set_role(ae, DisplayServer::AccessibilityRole::ROLE_STATIC_TEXT);
DisplayServer::get_singleton()->accessibility_update_set_value(ae, TTR(vformat("The %s is not accessible at this time.", "Animation marker editor")));
} break;
case NOTIFICATION_DRAW: {
if (animation.is_null()) {
return;