diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2023-09-03 13:04:32 +0400 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2023-09-03 13:04:32 +0400 |
| commit | 5a707c879ba9b21665d2207020fe354040b807b2 (patch) | |
| tree | 5bdc370a4b3068b0878d3d85acfbd25bf23a3952 /src/backend.rs | |
| parent | 3bd5a012cbf15bd294e1a6290914a6e687cbcf2d (diff) | |
| download | niri-5a707c879ba9b21665d2207020fe354040b807b2.tar.gz niri-5a707c879ba9b21665d2207020fe354040b807b2.tar.bz2 niri-5a707c879ba9b21665d2207020fe354040b807b2.zip | |
Replace Backend trait with enum
Diffstat (limited to 'src/backend.rs')
| -rw-r--r-- | src/backend.rs | 57 |
1 files changed, 52 insertions, 5 deletions
diff --git a/src/backend.rs b/src/backend.rs index 65c8a772..12f5a0a3 100644 --- a/src/backend.rs +++ b/src/backend.rs @@ -2,15 +2,62 @@ use smithay::backend::renderer::gles::GlesRenderer; use smithay::output::Output; use crate::niri::OutputRenderElements; +use crate::tty::Tty; +use crate::winit::Winit; use crate::Niri; -pub trait Backend { - fn seat_name(&self) -> String; - fn renderer(&mut self) -> &mut GlesRenderer; - fn render( +pub enum Backend { + Tty(Tty), + Winit(Winit), +} + +impl Backend { + pub fn init(&mut self, niri: &mut Niri) { + match self { + Backend::Tty(tty) => tty.init(niri), + Backend::Winit(winit) => winit.init(niri), + } + } + + pub fn seat_name(&self) -> String { + match self { + Backend::Tty(tty) => tty.seat_name(), + Backend::Winit(winit) => winit.seat_name(), + } + } + + pub fn renderer(&mut self) -> &mut GlesRenderer { + match self { + Backend::Tty(tty) => tty.renderer(), + Backend::Winit(winit) => winit.renderer(), + } + } + + pub fn render( &mut self, niri: &mut Niri, output: &Output, elements: &[OutputRenderElements<GlesRenderer>], - ); + ) { + match self { + Backend::Tty(tty) => tty.render(niri, output, elements), + Backend::Winit(winit) => winit.render(niri, output, elements), + } + } + + pub fn tty(&mut self) -> Option<&mut Tty> { + if let Self::Tty(v) = self { + Some(v) + } else { + None + } + } + + pub fn winit(&mut self) -> Option<&mut Winit> { + if let Self::Winit(v) = self { + Some(v) + } else { + None + } + } } |
