use super::*; use crate::{UiRegion, Vec2, WidgetArrLike, WidgetFnRet, WidgetLike}; pub trait CoreWidget { fn pad(self, padding: impl Into) -> WidgetFnRet!(Regioned, Ctx); fn center(self, size: impl Into) -> WidgetFnRet!(Regioned, Ctx); fn region(self, region: UiRegion) -> WidgetFnRet!(Regioned, Ctx); } impl, Ctx: 'static, Tag> CoreWidget for W { fn pad(self, padding: impl Into) -> WidgetFnRet!(Regioned, Ctx) { |ui| Regioned { region: padding.into().region(), inner: self.add(ui).erase_type(), } } fn center(self, size: impl Into) -> WidgetFnRet!(Regioned, Ctx) { |ui| Regioned { region: UiRegion::center().size(size.into()), inner: self.add(ui).erase_type(), } } fn region(self, region: UiRegion) -> WidgetFnRet!(Regioned, Ctx) { move |ui| Regioned { region, inner: self.add(ui).erase_type(), } } } pub trait CoreWidgetArr { fn span(self, dir: Dir, lengths: [impl Into; LEN]) -> WidgetFnRet!(Span, Ctx); fn stack(self) -> WidgetFnRet!(Stack, Ctx); } impl, Ctx: 'static, Tag> CoreWidgetArr for Wa { fn span(self, dir: Dir, lengths: [impl Into; LEN]) -> WidgetFnRet!(Span, Ctx) { let lengths = lengths.map(Into::into); move |ui| Span { dir, children: self.ui(ui).arr.into_iter().zip(lengths).collect(), } } fn stack(self) -> WidgetFnRet!(Stack, Ctx) { move |ui| Stack { children: self.ui(ui).arr.to_vec(), } } }