Split the View
trait into View
and Widget
#288
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This splits the
View
trait intoView
andWidget
. TheWidget
has all the functionality of the previousView
trait while the newView
trait has a method to build widgets and necessary access for view decorators.Widget::id
is removed as there where common conflicts withView::id
as most widgets implement bothView
andWidget
.AnyView
is a new type equivalent to the oldBox<dyn View>
as the newView
trait is no longer object safe so it can't have dynamic dispatch. TheView
trait has anany
method to convert views intoAnyView
. That seems to be reasonably ergonomic.DynStack
andVirtualStack
are changed to use dynamic dispatch for widgets to reduce generic parameters.This provides a layer of separation between widgets and views which means you can create APIs in a builder pattern style making the final built widget a function of the configured view state. I have yet to look over and see if there's any problems with
View::build
being called in a differentScope
.