Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
ns_role_mapping.hpp
Go to the documentation of this file.
1#pragma once
2
3// Apple NSAccessibility mapping for Pulp AccessRole.
4//
5// ObjC++-only header (NSAccessibilityRole is an NSString*), shared by BOTH
6// macOS accessibility bridges so they cannot drift:
7//
8// * core/view/platform/mac/accessibility_mac.mm — standalone window host
9// * core/view/platform/mac/plugin_view_host_mac.mm — plug-in editor host
10//
11// Before this header the two carried independent switch/if-chains that had
12// already diverged (meter was NSAccessibilityProgressIndicatorRole in one and
13// NSAccessibilityLevelIndicatorRole in the other), so a DAW user and a
14// standalone user heard different things for the same widget.
15//
16// Note on AccessRole::none: views with `none` are EXCLUDED from the
17// accessibility tree by the collectors in both hosts — they never reach this
18// function. The `none` case below exists only to keep the switch exhaustive
19// (so adding an AccessRole value is a compile error here, not a silent
20// fallthrough); NSAccessibilityUnknownRole is a defensive value, not the
21// mechanism by which unroled views are hidden.
22
23// TargetConditionals.h is Apple-only, and this is a PUBLIC header — the
24// "public headers compile standalone" gate parses it on Linux, where an
25// unconditional include is a fatal error. TARGET_OS_OSX is then undefined off
26// Apple, which `#if` reads as 0, so the body below is correctly skipped.
27#if defined(__APPLE__)
28#include <TargetConditionals.h>
29#endif
30
31#if defined(__OBJC__) && TARGET_OS_OSX
32
33#include <pulp/view/view.hpp>
34
35#import <AppKit/NSAccessibilityConstants.h>
36
37namespace pulp::view {
38
52inline NSAccessibilityRole ns_role_for_access_role(View::AccessRole role) {
53 switch (role) {
54 case View::AccessRole::slider: return NSAccessibilitySliderRole;
55 case View::AccessRole::toggle: return NSAccessibilityCheckBoxRole;
56 case View::AccessRole::label: return NSAccessibilityStaticTextRole;
57 case View::AccessRole::group: return NSAccessibilityGroupRole;
58 case View::AccessRole::meter: return NSAccessibilityLevelIndicatorRole;
59 case View::AccessRole::image: return NSAccessibilityImageRole;
60 case View::AccessRole::button: return NSAccessibilityButtonRole;
61 case View::AccessRole::link: return NSAccessibilityLinkRole;
62 case View::AccessRole::checkbox: return NSAccessibilityCheckBoxRole;
63 case View::AccessRole::radio: return NSAccessibilityRadioButtonRole;
64 case View::AccessRole::text_field: return NSAccessibilityTextFieldRole;
65 case View::AccessRole::combo_box: return NSAccessibilityPopUpButtonRole;
66 case View::AccessRole::list: return NSAccessibilityListRole;
67 case View::AccessRole::list_item: return NSAccessibilityRowRole;
68 case View::AccessRole::table: return NSAccessibilityTableRole;
69 case View::AccessRole::row: return NSAccessibilityRowRole;
70 case View::AccessRole::cell: return NSAccessibilityCellRole;
71 case View::AccessRole::tab: return NSAccessibilityRadioButtonRole;
72 case View::AccessRole::tab_list: return NSAccessibilityTabGroupRole;
73 case View::AccessRole::menu: return NSAccessibilityMenuRole;
74 case View::AccessRole::menu_item: return NSAccessibilityMenuItemRole;
75 case View::AccessRole::progress_bar: return NSAccessibilityProgressIndicatorRole;
76 case View::AccessRole::dialog: return NSAccessibilityGroupRole;
77 case View::AccessRole::heading: return NSAccessibilityStaticTextRole;
78 case View::AccessRole::scroll_bar: return NSAccessibilityScrollBarRole;
79 case View::AccessRole::none: break;
80 }
81 return NSAccessibilityUnknownRole;
82}
83
84} // namespace pulp::view
85
86#endif // __OBJC__ && TARGET_OS_OSX
AccessRole
Screen-reader role.
Definition view.hpp:988
@ list
Definition view.hpp:991
@ slider
Definition view.hpp:989
@ list_item
Definition view.hpp:991
@ link
Definition view.hpp:990
@ none
Definition view.hpp:989
@ toggle
Definition view.hpp:989
@ meter
Definition view.hpp:989
@ image
Definition view.hpp:989
@ menu_item
Definition view.hpp:992
@ cell
Definition view.hpp:991
@ menu
Definition view.hpp:992
@ dialog
Definition view.hpp:992
@ checkbox
Definition view.hpp:990
@ radio
Definition view.hpp:990
@ tab_list
Definition view.hpp:991
@ table
Definition view.hpp:991
@ scroll_bar
Definition view.hpp:992
@ button
Definition view.hpp:990
@ label
Definition view.hpp:989
@ group
Definition view.hpp:989
@ tab
Definition view.hpp:991
@ text_field
Definition view.hpp:990
@ progress_bar
Definition view.hpp:992
@ row
Definition view.hpp:991
@ heading
Definition view.hpp:992
@ combo_box
Definition view.hpp:990
Hover-cursor tracking for platform window hosts.
Definition fwd.hpp:27