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<'_>
impl BuildContext<'_>
Sourcepub fn default_font(&self) -> Resource<Font> ⓘ
pub fn default_font(&self) -> Resource<Font> ⓘ
Returns default font instance used by the UI.
Sourcepub fn sender(&self) -> Sender<UiMessage>
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.
Sourcepub fn add_node(&mut self, node: UiNode) -> Handle<UiNode>
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.
Sourcepub fn link(&mut self, child: Handle<UiNode>, parent: Handle<UiNode>)
pub fn link(&mut self, child: Handle<UiNode>, parent: Handle<UiNode>)
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.
Sourcepub fn copy(&mut self, node: Handle<UiNode>) -> Handle<UiNode>
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.
Sourcepub fn try_get_node(&self, node: Handle<UiNode>) -> Option<&UiNode>
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.
Sourcepub fn try_get_node_mut(&mut self, node: Handle<UiNode>) -> Option<&mut UiNode>
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.
Sourcepub fn push_picking_restriction(&mut self, restriction: RestrictionEntry)
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.
Sourcepub fn remove_picking_restriction(&mut self, node: Handle<UiNode>)
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.
Sourcepub fn inner(&self) -> &UserInterface
pub fn inner(&self) -> &UserInterface
Returns an immutable reference to the user interface.
Sourcepub fn inner_mut(&mut self) -> &mut UserInterface
pub fn inner_mut(&mut self) -> &mut UserInterface
Returns a mutable reference to the user interface.
Sourcepub fn send_message(&self, message: UiMessage)
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>
impl<'a> From<&'a mut UserInterface> for BuildContext<'a>
Source§fn from(ui: &'a mut UserInterface) -> BuildContext<'a>
fn from(ui: &'a mut UserInterface) -> BuildContext<'a>
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> AsyncTaskResult for T
impl<T> AsyncTaskResult for T
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
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>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
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)
fn as_any(&self) -> &(dyn Any + 'static)
&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)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&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 Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Any
. Could be used to downcast a trait object
to a particular type.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Any
. Could be used to downcast a trait object
to a particular type.fn into_any(self: Box<T>) -> Box<dyn Any>
Source§impl<T> FieldValue for Twhere
T: 'static,
impl<T> FieldValue for Twhere
T: 'static,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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 moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self
from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self
is actually part of its subset T
(and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset
but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self
to the equivalent element of its superset.