/** * Copyright 2023 The AccessKit Authors. All rights reserved. * Licensed under the Apache License, Version 2.0 (found in * the LICENSE-APACHE file) or the MIT license (found in * the LICENSE-MIT file), at your option. */ #ifndef ACCESSKIT_H #define ACCESSKIT_H #include #include #include #include #include #ifdef _WIN32 #include #endif /** * An action to be taken on an accessibility node. */ enum accesskit_action #ifdef __cplusplus : uint8_t #endif // __cplusplus { /** * Do the equivalent of a single click or tap. */ ACCESSKIT_ACTION_CLICK, ACCESSKIT_ACTION_FOCUS, ACCESSKIT_ACTION_BLUR, ACCESSKIT_ACTION_COLLAPSE, ACCESSKIT_ACTION_EXPAND, /** * Requires [`ActionRequest::data`] to be set to [`ActionData::CustomAction`]. */ ACCESSKIT_ACTION_CUSTOM_ACTION, /** * Decrement a numeric value by one step. */ ACCESSKIT_ACTION_DECREMENT, /** * Increment a numeric value by one step. */ ACCESSKIT_ACTION_INCREMENT, ACCESSKIT_ACTION_HIDE_TOOLTIP, ACCESSKIT_ACTION_SHOW_TOOLTIP, /** * Delete any selected text in the control's text value and * insert the specified value in its place, like when typing or pasting. * Requires [`ActionRequest::data`] to be set to [`ActionData::Value`]. */ ACCESSKIT_ACTION_REPLACE_SELECTED_TEXT, ACCESSKIT_ACTION_SCROLL_BACKWARD, ACCESSKIT_ACTION_SCROLL_DOWN, ACCESSKIT_ACTION_SCROLL_FORWARD, ACCESSKIT_ACTION_SCROLL_LEFT, ACCESSKIT_ACTION_SCROLL_RIGHT, ACCESSKIT_ACTION_SCROLL_UP, /** * Scroll any scrollable containers to make the target object visible * on the screen. Optionally set [`ActionRequest::data`] to * [`ActionData::ScrollTargetRect`]. */ ACCESSKIT_ACTION_SCROLL_INTO_VIEW, /** * Scroll the given object to a specified point in the tree's container * (e.g. window). Requires [`ActionRequest::data`] to be set to * [`ActionData::ScrollToPoint`]. */ ACCESSKIT_ACTION_SCROLL_TO_POINT, /** * Requires [`ActionRequest::data`] to be set to * [`ActionData::SetScrollOffset`]. */ ACCESSKIT_ACTION_SET_SCROLL_OFFSET, /** * Requires [`ActionRequest::data`] to be set to * [`ActionData::SetTextSelection`]. */ ACCESSKIT_ACTION_SET_TEXT_SELECTION, /** * Don't focus this node, but set it as the sequential focus navigation * starting point, so that pressing Tab moves to the next element * following this one, for example. */ ACCESSKIT_ACTION_SET_SEQUENTIAL_FOCUS_NAVIGATION_STARTING_POINT, /** * Replace the value of the control with the specified value and * reset the selection, if applicable. Requires [`ActionRequest::data`] * to be set to [`ActionData::Value`] or [`ActionData::NumericValue`]. */ ACCESSKIT_ACTION_SET_VALUE, ACCESSKIT_ACTION_SHOW_CONTEXT_MENU, }; #ifndef __cplusplus typedef uint8_t accesskit_action; #endif // __cplusplus enum accesskit_aria_current #ifdef __cplusplus : uint8_t #endif // __cplusplus { ACCESSKIT_ARIA_CURRENT_FALSE, ACCESSKIT_ARIA_CURRENT_TRUE, ACCESSKIT_ARIA_CURRENT_PAGE, ACCESSKIT_ARIA_CURRENT_STEP, ACCESSKIT_ARIA_CURRENT_LOCATION, ACCESSKIT_ARIA_CURRENT_DATE, ACCESSKIT_ARIA_CURRENT_TIME, }; #ifndef __cplusplus typedef uint8_t accesskit_aria_current; #endif // __cplusplus enum accesskit_auto_complete #ifdef __cplusplus : uint8_t #endif // __cplusplus { ACCESSKIT_AUTO_COMPLETE_INLINE, ACCESSKIT_AUTO_COMPLETE_LIST, ACCESSKIT_AUTO_COMPLETE_BOTH, }; #ifndef __cplusplus typedef uint8_t accesskit_auto_complete; #endif // __cplusplus enum accesskit_has_popup #ifdef __cplusplus : uint8_t #endif // __cplusplus { ACCESSKIT_HAS_POPUP_TRUE, ACCESSKIT_HAS_POPUP_MENU, ACCESSKIT_HAS_POPUP_LISTBOX, ACCESSKIT_HAS_POPUP_TREE, ACCESSKIT_HAS_POPUP_GRID, ACCESSKIT_HAS_POPUP_DIALOG, }; #ifndef __cplusplus typedef uint8_t accesskit_has_popup; #endif // __cplusplus /** * Indicates if a form control has invalid input or if a web DOM element has an * [`aria-invalid`] attribute. * * [`aria-invalid`]: https://www.w3.org/TR/wai-aria-1.1/#aria-invalid */ enum accesskit_invalid #ifdef __cplusplus : uint8_t #endif // __cplusplus { ACCESSKIT_INVALID_TRUE, ACCESSKIT_INVALID_GRAMMAR, ACCESSKIT_INVALID_SPELLING, }; #ifndef __cplusplus typedef uint8_t accesskit_invalid; #endif // __cplusplus enum accesskit_list_style #ifdef __cplusplus : uint8_t #endif // __cplusplus { ACCESSKIT_LIST_STYLE_CIRCLE, ACCESSKIT_LIST_STYLE_DISC, ACCESSKIT_LIST_STYLE_IMAGE, ACCESSKIT_LIST_STYLE_NUMERIC, ACCESSKIT_LIST_STYLE_SQUARE, /** * Language specific ordering (alpha, roman, cjk-ideographic, etc...) */ ACCESSKIT_LIST_STYLE_OTHER, }; #ifndef __cplusplus typedef uint8_t accesskit_list_style; #endif // __cplusplus enum accesskit_live #ifdef __cplusplus : uint8_t #endif // __cplusplus { ACCESSKIT_LIVE_OFF, ACCESSKIT_LIVE_POLITE, ACCESSKIT_LIVE_ASSERTIVE, }; #ifndef __cplusplus typedef uint8_t accesskit_live; #endif // __cplusplus enum accesskit_orientation #ifdef __cplusplus : uint8_t #endif // __cplusplus { /** * E.g. most toolbars and separators. */ ACCESSKIT_ORIENTATION_HORIZONTAL, /** * E.g. menu or combo box. */ ACCESSKIT_ORIENTATION_VERTICAL, }; #ifndef __cplusplus typedef uint8_t accesskit_orientation; #endif // __cplusplus /** * The type of an accessibility node. * * The majority of these roles come from the ARIA specification. Reference * the latest draft for proper usage. * * Like the AccessKit schema as a whole, this list is largely taken * from Chromium. However, unlike Chromium's alphabetized list, this list * is ordered roughly by expected usage frequency (with the notable exception * of [`Role::Unknown`]). This is more efficient in serialization formats * where integers use a variable-length encoding. */ enum accesskit_role #ifdef __cplusplus : uint8_t #endif // __cplusplus { ACCESSKIT_ROLE_UNKNOWN, ACCESSKIT_ROLE_TEXT_RUN, ACCESSKIT_ROLE_CELL, ACCESSKIT_ROLE_LABEL, ACCESSKIT_ROLE_IMAGE, ACCESSKIT_ROLE_LINK, ACCESSKIT_ROLE_ROW, ACCESSKIT_ROLE_LIST_ITEM, /** * Contains the bullet, number, or other marker for a list item. */ ACCESSKIT_ROLE_LIST_MARKER, ACCESSKIT_ROLE_TREE_ITEM, ACCESSKIT_ROLE_LIST_BOX_OPTION, ACCESSKIT_ROLE_MENU_ITEM, ACCESSKIT_ROLE_MENU_LIST_OPTION, ACCESSKIT_ROLE_PARAGRAPH, /** * A generic container that should be ignored by assistive technologies * and filtered out of platform accessibility trees. Equivalent to the ARIA * `none` or `presentation` role, or to an HTML `div` with no role. */ ACCESSKIT_ROLE_GENERIC_CONTAINER, ACCESSKIT_ROLE_CHECK_BOX, ACCESSKIT_ROLE_RADIO_BUTTON, ACCESSKIT_ROLE_TEXT_INPUT, ACCESSKIT_ROLE_BUTTON, ACCESSKIT_ROLE_DEFAULT_BUTTON, ACCESSKIT_ROLE_PANE, ACCESSKIT_ROLE_ROW_HEADER, ACCESSKIT_ROLE_COLUMN_HEADER, ACCESSKIT_ROLE_ROW_GROUP, ACCESSKIT_ROLE_LIST, ACCESSKIT_ROLE_TABLE, ACCESSKIT_ROLE_LAYOUT_TABLE_CELL, ACCESSKIT_ROLE_LAYOUT_TABLE_ROW, ACCESSKIT_ROLE_LAYOUT_TABLE, ACCESSKIT_ROLE_SWITCH, ACCESSKIT_ROLE_MENU, ACCESSKIT_ROLE_MULTILINE_TEXT_INPUT, ACCESSKIT_ROLE_SEARCH_INPUT, ACCESSKIT_ROLE_DATE_INPUT, ACCESSKIT_ROLE_DATE_TIME_INPUT, ACCESSKIT_ROLE_WEEK_INPUT, ACCESSKIT_ROLE_MONTH_INPUT, ACCESSKIT_ROLE_TIME_INPUT, ACCESSKIT_ROLE_EMAIL_INPUT, ACCESSKIT_ROLE_NUMBER_INPUT, ACCESSKIT_ROLE_PASSWORD_INPUT, ACCESSKIT_ROLE_PHONE_NUMBER_INPUT, ACCESSKIT_ROLE_URL_INPUT, ACCESSKIT_ROLE_ABBR, ACCESSKIT_ROLE_ALERT, ACCESSKIT_ROLE_ALERT_DIALOG, ACCESSKIT_ROLE_APPLICATION, ACCESSKIT_ROLE_ARTICLE, ACCESSKIT_ROLE_AUDIO, ACCESSKIT_ROLE_BANNER, ACCESSKIT_ROLE_BLOCKQUOTE, ACCESSKIT_ROLE_CANVAS, ACCESSKIT_ROLE_CAPTION, ACCESSKIT_ROLE_CARET, ACCESSKIT_ROLE_CODE, ACCESSKIT_ROLE_COLOR_WELL, ACCESSKIT_ROLE_COMBO_BOX, ACCESSKIT_ROLE_EDITABLE_COMBO_BOX, ACCESSKIT_ROLE_COMPLEMENTARY, ACCESSKIT_ROLE_COMMENT, ACCESSKIT_ROLE_CONTENT_DELETION, ACCESSKIT_ROLE_CONTENT_INSERTION, ACCESSKIT_ROLE_CONTENT_INFO, ACCESSKIT_ROLE_DEFINITION, ACCESSKIT_ROLE_DESCRIPTION_LIST, ACCESSKIT_ROLE_DESCRIPTION_LIST_DETAIL, ACCESSKIT_ROLE_DESCRIPTION_LIST_TERM, ACCESSKIT_ROLE_DETAILS, ACCESSKIT_ROLE_DIALOG, ACCESSKIT_ROLE_DIRECTORY, ACCESSKIT_ROLE_DISCLOSURE_TRIANGLE, ACCESSKIT_ROLE_DOCUMENT, ACCESSKIT_ROLE_EMBEDDED_OBJECT, ACCESSKIT_ROLE_EMPHASIS, ACCESSKIT_ROLE_FEED, ACCESSKIT_ROLE_FIGURE_CAPTION, ACCESSKIT_ROLE_FIGURE, ACCESSKIT_ROLE_FOOTER, ACCESSKIT_ROLE_FOOTER_AS_NON_LANDMARK, ACCESSKIT_ROLE_FORM, ACCESSKIT_ROLE_GRID, ACCESSKIT_ROLE_GROUP, ACCESSKIT_ROLE_HEADER, ACCESSKIT_ROLE_HEADER_AS_NON_LANDMARK, ACCESSKIT_ROLE_HEADING, ACCESSKIT_ROLE_IFRAME, ACCESSKIT_ROLE_IFRAME_PRESENTATIONAL, ACCESSKIT_ROLE_IME_CANDIDATE, ACCESSKIT_ROLE_KEYBOARD, ACCESSKIT_ROLE_LEGEND, ACCESSKIT_ROLE_LINE_BREAK, ACCESSKIT_ROLE_LIST_BOX, ACCESSKIT_ROLE_LOG, ACCESSKIT_ROLE_MAIN, ACCESSKIT_ROLE_MARK, ACCESSKIT_ROLE_MARQUEE, ACCESSKIT_ROLE_MATH, ACCESSKIT_ROLE_MENU_BAR, ACCESSKIT_ROLE_MENU_ITEM_CHECK_BOX, ACCESSKIT_ROLE_MENU_ITEM_RADIO, ACCESSKIT_ROLE_MENU_LIST_POPUP, ACCESSKIT_ROLE_METER, ACCESSKIT_ROLE_NAVIGATION, ACCESSKIT_ROLE_NOTE, ACCESSKIT_ROLE_PLUGIN_OBJECT, ACCESSKIT_ROLE_PORTAL, ACCESSKIT_ROLE_PRE, ACCESSKIT_ROLE_PROGRESS_INDICATOR, ACCESSKIT_ROLE_RADIO_GROUP, ACCESSKIT_ROLE_REGION, ACCESSKIT_ROLE_ROOT_WEB_AREA, ACCESSKIT_ROLE_RUBY, ACCESSKIT_ROLE_RUBY_ANNOTATION, ACCESSKIT_ROLE_SCROLL_BAR, ACCESSKIT_ROLE_SCROLL_VIEW, ACCESSKIT_ROLE_SEARCH, ACCESSKIT_ROLE_SECTION, ACCESSKIT_ROLE_SLIDER, ACCESSKIT_ROLE_SPIN_BUTTON, ACCESSKIT_ROLE_SPLITTER, ACCESSKIT_ROLE_STATUS, ACCESSKIT_ROLE_STRONG, ACCESSKIT_ROLE_SUGGESTION, ACCESSKIT_ROLE_SVG_ROOT, ACCESSKIT_ROLE_TAB, ACCESSKIT_ROLE_TAB_LIST, ACCESSKIT_ROLE_TAB_PANEL, ACCESSKIT_ROLE_TERM, ACCESSKIT_ROLE_TIME, ACCESSKIT_ROLE_TIMER, ACCESSKIT_ROLE_TITLE_BAR, ACCESSKIT_ROLE_TOOLBAR, ACCESSKIT_ROLE_TOOLTIP, ACCESSKIT_ROLE_TREE, ACCESSKIT_ROLE_TREE_GRID, ACCESSKIT_ROLE_VIDEO, ACCESSKIT_ROLE_WEB_VIEW, ACCESSKIT_ROLE_WINDOW, ACCESSKIT_ROLE_PDF_ACTIONABLE_HIGHLIGHT, ACCESSKIT_ROLE_PDF_ROOT, ACCESSKIT_ROLE_GRAPHICS_DOCUMENT, ACCESSKIT_ROLE_GRAPHICS_OBJECT, ACCESSKIT_ROLE_GRAPHICS_SYMBOL, ACCESSKIT_ROLE_DOC_ABSTRACT, ACCESSKIT_ROLE_DOC_ACKNOWLEDGEMENTS, ACCESSKIT_ROLE_DOC_AFTERWORD, ACCESSKIT_ROLE_DOC_APPENDIX, ACCESSKIT_ROLE_DOC_BACK_LINK, ACCESSKIT_ROLE_DOC_BIBLIO_ENTRY, ACCESSKIT_ROLE_DOC_BIBLIOGRAPHY, ACCESSKIT_ROLE_DOC_BIBLIO_REF, ACCESSKIT_ROLE_DOC_CHAPTER, ACCESSKIT_ROLE_DOC_COLOPHON, ACCESSKIT_ROLE_DOC_CONCLUSION, ACCESSKIT_ROLE_DOC_COVER, ACCESSKIT_ROLE_DOC_CREDIT, ACCESSKIT_ROLE_DOC_CREDITS, ACCESSKIT_ROLE_DOC_DEDICATION, ACCESSKIT_ROLE_DOC_ENDNOTE, ACCESSKIT_ROLE_DOC_ENDNOTES, ACCESSKIT_ROLE_DOC_EPIGRAPH, ACCESSKIT_ROLE_DOC_EPILOGUE, ACCESSKIT_ROLE_DOC_ERRATA, ACCESSKIT_ROLE_DOC_EXAMPLE, ACCESSKIT_ROLE_DOC_FOOTNOTE, ACCESSKIT_ROLE_DOC_FOREWORD, ACCESSKIT_ROLE_DOC_GLOSSARY, ACCESSKIT_ROLE_DOC_GLOSS_REF, ACCESSKIT_ROLE_DOC_INDEX, ACCESSKIT_ROLE_DOC_INTRODUCTION, ACCESSKIT_ROLE_DOC_NOTE_REF, ACCESSKIT_ROLE_DOC_NOTICE, ACCESSKIT_ROLE_DOC_PAGE_BREAK, ACCESSKIT_ROLE_DOC_PAGE_FOOTER, ACCESSKIT_ROLE_DOC_PAGE_HEADER, ACCESSKIT_ROLE_DOC_PAGE_LIST, ACCESSKIT_ROLE_DOC_PART, ACCESSKIT_ROLE_DOC_PREFACE, ACCESSKIT_ROLE_DOC_PROLOGUE, ACCESSKIT_ROLE_DOC_PULLQUOTE, ACCESSKIT_ROLE_DOC_QNA, ACCESSKIT_ROLE_DOC_SUBTITLE, ACCESSKIT_ROLE_DOC_TIP, ACCESSKIT_ROLE_DOC_TOC, /** * Behaves similar to an ARIA grid but is primarily used by Chromium's * `TableView` and its subclasses, so they can be exposed correctly * on certain platforms. */ ACCESSKIT_ROLE_LIST_GRID, /** * This is just like a multi-line document, but signals that assistive * technologies should implement behavior specific to a VT-100-style * terminal. */ ACCESSKIT_ROLE_TERMINAL, }; #ifndef __cplusplus typedef uint8_t accesskit_role; #endif // __cplusplus enum accesskit_sort_direction #ifdef __cplusplus : uint8_t #endif // __cplusplus { ACCESSKIT_SORT_DIRECTION_ASCENDING, ACCESSKIT_SORT_DIRECTION_DESCENDING, ACCESSKIT_SORT_DIRECTION_OTHER, }; #ifndef __cplusplus typedef uint8_t accesskit_sort_direction; #endif // __cplusplus enum accesskit_text_align #ifdef __cplusplus : uint8_t #endif // __cplusplus { ACCESSKIT_TEXT_ALIGN_LEFT, ACCESSKIT_TEXT_ALIGN_RIGHT, ACCESSKIT_TEXT_ALIGN_CENTER, ACCESSKIT_TEXT_ALIGN_JUSTIFY, }; #ifndef __cplusplus typedef uint8_t accesskit_text_align; #endif // __cplusplus enum accesskit_text_decoration #ifdef __cplusplus : uint8_t #endif // __cplusplus { ACCESSKIT_TEXT_DECORATION_SOLID, ACCESSKIT_TEXT_DECORATION_DOTTED, ACCESSKIT_TEXT_DECORATION_DASHED, ACCESSKIT_TEXT_DECORATION_DOUBLE, ACCESSKIT_TEXT_DECORATION_WAVY, }; #ifndef __cplusplus typedef uint8_t accesskit_text_decoration; #endif // __cplusplus enum accesskit_text_direction #ifdef __cplusplus : uint8_t #endif // __cplusplus { ACCESSKIT_TEXT_DIRECTION_LEFT_TO_RIGHT, ACCESSKIT_TEXT_DIRECTION_RIGHT_TO_LEFT, ACCESSKIT_TEXT_DIRECTION_TOP_TO_BOTTOM, ACCESSKIT_TEXT_DIRECTION_BOTTOM_TO_TOP, }; #ifndef __cplusplus typedef uint8_t accesskit_text_direction; #endif // __cplusplus enum accesskit_toggled #ifdef __cplusplus : uint8_t #endif // __cplusplus { ACCESSKIT_TOGGLED_FALSE, ACCESSKIT_TOGGLED_TRUE, ACCESSKIT_TOGGLED_MIXED, }; #ifndef __cplusplus typedef uint8_t accesskit_toggled; #endif // __cplusplus enum accesskit_vertical_offset #ifdef __cplusplus : uint8_t #endif // __cplusplus { ACCESSKIT_VERTICAL_OFFSET_SUBSCRIPT, ACCESSKIT_VERTICAL_OFFSET_SUPERSCRIPT, }; #ifndef __cplusplus typedef uint8_t accesskit_vertical_offset; #endif // __cplusplus #if defined(__APPLE__) typedef struct accesskit_macos_adapter accesskit_macos_adapter; #endif #if defined(__APPLE__) typedef struct accesskit_macos_queued_events accesskit_macos_queued_events; #endif #if defined(__APPLE__) typedef struct accesskit_macos_subclassing_adapter accesskit_macos_subclassing_adapter; #endif typedef struct accesskit_node accesskit_node; typedef struct accesskit_tree accesskit_tree; typedef struct accesskit_tree_update accesskit_tree_update; #if (defined(__linux__) || defined(__DragonFly__) || defined(__FreeBSD__) || \ defined(__NetBSD__) || defined(__OpenBSD__)) typedef struct accesskit_unix_adapter accesskit_unix_adapter; #endif #if defined(_WIN32) typedef struct accesskit_windows_adapter accesskit_windows_adapter; #endif #if defined(_WIN32) typedef struct accesskit_windows_queued_events accesskit_windows_queued_events; #endif #if defined(_WIN32) typedef struct accesskit_windows_subclassing_adapter accesskit_windows_subclassing_adapter; #endif typedef uint64_t accesskit_node_id; typedef struct accesskit_node_ids { size_t length; const accesskit_node_id *values; } accesskit_node_ids; /** * Represents an optional value. * * If `has_value` is false, do not read the `value` field. */ typedef struct accesskit_opt_node_id { bool has_value; accesskit_node_id value; } accesskit_opt_node_id; /** * Represents an optional value. * * If `has_value` is false, do not read the `value` field. */ typedef struct accesskit_opt_double { bool has_value; double value; } accesskit_opt_double; /** * Represents an optional value. * * If `has_value` is false, do not read the `value` field. */ typedef struct accesskit_opt_index { bool has_value; size_t value; } accesskit_opt_index; /** * Represents an optional value. * * If `has_value` is false, do not read the `value` field. */ typedef struct accesskit_opt_color { bool has_value; uint32_t value; } accesskit_opt_color; /** * Represents an optional value. * * If `has_value` is false, do not read the `value` field. */ typedef struct accesskit_opt_text_decoration { bool has_value; accesskit_text_decoration value; } accesskit_opt_text_decoration; typedef struct accesskit_lengths { size_t length; const uint8_t *values; } accesskit_lengths; typedef struct accesskit_opt_coords { bool has_value; size_t length; const float *values; } accesskit_opt_coords; /** * Represents an optional value. * * If `has_value` is false, do not read the `value` field. */ typedef struct accesskit_opt_bool { bool has_value; bool value; } accesskit_opt_bool; /** * Represents an optional value. * * If `has_value` is false, do not read the `value` field. */ typedef struct accesskit_opt_invalid { bool has_value; accesskit_invalid value; } accesskit_opt_invalid; /** * Represents an optional value. * * If `has_value` is false, do not read the `value` field. */ typedef struct accesskit_opt_toggled { bool has_value; accesskit_toggled value; } accesskit_opt_toggled; /** * Represents an optional value. * * If `has_value` is false, do not read the `value` field. */ typedef struct accesskit_opt_live { bool has_value; accesskit_live value; } accesskit_opt_live; /** * Represents an optional value. * * If `has_value` is false, do not read the `value` field. */ typedef struct accesskit_opt_text_direction { bool has_value; accesskit_text_direction value; } accesskit_opt_text_direction; /** * Represents an optional value. * * If `has_value` is false, do not read the `value` field. */ typedef struct accesskit_opt_orientation { bool has_value; accesskit_orientation value; } accesskit_opt_orientation; /** * Represents an optional value. * * If `has_value` is false, do not read the `value` field. */ typedef struct accesskit_opt_sort_direction { bool has_value; accesskit_sort_direction value; } accesskit_opt_sort_direction; /** * Represents an optional value. * * If `has_value` is false, do not read the `value` field. */ typedef struct accesskit_opt_aria_current { bool has_value; accesskit_aria_current value; } accesskit_opt_aria_current; /** * Represents an optional value. * * If `has_value` is false, do not read the `value` field. */ typedef struct accesskit_opt_auto_complete { bool has_value; accesskit_auto_complete value; } accesskit_opt_auto_complete; /** * Represents an optional value. * * If `has_value` is false, do not read the `value` field. */ typedef struct accesskit_opt_has_popup { bool has_value; accesskit_has_popup value; } accesskit_opt_has_popup; /** * Represents an optional value. * * If `has_value` is false, do not read the `value` field. */ typedef struct accesskit_opt_list_style { bool has_value; accesskit_list_style value; } accesskit_opt_list_style; /** * Represents an optional value. * * If `has_value` is false, do not read the `value` field. */ typedef struct accesskit_opt_text_align { bool has_value; accesskit_text_align value; } accesskit_opt_text_align; /** * Represents an optional value. * * If `has_value` is false, do not read the `value` field. */ typedef struct accesskit_opt_vertical_offset { bool has_value; accesskit_vertical_offset value; } accesskit_opt_vertical_offset; /** * A 2D affine transform. Derived from * [kurbo](https://github.com/linebender/kurbo). */ typedef struct accesskit_affine { double _0[6]; } accesskit_affine; /** * A rectangle. Derived from [kurbo](https://github.com/linebender/kurbo). */ typedef struct accesskit_rect { /** * The minimum x coordinate (left edge). */ double x0; /** * The minimum y coordinate (top edge in y-down spaces). */ double y0; /** * The maximum x coordinate (right edge). */ double x1; /** * The maximum y coordinate (bottom edge in y-down spaces). */ double y1; } accesskit_rect; /** * Represents an optional value. * * If `has_value` is false, do not read the `value` field. */ typedef struct accesskit_opt_rect { bool has_value; struct accesskit_rect value; } accesskit_opt_rect; typedef struct accesskit_text_position { accesskit_node_id node; size_t character_index; } accesskit_text_position; typedef struct accesskit_text_selection { struct accesskit_text_position anchor; struct accesskit_text_position focus; } accesskit_text_selection; /** * Represents an optional value. * * If `has_value` is false, do not read the `value` field. */ typedef struct accesskit_opt_text_selection { bool has_value; struct accesskit_text_selection value; } accesskit_opt_text_selection; /** * Use `accesskit_custom_action_new` to create this struct. Do not reallocate * `description`. * * When you get this struct, you are responsible for freeing `description`. */ typedef struct accesskit_custom_action { int32_t id; char *description; } accesskit_custom_action; typedef struct accesskit_custom_actions { size_t length; struct accesskit_custom_action *values; } accesskit_custom_actions; /** * A 2D point. Derived from [kurbo](https://github.com/linebender/kurbo). */ typedef struct accesskit_point { /** * The x coordinate. */ double x; /** * The y coordinate. */ double y; } accesskit_point; typedef enum accesskit_action_data_Tag { ACCESSKIT_ACTION_DATA_CUSTOM_ACTION, ACCESSKIT_ACTION_DATA_VALUE, ACCESSKIT_ACTION_DATA_NUMERIC_VALUE, ACCESSKIT_ACTION_DATA_SCROLL_TARGET_RECT, ACCESSKIT_ACTION_DATA_SCROLL_TO_POINT, ACCESSKIT_ACTION_DATA_SET_SCROLL_OFFSET, ACCESSKIT_ACTION_DATA_SET_TEXT_SELECTION, } accesskit_action_data_Tag; typedef struct accesskit_action_data { accesskit_action_data_Tag tag; union { struct { int32_t custom_action; }; struct { char *value; }; struct { double numeric_value; }; struct { struct accesskit_rect scroll_target_rect; }; struct { struct accesskit_point scroll_to_point; }; struct { struct accesskit_point set_scroll_offset; }; struct { struct accesskit_text_selection set_text_selection; }; }; } accesskit_action_data; /** * Represents an optional value. * * If `has_value` is false, do not read the `value` field. */ typedef struct accesskit_opt_action_data { bool has_value; struct accesskit_action_data value; } accesskit_opt_action_data; typedef struct accesskit_action_request { accesskit_action action; accesskit_node_id target; struct accesskit_opt_action_data data; } accesskit_action_request; /** * A 2D vector. Derived from [kurbo](https://github.com/linebender/kurbo). * * This is intended primarily for a vector in the mathematical sense, * but it can be interpreted as a translation, and converted to and * from a point (vector relative to the origin) and size. */ typedef struct accesskit_vec2 { /** * The x-coordinate. */ double x; /** * The y-coordinate. */ double y; } accesskit_vec2; /** * A 2D size. Derived from [kurbo](https://github.com/linebender/kurbo). */ typedef struct accesskit_size { /** * The width. */ double width; /** * The height. */ double height; } accesskit_size; /** * Ownership of `request` is transferred to the callback. `request` must * be freed using `accesskit_action_request_free`. */ typedef void (*accesskit_action_handler_callback)( struct accesskit_action_request *request, void *userdata); typedef void *accesskit_tree_update_factory_userdata; /** * This function can't return a null pointer. Ownership of the returned value * will be transferred to the caller. */ typedef struct accesskit_tree_update *(*accesskit_tree_update_factory)( accesskit_tree_update_factory_userdata); typedef struct accesskit_tree_update *(*accesskit_activation_handler_callback)( void *userdata); typedef void (*accesskit_deactivation_handler_callback)(void *userdata); #if defined(_WIN32) /** * Represents an optional value. * * If `has_value` is false, do not read the `value` field. */ typedef struct accesskit_opt_lresult { bool has_value; LRESULT value; } accesskit_opt_lresult; #endif #ifdef __cplusplus extern "C" { #endif // __cplusplus accesskit_role accesskit_node_role(const struct accesskit_node *node); void accesskit_node_set_role(struct accesskit_node *node, accesskit_role value); bool accesskit_node_supports_action(const struct accesskit_node *node, accesskit_action action); void accesskit_node_add_action(struct accesskit_node *node, accesskit_action action); void accesskit_node_remove_action(struct accesskit_node *node, accesskit_action action); void accesskit_node_clear_actions(struct accesskit_node *node); bool accesskit_node_is_hidden(const struct accesskit_node *node); void accesskit_node_set_hidden(struct accesskit_node *node); void accesskit_node_clear_hidden(struct accesskit_node *node); bool accesskit_node_is_linked(const struct accesskit_node *node); void accesskit_node_set_linked(struct accesskit_node *node); void accesskit_node_clear_linked(struct accesskit_node *node); bool accesskit_node_is_multiselectable(const struct accesskit_node *node); void accesskit_node_set_multiselectable(struct accesskit_node *node); void accesskit_node_clear_multiselectable(struct accesskit_node *node); bool accesskit_node_is_required(const struct accesskit_node *node); void accesskit_node_set_required(struct accesskit_node *node); void accesskit_node_clear_required(struct accesskit_node *node); bool accesskit_node_is_visited(const struct accesskit_node *node); void accesskit_node_set_visited(struct accesskit_node *node); void accesskit_node_clear_visited(struct accesskit_node *node); bool accesskit_node_is_busy(const struct accesskit_node *node); void accesskit_node_set_busy(struct accesskit_node *node); void accesskit_node_clear_busy(struct accesskit_node *node); bool accesskit_node_is_live_atomic(const struct accesskit_node *node); void accesskit_node_set_live_atomic(struct accesskit_node *node); void accesskit_node_clear_live_atomic(struct accesskit_node *node); bool accesskit_node_is_modal(const struct accesskit_node *node); void accesskit_node_set_modal(struct accesskit_node *node); void accesskit_node_clear_modal(struct accesskit_node *node); bool accesskit_node_is_touch_transparent(const struct accesskit_node *node); void accesskit_node_set_touch_transparent(struct accesskit_node *node); void accesskit_node_clear_touch_transparent(struct accesskit_node *node); bool accesskit_node_is_read_only(const struct accesskit_node *node); void accesskit_node_set_read_only(struct accesskit_node *node); void accesskit_node_clear_read_only(struct accesskit_node *node); bool accesskit_node_is_disabled(const struct accesskit_node *node); void accesskit_node_set_disabled(struct accesskit_node *node); void accesskit_node_clear_disabled(struct accesskit_node *node); bool accesskit_node_is_bold(const struct accesskit_node *node); void accesskit_node_set_bold(struct accesskit_node *node); void accesskit_node_clear_bold(struct accesskit_node *node); bool accesskit_node_is_italic(const struct accesskit_node *node); void accesskit_node_set_italic(struct accesskit_node *node); void accesskit_node_clear_italic(struct accesskit_node *node); bool accesskit_node_clips_children(const struct accesskit_node *node); void accesskit_node_set_clips_children(struct accesskit_node *node); void accesskit_node_clear_clips_children(struct accesskit_node *node); bool accesskit_node_is_line_breaking_object(const struct accesskit_node *node); void accesskit_node_set_is_line_breaking_object(struct accesskit_node *node); void accesskit_node_clear_is_line_breaking_object(struct accesskit_node *node); bool accesskit_node_is_page_breaking_object(const struct accesskit_node *node); void accesskit_node_set_is_page_breaking_object(struct accesskit_node *node); void accesskit_node_clear_is_page_breaking_object(struct accesskit_node *node); bool accesskit_node_is_spelling_error(const struct accesskit_node *node); void accesskit_node_set_is_spelling_error(struct accesskit_node *node); void accesskit_node_clear_is_spelling_error(struct accesskit_node *node); bool accesskit_node_is_grammar_error(const struct accesskit_node *node); void accesskit_node_set_is_grammar_error(struct accesskit_node *node); void accesskit_node_clear_is_grammar_error(struct accesskit_node *node); bool accesskit_node_is_search_match(const struct accesskit_node *node); void accesskit_node_set_is_search_match(struct accesskit_node *node); void accesskit_node_clear_is_search_match(struct accesskit_node *node); bool accesskit_node_is_suggestion(const struct accesskit_node *node); void accesskit_node_set_is_suggestion(struct accesskit_node *node); void accesskit_node_clear_is_suggestion(struct accesskit_node *node); struct accesskit_node_ids accesskit_node_children( const struct accesskit_node *node); /** * Caller is responsible for freeing `values`. */ void accesskit_node_set_children(struct accesskit_node *node, size_t length, const accesskit_node_id *values); void accesskit_node_push_child(struct accesskit_node *node, accesskit_node_id item); void accesskit_node_clear_children(struct accesskit_node *node); struct accesskit_node_ids accesskit_node_controls( const struct accesskit_node *node); /** * Caller is responsible for freeing `values`. */ void accesskit_node_set_controls(struct accesskit_node *node, size_t length, const accesskit_node_id *values); void accesskit_node_push_controlled(struct accesskit_node *node, accesskit_node_id item); void accesskit_node_clear_controls(struct accesskit_node *node); struct accesskit_node_ids accesskit_node_details( const struct accesskit_node *node); /** * Caller is responsible for freeing `values`. */ void accesskit_node_set_details(struct accesskit_node *node, size_t length, const accesskit_node_id *values); void accesskit_node_push_detail(struct accesskit_node *node, accesskit_node_id item); void accesskit_node_clear_details(struct accesskit_node *node); struct accesskit_node_ids accesskit_node_described_by( const struct accesskit_node *node); /** * Caller is responsible for freeing `values`. */ void accesskit_node_set_described_by(struct accesskit_node *node, size_t length, const accesskit_node_id *values); void accesskit_node_push_described_by(struct accesskit_node *node, accesskit_node_id item); void accesskit_node_clear_described_by(struct accesskit_node *node); struct accesskit_node_ids accesskit_node_flow_to( const struct accesskit_node *node); /** * Caller is responsible for freeing `values`. */ void accesskit_node_set_flow_to(struct accesskit_node *node, size_t length, const accesskit_node_id *values); void accesskit_node_push_flow_to(struct accesskit_node *node, accesskit_node_id item); void accesskit_node_clear_flow_to(struct accesskit_node *node); struct accesskit_node_ids accesskit_node_labelled_by( const struct accesskit_node *node); /** * Caller is responsible for freeing `values`. */ void accesskit_node_set_labelled_by(struct accesskit_node *node, size_t length, const accesskit_node_id *values); void accesskit_node_push_labelled_by(struct accesskit_node *node, accesskit_node_id item); void accesskit_node_clear_labelled_by(struct accesskit_node *node); struct accesskit_node_ids accesskit_node_owns( const struct accesskit_node *node); /** * Caller is responsible for freeing `values`. */ void accesskit_node_set_owns(struct accesskit_node *node, size_t length, const accesskit_node_id *values); void accesskit_node_push_owned(struct accesskit_node *node, accesskit_node_id item); void accesskit_node_clear_owns(struct accesskit_node *node); struct accesskit_node_ids accesskit_node_radio_group( const struct accesskit_node *node); /** * Caller is responsible for freeing `values`. */ void accesskit_node_set_radio_group(struct accesskit_node *node, size_t length, const accesskit_node_id *values); void accesskit_node_push_to_radio_group(struct accesskit_node *node, accesskit_node_id item); void accesskit_node_clear_radio_group(struct accesskit_node *node); struct accesskit_opt_node_id accesskit_node_active_descendant( const struct accesskit_node *node); void accesskit_node_set_active_descendant(struct accesskit_node *node, accesskit_node_id value); void accesskit_node_clear_active_descendant(struct accesskit_node *node); struct accesskit_opt_node_id accesskit_node_error_message( const struct accesskit_node *node); void accesskit_node_set_error_message(struct accesskit_node *node, accesskit_node_id value); void accesskit_node_clear_error_message(struct accesskit_node *node); struct accesskit_opt_node_id accesskit_node_in_page_link_target( const struct accesskit_node *node); void accesskit_node_set_in_page_link_target(struct accesskit_node *node, accesskit_node_id value); void accesskit_node_clear_in_page_link_target(struct accesskit_node *node); struct accesskit_opt_node_id accesskit_node_member_of( const struct accesskit_node *node); void accesskit_node_set_member_of(struct accesskit_node *node, accesskit_node_id value); void accesskit_node_clear_member_of(struct accesskit_node *node); struct accesskit_opt_node_id accesskit_node_next_on_line( const struct accesskit_node *node); void accesskit_node_set_next_on_line(struct accesskit_node *node, accesskit_node_id value); void accesskit_node_clear_next_on_line(struct accesskit_node *node); struct accesskit_opt_node_id accesskit_node_previous_on_line( const struct accesskit_node *node); void accesskit_node_set_previous_on_line(struct accesskit_node *node, accesskit_node_id value); void accesskit_node_clear_previous_on_line(struct accesskit_node *node); struct accesskit_opt_node_id accesskit_node_popup_for( const struct accesskit_node *node); void accesskit_node_set_popup_for(struct accesskit_node *node, accesskit_node_id value); void accesskit_node_clear_popup_for(struct accesskit_node *node); /** * Only call this function with a string that originated from AccessKit. */ void accesskit_string_free(char *string); /** * Caller must call `accesskit_string_free` with the return value. */ char *accesskit_node_label(const struct accesskit_node *node); /** * Caller is responsible for freeing the memory pointed by `value`. */ void accesskit_node_set_label(struct accesskit_node *node, const char *value); void accesskit_node_clear_label(struct accesskit_node *node); /** * Caller must call `accesskit_string_free` with the return value. */ char *accesskit_node_description(const struct accesskit_node *node); /** * Caller is responsible for freeing the memory pointed by `value`. */ void accesskit_node_set_description(struct accesskit_node *node, const char *value); void accesskit_node_clear_description(struct accesskit_node *node); /** * Caller must call `accesskit_string_free` with the return value. */ char *accesskit_node_value(const struct accesskit_node *node); /** * Caller is responsible for freeing the memory pointed by `value`. */ void accesskit_node_set_value(struct accesskit_node *node, const char *value); void accesskit_node_clear_value(struct accesskit_node *node); /** * Caller must call `accesskit_string_free` with the return value. */ char *accesskit_node_access_key(const struct accesskit_node *node); /** * Caller is responsible for freeing the memory pointed by `value`. */ void accesskit_node_set_access_key(struct accesskit_node *node, const char *value); void accesskit_node_clear_access_key(struct accesskit_node *node); /** * Caller must call `accesskit_string_free` with the return value. */ char *accesskit_node_author_id(const struct accesskit_node *node); /** * Caller is responsible for freeing the memory pointed by `value`. */ void accesskit_node_set_author_id(struct accesskit_node *node, const char *value); void accesskit_node_clear_author_id(struct accesskit_node *node); /** * Caller must call `accesskit_string_free` with the return value. */ char *accesskit_node_class_name(const struct accesskit_node *node); /** * Caller is responsible for freeing the memory pointed by `value`. */ void accesskit_node_set_class_name(struct accesskit_node *node, const char *value); void accesskit_node_clear_class_name(struct accesskit_node *node); /** * Caller must call `accesskit_string_free` with the return value. */ char *accesskit_node_font_family(const struct accesskit_node *node); /** * Caller is responsible for freeing the memory pointed by `value`. */ void accesskit_node_set_font_family(struct accesskit_node *node, const char *value); void accesskit_node_clear_font_family(struct accesskit_node *node); /** * Caller must call `accesskit_string_free` with the return value. */ char *accesskit_node_html_tag(const struct accesskit_node *node); /** * Caller is responsible for freeing the memory pointed by `value`. */ void accesskit_node_set_html_tag(struct accesskit_node *node, const char *value); void accesskit_node_clear_html_tag(struct accesskit_node *node); /** * Caller must call `accesskit_string_free` with the return value. */ char *accesskit_node_inner_html(const struct accesskit_node *node); /** * Caller is responsible for freeing the memory pointed by `value`. */ void accesskit_node_set_inner_html(struct accesskit_node *node, const char *value); void accesskit_node_clear_inner_html(struct accesskit_node *node); /** * Caller must call `accesskit_string_free` with the return value. */ char *accesskit_node_keyboard_shortcut(const struct accesskit_node *node); /** * Caller is responsible for freeing the memory pointed by `value`. */ void accesskit_node_set_keyboard_shortcut(struct accesskit_node *node, const char *value); void accesskit_node_clear_keyboard_shortcut(struct accesskit_node *node); /** * Caller must call `accesskit_string_free` with the return value. */ char *accesskit_node_language(const struct accesskit_node *node); /** * Caller is responsible for freeing the memory pointed by `value`. */ void accesskit_node_set_language(struct accesskit_node *node, const char *value); void accesskit_node_clear_language(struct accesskit_node *node); /** * Caller must call `accesskit_string_free` with the return value. */ char *accesskit_node_placeholder(const struct accesskit_node *node); /** * Caller is responsible for freeing the memory pointed by `value`. */ void accesskit_node_set_placeholder(struct accesskit_node *node, const char *value); void accesskit_node_clear_placeholder(struct accesskit_node *node); /** * Caller must call `accesskit_string_free` with the return value. */ char *accesskit_node_role_description(const struct accesskit_node *node); /** * Caller is responsible for freeing the memory pointed by `value`. */ void accesskit_node_set_role_description(struct accesskit_node *node, const char *value); void accesskit_node_clear_role_description(struct accesskit_node *node); /** * Caller must call `accesskit_string_free` with the return value. */ char *accesskit_node_state_description(const struct accesskit_node *node); /** * Caller is responsible for freeing the memory pointed by `value`. */ void accesskit_node_set_state_description(struct accesskit_node *node, const char *value); void accesskit_node_clear_state_description(struct accesskit_node *node); /** * Caller must call `accesskit_string_free` with the return value. */ char *accesskit_node_tooltip(const struct accesskit_node *node); /** * Caller is responsible for freeing the memory pointed by `value`. */ void accesskit_node_set_tooltip(struct accesskit_node *node, const char *value); void accesskit_node_clear_tooltip(struct accesskit_node *node); /** * Caller must call `accesskit_string_free` with the return value. */ char *accesskit_node_url(const struct accesskit_node *node); /** * Caller is responsible for freeing the memory pointed by `value`. */ void accesskit_node_set_url(struct accesskit_node *node, const char *value); void accesskit_node_clear_url(struct accesskit_node *node); /** * Caller must call `accesskit_string_free` with the return value. */ char *accesskit_node_row_index_text(const struct accesskit_node *node); /** * Caller is responsible for freeing the memory pointed by `value`. */ void accesskit_node_set_row_index_text(struct accesskit_node *node, const char *value); void accesskit_node_clear_row_index_text(struct accesskit_node *node); /** * Caller must call `accesskit_string_free` with the return value. */ char *accesskit_node_column_index_text(const struct accesskit_node *node); /** * Caller is responsible for freeing the memory pointed by `value`. */ void accesskit_node_set_column_index_text(struct accesskit_node *node, const char *value); void accesskit_node_clear_column_index_text(struct accesskit_node *node); struct accesskit_opt_double accesskit_node_scroll_x( const struct accesskit_node *node); void accesskit_node_set_scroll_x(struct accesskit_node *node, double value); void accesskit_node_clear_scroll_x(struct accesskit_node *node); struct accesskit_opt_double accesskit_node_scroll_x_min( const struct accesskit_node *node); void accesskit_node_set_scroll_x_min(struct accesskit_node *node, double value); void accesskit_node_clear_scroll_x_min(struct accesskit_node *node); struct accesskit_opt_double accesskit_node_scroll_x_max( const struct accesskit_node *node); void accesskit_node_set_scroll_x_max(struct accesskit_node *node, double value); void accesskit_node_clear_scroll_x_max(struct accesskit_node *node); struct accesskit_opt_double accesskit_node_scroll_y( const struct accesskit_node *node); void accesskit_node_set_scroll_y(struct accesskit_node *node, double value); void accesskit_node_clear_scroll_y(struct accesskit_node *node); struct accesskit_opt_double accesskit_node_scroll_y_min( const struct accesskit_node *node); void accesskit_node_set_scroll_y_min(struct accesskit_node *node, double value); void accesskit_node_clear_scroll_y_min(struct accesskit_node *node); struct accesskit_opt_double accesskit_node_scroll_y_max( const struct accesskit_node *node); void accesskit_node_set_scroll_y_max(struct accesskit_node *node, double value); void accesskit_node_clear_scroll_y_max(struct accesskit_node *node); struct accesskit_opt_double accesskit_node_numeric_value( const struct accesskit_node *node); void accesskit_node_set_numeric_value(struct accesskit_node *node, double value); void accesskit_node_clear_numeric_value(struct accesskit_node *node); struct accesskit_opt_double accesskit_node_min_numeric_value( const struct accesskit_node *node); void accesskit_node_set_min_numeric_value(struct accesskit_node *node, double value); void accesskit_node_clear_min_numeric_value(struct accesskit_node *node); struct accesskit_opt_double accesskit_node_max_numeric_value( const struct accesskit_node *node); void accesskit_node_set_max_numeric_value(struct accesskit_node *node, double value); void accesskit_node_clear_max_numeric_value(struct accesskit_node *node); struct accesskit_opt_double accesskit_node_numeric_value_step( const struct accesskit_node *node); void accesskit_node_set_numeric_value_step(struct accesskit_node *node, double value); void accesskit_node_clear_numeric_value_step(struct accesskit_node *node); struct accesskit_opt_double accesskit_node_numeric_value_jump( const struct accesskit_node *node); void accesskit_node_set_numeric_value_jump(struct accesskit_node *node, double value); void accesskit_node_clear_numeric_value_jump(struct accesskit_node *node); struct accesskit_opt_double accesskit_node_font_size( const struct accesskit_node *node); void accesskit_node_set_font_size(struct accesskit_node *node, double value); void accesskit_node_clear_font_size(struct accesskit_node *node); struct accesskit_opt_double accesskit_node_font_weight( const struct accesskit_node *node); void accesskit_node_set_font_weight(struct accesskit_node *node, double value); void accesskit_node_clear_font_weight(struct accesskit_node *node); struct accesskit_opt_index accesskit_node_row_count( const struct accesskit_node *node); void accesskit_node_set_row_count(struct accesskit_node *node, size_t value); void accesskit_node_clear_row_count(struct accesskit_node *node); struct accesskit_opt_index accesskit_node_column_count( const struct accesskit_node *node); void accesskit_node_set_column_count(struct accesskit_node *node, size_t value); void accesskit_node_clear_column_count(struct accesskit_node *node); struct accesskit_opt_index accesskit_node_row_index( const struct accesskit_node *node); void accesskit_node_set_row_index(struct accesskit_node *node, size_t value); void accesskit_node_clear_row_index(struct accesskit_node *node); struct accesskit_opt_index accesskit_node_column_index( const struct accesskit_node *node); void accesskit_node_set_column_index(struct accesskit_node *node, size_t value); void accesskit_node_clear_column_index(struct accesskit_node *node); struct accesskit_opt_index accesskit_node_row_span( const struct accesskit_node *node); void accesskit_node_set_row_span(struct accesskit_node *node, size_t value); void accesskit_node_clear_row_span(struct accesskit_node *node); struct accesskit_opt_index accesskit_node_column_span( const struct accesskit_node *node); void accesskit_node_set_column_span(struct accesskit_node *node, size_t value); void accesskit_node_clear_column_span(struct accesskit_node *node); struct accesskit_opt_index accesskit_node_level( const struct accesskit_node *node); void accesskit_node_set_level(struct accesskit_node *node, size_t value); void accesskit_node_clear_level(struct accesskit_node *node); struct accesskit_opt_index accesskit_node_size_of_set( const struct accesskit_node *node); void accesskit_node_set_size_of_set(struct accesskit_node *node, size_t value); void accesskit_node_clear_size_of_set(struct accesskit_node *node); struct accesskit_opt_index accesskit_node_position_in_set( const struct accesskit_node *node); void accesskit_node_set_position_in_set(struct accesskit_node *node, size_t value); void accesskit_node_clear_position_in_set(struct accesskit_node *node); struct accesskit_opt_color accesskit_node_color_value( const struct accesskit_node *node); void accesskit_node_set_color_value(struct accesskit_node *node, uint32_t value); void accesskit_node_clear_color_value(struct accesskit_node *node); struct accesskit_opt_color accesskit_node_background_color( const struct accesskit_node *node); void accesskit_node_set_background_color(struct accesskit_node *node, uint32_t value); void accesskit_node_clear_background_color(struct accesskit_node *node); struct accesskit_opt_color accesskit_node_foreground_color( const struct accesskit_node *node); void accesskit_node_set_foreground_color(struct accesskit_node *node, uint32_t value); void accesskit_node_clear_foreground_color(struct accesskit_node *node); struct accesskit_opt_text_decoration accesskit_node_overline( const struct accesskit_node *node); void accesskit_node_set_overline(struct accesskit_node *node, accesskit_text_decoration value); void accesskit_node_clear_overline(struct accesskit_node *node); struct accesskit_opt_text_decoration accesskit_node_strikethrough( const struct accesskit_node *node); void accesskit_node_set_strikethrough(struct accesskit_node *node, accesskit_text_decoration value); void accesskit_node_clear_strikethrough(struct accesskit_node *node); struct accesskit_opt_text_decoration accesskit_node_underline( const struct accesskit_node *node); void accesskit_node_set_underline(struct accesskit_node *node, accesskit_text_decoration value); void accesskit_node_clear_underline(struct accesskit_node *node); struct accesskit_lengths accesskit_node_character_lengths( const struct accesskit_node *node); /** * Caller is responsible for freeing `values`. */ void accesskit_node_set_character_lengths(struct accesskit_node *node, size_t length, const uint8_t *values); void accesskit_node_clear_character_lengths(struct accesskit_node *node); struct accesskit_lengths accesskit_node_word_lengths( const struct accesskit_node *node); /** * Caller is responsible for freeing `values`. */ void accesskit_node_set_word_lengths(struct accesskit_node *node, size_t length, const uint8_t *values); void accesskit_node_clear_word_lengths(struct accesskit_node *node); struct accesskit_opt_coords accesskit_node_character_positions( const struct accesskit_node *node); /** * Caller is responsible for freeing `values`. */ void accesskit_node_set_character_positions(struct accesskit_node *node, size_t length, const float *values); void accesskit_node_clear_character_positions(struct accesskit_node *node); struct accesskit_opt_coords accesskit_node_character_widths( const struct accesskit_node *node); /** * Caller is responsible for freeing `values`. */ void accesskit_node_set_character_widths(struct accesskit_node *node, size_t length, const float *values); void accesskit_node_clear_character_widths(struct accesskit_node *node); struct accesskit_opt_bool accesskit_node_is_expanded( const struct accesskit_node *node); void accesskit_node_set_expanded(struct accesskit_node *node, bool value); void accesskit_node_clear_expanded(struct accesskit_node *node); struct accesskit_opt_bool accesskit_node_is_selected( const struct accesskit_node *node); void accesskit_node_set_selected(struct accesskit_node *node, bool value); void accesskit_node_clear_selected(struct accesskit_node *node); struct accesskit_opt_invalid accesskit_node_invalid( const struct accesskit_node *node); void accesskit_node_set_invalid(struct accesskit_node *node, accesskit_invalid value); void accesskit_node_clear_invalid(struct accesskit_node *node); struct accesskit_opt_toggled accesskit_node_toggled( const struct accesskit_node *node); void accesskit_node_set_toggled(struct accesskit_node *node, accesskit_toggled value); void accesskit_node_clear_toggled(struct accesskit_node *node); struct accesskit_opt_live accesskit_node_live( const struct accesskit_node *node); void accesskit_node_set_live(struct accesskit_node *node, accesskit_live value); void accesskit_node_clear_live(struct accesskit_node *node); struct accesskit_opt_text_direction accesskit_node_text_direction( const struct accesskit_node *node); void accesskit_node_set_text_direction(struct accesskit_node *node, accesskit_text_direction value); void accesskit_node_clear_text_direction(struct accesskit_node *node); struct accesskit_opt_orientation accesskit_node_orientation( const struct accesskit_node *node); void accesskit_node_set_orientation(struct accesskit_node *node, accesskit_orientation value); void accesskit_node_clear_orientation(struct accesskit_node *node); struct accesskit_opt_sort_direction accesskit_node_sort_direction( const struct accesskit_node *node); void accesskit_node_set_sort_direction(struct accesskit_node *node, accesskit_sort_direction value); void accesskit_node_clear_sort_direction(struct accesskit_node *node); struct accesskit_opt_aria_current accesskit_node_aria_current( const struct accesskit_node *node); void accesskit_node_set_aria_current(struct accesskit_node *node, accesskit_aria_current value); void accesskit_node_clear_aria_current(struct accesskit_node *node); struct accesskit_opt_auto_complete accesskit_node_auto_complete( const struct accesskit_node *node); void accesskit_node_set_auto_complete(struct accesskit_node *node, accesskit_auto_complete value); void accesskit_node_clear_auto_complete(struct accesskit_node *node); struct accesskit_opt_has_popup accesskit_node_has_popup( const struct accesskit_node *node); void accesskit_node_set_has_popup(struct accesskit_node *node, accesskit_has_popup value); void accesskit_node_clear_has_popup(struct accesskit_node *node); struct accesskit_opt_list_style accesskit_node_list_style( const struct accesskit_node *node); void accesskit_node_set_list_style(struct accesskit_node *node, accesskit_list_style value); void accesskit_node_clear_list_style(struct accesskit_node *node); struct accesskit_opt_text_align accesskit_node_text_align( const struct accesskit_node *node); void accesskit_node_set_text_align(struct accesskit_node *node, accesskit_text_align value); void accesskit_node_clear_text_align(struct accesskit_node *node); struct accesskit_opt_vertical_offset accesskit_node_vertical_offset( const struct accesskit_node *node); void accesskit_node_set_vertical_offset(struct accesskit_node *node, accesskit_vertical_offset value); void accesskit_node_clear_vertical_offset(struct accesskit_node *node); const struct accesskit_affine *accesskit_node_transform( const struct accesskit_node *node); void accesskit_node_set_transform(struct accesskit_node *node, struct accesskit_affine value); void accesskit_node_clear_transform(struct accesskit_node *node); struct accesskit_opt_rect accesskit_node_bounds( const struct accesskit_node *node); void accesskit_node_set_bounds(struct accesskit_node *node, struct accesskit_rect value); void accesskit_node_clear_bounds(struct accesskit_node *node); struct accesskit_opt_text_selection accesskit_node_text_selection( const struct accesskit_node *node); void accesskit_node_set_text_selection(struct accesskit_node *node, struct accesskit_text_selection value); void accesskit_node_clear_text_selection(struct accesskit_node *node); struct accesskit_custom_action accesskit_custom_action_new( int32_t id, const char *description); void accesskit_custom_actions_free(struct accesskit_custom_actions *value); /** * Caller is responsible for freeing the returned value. */ const struct accesskit_custom_actions *accesskit_node_custom_actions( const struct accesskit_node *node); /** * Caller is responsible for freeing `values`. */ void accesskit_node_set_custom_actions( struct accesskit_node *node, size_t length, const struct accesskit_custom_action *values); void accesskit_node_push_custom_action(struct accesskit_node *node, struct accesskit_custom_action item); void accesskit_node_clear_custom_actions(struct accesskit_node *node); struct accesskit_node *accesskit_node_new(accesskit_role role); void accesskit_node_free(struct accesskit_node *node); struct accesskit_tree *accesskit_tree_new(accesskit_node_id root); void accesskit_tree_free(struct accesskit_tree *tree); /** * Caller must call `accesskit_string_free` with the return value. */ char *accesskit_tree_get_toolkit_name(const struct accesskit_tree *tree); void accesskit_tree_set_toolkit_name(struct accesskit_tree *tree, const char *toolkit_name); void accesskit_tree_clear_toolkit_name(struct accesskit_tree *tree); /** * Caller must call `accesskit_string_free` with the return value. */ char *accesskit_tree_get_toolkit_version(const struct accesskit_tree *tree); void accesskit_tree_set_toolkit_version(struct accesskit_tree *tree, const char *toolkit_version); void accesskit_tree_clear_toolkit_version(struct accesskit_tree *tree); struct accesskit_tree_update *accesskit_tree_update_with_focus( accesskit_node_id focus); struct accesskit_tree_update *accesskit_tree_update_with_capacity_and_focus( size_t capacity, accesskit_node_id focus); void accesskit_tree_update_free(struct accesskit_tree_update *update); /** * Appends the provided node to the tree update's list of nodes. * Takes ownership of `node`. */ void accesskit_tree_update_push_node(struct accesskit_tree_update *update, accesskit_node_id id, struct accesskit_node *node); void accesskit_tree_update_set_tree(struct accesskit_tree_update *update, struct accesskit_tree *tree); void accesskit_tree_update_clear_tree(struct accesskit_tree_update *update); void accesskit_tree_update_set_focus(struct accesskit_tree_update *update, accesskit_node_id focus); void accesskit_action_request_free(struct accesskit_action_request *request); struct accesskit_affine accesskit_affine_identity(void); struct accesskit_affine accesskit_affine_flip_y(void); struct accesskit_affine accesskit_affine_flip_x(void); struct accesskit_affine accesskit_affine_scale(double s); struct accesskit_affine accesskit_affine_scale_non_uniform(double s_x, double s_y); struct accesskit_affine accesskit_affine_translate(struct accesskit_vec2 p); struct accesskit_affine accesskit_affine_map_unit_square( struct accesskit_rect rect); double accesskit_affine_determinant(struct accesskit_affine affine); struct accesskit_affine accesskit_affine_inverse( struct accesskit_affine affine); struct accesskit_rect accesskit_affine_transform_rect_bbox( struct accesskit_affine affine, struct accesskit_rect rect); bool accesskit_affine_is_finite(const struct accesskit_affine *affine); bool accesskit_affine_is_nan(const struct accesskit_affine *affine); struct accesskit_vec2 accesskit_point_to_vec2(struct accesskit_point point); struct accesskit_rect accesskit_rect_from_points(struct accesskit_point p0, struct accesskit_point p1); struct accesskit_rect accesskit_rect_from_origin_size( struct accesskit_point origin, struct accesskit_size size); struct accesskit_rect accesskit_rect_with_origin(struct accesskit_rect rect, struct accesskit_point origin); struct accesskit_rect accesskit_rect_with_size(struct accesskit_rect rect, struct accesskit_size size); double accesskit_rect_width(const struct accesskit_rect *rect); double accesskit_rect_height(const struct accesskit_rect *rect); double accesskit_rect_min_x(const struct accesskit_rect *rect); double accesskit_rect_max_x(const struct accesskit_rect *rect); double accesskit_rect_min_y(const struct accesskit_rect *rect); double accesskit_rect_max_y(const struct accesskit_rect *rect); struct accesskit_point accesskit_rect_origin(const struct accesskit_rect *rect); struct accesskit_size accesskit_rect_size(const struct accesskit_rect *rect); struct accesskit_rect accesskit_rect_abs(const struct accesskit_rect *rect); double accesskit_rect_area(const struct accesskit_rect *rect); bool accesskit_rect_is_empty(const struct accesskit_rect *rect); bool accesskit_rect_contains(const struct accesskit_rect *rect, struct accesskit_point point); struct accesskit_rect accesskit_rect_union(const struct accesskit_rect *rect, struct accesskit_rect other); struct accesskit_rect accesskit_rect_union_pt(const struct accesskit_rect *rect, struct accesskit_point pt); struct accesskit_rect accesskit_rect_intersect( const struct accesskit_rect *rect, struct accesskit_rect other); struct accesskit_vec2 accesskit_size_to_vec2(struct accesskit_size size); struct accesskit_point accesskit_vec2_to_point(struct accesskit_vec2 vec2); struct accesskit_size accesskit_vec2_to_size(struct accesskit_vec2 vec2); #if defined(__APPLE__) /** * Memory is also freed when calling this function. */ void accesskit_macos_queued_events_raise( struct accesskit_macos_queued_events *events); #endif #if defined(__APPLE__) /** * # Safety * * `view` must be a valid, unreleased pointer to an `NSView`. */ struct accesskit_macos_adapter *accesskit_macos_adapter_new( void *view, bool is_view_focused, accesskit_action_handler_callback action_handler, void *action_handler_userdata); #endif #if defined(__APPLE__) void accesskit_macos_adapter_free(struct accesskit_macos_adapter *adapter); #endif #if defined(__APPLE__) /** * You must call `accesskit_macos_queued_events_raise` on the returned pointer. * It can be null if the adapter is not active. */ struct accesskit_macos_queued_events *accesskit_macos_adapter_update_if_active( struct accesskit_macos_adapter *adapter, accesskit_tree_update_factory update_factory, void *update_factory_userdata); #endif #if defined(__APPLE__) /** * Update the tree state based on whether the window is focused. * * You must call `accesskit_macos_queued_events_raise` on the returned pointer. * It can be null if the adapter is not active. */ struct accesskit_macos_queued_events * accesskit_macos_adapter_update_view_focus_state( struct accesskit_macos_adapter *adapter, bool is_focused); #endif #if defined(__APPLE__) /** * Returns a pointer to an `NSArray`. Ownership of the pointer is not * transferred. */ void *accesskit_macos_adapter_view_children( struct accesskit_macos_adapter *adapter, accesskit_activation_handler_callback activation_handler, void *activation_handler_userdata); #endif #if defined(__APPLE__) /** * Returns a pointer to an `NSObject`. Ownership of the pointer is not * transferred. */ void *accesskit_macos_adapter_focus( struct accesskit_macos_adapter *adapter, accesskit_activation_handler_callback activation_handler, void *activation_handler_userdata); #endif #if defined(__APPLE__) /** * Returns a pointer to an `NSObject`. Ownership of the pointer is not * transferred. */ void *accesskit_macos_adapter_hit_test( struct accesskit_macos_adapter *adapter, double x, double y, accesskit_activation_handler_callback activation_handler, void *activation_handler_userdata); #endif #if defined(__APPLE__) /** * # Safety * * `view` must be a valid, unreleased pointer to an `NSView`. */ struct accesskit_macos_subclassing_adapter * accesskit_macos_subclassing_adapter_new( void *view, accesskit_activation_handler_callback activation_handler, void *activation_handler_userdata, accesskit_action_handler_callback action_handler, void *action_handler_userdata); #endif #if defined(__APPLE__) /** * # Safety * * `window` must be a valid, unreleased pointer to an `NSWindow`. * * # Panics * * This function panics if the specified window doesn't currently have * a content view. */ struct accesskit_macos_subclassing_adapter * accesskit_macos_subclassing_adapter_for_window( void *window, accesskit_activation_handler_callback activation_handler, void *activation_handler_userdata, accesskit_action_handler_callback action_handler, void *action_handler_userdata); #endif #if defined(__APPLE__) void accesskit_macos_subclassing_adapter_free( struct accesskit_macos_subclassing_adapter *adapter); #endif #if defined(__APPLE__) /** * You must call `accesskit_macos_queued_events_raise` on the returned pointer. * It can be null if the adapter is not active. */ struct accesskit_macos_queued_events * accesskit_macos_subclassing_adapter_update_if_active( struct accesskit_macos_subclassing_adapter *adapter, accesskit_tree_update_factory update_factory, void *update_factory_userdata); #endif #if defined(__APPLE__) /** * Update the tree state based on whether the window is focused. * * You must call `accesskit_macos_queued_events_raise` on the returned pointer. * It can be null if the adapter is not active. */ struct accesskit_macos_queued_events * accesskit_macos_subclassing_adapter_update_view_focus_state( struct accesskit_macos_subclassing_adapter *adapter, bool is_focused); #endif #if defined(__APPLE__) /** * Modifies the specified class, which must be a subclass of `NSWindow`, * to include an `accessibilityFocusedUIElement` method that calls * the corresponding method on the window's content view. This is needed * for windowing libraries such as SDL that place the keyboard focus * directly on the window rather than the content view. * * # Safety * * This function is declared unsafe because the caller must ensure that the * code for this library is never unloaded from the application process, * since it's not possible to reverse this operation. It's safest * if this library is statically linked into the application's main executable. * Also, this function assumes that the specified class is a subclass * of `NSWindow`. */ void accesskit_macos_add_focus_forwarder_to_window_class( const char *class_name); #endif #if (defined(__linux__) || defined(__DragonFly__) || defined(__FreeBSD__) || \ defined(__NetBSD__) || defined(__OpenBSD__)) /** * All of the handlers will always be called from another thread. */ struct accesskit_unix_adapter *accesskit_unix_adapter_new( accesskit_activation_handler_callback activation_handler, void *activation_handler_userdata, accesskit_action_handler_callback action_handler, void *action_handler_userdata, accesskit_deactivation_handler_callback deactivation_handler, void *deactivation_handler_userdata); #endif #if (defined(__linux__) || defined(__DragonFly__) || defined(__FreeBSD__) || \ defined(__NetBSD__) || defined(__OpenBSD__)) void accesskit_unix_adapter_free(struct accesskit_unix_adapter *adapter); #endif #if (defined(__linux__) || defined(__DragonFly__) || defined(__FreeBSD__) || \ defined(__NetBSD__) || defined(__OpenBSD__)) void accesskit_unix_adapter_set_root_window_bounds( struct accesskit_unix_adapter *adapter, struct accesskit_rect outer, struct accesskit_rect inner); #endif #if (defined(__linux__) || defined(__DragonFly__) || defined(__FreeBSD__) || \ defined(__NetBSD__) || defined(__OpenBSD__)) void accesskit_unix_adapter_update_if_active( struct accesskit_unix_adapter *adapter, accesskit_tree_update_factory update_factory, void *update_factory_userdata); #endif #if (defined(__linux__) || defined(__DragonFly__) || defined(__FreeBSD__) || \ defined(__NetBSD__) || defined(__OpenBSD__)) /** * Update the tree state based on whether the window is focused. */ void accesskit_unix_adapter_update_window_focus_state( struct accesskit_unix_adapter *adapter, bool is_focused); #endif #if defined(_WIN32) /** * Memory is also freed when calling this function. */ void accesskit_windows_queued_events_raise( struct accesskit_windows_queued_events *events); #endif #if defined(_WIN32) struct accesskit_windows_adapter *accesskit_windows_adapter_new( HWND hwnd, bool is_window_focused, accesskit_action_handler_callback action_handler, void *action_handler_userdata); #endif #if defined(_WIN32) void accesskit_windows_adapter_free(struct accesskit_windows_adapter *adapter); #endif #if defined(_WIN32) /** * You must call `accesskit_windows_queued_events_raise` on the returned * pointer. It can be null if the adapter is not active. */ struct accesskit_windows_queued_events * accesskit_windows_adapter_update_if_active( struct accesskit_windows_adapter *adapter, accesskit_tree_update_factory update_factory, void *update_factory_userdata); #endif #if defined(_WIN32) /** * Update the tree state based on whether the window is focused. * * You must call `accesskit_windows_queued_events_raise` on the returned * pointer. */ struct accesskit_windows_queued_events * accesskit_windows_adapter_update_window_focus_state( struct accesskit_windows_adapter *adapter, bool is_focused); #endif #if defined(_WIN32) struct accesskit_opt_lresult accesskit_windows_adapter_handle_wm_getobject( struct accesskit_windows_adapter *adapter, WPARAM wparam, LPARAM lparam, accesskit_activation_handler_callback activation_handler, void *activation_handler_userdata); #endif #if defined(_WIN32) /** * Creates a new Windows platform adapter using window subclassing. * This must be done before the window is shown or focused * for the first time. * * This must be called on the thread that owns the window. The activation * handler will always be called on that thread. The action handler * may or may not be called on that thread. * * # Panics * * Panics if the window is already visible. */ struct accesskit_windows_subclassing_adapter * accesskit_windows_subclassing_adapter_new( HWND hwnd, accesskit_activation_handler_callback activation_handler, void *activation_handler_userdata, accesskit_action_handler_callback action_handler, void *action_handler_userdata); #endif #if defined(_WIN32) void accesskit_windows_subclassing_adapter_free( struct accesskit_windows_subclassing_adapter *adapter); #endif #if defined(_WIN32) /** * You must call `accesskit_windows_queued_events_raise` on the returned * pointer. It can be null if the adapter is not active. */ struct accesskit_windows_queued_events * accesskit_windows_subclassing_adapter_update_if_active( struct accesskit_windows_subclassing_adapter *adapter, accesskit_tree_update_factory update_factory, void *update_factory_userdata); #endif #ifdef __cplusplus } // extern "C" #endif // __cplusplus #endif /* ACCESSKIT_H */