// Copyright © SixtyFPS GmbH // SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0 #![doc = include_str!("README.md")] #![doc(html_logo_url = "https://slint.dev/logo/slint-logo-square-light.svg")] #[cfg(target_os = "linux")] mod fullscreenwindowadapter; #[cfg(target_os = "linux")] use std::os::fd::OwnedFd; #[cfg(target_os = "linux")] type DeviceOpener<'a> = dyn Fn(&std::path::Path) -> Result, i_slint_core::platform::PlatformError> + 'a; #[cfg(all(target_os = "linux", feature = "drm"))] mod drmoutput; #[cfg(target_os = "linux")] mod display; #[cfg(target_os = "linux")] mod renderer { use i_slint_core::platform::PlatformError; use crate::fullscreenwindowadapter::FullscreenRenderer; #[cfg(any(feature = "renderer-skia-opengl", feature = "renderer-skia-vulkan"))] pub mod skia; #[cfg(feature = "renderer-femtovg")] pub mod femtovg; #[cfg(feature = "renderer-software")] pub mod sw; pub fn try_skia_then_femtovg_then_software( _device_opener: &crate::DeviceOpener, ) -> Result, PlatformError> { #[allow(unused)] type FactoryFn = fn(&crate::DeviceOpener) -> Result, PlatformError>; let renderers = [ #[cfg(any(feature = "renderer-skia-opengl", feature = "renderer-skia-vulkan"))] ( "Skia", skia::SkiaRendererAdapter::new_try_vulkan_then_opengl_then_software as FactoryFn, ), #[cfg(feature = "renderer-femtovg")] ("FemtoVG", femtovg::FemtoVGRendererAdapter::new as FactoryFn), #[cfg(feature = "renderer-software")] ("Software", sw::SoftwareRendererAdapter::new as FactoryFn), ("", |_| Err(PlatformError::NoPlatform)), ]; let mut renderer_errors: Vec = Vec::new(); for (name, factory) in renderers { match factory(_device_opener) { Ok(renderer) => return Ok(renderer), Err(err) => { renderer_errors.push(if !name.is_empty() { format!("Error from {} renderer: {}", name, err).into() } else { "No renderers configured.".into() }); } } } Err(PlatformError::Other(format!( "Could not initialize any renderer for LinuxKMS backend.\n{}", renderer_errors.join("\n") ))) } } #[cfg(target_os = "linux")] mod calloop_backend; #[cfg(target_os = "linux")] pub use calloop_backend::*; #[cfg(not(target_os = "linux"))] mod noop_backend; #[cfg(not(target_os = "linux"))] pub use noop_backend::*; #[doc(hidden)] pub type NativeWidgets = (); #[doc(hidden)] pub type NativeGlobals = (); #[doc(hidden)] pub const HAS_NATIVE_STYLE: bool = false; #[doc(hidden)] pub mod native_widgets {}