use crate::{Backend, Color, Error, Renderer, Settings, Viewport}; use iced_graphics::window::compositor::{self, Information, SurfaceError}; use iced_graphics::Primitive; use raw_window_handle::{HasRawDisplayHandle, HasRawWindowHandle}; use std::marker::PhantomData; pub struct Compositor { _theme: PhantomData, } pub struct Surface; impl iced_graphics::window::Compositor for Compositor { type Settings = Settings; type Renderer = Renderer; type Surface = Surface; fn new( settings: Self::Settings, _compatible_window: Option<&W>, ) -> Result<(Self, Self::Renderer), Error> { let (compositor, backend) = new(settings); Ok((compositor, Renderer::new(backend))) } fn create_surface( &mut self, _window: &W, ) -> Surface { // TODO Surface } fn configure_surface( &mut self, _surface: &mut Surface, _width: u32, _height: u32, ) { // TODO } fn fetch_information(&self) -> Information { Information { adapter: String::from("CPU"), backend: String::from("tiny-skia"), } } fn present>( &mut self, renderer: &mut Self::Renderer, surface: &mut Self::Surface, viewport: &Viewport, background_color: Color, overlay: &[T], ) -> Result<(), SurfaceError> { renderer.with_primitives(|backend, primitives| { present( self, backend, surface, primitives, viewport, background_color, overlay, ) }) } } pub fn new(settings: Settings) -> (Compositor, Backend) { // TODO ( Compositor { _theme: PhantomData, }, Backend::new(settings), ) } pub fn present>( _compositor: &mut Compositor, _backend: &mut Backend, _surface: &mut Surface, _primitives: &[Primitive], _viewport: &Viewport, _background_color: Color, _overlay: &[T], ) -> Result<(), compositor::SurfaceError> { // TODO Ok(()) }