Skip to main content

reovim_driver_layout/
lib.rs

1#![cfg_attr(coverage_nightly, allow(unused_features))]
2#![cfg_attr(coverage_nightly, feature(coverage_attribute))]
3//! Window layout driver for reovim.
4//!
5//! Linux equivalent: window compositor mechanism in `drivers/video/`
6//!
7//! # Architecture
8//!
9//! This crate defines trait contracts for a Hyprland-inspired nested
10//! compositor window management system. Each layer is a self-contained
11//! mini-compositor with three zones (Tiled, Float, Overlay).
12//!
13//! ```text
14//! RootCompositor (manages layers)
15//! │
16//! ├── Layer 1 ("main", z=100)
17//! │   └── WindowLayerCompositor
18//! │       ├── Tiled Zone  (binary split tree)
19//! │       ├── Float Zone  (free positioning)
20//! │       └── Overlay Zone (popups, menus)
21//! │
22//! └── Layer 2 ("term", z=200)
23//!     └── WindowLayerCompositor
24//!         └── ...
25//! ```
26//!
27//! # Mechanism vs Policy
28//!
29//! - **This crate (Mechanism)**: Defines WHAT can be done via traits
30//! - **server/modules/layout/ (Policy)**: Implements HOW things behave
31
32mod compositor;
33mod compositor_key;
34mod compositor_registry;
35mod floating;
36mod layer;
37mod overlay;
38mod tiled;
39mod view;
40
41// Re-export all public types
42
43// Layer types
44pub use layer::{
45    Anchor, CLICK_THROUGH_THRESHOLD, Layer, LayerConfig, LayerId, OverlayConstraints,
46    WindowPlacement, ZOrder, Zone,
47};
48
49// Compositor traits and types
50pub use compositor::{CompositeResult, RootCompositor, WindowError, WindowLayerCompositor};
51
52// Zone-specific traits
53pub use {
54    floating::{FloatingLayer, FloatingWindow},
55    overlay::{OverlayLayer, OverlayWindow},
56    tiled::{MIN_WINDOW_HEIGHT, MIN_WINDOW_WIDTH, TiledLayer},
57};
58
59// View management and index types
60pub use view::{ColIndex, LineIndex, Position, View, ViewManager};
61
62// Typed key and registry (Epic #417 - UniqueProvider abstraction)
63pub use {compositor_key::CompositorKey, compositor_registry::CompositorRegistry};
64
65// Re-export geometry and direction types from common client model
66pub use reovim_client_model::{Direction, Rect, Size, SplitDirection};
67
68// Re-export kernel ID types
69pub use reovim_kernel::api::v1::{BufferId, WindowId};
70
71/// Type alias for backward compatibility.
72///
73/// Layout code uses `NavigateDirection`, common model uses `Direction`.
74/// They have the same semantics (Up, Down, Left, Right).
75pub type NavigateDirection = Direction;