25 lines
514 B
Rust
25 lines
514 B
Rust
use std::marker::Unsize;
|
|
|
|
use crate::{IdLike, WeakWidget, Widget};
|
|
|
|
pub trait WidgetView {
|
|
type Widget: Widget + ?Sized + Unsize<dyn Widget>;
|
|
fn root(&self) -> WeakWidget<Self::Widget>;
|
|
}
|
|
|
|
pub trait HasWidget {
|
|
type Widget: Widget + ?Sized + Unsize<dyn Widget>;
|
|
}
|
|
|
|
impl<W: Widget + Unsize<dyn Widget> + ?Sized> HasWidget for WeakWidget<W> {
|
|
type Widget = W;
|
|
}
|
|
|
|
impl<WV: WidgetView> IdLike for WV {
|
|
type Widget = WV::Widget;
|
|
|
|
fn id(&self) -> super::WidgetId {
|
|
self.root().id
|
|
}
|
|
}
|