diff --git a/Cargo.lock b/Cargo.lock index b124450..adf8c7f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,12 @@ version = 3 [[package]] name = "accesskit" -version = "0.22.0" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3eca13c82f9a5cd813120b2e9b6a5d10532c6e4cd140c295cebd1f770095c8a5" +checksum = "0467c58e646d849edd7fe043d6711b8ad58f27a39a5f33886f1f2ca9852e8259" +dependencies = [ + "uuid", +] [[package]] name = "accesskit-c" @@ -20,9 +23,9 @@ dependencies = [ [[package]] name = "accesskit_atspi_common" -version = "0.15.0" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3eb9cc46b7fb6987c4f891f0301b230b29d9e69b4854f060a0cf41fbc407ab77" +checksum = "c6778622dca77b55464f993289ffa9c2f192976e5891c2c30e2439af61b6ddf2" dependencies = [ "accesskit", "accesskit_consumer", @@ -33,9 +36,9 @@ dependencies = [ [[package]] name = "accesskit_consumer" -version = "0.32.0" +version = "0.33.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69d880a613f29621c90e801feec40f5dd61d837d7e20bf9b67676d45e7364a36" +checksum = "6fce4cd9f6ea13c76d53403ff1583163f7a9e58381ecfbf4c8449affd7c09c24" dependencies = [ "accesskit", "hashbrown", @@ -43,9 +46,9 @@ dependencies = [ [[package]] name = "accesskit_macos" -version = "0.23.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0ddfc3fe3d457d11cc1c4989105986a03583a1d54d0c25053118944b62e100" +checksum = "c001a603b958865ce466c92ac2487041ff402f994c705a3f12a5765e4e54a35e" dependencies = [ "accesskit", "accesskit_consumer", @@ -57,9 +60,9 @@ dependencies = [ [[package]] name = "accesskit_unix" -version = "0.18.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5d552169ef018149966ed139bb0311c6947b3343e9140d1b9f88d69da9528fd" +checksum = "f861c80792fd2f3d0fccd89be70ecd76295b9ea641e6116e331036cec0cec707" dependencies = [ "accesskit", "accesskit_atspi_common", @@ -75,9 +78,9 @@ dependencies = [ [[package]] name = "accesskit_windows" -version = "0.30.0" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d277279d0a3b0c0021dd110b55aa1fe326b09ee2cbc338df28f847c7daf94e25" +checksum = "ce3cdfe5e46c3f39d2d51bb6d6e5771347021889c5f6a7cade8ff7c401ccfbd7" dependencies = [ "accesskit", "accesskit_consumer", @@ -849,6 +852,12 @@ version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" +[[package]] +name = "uuid" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2e054861b4bd027cd373e18e8d8d8e6548085000e41290d95ce0c373a654b4a" + [[package]] name = "winapi" version = "0.3.9" diff --git a/Cargo.toml b/Cargo.toml index 8e510a6..c306fe5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,16 +16,16 @@ doc = false cbindgen = [] [dependencies] -accesskit = "0.22.0" +accesskit = "0.23.0" [target.'cfg(target_os = "windows")'.dependencies] -accesskit_windows = "0.30.0" +accesskit_windows = "0.31.1" [target.'cfg(target_os = "macos")'.dependencies] -accesskit_macos = "0.23.0" +accesskit_macos = "0.24.1" [target.'cfg(any(target_os = "linux", target_os = "dragonfly", target_os = "freebsd", target_os = "openbsd", target_os = "netbsd"))'.dependencies] -accesskit_unix = "0.18.0" +accesskit_unix = "0.19.1" [profile.release] lto = true diff --git a/cbindgen.toml b/cbindgen.toml index f28984a..824ef6e 100644 --- a/cbindgen.toml +++ b/cbindgen.toml @@ -54,6 +54,7 @@ renaming_overrides_prefixing = true "SortDirection" = "accesskit_sort_direction" "TextAlign" = "accesskit_text_align" "TextDecoration" = "accesskit_text_decoration" +"TextDecorationStyle" = "accesskit_text_decoration_style" "TextDirection" = "accesskit_text_direction" "Toggled" = "accesskit_toggled" "Vec2" = "accesskit_vec2" diff --git a/examples/sdl/hello_world.c b/examples/sdl/hello_world.c index 9deb453..d2dcb04 100644 --- a/examples/sdl/hello_world.c +++ b/examples/sdl/hello_world.c @@ -262,7 +262,7 @@ void do_action(accesskit_action_request *request, void *userdata) { SDL_zero(event); event.type = state->event_type; event.user.windowID = state->window_id; - event.user.data1 = (void *)((uintptr_t)(request->target)); + event.user.data1 = (void *)((uintptr_t)(request->target_node)); if (request->action == ACCESSKIT_ACTION_FOCUS) { event.user.code = SET_FOCUS_MSG; SDL_PushEvent(&event); diff --git a/examples/windows/hello_world.c b/examples/windows/hello_world.c index 06e96e5..951e595 100644 --- a/examples/windows/hello_world.c +++ b/examples/windows/hello_world.c @@ -86,10 +86,10 @@ accesskit_tree_update *build_initial_tree(void *userdata) { void do_action(accesskit_action_request *request, void *userdata) { HWND window = userdata; if (request->action == ACCESSKIT_ACTION_FOCUS) { - LPARAM lparam = (LPARAM)(request->target); + LPARAM lparam = (LPARAM)(request->target_node); PostMessage((HWND)window, SET_FOCUS_MSG, 0, lparam); } else if (request->action == ACCESSKIT_ACTION_CLICK) { - LPARAM lparam = (LPARAM)(request->target); + LPARAM lparam = (LPARAM)(request->target_node); PostMessage((HWND)window, DO_DEFAULT_ACTION_MSG, 0, lparam); } accesskit_action_request_free(request); diff --git a/include/accesskit.h b/include/accesskit.h index 8df227f..227a974 100644 --- a/include/accesskit.h +++ b/include/accesskit.h @@ -515,19 +515,19 @@ enum accesskit_text_align typedef uint8_t accesskit_text_align; #endif // __cplusplus -enum accesskit_text_decoration +enum accesskit_text_decoration_style #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, + ACCESSKIT_TEXT_DECORATION_STYLE_SOLID, + ACCESSKIT_TEXT_DECORATION_STYLE_DOTTED, + ACCESSKIT_TEXT_DECORATION_STYLE_DASHED, + ACCESSKIT_TEXT_DECORATION_STYLE_DOUBLE, + ACCESSKIT_TEXT_DECORATION_STYLE_WAVY, }; #ifndef __cplusplus -typedef uint8_t accesskit_text_decoration; +typedef uint8_t accesskit_text_decoration_style; #endif // __cplusplus enum accesskit_text_direction @@ -625,6 +625,24 @@ typedef struct accesskit_opt_node_id { accesskit_node_id value; } accesskit_opt_node_id; +/** + * A 128-bit identifier for a tree, represented as a UUID in big-endian byte + * order. + */ +typedef struct accesskit_tree_id { + uint8_t bytes[16]; +} accesskit_tree_id; + +/** + * Represents an optional value. + * + * If `has_value` is false, do not read the `value` field. + */ +typedef struct accesskit_opt_tree_id { + bool has_value; + struct accesskit_tree_id value; +} accesskit_opt_tree_id; + /** * Represents an optional value. * @@ -675,6 +693,14 @@ typedef struct accesskit_opt_color { struct accesskit_color value; } accesskit_opt_color; +/** + * The style and color for a type of text decoration. + */ +typedef struct accesskit_text_decoration { + accesskit_text_decoration_style style; + struct accesskit_color color; +} accesskit_text_decoration; + /** * Represents an optional value. * @@ -682,7 +708,7 @@ typedef struct accesskit_opt_color { */ typedef struct accesskit_opt_text_decoration { bool has_value; - accesskit_text_decoration value; + struct accesskit_text_decoration value; } accesskit_opt_text_decoration; typedef struct accesskit_lengths { @@ -963,7 +989,8 @@ typedef struct accesskit_opt_action_data { typedef struct accesskit_action_request { accesskit_action action; - accesskit_node_id target; + struct accesskit_tree_id target_tree; + accesskit_node_id target_node; struct accesskit_opt_action_data data; } accesskit_action_request; @@ -1036,6 +1063,8 @@ typedef struct accesskit_opt_lresult { extern "C" { #endif // __cplusplus +extern const struct accesskit_tree_id ACCESSKIT_TREE_ID_ROOT; + accesskit_role accesskit_node_role(const struct accesskit_node *node); void accesskit_node_set_role(struct accesskit_node *node, accesskit_role value); @@ -1354,6 +1383,14 @@ void accesskit_node_set_popup_for(struct accesskit_node *node, void accesskit_node_clear_popup_for(struct accesskit_node *node); +struct accesskit_opt_tree_id accesskit_node_tree_id( + const struct accesskit_node *node); + +void accesskit_node_set_tree_id(struct accesskit_node *node, + struct accesskit_tree_id value); + +void accesskit_node_clear_tree_id(struct accesskit_node *node); + /** * Only call this function with a string that originated from AccessKit. */ @@ -1932,7 +1969,7 @@ 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); + struct accesskit_text_decoration value); void accesskit_node_clear_overline(struct accesskit_node *node); @@ -1940,7 +1977,7 @@ 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); + struct accesskit_text_decoration value); void accesskit_node_clear_strikethrough(struct accesskit_node *node); @@ -1948,7 +1985,7 @@ 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); + struct accesskit_text_decoration value); void accesskit_node_clear_underline(struct accesskit_node *node); @@ -2263,6 +2300,12 @@ 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); +struct accesskit_tree_id accesskit_tree_update_get_tree_id( + const struct accesskit_tree_update *update); + +void accesskit_tree_update_set_tree_id(struct accesskit_tree_update *update, + struct accesskit_tree_id tree_id); + /** * Caller must call `accesskit_string_free` with the return value. */ diff --git a/src/common.rs b/src/common.rs index d94636e..3cb9dfb 100644 --- a/src/common.rs +++ b/src/common.rs @@ -194,6 +194,29 @@ macro_rules! vec_property_methods { pub type node_id = u64; +/// A 128-bit identifier for a tree, represented as a UUID in big-endian byte order. +#[repr(C)] +pub struct tree_id { + pub bytes: [u8; 16], +} + +impl From for tree_id { + fn from(id: TreeId) -> Self { + Self { + bytes: *id.0.as_bytes(), + } + } +} + +impl From for TreeId { + fn from(id: tree_id) -> Self { + TreeId(Uuid::from_bytes(id.bytes)) + } +} + +#[no_mangle] +pub static ACCESSKIT_TREE_ID_ROOT: tree_id = tree_id { bytes: [0; 16] }; + slice_struct! { node_ids, NodeId, node_id } macro_rules! node_id_vec_property_methods { @@ -468,6 +491,12 @@ node_id_property_methods! { (accesskit_node_popup_for, popup_for, accesskit_node_set_popup_for, set_popup_for, accesskit_node_clear_popup_for, clear_popup_for) } +opt_struct! { opt_tree_id, tree_id } + +simple_property_methods! { + accesskit_node_tree_id, tree_id, opt_tree_id, accesskit_node_set_tree_id, set_tree_id, tree_id, accesskit_node_clear_tree_id, clear_tree_id +} + /// Only call this function with a string that originated from AccessKit. #[no_mangle] pub extern "C" fn accesskit_string_free(string: *mut c_char) { @@ -938,6 +967,7 @@ impl tree_update { let update = TreeUpdate { nodes: vec![], tree: None, + tree_id: TreeId::ROOT, focus: focus.into(), }; BoxCastPtr::to_mut_ptr(update) @@ -951,6 +981,7 @@ impl tree_update { let update = TreeUpdate { nodes: Vec::with_capacity(capacity), tree: None, + tree_id: TreeId::ROOT, focus: focus.into(), }; BoxCastPtr::to_mut_ptr(update) @@ -992,6 +1023,21 @@ impl tree_update { update.focus = focus.into(); } + #[no_mangle] + pub extern "C" fn accesskit_tree_update_get_tree_id(update: *const tree_update) -> tree_id { + let update = ref_from_ptr(update); + update.tree_id.into() + } + + #[no_mangle] + pub extern "C" fn accesskit_tree_update_set_tree_id( + update: *mut tree_update, + tree_id: tree_id, + ) { + let update = mut_from_ptr(update); + update.tree_id = tree_id.into(); + } + /// Caller must call `accesskit_string_free` with the return value. #[no_mangle] pub extern "C" fn accesskit_tree_update_debug(tree_update: *const tree_update) -> *mut c_char { @@ -1042,7 +1088,8 @@ impl From for action_data { #[repr(C)] pub struct action_request { pub action: Action, - pub target: node_id, + pub target_tree: tree_id, + pub target_node: node_id, pub data: opt_action_data, } @@ -1050,7 +1097,8 @@ impl From for action_request { fn from(request: ActionRequest) -> action_request { Self { action: request.action, - target: request.target.into(), + target_tree: request.target_tree.into(), + target_node: request.target_node.into(), data: request.data.into(), } }