diff --git a/examples/drm.rs b/examples/drm.rs index 319b8aa..197dcc7 100644 --- a/examples/drm.rs +++ b/examples/drm.rs @@ -31,7 +31,7 @@ use std::cell::RefCell; use std::fs::OpenOptions; use std::rc::Rc; use std::time::Duration; -use wayland_server::{EventLoopHandle, StateToken}; +use wayland_server::{StateToken, StateProxy}; fn main() { // A logger facility, here we use the terminal for this example @@ -84,13 +84,13 @@ fn main() { { // Initialize the hardware backend let renderer = device - .create_backend(crtc, mode, vec![connector_info.handle()]) + .create_backend(event_loop.state(), crtc, mode, vec![connector_info.handle()]) .unwrap(); /* * Initialize glium */ - let mut frame = renderer.draw(); + let mut frame = event_loop.state().get(renderer).draw(); frame.clear_color(0.8, 0.8, 0.9, 1.0); frame.finish().unwrap(); } @@ -140,11 +140,10 @@ pub struct DrmHandlerImpl { } impl DrmHandler> for DrmHandlerImpl { - fn ready(&mut self, evlh: &mut EventLoopHandle, device: &StateToken>>, - crtc: &crtc::Handle, _frame: u32, _duration: Duration) { - let state = evlh.state(); - let dev = state.get(device); - let drawer = dev.backend_for_crtc(crtc).unwrap(); + fn ready<'a, S: Into>>(&mut self, state: S, _device: &mut DrmDevice>, + backend: &StateToken>, _crtc: crtc::Handle, _frame: u32, _duration: Duration) { + let state = state.into(); + let drawer = state.get(backend); let mut frame = drawer.draw(); frame.clear_color(0.8, 0.8, 0.9, 1.0); // redraw the frame, in a simple but inneficient way @@ -187,7 +186,7 @@ impl DrmHandler> for DrmHandlerImpl { frame.finish().unwrap(); } - fn error(&mut self, _evlh: &mut EventLoopHandle, _device: &StateToken>>, + fn error<'a, S: Into>>(&mut self, _state: S, _device: &mut DrmDevice>, error: DrmError) { panic!("{:?}", error); } diff --git a/src/backend/drm/mod.rs b/src/backend/drm/mod.rs index aa63895..c7aba96 100644 --- a/src/backend/drm/mod.rs +++ b/src/backend/drm/mod.rs @@ -90,11 +90,11 @@ //! //! // Create the backend //! let backend: StateToken = device.create_backend( -//! &mut event_loop, +//! event_loop.state(), //! crtc, //! mode, //! vec![connector_info.handle()] -//! ).unwrap(); +//! ).unwrap().clone(); //! # } //! ``` //! @@ -118,12 +118,13 @@ //! # //! # use drm::control::{Device as ControlDevice, ResourceInfo}; //! # use drm::control::connector::{Info as ConnectorInfo, State as ConnectorState}; +//! use drm::control::crtc::{Handle as CrtcHandle}; //! use drm::result::Error as DrmError; //! # use std::fs::OpenOptions; //! # use std::time::Duration; //! use smithay::backend::drm::{DrmDevice, DrmBackend, DrmHandler, drm_device_bind}; //! use smithay::backend::graphics::egl::EGLGraphicsBackend; -//! use wayland_server::{EventLoopHandle, StateToken}; +//! use wayland_server::{StateToken, StateProxy}; //! # //! # fn main() { //! # @@ -145,29 +146,32 @@ //! # let crtc = res_handles.crtcs()[0]; //! # let mode = connector_info.modes()[0]; //! # let backend: StateToken = device.create_backend( -//! # &mut event_loop, +//! # event_loop.state(), //! # crtc, //! # mode, //! # vec![connector_info.handle()] -//! # ).unwrap(); +//! # ).unwrap().clone(); //! //! struct MyDrmHandler; //! //! impl DrmHandler for MyDrmHandler { -//! fn ready(&mut self, -//! evlh: &mut EventLoopHandle, -//! _device: &mut DrmDevice, -//! backend: &StateToken, -//! _frame: u32, -//! _duration: Duration) +//! fn ready<'a, S: Into>>( +//! &mut self, +//! state: S, +//! _device: &mut DrmDevice, +//! backend: &StateToken, +//! _crtc: CrtcHandle, +//! _frame: u32, +//! _duration: Duration) //! { //! // render surfaces and swap again -//! evlh.state().get(backend).swap_buffers().unwrap(); +//! state.into().get(backend).swap_buffers().unwrap(); //! } -//! fn error(&mut self, -//! _: &mut EventLoopHandle, -//! device: &mut DrmDevice, -//! error: DrmError) +//! fn error<'a, S: Into>>( +//! &mut self, +//! _state: S, +//! device: &mut DrmDevice, +//! error: DrmError) //! { //! panic!("DrmDevice errored: {}", error); //! } @@ -176,7 +180,8 @@ //! // render something (like clear_color) //! event_loop.state().get(&backend).swap_buffers().unwrap(); //! -//! let _source = drm_device_bind(&mut event_loop, device, MyDrmHandler).unwrap(); +//! let device_token = event_loop.state().insert(device); +//! let _source = drm_device_bind(&mut event_loop, device_token, MyDrmHandler).unwrap(); //! //! event_loop.run().unwrap(); //! # }