Pass a WindowContext
in request_measured_layout
Co-Authored-By: Nathan Sobo <nathan@zed.dev>
This commit is contained in:
parent
d9b8c07b1e
commit
5243401afa
5 changed files with 42 additions and 26 deletions
|
@ -209,7 +209,7 @@ pub struct Window {
|
|||
sprite_atlas: Arc<dyn PlatformAtlas>,
|
||||
rem_size: Pixels,
|
||||
viewport_size: Size<Pixels>,
|
||||
pub(crate) layout_engine: TaffyLayoutEngine,
|
||||
layout_engine: Option<TaffyLayoutEngine>,
|
||||
pub(crate) root_view: Option<AnyView>,
|
||||
pub(crate) element_id_stack: GlobalElementId,
|
||||
pub(crate) previous_frame: Frame,
|
||||
|
@ -327,7 +327,7 @@ impl Window {
|
|||
sprite_atlas,
|
||||
rem_size: px(16.),
|
||||
viewport_size: content_size,
|
||||
layout_engine: TaffyLayoutEngine::new(),
|
||||
layout_engine: Some(TaffyLayoutEngine::new()),
|
||||
root_view: None,
|
||||
element_id_stack: GlobalElementId::default(),
|
||||
previous_frame: Frame::new(DispatchTree::new(cx.keymap.clone(), cx.actions.clone())),
|
||||
|
@ -606,9 +606,11 @@ impl<'a> WindowContext<'a> {
|
|||
self.app.layout_id_buffer.extend(children.into_iter());
|
||||
let rem_size = self.rem_size();
|
||||
|
||||
self.window
|
||||
.layout_engine
|
||||
.request_layout(style, rem_size, &self.app.layout_id_buffer)
|
||||
self.window.layout_engine.as_mut().unwrap().request_layout(
|
||||
style,
|
||||
rem_size,
|
||||
&self.app.layout_id_buffer,
|
||||
)
|
||||
}
|
||||
|
||||
/// Add a node to the layout tree for the current frame. Instead of taking a `Style` and children,
|
||||
|
@ -618,7 +620,8 @@ impl<'a> WindowContext<'a> {
|
|||
/// The given closure is invoked at layout time with the known dimensions and available space and
|
||||
/// returns a `Size`.
|
||||
pub fn request_measured_layout<
|
||||
F: FnMut(Size<Option<Pixels>>, Size<AvailableSpace>) -> Size<Pixels> + 'static,
|
||||
F: FnMut(Size<Option<Pixels>>, Size<AvailableSpace>, &mut WindowContext) -> Size<Pixels>
|
||||
+ 'static,
|
||||
>(
|
||||
&mut self,
|
||||
style: Style,
|
||||
|
@ -627,13 +630,15 @@ impl<'a> WindowContext<'a> {
|
|||
let rem_size = self.rem_size();
|
||||
self.window
|
||||
.layout_engine
|
||||
.as_mut()
|
||||
.unwrap()
|
||||
.request_measured_layout(style, rem_size, measure)
|
||||
}
|
||||
|
||||
pub fn compute_layout(&mut self, layout_id: LayoutId, available_space: Size<AvailableSpace>) {
|
||||
self.window
|
||||
.layout_engine
|
||||
.compute_layout(layout_id, available_space)
|
||||
let mut layout_engine = self.window.layout_engine.take().unwrap();
|
||||
layout_engine.compute_layout(layout_id, available_space, self);
|
||||
self.window.layout_engine = Some(layout_engine);
|
||||
}
|
||||
|
||||
/// Obtain the bounds computed for the given LayoutId relative to the window. This method should not
|
||||
|
@ -643,6 +648,8 @@ impl<'a> WindowContext<'a> {
|
|||
let mut bounds = self
|
||||
.window
|
||||
.layout_engine
|
||||
.as_mut()
|
||||
.unwrap()
|
||||
.layout_bounds(layout_id)
|
||||
.map(Into::into);
|
||||
bounds.origin += self.element_offset();
|
||||
|
@ -1189,7 +1196,7 @@ impl<'a> WindowContext<'a> {
|
|||
self.text_system().start_frame();
|
||||
|
||||
let window = &mut *self.window;
|
||||
window.layout_engine.clear();
|
||||
window.layout_engine.as_mut().unwrap().clear();
|
||||
|
||||
mem::swap(&mut window.previous_frame, &mut window.current_frame);
|
||||
let frame = &mut window.current_frame;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue