work
This commit is contained in:
@@ -1,20 +1,20 @@
|
||||
use crate::HasUi;
|
||||
use crate::{HasRoot, UiRsc};
|
||||
|
||||
use super::*;
|
||||
use std::marker::Unsize;
|
||||
|
||||
pub trait WidgetLike<Rsc: HasUi, Tag>: Sized {
|
||||
pub trait WidgetLike<Rsc: UiRsc, Tag>: Sized {
|
||||
type Widget: Widget + ?Sized + Unsize<dyn Widget>;
|
||||
|
||||
fn add(self, rsc: &mut Rsc) -> WidgetRef<Self::Widget>;
|
||||
fn add(self, rsc: &mut Rsc) -> WeakWidget<Self::Widget>;
|
||||
|
||||
fn add_strong(self, rsc: &mut Rsc) -> WidgetHandle<Self::Widget> {
|
||||
self.add(rsc).upgrade(rsc.ui_mut())
|
||||
fn add_strong(self, rsc: &mut Rsc) -> StrongWidget<Self::Widget> {
|
||||
self.add(rsc).upgrade(rsc)
|
||||
}
|
||||
|
||||
fn with_id<W2>(
|
||||
self,
|
||||
f: impl FnOnce(&mut Rsc, WidgetRef<Self::Widget>) -> WidgetRef<W2>,
|
||||
f: impl FnOnce(&mut Rsc, WeakWidget<Self::Widget>) -> WeakWidget<W2>,
|
||||
) -> impl WidgetIdFn<Rsc, W2> {
|
||||
move |state| {
|
||||
let id = self.add(state);
|
||||
@@ -22,14 +22,12 @@ pub trait WidgetLike<Rsc: HasUi, Tag>: Sized {
|
||||
}
|
||||
}
|
||||
|
||||
fn set_root(self, state: &mut Rsc) {
|
||||
let id = self.add(state);
|
||||
let ui = state.ui_mut();
|
||||
ui.root = Some(id.upgrade(ui));
|
||||
}
|
||||
|
||||
fn handles(self, state: &mut Rsc) -> WidgetHandles<Self::Widget> {
|
||||
self.add(state).upgrade(state.ui_mut()).handles()
|
||||
fn set_root(self, rsc: &mut Rsc)
|
||||
where
|
||||
Rsc: HasRoot,
|
||||
{
|
||||
let id = self.add_strong(rsc);
|
||||
rsc.set_root(id);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -50,12 +48,12 @@ macro_rules! impl_widget_arr {
|
||||
impl_widget_arr!($n;$($W)*;$(${concat($W,Tag)})*);
|
||||
};
|
||||
($n:expr;$($W:ident)*;$($Tag:ident)*) => {
|
||||
impl<Rsc: HasUi, $($W: WidgetLike<Rsc, $Tag>,$Tag,)*> WidgetArrLike<Rsc, $n, ($($Tag,)*)> for ($($W,)*) {
|
||||
impl<Rsc: UiRsc, $($W: WidgetLike<Rsc, $Tag>,$Tag,)*> WidgetArrLike<Rsc, $n, ($($Tag,)*)> for ($($W,)*) {
|
||||
fn add(self, rsc: &mut Rsc) -> WidgetArr<$n> {
|
||||
#[allow(non_snake_case)]
|
||||
let ($($W,)*) = self;
|
||||
WidgetArr::new(
|
||||
[$($W.add(rsc).upgrade(rsc.ui_mut()),)*],
|
||||
[$($W.add(rsc).upgrade(rsc),)*],
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user