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() {
self.calculate_extents();
}
if buffer_transform_changed || transform_changed {
if buffer_changed || transform_changed {
for (_, cursor) in &self.cursors {
cursor.handle_buffer_change();
}

View file

@ -6,9 +6,9 @@ use {
leaks::Tracker,
rect::Rect,
render::Renderer,
tree::OutputNode,
tree::{Node, NodeVisitorBase, OutputNode},
},
std::{cell::Cell, rc::Rc},
std::{cell::Cell, ops::Deref, rc::Rc},
};
pub struct CursorSurface {
@ -82,6 +82,22 @@ impl Cursor for CursorSurface {
fn render_hardware_cursor(&self, renderer: &mut Renderer) {
let extents = self.surface.extents.get();
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 {