Struct BuildContext

Source
pub struct BuildContext<'a> {
    pub style: Resource<Style>,
    /* private fields */
}
Expand description

Build context is used to decouple explicit UI state modification. Its main use is in the various widget builders. Internally, it is just a mutable reference to the UI state. UI can be modified (add nodes, clone, link, etc.) via build context. This is needed to explicitly highlight that it used to modify the UI state. It is not recommended to use BuildContext for mutable access to widgets at runtime! Use message passing to modify widgets at runtime, otherwise you will easily break invariant (inner state) of widgets. The only place where it’s allowed to directly mutate widget’s state is at build stage (inside build method of your widget builder).

§Examples

#[derive(Clone, Visit, Reflect, Debug, ComponentProvider)]
struct MyWidget {
    widget: Widget,
}

struct MyWidgetBuilder {
    widget_builder: WidgetBuilder,
}

impl MyWidgetBuilder {
    pub fn build(self, ctx: &mut BuildContext) -> Handle<UiNode> {
        let my_widget = MyWidget {
            widget: self.widget_builder.build(ctx),
        };

        ctx.add_node(UiNode::new(my_widget))
    }
}

Fields§

§style: Resource<Style>

Implementations§

Source§

impl BuildContext<'_>

Source

pub fn default_font(&self) -> Resource<Font>

Returns default font instance used by the UI.

Source

pub fn sender(&self) -> Sender<UiMessage>

Returns current message sender of the UI, that is used for message passing mechanism. You can send messages for your widgets inside your builders, however this has limited use and should be avoided in the favor of explicit state modification to not overload message pipeline.

Source

pub fn add_node(&mut self, node: UiNode) -> Handle<UiNode>

Adds a new widget to the UI. See UiNode docs for more info, UiNode::new in particular.

Links the child widget with the parent widget. Child widget’s position and size will be restricted by the new parent. When a widget is linked to other widget, its coordinates become relative to it parent.

Source

pub fn copy(&mut self, node: Handle<UiNode>) -> Handle<UiNode>

Copies a widget, adds it to the UI, links it to the root node of the UI and returns the handle to it.

Source

pub fn try_get_node(&self, node: Handle<UiNode>) -> Option<&UiNode>

Tries to fetch the node by its handle. Returns None if the handle is invalid.

Source

pub fn try_get_node_mut(&mut self, node: Handle<UiNode>) -> Option<&mut UiNode>

Tries to fetch the node by its handle. Returns None if the handle is invalid.

Source

pub fn push_picking_restriction(&mut self, restriction: RestrictionEntry)

Pushes a new picking restriction to the picking-restriction stack. See UserInterface::push_picking_restriction docs for more info.

Source

pub fn remove_picking_restriction(&mut self, node: Handle<UiNode>)

Explicitly removes picking restriction for the given node from the picking-restriction stack. See UserInterface::remove_picking_restriction docs for more info.

Source

pub fn inner(&self) -> &UserInterface

Returns an immutable reference to the user interface.

Source

pub fn inner_mut(&mut self) -> &mut UserInterface

Returns a mutable reference to the user interface.

Source

pub fn send_message(&self, message: UiMessage)

Sends a message during build stage. It has quite limited use, but could be unavoidable in for cases when you need to do some action that relies on fully performed layout stage. When a widget is being built, you can’t fetch any layout info of it since it wasn’t calculated yet. In this case all you can do is to “postpone” your action for later moment in current frame by sending a message.

Trait Implementations§

Source§

impl<'a> From<&'a mut UserInterface> for BuildContext<'a>

Source§

fn from(ui: &'a mut UserInterface) -> BuildContext<'a>

Converts to this type from the input type.
Source§

impl Index<Handle<UiNode>> for BuildContext<'_>

Source§

type Output = UiNode

The returned type after indexing.
Source§

fn index( &self, index: Handle<UiNode>, ) -> &<BuildContext<'_> as Index<Handle<UiNode>>>::Output

Performs the indexing (container[index]) operation. Read more
Source§

impl IndexMut<Handle<UiNode>> for BuildContext<'_>

Source§

fn index_mut( &mut self, index: Handle<UiNode>, ) -> &mut <BuildContext<'_> as Index<Handle<UiNode>>>::Output

Performs the mutable indexing (container[index]) operation. Read more

Auto Trait Implementations§

§

impl<'a> Freeze for BuildContext<'a>

§

impl<'a> !RefUnwindSafe for BuildContext<'a>

§

impl<'a> Send for BuildContext<'a>

§

impl<'a> !Sync for BuildContext<'a>

§

impl<'a> Unpin for BuildContext<'a>

§

impl<'a> !UnwindSafe for BuildContext<'a>

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> AsyncTaskResult for T
where T: Any + Send + 'static,

Source§

fn into_any(self: Box<T>) -> Box<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
Source§

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

Source§

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

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

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

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

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

Source§

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

Converts self reference as a reference to Any. Could be used to downcast a trait object to a particular type.
Source§

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

Converts self reference as a reference to Any. Could be used to downcast a trait object to a particular type.
Source§

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

Source§

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

Source§

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

Casts self to a &dyn Any
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

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

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

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

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

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

Initializes a with the given initializer. Read more
Source§

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

Dereferences the given pointer. Read more
Source§

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

Mutably dereferences the given pointer. Read more
Source§

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

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
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.
Source§

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

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

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

fn with_current_subscriber(self) -> WithDispatch<Self>

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