don't crash on missing resource base path

This commit is contained in:
hodasemi 2025-02-28 06:48:19 +01:00
parent 5ed9a42f8e
commit f384959fc6
2 changed files with 30 additions and 11 deletions

View file

@ -404,7 +404,10 @@ impl Button {
.clone() .clone()
.map(|icon| { .map(|icon| {
Image::from_file(AssetPath::from(( Image::from_file(AssetPath::from((
gui_handler.resource_base_path().full_path(), gui_handler
.resource_base_path()
.ok_or(anyhow!("resource base path not set!"))?
.full_path(),
icon, icon,
)))? )))?
.attach_sampler(Sampler::nearest_sampler().build(gui_handler.device())?) .attach_sampler(Sampler::nearest_sampler().build(gui_handler.device())?)

View file

@ -1,5 +1,5 @@
use crate::prelude::*; use crate::prelude::*;
use anyhow::Result; use anyhow::{Result, anyhow};
use assetpath::AssetPath; use assetpath::AssetPath;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use utilities::{impl_reprc, prelude::*}; use utilities::{impl_reprc, prelude::*};
@ -189,7 +189,7 @@ pub struct GuiHandler {
width: AtomicU32, width: AtomicU32,
height: AtomicU32, height: AtomicU32,
resource_base_path: AssetPath, resource_base_path: Option<AssetPath>,
top_ui: RwLock<Option<Arc<dyn TopGui>>>, top_ui: RwLock<Option<Arc<dyn TopGui>>>,
tooltip_ui: RwLock<Option<Arc<dyn TopGui>>>, tooltip_ui: RwLock<Option<Arc<dyn TopGui>>>,
@ -330,9 +330,7 @@ impl GuiHandler {
hover_sound hover_sound
}), }),
resource_base_path: gui_handler_create_info resource_base_path: gui_handler_create_info.resource_directory,
.resource_directory
.expect("missing resource directory"),
top_ui: RwLock::new(None), top_ui: RwLock::new(None),
tooltip_ui: RwLock::new(None), tooltip_ui: RwLock::new(None),
@ -437,7 +435,13 @@ impl GuiHandler {
Some(image) => Ok(image), Some(image) => Ok(image),
None => { None => {
if !path.has_prefix() { if !path.has_prefix() {
path.set_prefix(&self.resource_base_path().full_path()); path.set_prefix(
&self
.resource_base_path
.as_ref()
.ok_or(anyhow!("resource base path not set!"))?
.full_path(),
);
} }
let image = Image::from_file(path)? let image = Image::from_file(path)?
@ -452,7 +456,13 @@ impl GuiHandler {
}, },
None => { None => {
if !path.has_prefix() { if !path.has_prefix() {
path.set_prefix(&self.resource_base_path().full_path()); path.set_prefix(
&self
.resource_base_path
.as_ref()
.ok_or(anyhow!("resource base path not set!"))?
.full_path(),
);
} }
let image = Image::from_file(path.clone())? let image = Image::from_file(path.clone())?
@ -499,7 +509,13 @@ impl GuiHandler {
pub(crate) fn displayable_image_from_path(&self, mut path: AssetPath) -> Result<Arc<Image>> { pub(crate) fn displayable_image_from_path(&self, mut path: AssetPath) -> Result<Arc<Image>> {
if !path.has_prefix() { if !path.has_prefix() {
path.set_prefix(&self.resource_base_path.full_path()); path.set_prefix(
&self
.resource_base_path
.as_ref()
.ok_or(anyhow!("resource base path not set!"))?
.full_path(),
);
} }
if self.internal_textures.read().unwrap().contains_key(&path) { if self.internal_textures.read().unwrap().contains_key(&path) {
@ -571,8 +587,8 @@ impl GuiHandler {
*self.ortho.read().unwrap() *self.ortho.read().unwrap()
} }
pub(crate) fn resource_base_path(&self) -> &AssetPath { pub(crate) fn resource_base_path(&self) -> Option<&AssetPath> {
&self.resource_base_path self.resource_base_path.as_ref()
} }
#[cfg(feature = "audio")] #[cfg(feature = "audio")]