Skip to main content

AccessNode

Struct AccessNode 

pub struct AccessNode {
Show 15 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>,
}
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).

Implementations§

§

impl AccessNode

pub fn new(role: Role) -> AccessNode

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)

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> 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.
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
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

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> 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,