some potentially nice trait stuff
This commit is contained in:
1 parent
1102dc7338
commit
c118bb446b
7 files changed
+90
-30
No files matched your search
@@ -2,10 +2,8 @@
|
||||
#![feature(const_ops)]
|
||||
#![feature(const_trait_impl)]
|
||||
#![feature(const_convert)]
|
||||
#![feature(map_try_insert)]
|
||||
#![feature(unboxed_closures)]
|
||||
#![feature(fn_traits)]
|
||||
#![feature(const_cmp)]
|
||||
#![feature(const_destruct)]
|
||||
#![feature(portable_simd)]
|
||||
#![feature(associated_type_defaults)]
|
||||
|
||||
@@ -34,7 +34,7 @@ pub trait HasRoot {
|
||||
|
||||
pub trait WidgetArrLike<Rsc, const LEN: usize, Tag> {
|
||||
#[track_caller]
|
||||
fn add(self, state: &mut Rsc) -> WidgetArr<LEN>;
|
||||
fn add(self, rsc: &mut Rsc) -> WidgetArr<LEN>;
|
||||
}
|
||||
|
||||
impl<Rsc, const LEN: usize> WidgetArrLike<Rsc, LEN, ArrTag> for WidgetArr<LEN> {
|
||||
@@ -58,6 +58,13 @@ macro_rules! impl_widget_arr {
|
||||
)
|
||||
}
|
||||
}
|
||||
impl<Rsc: UiRsc, $($W: WidgetLike<Rsc, $Tag>,$Tag,)*> IntoWidgetVec<Rsc, ($($Tag,)*), ArrTag> for ($($W,)*) {
|
||||
fn into_vec(self, rsc: &mut Rsc) -> Vec<StrongWidget> {
|
||||
#[allow(non_snake_case)]
|
||||
let ($($W,)*) = self;
|
||||
vec![$($W.add(rsc).upgrade(rsc),)*]
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
+14
-1
@@ -1,4 +1,4 @@
|
||||
use crate::{Axis, AxisT, Len, Painter, SizeCtx};
|
||||
use crate::{Axis, AxisT, Len, Painter, SizeCtx, UiRsc};
|
||||
use std::any::Any;
|
||||
|
||||
mod data;
|
||||
@@ -85,3 +85,16 @@ impl<State, F: FnOnce(&mut State) -> Option<StrongWidget>> WidgetOption<State> f
|
||||
self(state)
|
||||
}
|
||||
}
|
||||
|
||||
pub trait IntoWidgetVec<Rsc, WTag, GTag> {
|
||||
fn into_vec(self, rsc: &mut Rsc) -> Vec<StrongWidget>;
|
||||
}
|
||||
|
||||
impl<Rsc: UiRsc, I: IntoIterator, Tag> IntoWidgetVec<Rsc, Tag, IterTag> for I
|
||||
where
|
||||
I::Item: WidgetLike<Rsc, Tag>,
|
||||
{
|
||||
fn into_vec(self, rsc: &mut Rsc) -> Vec<StrongWidget> {
|
||||
self.into_iter().map(|w| w.add_strong(rsc).any()).collect()
|
||||
}
|
||||
}
|
||||
@@ -62,3 +62,4 @@ impl<Rsc: UiRsc, V: WidgetView> WidgetLike<Rsc, ViewTag> for V {
|
||||
}
|
||||
|
||||
pub struct ArrTag;
|
||||
pub struct IterTag;
|
||||
Reference in new issue
Block a user