Skip to main content

dais_platform/
lib.rs

1//! Platform-specific monitor management backends for Dais.
2//!
3//! Each platform has a separate module compiled in via `cfg`.
4//! All implement the [`MonitorManager`] trait.
5
6// Re-export the trait for convenience.
7pub use dais_core::monitor::{MonitorInfo, MonitorManager};
8
9#[cfg(target_os = "windows")]
10pub mod windows;
11
12#[cfg(target_os = "macos")]
13pub mod macos;
14
15#[cfg(all(target_os = "linux", feature = "x11"))]
16pub mod linux_x11;
17
18/// Create a platform-appropriate [`MonitorManager`] implementation.
19#[cfg(target_os = "windows")]
20pub fn create_monitor_manager() -> impl MonitorManager {
21    windows::WindowsMonitorManager::new()
22}
23
24#[cfg(target_os = "macos")]
25pub fn create_monitor_manager() -> impl MonitorManager {
26    macos::MacOsMonitorManager::new()
27}
28
29#[cfg(all(target_os = "linux", feature = "x11"))]
30pub fn create_monitor_manager() -> impl MonitorManager {
31    linux_x11::X11MonitorManager::new()
32}
33
34#[cfg(all(target_os = "linux", not(feature = "x11")))]
35pub fn create_monitor_manager() -> impl MonitorManager {
36    LinuxFallbackMonitorManager
37}
38
39/// Returned when no Linux display backend feature is enabled.
40#[cfg(all(target_os = "linux", not(feature = "x11")))]
41struct LinuxFallbackMonitorManager;
42
43#[cfg(all(target_os = "linux", not(feature = "x11")))]
44impl MonitorManager for LinuxFallbackMonitorManager {
45    fn available_monitors(&self) -> Vec<MonitorInfo> {
46        tracing::warn!("no Linux display backend compiled in; build with --features x11");
47        Vec::new()
48    }
49}