#[allow(unused)] use super::Widget;
use super::WidgetId;
use crate::geom::Rect;
#[cfg(feature = "winit")] pub use winit::window::Icon;
#[cfg(not(feature = "winit"))]
#[derive(Clone)]
pub struct Icon;
#[cfg(not(feature = "winit"))]
impl Icon {
pub fn from_rgba(
rgba: Vec<u8>,
width: u32,
height: u32,
) -> Result<Self, impl std::error::Error> {
let _ = (rgba, width, height);
Result::<Self, std::convert::Infallible>::Ok(Icon)
}
}
#[derive(Default, Debug)]
pub struct CoreData {
pub rect: Rect,
pub id: WidgetId,
#[cfg_attr(not(feature = "internal_doc"), doc(hidden))]
#[cfg_attr(doc_cfg, doc(cfg(internal_doc)))]
#[cfg(debug_assertions)]
pub status: WidgetStatus,
}
impl Clone for CoreData {
fn clone(&self) -> Self {
CoreData {
rect: self.rect,
..CoreData::default()
}
}
}
#[cfg_attr(not(feature = "internal_doc"), doc(hidden))]
#[cfg_attr(doc_cfg, doc(cfg(internal_doc)))]
#[cfg(debug_assertions)]
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, PartialOrd, Ord)]
pub enum WidgetStatus {
#[default]
New,
Configured,
SizeRulesX,
SizeRulesY,
SetRect,
}
#[cfg(debug_assertions)]
impl WidgetStatus {
fn require(&self, id: &WidgetId, expected: Self) {
if *self < expected {
panic!("WidgetStatus of {id}: require {expected:?}, found {self:?}");
}
}
pub fn configure(&mut self, _id: &WidgetId) {
*self = (*self).max(WidgetStatus::Configured);
}
pub fn update(&self, id: &WidgetId) {
self.require(id, WidgetStatus::Configured);
}
pub fn size_rules(&mut self, id: &WidgetId, axis: crate::layout::AxisInfo) {
if axis.is_horizontal() {
self.require(id, WidgetStatus::Configured);
*self = WidgetStatus::SizeRulesX;
} else {
self.require(id, WidgetStatus::SizeRulesX);
*self = WidgetStatus::SizeRulesY;
}
}
pub fn set_rect(&mut self, id: &WidgetId) {
self.require(id, WidgetStatus::SizeRulesY);
*self = WidgetStatus::SetRect;
}
pub fn require_rect(&self, id: &WidgetId) {
self.require(id, WidgetStatus::SetRect);
}
}