Fixed area rendering and merging issues

This commit is contained in:
2025-11-01 12:40:30 +01:00
parent fd8e466830
commit dbb8a0e01a
4 changed files with 61 additions and 53 deletions
+11 -5
View File
@@ -37,19 +37,25 @@ impl Element for Div {
parent_scope: &mut crate::render_scope::RenderScope,
render_context: &crate::render_scope::RenderContext,
) {
let mut transform = parent_scope.get_transform().clone();
let mut transform2 = transform.clone();
(transform2.width, transform2.height) = parent_scope.get_size_or_parent();
let mut transform = {
let (width, height) = parent_scope.get_size_or_parent();
let mut t = parent_scope.get_transform().clone();
t.width = width;
t.height = height;
t.transform_parent(parent_scope.get_parent_transform());
t
};
let mut scope = crate::render_scope::RenderScope::new();
scope.set_parent_transform(transform2.clone());
scope.set_parent_transform(transform.clone());
transform.height = 0;
let mut renderer = DivRenderer(&mut transform);
for widget in &self.children {
scope.render_widget(&mut renderer, render_context.get_context(), widget);
}
self.render = (transform2.width, transform2.height);
self.render = (transform.width, transform.height);
}
fn draw_child(&mut self, element: &Arc<Widget>) {
+20 -10
View File
@@ -56,12 +56,17 @@ impl Element for FlexRow {
parent_scope: &mut crate::render_scope::RenderScope,
render_context: &crate::render_scope::RenderContext,
) {
let mut transform = parent_scope.get_transform().clone();
let mut transform2 = transform.clone();
(transform2.width, transform2.height) = parent_scope.get_size_or_parent();
let mut transform = {
let (width, height) = parent_scope.get_size_or_parent();
let mut t = parent_scope.get_transform().clone();
t.width = width;
t.height = height;
t.transform_parent(parent_scope.get_parent_transform());
t
};
let mut scope = crate::render_scope::RenderScope::new();
scope.set_parent_transform(transform2.clone());
scope.set_parent_transform(transform.clone());
let mut v = 0;
let mut renderer = RowRenderer(&mut transform, self.gap, &mut v);
@@ -69,7 +74,7 @@ impl Element for FlexRow {
scope.render_widget(&mut renderer, render_context.get_context(), widget);
}
self.render = (transform2.width, transform2.height);
self.render = (transform.width, transform.height);
}
fn draw_child(&mut self, element: &Arc<Widget>) {
@@ -110,12 +115,17 @@ impl Element for FlexCol {
parent_scope: &mut crate::render_scope::RenderScope,
render_context: &crate::render_scope::RenderContext,
) {
let mut transform = parent_scope.get_transform().clone();
let mut transform2 = transform.clone();
(transform2.width, transform2.height) = parent_scope.get_size_or_parent();
let mut transform = {
let (width, height) = parent_scope.get_size_or_parent();
let mut t = parent_scope.get_transform().clone();
t.width = width;
t.height = height;
t.transform_parent(parent_scope.get_parent_transform());
t
};
let mut scope = crate::render_scope::RenderScope::new();
scope.set_parent_transform(transform2.clone());
scope.set_parent_transform(transform.clone());
let mut v = 0;
let mut renderer = ColumnRenderer(&mut transform, self.gap, &mut v);
@@ -123,7 +133,7 @@ impl Element for FlexCol {
scope.render_widget(&mut renderer, render_context.get_context(), widget);
}
self.render = (transform2.width, transform2.height);
self.render = (transform.width, transform.height);
}
fn draw_child(&mut self, element: &Arc<Widget>) {
+13
View File
@@ -171,6 +171,19 @@ impl RawTransform {
py: 0,
}
}
pub fn transform_parent(&mut self, parent: &Self) {
let child_bottom = self.y + self.height;
let parent_bottom = parent.y + parent.height;
if child_bottom > parent_bottom {
if parent_bottom > self.y {
self.height = parent_bottom - self.y;
} else {
self.height = 0;
}
}
}
}
impl Dimension {