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 smithay::backend::renderer::element::render_elements;
use smithay::backend::renderer::element::solid::SolidColorRenderElement;
use smithay::backend::renderer::utils::CommitCounter;
use smithay::backend::renderer::element::solid::{SolidColorBuffer, SolidColorRenderElement};
use smithay::backend::renderer::ImportAll;
use smithay::desktop::space::{space_render_elements, SpaceRenderElements};
use smithay::desktop::{Space, Window, WindowSurfaceType};
@@ -46,6 +45,8 @@ pub struct Niri {
pub seat: Seat<Self>,
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()
// which means that you cannot queue more than one redraw at once.
pub redraw_queued: bool,
@@ -107,6 +108,8 @@ impl Niri {
})
.unwrap();
let pointer_buffer = SolidColorBuffer::new((16, 16), [1., 0.8, 0., 1.]);
Self {
start_time,
event_loop,
@@ -124,6 +127,7 @@ impl Niri {
seat,
output: None,
pointer_buffer,
redraw_queued: false,
waiting_for_vblank: false,
}
@@ -183,19 +187,15 @@ impl Niri {
.collect();
elements.insert(
0,
OutputRenderElements::Pointer(SolidColorRenderElement::new(
smithay::backend::renderer::element::Id::new(),
smithay::utils::Rectangle {
loc: self
.seat
.get_pointer()
.unwrap()
.current_location()
.to_physical_precise_round(1.),
size: (16, 16).into(),
},
CommitCounter::default(),
[1., 0.8, 0., 1.],
OutputRenderElements::Pointer(SolidColorRenderElement::from_buffer(
&self.pointer_buffer,
self.seat
.get_pointer()
.unwrap()
.current_location()
.to_physical_precise_round(1.),
1.,
1.,
)),
);