aboutsummaryrefslogtreecommitdiff
path: root/src/tty.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/tty.rs
parent3bd5a012cbf15bd294e1a6290914a6e687cbcf2d (diff)
downloadniri-5a707c879ba9b21665d2207020fe354040b807b2.tar.gz
niri-5a707c879ba9b21665d2207020fe354040b807b2.tar.bz2
niri-5a707c879ba9b21665d2207020fe354040b807b2.zip
Replace Backend trait with enum
Diffstat (limited to 'src/tty.rs')
-rw-r--r--src/tty.rs113
1 files changed, 55 insertions, 58 deletions
diff --git a/src/tty.rs b/src/tty.rs
index b45e456d..63256821 100644
--- a/src/tty.rs
+++ b/src/tty.rs
@@ -30,7 +30,6 @@ use smithay::utils::DeviceFd;
use smithay_drm_extras::drm_scanner::{DrmScanEvent, DrmScanner};
use smithay_drm_extras::edid::EdidInfo;
-use crate::backend::Backend;
use crate::input::{BackendAction, CompositorMod};
use crate::niri::OutputRenderElements;
use crate::{LoopData, Niri};
@@ -69,59 +68,6 @@ struct TtyOutputState {
crtc: crtc::Handle,
}
-impl Backend for Tty {
- fn seat_name(&self) -> String {
- self.session.seat()
- }
-
- fn renderer(&mut self) -> &mut GlesRenderer {
- &mut self.output_device.as_mut().unwrap().gles
- }
-
- fn render(
- &mut self,
- niri: &mut Niri,
- output: &Output,
- elements: &[OutputRenderElements<GlesRenderer>],
- ) {
- let _span = tracy_client::span!("Tty::render");
-
- let device = self.output_device.as_mut().unwrap();
- let tty_state: &TtyOutputState = output.user_data().get().unwrap();
- let drm_compositor = device.surfaces.get_mut(&tty_state.crtc).unwrap();
-
- match drm_compositor.render_frame::<_, _, GlesTexture>(
- &mut device.gles,
- elements,
- BACKGROUND_COLOR,
- ) {
- Ok(res) => {
- assert!(!res.needs_sync());
- if res.damage.is_some() {
- let presentation_feedbacks =
- niri.take_presentation_feedbacks(output, &res.states);
-
- match drm_compositor.queue_frame(presentation_feedbacks) {
- Ok(()) => {
- niri.output_state
- .get_mut(output)
- .unwrap()
- .waiting_for_vblank = true
- }
- Err(err) => {
- error!("error queueing frame: {err}");
- }
- }
- }
- }
- Err(err) => {
- // Can fail if we switched to a different TTY.
- error!("error rendering frame: {err}");
- }
- }
- }
-}
-
impl Tty {
pub fn new(event_loop: LoopHandle<'static, LoopData>) -> Self {
let (session, notifier) = LibSeatSession::new().unwrap();
@@ -130,7 +76,7 @@ impl Tty {
let udev_backend = UdevBackend::new(session.seat()).unwrap();
let udev_dispatcher =
Dispatcher::new(udev_backend, move |event, _, data: &mut LoopData| {
- let tty = data.tty.as_mut().unwrap();
+ let tty = data.backend.tty().unwrap();
let niri = &mut data.niri;
match event {
@@ -172,7 +118,7 @@ impl Tty {
let input_backend = LibinputInputBackend::new(libinput.clone());
event_loop
.insert_source(input_backend, |mut event, _, data| {
- let tty = data.tty.as_mut().unwrap();
+ let tty = data.backend.tty().unwrap();
let niri = &mut data.niri;
niri.process_libinput_event(&mut event);
@@ -207,7 +153,7 @@ impl Tty {
let udev_dispatcher_c = udev_dispatcher.clone();
event_loop
.insert_source(notifier, move |event, _, data| {
- let tty = data.tty.as_mut().unwrap();
+ let tty = data.backend.tty().unwrap();
let niri = &mut data.niri;
match event {
@@ -344,7 +290,7 @@ impl Tty {
let token = niri
.event_loop
.insert_source(drm_notifier, move |event, metadata, data| {
- let tty = data.tty.as_mut().unwrap();
+ let tty = data.backend.tty().unwrap();
match event {
DrmEvent::VBlank(crtc) => {
tracy_client::Client::running()
@@ -593,6 +539,57 @@ impl Tty {
niri.remove_output(&output);
}
+ pub fn seat_name(&self) -> String {
+ self.session.seat()
+ }
+
+ pub fn renderer(&mut self) -> &mut GlesRenderer {
+ &mut self.output_device.as_mut().unwrap().gles
+ }
+
+ pub fn render(
+ &mut self,
+ niri: &mut Niri,
+ output: &Output,
+ elements: &[OutputRenderElements<GlesRenderer>],
+ ) {
+ let _span = tracy_client::span!("Tty::render");
+
+ let device = self.output_device.as_mut().unwrap();
+ let tty_state: &TtyOutputState = output.user_data().get().unwrap();
+ let drm_compositor = device.surfaces.get_mut(&tty_state.crtc).unwrap();
+
+ match drm_compositor.render_frame::<_, _, GlesTexture>(
+ &mut device.gles,
+ elements,
+ BACKGROUND_COLOR,
+ ) {
+ Ok(res) => {
+ assert!(!res.needs_sync());
+ if res.damage.is_some() {
+ let presentation_feedbacks =
+ niri.take_presentation_feedbacks(output, &res.states);
+
+ match drm_compositor.queue_frame(presentation_feedbacks) {
+ Ok(()) => {
+ niri.output_state
+ .get_mut(output)
+ .unwrap()
+ .waiting_for_vblank = true
+ }
+ Err(err) => {
+ error!("error queueing frame: {err}");
+ }
+ }
+ }
+ }
+ Err(err) => {
+ // Can fail if we switched to a different TTY.
+ error!("error rendering frame: {err}");
+ }
+ }
+ }
+
fn change_vt(&mut self, vt: i32) {
if let Err(err) = self.session.change_vt(vt) {
error!("error changing VT: {err}");