Struct Focus

Source
pub struct Focus { /* private fields */ }
Expand description

A focus handle that represents a focusable component.

Each Focus instance has a unique identifier and can be used to manage focus state for a specific component. The focus system ensures that only one component can have focus at a time across the entire application.

§Examples

use tessera_ui::Focus;

// Create a focus instance for a component
let button_focus = Focus::new();

// Request focus for this component
button_focus.request_focus();

// Check if this component currently has focus
if button_focus.is_focused() {
    println!("Button is focused!");
}

// Focus is automatically cleared when the instance is dropped
drop(button_focus);

Implementations§

Source§

impl Focus

Source

pub fn new() -> Self

Creates a new focus instance with a unique identifier.

Each focus instance is assigned a unique UUID that distinguishes it from all other focus instances in the application. This ensures that focus operations are applied to the correct component.

§Examples
use tessera_ui::Focus;

let focus1 = Focus::new();
let focus2 = Focus::new();

// There can only be one focused component at a time

focus1.request_focus();
assert!(focus1.is_focused());
assert!(!focus2.is_focused());

focus2.request_focus();
assert!(!focus1.is_focused());
assert!(focus2.is_focused());
Source

pub fn is_focused(&self) -> bool

Checks if this focus instance currently has focus.

Returns true if this specific focus instance is the currently active focus in the global focus state, false otherwise.

§Examples
use tessera_ui::Focus;

let focus = Focus::new();

// Initially, no focus is active
assert!(!focus.is_focused());

// After requesting focus, this instance should be focused
focus.request_focus();
assert!(focus.is_focused());
§Thread Safety

This method is thread-safe and can be called from any thread. It acquires a read lock on the global focus state.

Source

pub fn request_focus(&self)

Requests focus for this component.

This method sets the global focus state to this focus instance, potentially removing focus from any previously focused component. Only one component can have focus at a time.

§Examples
use tessera_ui::Focus;

let focus1 = Focus::new();
let focus2 = Focus::new();

focus1.request_focus();
assert!(focus1.is_focused());
assert!(!focus2.is_focused());

// Requesting focus for focus2 removes it from focus1
focus2.request_focus();
assert!(!focus1.is_focused());
assert!(focus2.is_focused());
§Thread Safety

This method is thread-safe and can be called from any thread. It acquires a write lock on the global focus state.

Source

pub fn unfocus(&self)

Clears focus if this instance currently has it.

This method removes focus from the global state, but only if this specific focus instance is the one that currently has focus. If another component has focus, this method has no effect.

§Examples
use tessera_ui::Focus;

let focus1 = Focus::new();
let focus2 = Focus::new();

focus1.request_focus();
assert!(focus1.is_focused());

// Clear focus from focus1
focus1.unfocus();
assert!(!focus1.is_focused());

// If focus2 has focus, focus1.unfocus() won't affect it
focus2.request_focus();
focus1.unfocus(); // No effect
assert!(focus2.is_focused());
§Thread Safety

This method is thread-safe and can be called from any thread. It acquires a write lock on the global focus state.

Trait Implementations§

Source§

impl Default for Focus

Source§

fn default() -> Self

Creates a new focus instance with a unique identifier.

This is equivalent to calling Focus::new().

Source§

impl Drop for Focus

Source§

fn drop(&mut self)

Automatically clears focus when the Focus instance is dropped.

This ensures that focus is properly cleaned up when a component is destroyed or goes out of scope. If this focus instance currently has focus, it will be cleared from the global focus state.

§Examples
use tessera_ui::Focus;

{
    let focus = Focus::new();
    focus.request_focus();
    assert!(focus.is_focused());
} // focus is dropped here, automatically clearing focus

// Focus is now cleared globally
let another_focus = Focus::new();
assert!(!another_focus.is_focused());
§Thread Safety

This method is thread-safe and will properly handle cleanup even if called from different threads.

Auto Trait Implementations§

§

impl Freeze for Focus

§

impl RefUnwindSafe for Focus

§

impl Send for Focus

§

impl Sync for Focus

§

impl Unpin for Focus

§

impl UnwindSafe for Focus

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

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

Source§

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

Returns a reference to the concrete type as &dyn Any.
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
§

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<R, P> ReadPrimitive<R> for P
where R: Read + ReadEndian<P>, P: Default,

Source§

fn read_from_little_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_little_endian().
Source§

fn read_from_big_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_big_endian().
Source§

fn read_from_native_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_native_endian().
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<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> WasmNotSend for T
where T: Send,

§

impl<T> WasmNotSendSync for T
where T: WasmNotSend + WasmNotSync,

§

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