godot-module-template/engine/thirdparty/accesskit/include/accesskit.h
2025-04-12 18:40:44 +02:00

2353 lines
70 KiB
C++

/**
* 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 <stdarg.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <stdlib.h>
#ifdef _WIN32
#include <windows.h>
#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 */