use crate::{BoxedMeasureFn, EngineLayoutStyle, LayoutEngine, LayoutId, MeasureContext};
use gpui_types::{AvailableSpace, Bounds, Pixels, Size};
use std::cell::RefCell;
pub struct FrameSession {
layout_engine: RefCell<Box<dyn LayoutEngine>>,
}
impl FrameSession {
pub fn new(layout_engine: Box<dyn LayoutEngine>) -> Self {
Self {
layout_engine: RefCell::new(layout_engine),
}
}
pub fn clear(&self) {
self.layout_engine.borrow_mut().clear();
}
pub fn request_layout(
&self,
style: &EngineLayoutStyle,
rem_size: Pixels,
scale_factor: f32,
children: &[LayoutId],
) -> LayoutId {
self.layout_engine
.borrow_mut()
.request_layout(style, rem_size, scale_factor, children)
}
pub fn request_measured_layout(
&self,
style: &EngineLayoutStyle,
rem_size: Pixels,
scale_factor: f32,
measure: BoxedMeasureFn,
) -> LayoutId {
self.layout_engine.borrow_mut().request_measured_layout(
style,
rem_size,
scale_factor,
measure,
)
}
pub fn stretch_auto_size_to_fill(&self, id: LayoutId, size: Size<Pixels>, scale_factor: f32) {
self.layout_engine
.borrow_mut()
.stretch_auto_size_to_fill(id, size, scale_factor)
}
pub fn compute_layout(
&self,
id: LayoutId,
available_space: Size<AvailableSpace>,
scale_factor: f32,
context: &mut dyn MeasureContext,
) {
self.layout_engine
.borrow_mut()
.compute_layout(id, available_space, scale_factor, context)
}
pub fn layout_bounds(&self, id: LayoutId, scale_factor: f32) -> Bounds<Pixels> {
self.layout_engine
.borrow_mut()
.layout_bounds(id, scale_factor)
}
}