aboutsummaryrefslogtreecommitdiff
path: root/src/backend.rs
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2023-09-03 13:04:32 +0400
committerIvan Molodetskikh <yalterz@gmail.com>2023-09-03 13:04:32 +0400
commit5a707c879ba9b21665d2207020fe354040b807b2 (patch)
tree5bdc370a4b3068b0878d3d85acfbd25bf23a3952 /src/backend.rs
parent3bd5a012cbf15bd294e1a6290914a6e687cbcf2d (diff)
downloadniri-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.rs57
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
+ }
+ }
}