Struct bevy_quill::ViewAdapter
source · pub struct ViewAdapter<V>where
V: View,{ /* private fields */ }Expand description
A ViewAdapter is a stateless object that can be used to access an object implementing View
in a type-erased fashion, without needing to store a dyn View. This allows querying for ECS
components that contain implementations of the View trait without knowing the concrete type.
Note that it must be stateless since it is created statically, and passed around by static
reference.
In order for this to work, two ECS components are needed: ViewThunk and a second component
to actually hold the concrete view, such as ViewStateCell.
ViewThunk is a type-erased component that provides access to the concrete View via the
ViewAdapter. ViewStateCell is a component that contains the actual View and it’s state.
Because ViewStateCell is generic, it cannot be queried directly (since it would require
a separate query for every specialization), so we use ViewThunk as an adapter. ViewAdapter
also can work with other component types that contain a View implementation.
The the methods of ViewAdapter and ViewThunk take an entity id to identify the view rather
than self``; the self` parameter is only there to make the methods dyn-trait
compatible. This allows the adapter to be created as a static object, since all of its state
is external.
See AnyViewAdapter and ViewThunk.
Trait Implementations§
source§impl<V> AnyViewAdapter for ViewAdapter<V>where
V: View,
impl<V> AnyViewAdapter for ViewAdapter<V>where
V: View,
source§fn nodes(&self, world: &mut World, entity: Entity) -> NodeSpan
fn nodes(&self, world: &mut World, entity: Entity) -> NodeSpan
source§fn rebuild(
&self,
world: &mut World,
entity: Entity,
scope: &mut TrackingScope,
) -> bool
fn rebuild( &self, world: &mut World, entity: Entity, scope: &mut TrackingScope, ) -> bool
nodes() would return a different value than it did before the
rebuild.Auto Trait Implementations§
impl<V> Freeze for ViewAdapter<V>
impl<V> RefUnwindSafe for ViewAdapter<V>where
V: RefUnwindSafe,
impl<V> Send for ViewAdapter<V>
impl<V> Sync for ViewAdapter<V>
impl<V> Unpin for ViewAdapter<V>where
V: Unpin,
impl<V> UnwindSafe for ViewAdapter<V>where
V: UnwindSafe,
Blanket Implementations§
source§impl<T, U> AsBindGroupShaderType<U> for T
impl<T, U> AsBindGroupShaderType<U> for T
source§fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U
fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U
T ShaderType for self. When used in AsBindGroup
derives, it is safe to assume that all images in self exist.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.