mod adjacent;
mod breakpoint;
mod construct;
mod focus;
mod frame;
mod mutate;
mod overlay;
mod placement;
mod resolve;
mod sizing;
mod types;
pub use frame::Frame;
pub use placement::Placement;
pub use types::LayoutRuntime;
use std::sync::Arc;
use types::{strategy_ref, strategy_ref_mut};
use crate::breakpoint::BreakpointEntry;
use crate::node::{PanelId, PanelKey};
use crate::sequence::PanelSequence;
use crate::strategy::StrategyKind;
use crate::tree::LayoutTree;
use crate::viewport::ViewportState;
impl LayoutRuntime {
pub fn breakpoints(&self) -> Option<&[BreakpointEntry]> {
self.breakpoints.as_deref()
}
pub fn active_breakpoint_index(&self) -> usize {
self.active_bp_idx
}
pub fn tree(&self) -> &LayoutTree {
&self.tree
}
pub fn tree_mut(&mut self) -> &mut LayoutTree {
self.invalidate_topology();
&mut self.tree
}
pub fn viewport(&self) -> &ViewportState {
&self.viewport
}
pub fn strategy(&self) -> Option<&StrategyKind> {
strategy_ref(&self.strategy_source, &self.breakpoints, self.active_bp_idx)
}
pub(crate) fn strategy_mut(&mut self) -> Option<&mut StrategyKind> {
strategy_ref_mut(
&mut self.strategy_source,
&mut self.breakpoints,
self.active_bp_idx,
)
}
pub fn sequence(&self) -> &PanelSequence {
&self.sequence
}
pub fn focused(&self) -> Option<PanelId> {
self.viewport.focus
}
pub fn focused_kind(&self) -> Option<&str> {
let pid = self.viewport.focus?;
self.tree.panel_kind(pid).ok()
}
pub fn focused_kind_arc(&self) -> Option<Arc<str>> {
let pid = self.viewport.focus?;
self.tree.panel_kind_arc(pid).ok()
}
pub fn set_collect_boundaries(&mut self, collect: bool) {
self.resolve_scratch.collect_boundaries = collect;
}
pub fn panel_key(&self, pid: PanelId) -> Option<PanelKey> {
self.sequence
.index_of(pid)
.map(|idx| PanelKey::from_raw(idx as u32))
}
pub fn focused_panel_key(&self) -> Option<PanelKey> {
self.viewport.focus.and_then(|pid| self.panel_key(pid))
}
pub fn is_decoration_for(&self, pid: PanelId, content_pid: PanelId) -> bool {
let Some(meta) = self.tree.decoration_meta(pid) else {
return false;
};
let Ok(content_kind) = self.tree.panel_kind(content_pid) else {
return false;
};
meta.content_kind.as_ref() == content_kind
}
}