1
0
Fork 0
forked from wry/wry

render: keep track of outputs whose hardware cursor must be rendered

This commit is contained in:
Julian Orth 2024-02-07 21:43:01 +01:00
parent f68e2e6fd4
commit 71fc851705
4 changed files with 7 additions and 0 deletions

View file

@ -392,6 +392,7 @@ fn create_dummy_output(state: &Rc<State>) {
hardware_cursor: Default::default(), hardware_cursor: Default::default(),
update_render_data_scheduled: Cell::new(false), update_render_data_scheduled: Cell::new(false),
screencasts: Default::default(), screencasts: Default::default(),
hardware_cursor_needs_render: Cell::new(false),
}); });
let dummy_workspace = Rc::new(WorkspaceNode { let dummy_workspace = Rc::new(WorkspaceNode {
id: state.node_ids.next(), id: state.node_ids.next(),

View file

@ -258,6 +258,7 @@ impl WlSeatGlobal {
let (x, y) = self.get_position(); let (x, y) = self.get_position();
for output in self.state.root.outputs.lock().values() { for output in self.state.root.outputs.lock().values() {
if let Some(hc) = output.hardware_cursor.get() { if let Some(hc) = output.hardware_cursor.get() {
let render = render | output.hardware_cursor_needs_render.take();
let scale = output.preferred_scale.get(); let scale = output.preferred_scale.get();
let extents = cursor.extents_at_scale(scale); let extents = cursor.extents_at_scale(scale);
if render { if render {
@ -290,6 +291,9 @@ impl WlSeatGlobal {
hc.set_enabled(true); hc.set_enabled(true);
hc.set_position(x_rel + extents.x1(), y_rel + extents.y1()); hc.set_position(x_rel + extents.x1(), y_rel + extents.y1());
} else { } else {
if render {
output.hardware_cursor_needs_render.set(true);
}
hc.set_enabled(false); hc.set_enabled(false);
} }
hc.commit(); hc.commit();

View file

@ -128,6 +128,7 @@ impl ConnectorHandler {
jay_outputs: Default::default(), jay_outputs: Default::default(),
screencasts: Default::default(), screencasts: Default::default(),
update_render_data_scheduled: Cell::new(false), update_render_data_scheduled: Cell::new(false),
hardware_cursor_needs_render: Cell::new(false),
}); });
self.state.add_output_scale(on.preferred_scale.get()); self.state.add_output_scale(on.preferred_scale.get());
let mode = info.initial_mode; let mode = info.initial_mode;

View file

@ -61,6 +61,7 @@ pub struct OutputNode {
pub lock_surface: CloneCell<Option<Rc<ExtSessionLockSurfaceV1>>>, pub lock_surface: CloneCell<Option<Rc<ExtSessionLockSurfaceV1>>>,
pub preferred_scale: Cell<Scale>, pub preferred_scale: Cell<Scale>,
pub hardware_cursor: CloneCell<Option<Rc<dyn HardwareCursor>>>, pub hardware_cursor: CloneCell<Option<Rc<dyn HardwareCursor>>>,
pub hardware_cursor_needs_render: Cell<bool>,
pub update_render_data_scheduled: Cell<bool>, pub update_render_data_scheduled: Cell<bool>,
pub screencasts: CopyHashMap<(ClientId, JayScreencastId), Rc<JayScreencast>>, pub screencasts: CopyHashMap<(ClientId, JayScreencastId), Rc<JayScreencast>>,
} }