2021-12-15 23:23:49 +01:00
|
|
|
// SPDX-License-Identifier: GPL-3.0-only
|
|
|
|
|
|
|
|
|
|
use crate::state::State;
|
|
|
|
|
use anyhow::Result;
|
|
|
|
|
use smithay::reexports::calloop::EventLoop;
|
|
|
|
|
|
2022-02-04 21:04:17 +01:00
|
|
|
pub mod render;
|
|
|
|
|
|
2022-01-20 19:51:46 +01:00
|
|
|
pub mod kms;
|
2022-01-18 19:42:04 +01:00
|
|
|
pub mod winit;
|
2022-01-18 19:42:56 +01:00
|
|
|
pub mod x11;
|
2021-12-15 23:23:49 +01:00
|
|
|
// TODO
|
|
|
|
|
// pub mod wayland; // tbd in smithay
|
|
|
|
|
|
2022-04-26 12:28:50 +02:00
|
|
|
pub fn init_backend_auto(event_loop: &mut EventLoop<'static, State>, state: &mut State) -> Result<()> {
|
2022-01-18 19:42:04 +01:00
|
|
|
match std::env::var("COSMIC_BACKEND") {
|
|
|
|
|
Ok(x) if x == "x11" => x11::init_backend(event_loop, state),
|
|
|
|
|
Ok(x) if x == "winit" => winit::init_backend(event_loop, state),
|
2022-01-20 19:51:46 +01:00
|
|
|
Ok(x) if x == "kms" => kms::init_backend(event_loop, state),
|
2022-01-18 19:42:04 +01:00
|
|
|
Ok(_) => unimplemented!("There is no backend with this identifier"),
|
2022-01-18 19:42:56 +01:00
|
|
|
Err(_) => {
|
|
|
|
|
if std::env::var_os("DISPLAY").is_some()
|
|
|
|
|
|| std::env::var_os("WAYLAND_DISPLAY").is_some()
|
|
|
|
|
{
|
|
|
|
|
match x11::init_backend(event_loop, state) {
|
|
|
|
|
Ok(_) => Ok(()),
|
|
|
|
|
Err(err) => {
|
|
|
|
|
slog_scope::warn!("X11 Backend failed with error: {}", err);
|
|
|
|
|
slog_scope::info!("Falling back to winit backend.");
|
|
|
|
|
winit::init_backend(event_loop, state)
|
|
|
|
|
}
|
2022-01-18 19:42:04 +01:00
|
|
|
}
|
2022-01-18 19:42:56 +01:00
|
|
|
} else {
|
2022-01-20 19:51:46 +01:00
|
|
|
kms::init_backend(event_loop, state)
|
2022-01-18 19:42:04 +01:00
|
|
|
}
|
|
|
|
|
}
|
2021-12-15 23:23:49 +01:00
|
|
|
}
|
|
|
|
|
}
|