1
0
Fork 0
forked from wry/wry

cursor: dispatch frame requests after rendering hardware cursor

This commit is contained in:
Julian Orth 2022-06-01 22:11:15 +02:00
parent 3b8935cf55
commit b9ce5f22d8
2 changed files with 19 additions and 3 deletions

View file

@ -829,7 +829,7 @@ impl WlSurface {
if self.need_extents_update.get() { if self.need_extents_update.get() {
self.calculate_extents(); self.calculate_extents();
} }
if buffer_transform_changed || transform_changed { if buffer_changed || transform_changed {
for (_, cursor) in &self.cursors { for (_, cursor) in &self.cursors {
cursor.handle_buffer_change(); cursor.handle_buffer_change();
} }

View file

@ -6,9 +6,9 @@ use {
leaks::Tracker, leaks::Tracker,
rect::Rect, rect::Rect,
render::Renderer, render::Renderer,
tree::OutputNode, tree::{Node, NodeVisitorBase, OutputNode},
}, },
std::{cell::Cell, rc::Rc}, std::{cell::Cell, ops::Deref, rc::Rc},
}; };
pub struct CursorSurface { pub struct CursorSurface {
@ -82,6 +82,22 @@ impl Cursor for CursorSurface {
fn render_hardware_cursor(&self, renderer: &mut Renderer) { fn render_hardware_cursor(&self, renderer: &mut Renderer) {
let extents = self.surface.extents.get(); let extents = self.surface.extents.get();
renderer.render_surface(&self.surface, -extents.x1(), -extents.y1()); renderer.render_surface(&self.surface, -extents.x1(), -extents.y1());
struct FrameRequests;
impl NodeVisitorBase for FrameRequests {
fn visit_surface(&mut self, node: &Rc<WlSurface>) {
for fr in node.frame_requests.borrow_mut().drain(..) {
fr.send_done();
let _ = fr.client.remove_obj(fr.deref());
}
for fr in node.presentation_feedback.borrow_mut().drain(..) {
fr.send_discarded();
let _ = fr.client.remove_obj(fr.deref());
}
node.node_visit_children(self);
}
}
FrameRequests.visit_surface(&self.surface);
} }
fn extents_at_scale(&self, scale: Fixed) -> Rect { fn extents_at_scale(&self, scale: Fixed) -> Rect {