- Remove the `Device`, `Surface`, `RawDevice` and `RawSurface` traits.
We are not trying to merge the different responsibilities between...
- Drm-Surfaces: crtcs and planes for displaying buffers
- Gbm-Surfaces: allocating and managing front- and back-buffers
- EGL-Surfaces: Load drawing apis.
..anymore.
- Instead unify the legacy and atomic backends into one `DrmDevice` and
a `DrmSurface`, that under the hood dispatches onto the different modules.
- Do not keep a list of surfaces inside the devices. These are reference-counting
nightmares and a frequent issue due to the read-only nature of `Rc` and `Arc` and
thread-safety related problems.
- Surfaces are mostly doing state-tracking independently of each other
and contain some more helper functions.
- Simplify session code, because we do not need to pass the events
through three layers of devices and surfaces anymore.
- Each surface now represents a plane. Rendering to a plane is just like
any other rendering step, including the Cursor-plane.
(Legacy interfaces only have one to avoid dealing with short-comings of the api).
`DrmDevice` and `UdevBackend` now do not need to be wrapped into `StateToken`s anymore, but can return a separate `SessionObserver` object using the new `AsSessionObserver` trait.
This change was motivated by allowing the `UdevHandle` to obtain a mutable reference to an `EventLoopHandle` to create wayland object, e.g. a `wl_output` object.
Previously this was not possible.
Depends on https://github.com/Smithay/wayland-rs/pull/164