Skip to main content

AccessNode

Struct AccessNode 

pub struct AccessNode {
Show 18 fields pub role: Role, pub semantic_key: Option<String>, pub action_target: Option<String>, pub name: Option<String>, pub description: Option<String>, pub value: Option<String>, pub text_selection: Option<AccessibleTextSelection>, pub state: AccessState, pub live: Option<Politeness>, pub set_size: Option<usize>, pub pos_in_set: Option<usize>, pub level: Option<usize>, pub key: Option<u64>, pub bounds: Option<AccessBounds>, pub children: Vec<AccessNode>, pub interface_name: bool, pub role_description: Option<String>, pub item: Option<String>,
}
Expand description

The per-widget local accessibility semantics returned by Widget::accessibility; name/description must already be FTL-resolved strings (via i18n!), not translation keys, since AccessKit/AT-SPI consume final text.

Fields§

§role: Role§semantic_key: Option<String>

Stable identity of a retained actionable widget within its semantic parent. Unlike a layout id, this survives rebuilds and sibling moves.

§action_target: Option<String>

Opaque stable identity used to route actions on a synthetic child back to the widget that produced it. It has meaning only to that widget.

§name: Option<String>

The primary label a screen reader announces.

§description: Option<String>§value: Option<String>

Never populated for protected elements.

§text_selection: Option<AccessibleTextSelection>

Direction-preserving UTF-8 byte endpoints for editable text. The AccessKit bridge converts these to grapheme indices in a TextRun.

§state: AccessState§live: Option<Politeness>

The App watches its spoken text each frame and announces changes at the given politeness without moving focus. None = not a live region.

§set_size: Option<usize>

Total items in the owning collection, pairs with pos_in_set to let the reader say “2 of 4”.

§pos_in_set: Option<usize>

1-based position within the collection. See set_size.

§level: Option<usize>

1-based hierarchy depth, read out as “level N”.

§key: Option<u64>

Stable identity of THIS node within its parent’s children list, for nodes that are synthetic (no backing Widget).

The export layer derives a synthetic node’s assistive-technology id by chaining these keys from the owning widget downwards, so an AT that holds a reference to “the clip named intro” keeps pointing at that clip across repaints — and the same key path is what comes back on Widget::perform_action when the AT operates the node.

None (the default) means “key me by my ordinal position among my siblings”. That is the right choice for position-addressed structures — a table’s rows and cells, where “row 3” is the identity the user means even after a re-sort. Set an explicit key for identity-addressed structures — a clip on a timeline, a layer, a note — whose position moves but which stay the same object; use with_hashed_key to derive one from a string id.

Do not mix keyed and unkeyed siblings in one list: an explicit key of 3 and an ordinal of 3 are indistinguishable downstream.

§bounds: Option<AccessBounds>

Absolute logical-pixel bounds for a synthetic node. Retained widgets receive their bounds from Widget::get_rect; virtual rows and cells use this field because they have no widget of their own. The AccessKit bridge applies the window scale factor.

§children: Vec<AccessNode>

Accessible children with no backing Widget of their own — a table’s rows and cells, a virtualized list’s items. The export layer emits them as this node’s subtree, nested as deeply as needed (rows containing cells).

§interface_name: bool

Whether name is the app’s own fixed, localized copy (a button’s label, a heading), the same for everyone, rather than something a person or a resource put there. Unset means content: a feedback report hides it until the reporter shows it.

§role_description: Option<String>

What kind of thing this is in the app’s own words, where its role says too little (“Message” for a chat row that is a list item), in the reader’s language. Always the app’s own copy, never content.

§item: Option<String>

The item of its app’s collection this node shows: a note’s block id, a task’s issue. What an action naming that item is drawn on, so an invocation’s target is found in the view by identity rather than by its label or its place among its siblings.

Implementations§

§

impl AccessNode

pub fn new(role: Role) -> AccessNode

pub fn with_item(self, item: impl Into<String>) -> AccessNode

Say which item of its collection this node shows (Self::item).

pub fn with_interface_name(self, interface: bool) -> AccessNode

Mark the name as the app’s own fixed, localized copy (Self::interface_name).

pub fn with_role_description(self, kind: impl Into<String>) -> AccessNode

Say what kind of thing this is in the app’s own words (Self::role_description).

pub fn with_semantic_key(self, key: impl Into<String>) -> AccessNode

pub fn with_action_target(self, target: impl Into<String>) -> AccessNode

Attach an opaque, widget-local target for actions on this synthetic node. Prefer stable model keys over visible indices.

pub fn with_keyed_action_routes(self, namespace: &str) -> AccessNode

Route every keyed actionable descendant through its existing Widget::perform_action implementation. This is the high-complexity custom-canvas adapter: timeline/editor authors keep one stable keyed semantic tree instead of duplicating an action id and handler for every painted affordance.

