Game launcher (wip), wgui refactor

[skip ci]
This commit is contained in:
Aleksander
2025-12-26 23:22:17 +01:00
parent e0c51492b8
commit d70b51184c
16 changed files with 379 additions and 93 deletions
+8 -3
View File
@@ -14,6 +14,7 @@ use crate::{
widget::{self, EventParams, EventResult, WidgetObj, WidgetState, WidgetStateFlags, div::WidgetDiv},
};
use anyhow::Context;
use glam::{Vec2, vec2};
use slotmap::{HopSlotMap, SecondaryMap, new_key_type};
use taffy::{NodeId, TaffyTree, TraversePartialTree};
@@ -31,10 +32,14 @@ impl Widget {
Self(Rc::new(RefCell::new(widget_state)))
}
pub fn get_as_mut<T: 'static>(&self) -> Option<RefMut<'_, T>> {
pub fn get_as<T: 'static>(&self) -> Option<RefMut<'_, T>> {
RefMut::filter_map(self.0.borrow_mut(), |w| w.obj.get_as_mut::<T>()).ok()
}
pub fn cast<T: 'static>(&self) -> anyhow::Result<RefMut<'_, T>> {
self.get_as().context("Widget cast failed")
}
pub fn downgrade(&self) -> WeakWidget {
WeakWidget(Rc::downgrade(&self.0))
}
@@ -65,7 +70,7 @@ impl WidgetMap {
}
pub fn get_as<T: 'static>(&self, handle: WidgetID) -> Option<RefMut<'_, T>> {
self.0.get(handle)?.get_as_mut::<T>()
self.0.get(handle)?.get_as::<T>()
}
pub fn get(&self, handle: WidgetID) -> Option<&Widget> {
@@ -97,7 +102,7 @@ impl WidgetMap {
return;
};
if let Some(mut casted) = widget.get_as_mut::<WIDGET>() {
if let Some(mut casted) = widget.get_as::<WIDGET>() {
func(&mut casted);
}
}