Game launcher (wip), wgui refactor
[skip ci]
This commit is contained in:
@@ -340,6 +340,7 @@ fn register_event_mouse_press(state: Rc<RefCell<State>>, listeners: &mut EventLi
|
||||
if state.hovered {
|
||||
state.down = true;
|
||||
state.last_pressed = Instant::now();
|
||||
state.active_tooltip = None;
|
||||
Ok(EventResult::Consumed)
|
||||
} else {
|
||||
Ok(EventResult::Pass)
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ mod widget_rectangle;
|
||||
mod widget_sprite;
|
||||
|
||||
use crate::{
|
||||
assets::{normalize_path, AssetPath, AssetPathOwned},
|
||||
assets::{AssetPath, AssetPathOwned, normalize_path},
|
||||
components::{Component, ComponentWeak},
|
||||
drawing::{self},
|
||||
globals::WguiGlobals,
|
||||
@@ -183,7 +183,7 @@ impl Fetchable for ParserData {
|
||||
.ok_or_else(|| anyhow::anyhow!("fetch_widget_as({id}): widget not found"))?;
|
||||
|
||||
let casted = widget
|
||||
.get_as_mut::<T>()
|
||||
.get_as::<T>()
|
||||
.ok_or_else(|| anyhow::anyhow!("fetch_widget_as({id}): failed to cast"))?;
|
||||
|
||||
Ok(casted)
|
||||
@@ -1002,7 +1002,7 @@ impl CustomAttribsInfo<'_> {
|
||||
}
|
||||
|
||||
pub fn get_widget_as<T: 'static>(&self) -> Option<RefMut<'_, T>> {
|
||||
self.widgets.get(self.widget_id)?.get_as_mut::<T>()
|
||||
self.widgets.get(self.widget_id)?.get_as::<T>()
|
||||
}
|
||||
|
||||
pub fn get_value(&self, attrib_name: &str) -> Option<Rc<str>> {
|
||||
|
||||
Reference in New Issue
Block a user