ignore out of bounds renders
This commit is contained in:
1 parent
a823b45af9
commit
57ef56511c
3 files changed
+16
-8
No files matched your search
@@ -158,12 +158,12 @@ fn render_vdom(
|
|||||||
let mut style=*taffy.style(root_node).unwrap();
|
let mut style=*taffy.style(root_node).unwrap();
|
||||||
style.size=Size {
|
style.size=Size {
|
||||||
width: Dimension::Points(width as f32),
|
width: Dimension::Points(width as f32),
|
||||||
height: Dimension::Points(height as f32),
|
height: Dimension::Points(height as f32),
|
||||||
};
|
};
|
||||||
taffy.set_style(root_node, style).unwrap();
|
taffy.set_style(root_node, style).unwrap();
|
||||||
|
|
||||||
let size =Size {
|
let size =Size {
|
||||||
width: AvailableSpace::Definite(width as f32),
|
width: AvailableSpace::Definite(width as f32),
|
||||||
height: AvailableSpace::Definite(height as f32),
|
height: AvailableSpace::Definite(height as f32),
|
||||||
};
|
};
|
||||||
taffy
|
taffy
|
||||||
|
|||||||
@@ -36,8 +36,15 @@ pub(crate) fn render_vnode(
|
|||||||
location.x += parent_location.x;
|
location.x += parent_location.x;
|
||||||
location.y += parent_location.y;
|
location.y += parent_location.y;
|
||||||
|
|
||||||
let Point { x, y } = location;
|
let Point { mut x, mut y } = location;
|
||||||
let Size { width, height } = size;
|
x = x.floor();
|
||||||
|
y = y.floor();
|
||||||
|
let Size {
|
||||||
|
mut width,
|
||||||
|
mut height,
|
||||||
|
} = size;
|
||||||
|
width = width.ceil();
|
||||||
|
height = height.ceil();
|
||||||
|
|
||||||
match &node.node_data.node_type {
|
match &node.node_data.node_type {
|
||||||
NodeType::Text { text } => {
|
NodeType::Text { text } => {
|
||||||
@@ -62,7 +69,7 @@ pub(crate) fn render_vnode(
|
|||||||
text,
|
text,
|
||||||
style: node.state.style.core,
|
style: node.state.style.core,
|
||||||
};
|
};
|
||||||
let area = Rect::new(x as u16, y as u16, *width as u16, *height as u16);
|
let area = Rect::new(x as u16, y as u16, width as u16, height as u16);
|
||||||
|
|
||||||
// the renderer will panic if a node is rendered out of range even if the size is zero
|
// the renderer will panic if a node is rendered out of range even if the size is zero
|
||||||
if area.width > 0 && area.height > 0 {
|
if area.width > 0 && area.height > 0 {
|
||||||
@@ -70,7 +77,7 @@ pub(crate) fn render_vnode(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
NodeType::Element { .. } => {
|
NodeType::Element { .. } => {
|
||||||
let area = Rect::new(x as u16, y as u16, *width as u16, *height as u16);
|
let area = Rect::new(x as u16, y as u16, width as u16, height as u16);
|
||||||
|
|
||||||
// the renderer will panic if a node is rendered out of range even if the size is zero
|
// the renderer will panic if a node is rendered out of range even if the size is zero
|
||||||
if area.width > 0 && area.height > 0 {
|
if area.width > 0 && area.height > 0 {
|
||||||
|
|||||||
@@ -22,8 +22,9 @@ impl<'a> RinkBuffer<'a> {
|
|||||||
|
|
||||||
pub fn set(&mut self, x: u16, y: u16, new: RinkCell) {
|
pub fn set(&mut self, x: u16, y: u16, new: RinkCell) {
|
||||||
let area = self.buf.area();
|
let area = self.buf.area();
|
||||||
if x < area.x || x > area.width || y < area.y || y > area.height {
|
if x < area.x || x >= area.width + area.x || y < area.y || y >= area.height + area.y {
|
||||||
panic!("({x}, {y}) is not in {area:?}");
|
// panic!("({x}, {y}) is not in {area:?}");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
let mut cell = self.buf.get_mut(x, y);
|
let mut cell = self.buf.get_mut(x, y);
|
||||||
cell.bg = convert(self.cfg.rendering_mode, new.bg.blend(cell.bg));
|
cell.bg = convert(self.cfg.rendering_mode, new.bg.blend(cell.bg));
|
||||||
|
|||||||
Reference in new issue
Block a user