cursor: dispatch frame requests after rendering hardware cursor
This commit is contained in:
parent
3b8935cf55
commit
b9ce5f22d8
2 changed files with 19 additions and 3 deletions
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue