Add bounds check for child_at
This commit is contained in:
parent
70e54664e9
commit
74355aac21
1 changed files with 22 additions and 6 deletions
|
@ -3,11 +3,9 @@ use anyhow::Result;
|
||||||
|
|
||||||
use crate::builder::validator::gridinfo::GridInfo;
|
use crate::builder::validator::gridinfo::GridInfo;
|
||||||
|
|
||||||
use std::{
|
use std::sync::{
|
||||||
sync::{
|
atomic::{AtomicBool, AtomicU32, Ordering::SeqCst},
|
||||||
atomic::{AtomicBool, AtomicU32, Ordering::SeqCst},
|
Arc, RwLock, RwLockReadGuard,
|
||||||
Arc, RwLock, RwLockReadGuard,
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
use std::{ops::Deref, sync::Weak};
|
use std::{ops::Deref, sync::Weak};
|
||||||
|
|
||||||
|
@ -68,7 +66,9 @@ impl ChildState {
|
||||||
fn get(&self) -> Option<(Arc<dyn GuiElementTraits>, u32, u32)> {
|
fn get(&self) -> Option<(Arc<dyn GuiElementTraits>, u32, u32)> {
|
||||||
match self {
|
match self {
|
||||||
ChildState::Some { child, x, y } => Some((child.clone(), *x, *y)),
|
ChildState::Some { child, x, y } => Some((child.clone(), *x, *y)),
|
||||||
ChildState::Extend { weak_child, x, y } => weak_child.upgrade().map(|child| (child, *x, *y)),
|
ChildState::Extend { weak_child, x, y } => {
|
||||||
|
weak_child.upgrade().map(|child| (child, *x, *y))
|
||||||
|
}
|
||||||
ChildState::None => None,
|
ChildState::None => None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -177,6 +177,22 @@ impl Grid {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn child_at(&self, x: usize, y: usize) -> Result<Option<Arc<dyn GuiElementTraits>>> {
|
pub fn child_at(&self, x: usize, y: usize) -> Result<Option<Arc<dyn GuiElementTraits>>> {
|
||||||
|
if x >= self.dim_x {
|
||||||
|
return Err(anyhow::anyhow!(
|
||||||
|
"Tried to access Grid at {} while only being {} wide",
|
||||||
|
x,
|
||||||
|
self.dim_x
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
if y >= self.dim_y {
|
||||||
|
return Err(anyhow::anyhow!(
|
||||||
|
"Tried to access Grid at {} while only being {} tall",
|
||||||
|
y,
|
||||||
|
self.dim_y
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
Ok(self.children.read().unwrap()[x][y].map(|c| c.clone()))
|
Ok(self.children.read().unwrap()[x][y].map(|c| c.clone()))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue