Keep around the pointer color buffer

Fixes pointer drawing preventing idle.
This commit is contained in:
Ivan Molodetskikh
2023-08-10 14:27:09 +04:00
parent 0ed5bad452
commit 100d7d4b47
+15 -15
View File
@@ -3,8 +3,7 @@ use std::sync::Arc;
use std::time::Duration; use std::time::Duration;
use smithay::backend::renderer::element::render_elements; use smithay::backend::renderer::element::render_elements;
use smithay::backend::renderer::element::solid::SolidColorRenderElement; use smithay::backend::renderer::element::solid::{SolidColorBuffer, SolidColorRenderElement};
use smithay::backend::renderer::utils::CommitCounter;
use smithay::backend::renderer::ImportAll; use smithay::backend::renderer::ImportAll;
use smithay::desktop::space::{space_render_elements, SpaceRenderElements}; use smithay::desktop::space::{space_render_elements, SpaceRenderElements};
use smithay::desktop::{Space, Window, WindowSurfaceType}; use smithay::desktop::{Space, Window, WindowSurfaceType};
@@ -46,6 +45,8 @@ pub struct Niri {
pub seat: Seat<Self>, pub seat: Seat<Self>,
pub output: Option<Output>, pub output: Option<Output>,
pub pointer_buffer: SolidColorBuffer,
// Set to `true` if there's a redraw queued on the event loop. Reset to `false` in redraw() // Set to `true` if there's a redraw queued on the event loop. Reset to `false` in redraw()
// which means that you cannot queue more than one redraw at once. // which means that you cannot queue more than one redraw at once.
pub redraw_queued: bool, pub redraw_queued: bool,
@@ -107,6 +108,8 @@ impl Niri {
}) })
.unwrap(); .unwrap();
let pointer_buffer = SolidColorBuffer::new((16, 16), [1., 0.8, 0., 1.]);
Self { Self {
start_time, start_time,
event_loop, event_loop,
@@ -124,6 +127,7 @@ impl Niri {
seat, seat,
output: None, output: None,
pointer_buffer,
redraw_queued: false, redraw_queued: false,
waiting_for_vblank: false, waiting_for_vblank: false,
} }
@@ -183,19 +187,15 @@ impl Niri {
.collect(); .collect();
elements.insert( elements.insert(
0, 0,
OutputRenderElements::Pointer(SolidColorRenderElement::new( OutputRenderElements::Pointer(SolidColorRenderElement::from_buffer(
smithay::backend::renderer::element::Id::new(), &self.pointer_buffer,
smithay::utils::Rectangle { self.seat
loc: self .get_pointer()
.seat .unwrap()
.get_pointer() .current_location()
.unwrap() .to_physical_precise_round(1.),
.current_location() 1.,
.to_physical_precise_round(1.), 1.,
size: (16, 16).into(),
},
CommitCounter::default(),
[1., 0.8, 0., 1.],
)), )),
); );