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/winit.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/winit.rs')
| -rw-r--r-- | src/winit.rs | 81 |
1 files changed, 39 insertions, 42 deletions
diff --git a/src/winit.rs b/src/winit.rs index d1253199..35bf3407 100644 --- a/src/winit.rs +++ b/src/winit.rs @@ -12,7 +12,6 @@ use smithay::reexports::winit::dpi::LogicalSize; use smithay::reexports::winit::window::WindowBuilder; use smithay::utils::Transform; -use crate::backend::Backend; use crate::input::{BackendAction, CompositorMod}; use crate::niri::OutputRenderElements; use crate::utils::get_monotonic_time; @@ -25,46 +24,6 @@ pub struct Winit { damage_tracker: OutputDamageTracker, } -impl Backend for Winit { - fn seat_name(&self) -> String { - "winit".to_owned() - } - - fn renderer(&mut self) -> &mut GlesRenderer { - self.backend.renderer() - } - - fn render( - &mut self, - niri: &mut Niri, - output: &Output, - elements: &[OutputRenderElements<GlesRenderer>], - ) { - let _span = tracy_client::span!("Winit::render"); - - self.backend.bind().unwrap(); - let age = self.backend.buffer_age().unwrap(); - let res = self - .damage_tracker - .render_output(self.backend.renderer(), age, elements, [0.1, 0.1, 0.1, 1.0]) - .unwrap(); - if let Some(damage) = res.damage { - self.backend.submit(Some(&damage)).unwrap(); - - let mut presentation_feedbacks = niri.take_presentation_feedbacks(output, &res.states); - let refresh = output.current_mode().unwrap().refresh as u32; - presentation_feedbacks.presented::<_, smithay::utils::Monotonic>( - get_monotonic_time(), - refresh, - 0, - wp_presentation_feedback::Kind::empty(), - ); - - self.backend.window().request_redraw(); - } - } -} - impl Winit { pub fn new(event_loop: LoopHandle<LoopData>) -> Self { let builder = WindowBuilder::new() @@ -100,7 +59,7 @@ impl Winit { let timer = Timer::immediate(); event_loop .insert_source(timer, move |_, _, data| { - let winit = data.winit.as_mut().unwrap(); + let winit = data.backend.winit().unwrap(); winit.dispatch(&mut data.niri); TimeoutAction::ToDuration(Duration::from_micros(16667)) }) @@ -178,4 +137,42 @@ impl Winit { Ok(()) => (), } } + + pub fn seat_name(&self) -> String { + "winit".to_owned() + } + + pub fn renderer(&mut self) -> &mut GlesRenderer { + self.backend.renderer() + } + + pub fn render( + &mut self, + niri: &mut Niri, + output: &Output, + elements: &[OutputRenderElements<GlesRenderer>], + ) { + let _span = tracy_client::span!("Winit::render"); + + self.backend.bind().unwrap(); + let age = self.backend.buffer_age().unwrap(); + let res = self + .damage_tracker + .render_output(self.backend.renderer(), age, elements, [0.1, 0.1, 0.1, 1.0]) + .unwrap(); + if let Some(damage) = res.damage { + self.backend.submit(Some(&damage)).unwrap(); + + let mut presentation_feedbacks = niri.take_presentation_feedbacks(output, &res.states); + let refresh = output.current_mode().unwrap().refresh as u32; + presentation_feedbacks.presented::<_, smithay::utils::Monotonic>( + get_monotonic_time(), + refresh, + 0, + wp_presentation_feedback::Kind::empty(), + ); + + self.backend.window().request_redraw(); + } + } } |
