measure root node of layout

This commit is contained in:
galister
2025-06-20 01:19:28 +09:00
parent 44a9faac14
commit 6a77b302c9
3 changed files with 15 additions and 10 deletions

View File

@@ -11,7 +11,7 @@ use crate::{
widget::{self, EventParams, WidgetState, div::Div}, widget::{self, EventParams, WidgetState, div::Div},
}; };
use glam::Vec2; use glam::{Vec2, vec2};
use slotmap::HopSlotMap; use slotmap::HopSlotMap;
use taffy::{TaffyTree, TraversePartialTree}; use taffy::{TaffyTree, TraversePartialTree};
@@ -37,6 +37,7 @@ pub struct Layout {
pub root_node: taffy::NodeId, pub root_node: taffy::NodeId,
pub prev_size: Vec2, pub prev_size: Vec2,
pub content_size: Vec2,
pub needs_redraw: bool, pub needs_redraw: bool,
@@ -227,7 +228,7 @@ impl Layout {
None, // no parent None, // no parent
Div::create()?, Div::create()?,
taffy::Style { taffy::Style {
size: taffy::Size::percent(1.0), size: taffy::Size::auto(),
..Default::default() ..Default::default()
}, },
)?; )?;
@@ -235,6 +236,7 @@ impl Layout {
Ok(Self { Ok(Self {
tree, tree,
prev_size: Vec2::default(), prev_size: Vec2::default(),
content_size: Vec2::default(),
root_node, root_node,
root_widget, root_widget,
widget_node_map, widget_node_map,
@@ -293,6 +295,9 @@ impl Layout {
} }
}, },
)?; )?;
let root_size = self.tree.layout(self.root_node).unwrap().size;
self.content_size = vec2(root_size.width, root_size.height);
log::error!("ContentSize: {:?}", self.content_size);
} }
Ok(()) Ok(())
} }

View File

@@ -172,8 +172,8 @@ impl OverlayRenderer for GuiPanel {
fn frame_meta(&mut self) -> Option<FrameMeta> { fn frame_meta(&mut self) -> Option<FrameMeta> {
Some(FrameMeta { Some(FrameMeta {
extent: [ extent: [
self.max_size.max(self.layout.prev_size.x as _), self.max_size.max(self.layout.content_size.x as _),
self.max_size.max(self.layout.prev_size.y as _), self.max_size.max(self.layout.content_size.y as _),
1, 1,
], ],
..Default::default() ..Default::default()

View File

@@ -51,11 +51,6 @@ where
processes: vec![], processes: vec![],
})); }));
let size = vec2(
layout.row_size * PIXELS_PER_UNIT,
(layout.main_layout.len() as f32) * PIXELS_PER_UNIT,
);
let mut panel = GuiPanel::new_blank(app, 2048)?; let mut panel = GuiPanel::new_blank(app, 2048)?;
let (background, _) = panel.layout.add_child( let (background, _) = panel.layout.add_child(
@@ -217,8 +212,13 @@ where
} }
} }
panel.layout.update(vec2(2048., 2048.), 0.0)?;
let interaction_transform = Affine2::from_translation(vec2(0.5, 0.5)) let interaction_transform = Affine2::from_translation(vec2(0.5, 0.5))
* Affine2::from_scale(vec2(1., -size.x as f32 / size.y as f32)); * Affine2::from_scale(vec2(
1.,
-panel.layout.content_size.x / panel.layout.content_size.y,
));
let width = layout.row_size * 0.05 * app.session.config.keyboard_scale; let width = layout.row_size * 0.05 * app.session.config.keyboard_scale;