pub fn with_name(self, name: impl Into<String>) -> AccessNode

pub fn with_optional_name(self, name: Option<String>) -> AccessNode

Handy when an empty label should collapse to None.

pub fn with_description(self, description: impl Into<String>) -> AccessNode

pub fn with_value(self, value: impl Into<String>) -> AccessNode

pub fn with_optional_value(self, value: Option<String>) -> AccessNode

pub fn with_text_selection(self, anchor: usize, focus: usize) -> AccessNode

Publish an editable caret (anchor == focus) or selection. Endpoints are UTF-8 bytes and are clamped to extended grapheme boundaries by the bridge, matching the toolkit editing contract.

pub fn with_state(self, state: AccessState) -> AccessNode

pub fn with_live(self, politeness: Politeness) -> AccessNode

pub fn with_position(self, pos_in_set: usize, set_size: usize) -> AccessNode

pos_in_set is 1-based within a total of set_size. Read out as “N of M”.

pub fn with_level(self, level: usize) -> AccessNode

pub fn with_key(self, key: u64) -> AccessNode

Set this node’s stable key within its sibling list.

Use this for a synthetic node whose identity outlives its position — a clip that can be dragged along a track, a layer that can be reordered. The key must be unique among the node’s siblings and stable for as long as the element it describes exists.

pub fn with_hashed_key(self, key: impl Hash) -> AccessNode

Set this node’s stable key by hashing any hashable value — the ergonomic form of with_key for elements identified by a string (clip.id), a tuple ((track, clip)), or a UUID.

let clip = AccessNode::new(Role::ListItem).with_hashed_key("clip-intro");
assert_eq!(clip.key, Some(tilo_ui::a11y::hash_key(&"clip-intro")));

pub fn with_bounds(self, bounds: Rect) -> AccessNode

Attach absolute logical-pixel geometry to a synthetic semantic node.

pub fn with_children(self, children: Vec<AccessNode>) -> AccessNode

Attach synthetic children — accessible elements with no backing widget (a table’s rows/cells).

Trait Implementations§

§

impl Clone for AccessNode

§

fn clone(&self) -> AccessNode

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
§

impl Debug for AccessNode

§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
§

impl PartialEq for AccessNode

§

fn eq(&self, other: &AccessNode) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
§

impl Serialize for AccessNode

§

fn serialize<__S>( &self, __serializer: __S, ) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
§

impl StructuralPartialEq for AccessNode

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<T> AnyEq for T
where T: Any + PartialEq,

§

fn equals(&self, other: &(dyn Any + 'static)) -> bool

§

fn as_any(&self) -> &(dyn Any + 'static)

§

impl<T> AsAny for T
where T: 'static,

§

fn as_any(&self) -> &(dyn Any + 'static)

Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<T> Downcast<T> for T

§

fn downcast(&self) -> &T

§

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Converts Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Converts Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Converts &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Converts &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSend for T
where T: Any + Send,

§

fn into_any_send(self: Box<T>) -> Box<dyn Any + Send>

Converts Box<Trait> (where Trait: DowncastSend) to Box<dyn Any + Send>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync> ⓘ

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

§

fn into_any_sync(self: Box<T>) -> Box<dyn Any + Send + Sync>

Converts Box<Trait> (where Trait: DowncastSync) to Box<dyn Any + Send + Sync>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync> ⓘ

Converts Arc<Trait> (where Trait: DowncastSync) to Arc<Any>, which can then be downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

impl<T> PolicyExt for T
where T: ?Sized,

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> Serialize for T
where T: Serialize + ?Sized,

Source§

fn erased_serialize(&self, serializer: &mut dyn Serializer) -> Result<(), Error>

Source§

fn do_erased_serialize( &self, serializer: &mut dyn Serializer, ) -> Result<(), ErrorImpl>

§

impl<T, S> SimdFrom<T, S> for T
where S: Simd,

§

fn simd_from(_simd: S, value: T) -> T

§

impl<F, T, S> SimdInto<T, S> for F
where T: SimdFrom<F, S>, S: Simd,

§

fn simd_into(self, simd: S) -> T

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> Upcast<T> for T

§

fn upcast(&self) -> Option<&T>

§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

impl<T> CommonTraits for T
where T: AsAny + Any + Debug + WasmNotSendSync,

§

impl<T> ErasedDestructor for T
where T: 'static,

§

impl<T> Fruit for T
where T: Send + Downcast,

§

impl<T> MaybeSendSync for T
where T: Send + Sync + ?Sized,

§

impl<T> WasmNotSend for T
where T: Send,

§

impl<T> WasmNotSendSync for T

§

impl<T> WasmNotSync for T
where T: Sync,