From 703c3972bf50d7ac8521c15ae6fec603e5e279b6 Mon Sep 17 00:00:00 2001 From: MaxVerevkin Date: Sat, 25 Mar 2023 17:57:28 +0200 Subject: update wayrs_utils --- Cargo.lock | 4 ++-- Cargo.toml | 2 +- src/state.rs | 43 ++++++++++++++++++++----------------------- 3 files changed, 23 insertions(+), 26 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index dd8552f..710c561 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -966,9 +966,9 @@ dependencies = [ [[package]] name = "wayrs-utils" -version = "0.3.0" +version = "0.4.0-beta.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daa3c9ec2f3a343a2b8495c8e61dcee3672d7ee15ebbb60327f7e05a0cb29413" +checksum = "6a2950db7610db7119bdb2b3ea5983dc01c2303e511e3a193959b5ed2d7f1854" dependencies = [ "memmap2", "shmemfdrs", diff --git a/Cargo.toml b/Cargo.toml index cc4e55c..41c0f11 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,7 +16,7 @@ memchr = "2" thiserror = "1.0.38" wayrs-client = { version = "0.4", features = ["tokio"] } -wayrs-utils = { version = "0.3", features = ["cursor", "shm_alloc", "seats"] } +wayrs-utils = { version = "0.4.0-beta.0", features = ["cursor", "shm_alloc", "seats"] } wayrs-protocols = { version = "0.4", features = ["wlr-layer-shell-unstable-v1", "viewporter", "fractional-scale-v1"] } [dependencies.tokio] diff --git a/src/state.rs b/src/state.rs index 02a9e80..2cead3d 100644 --- a/src/state.rs +++ b/src/state.rs @@ -7,7 +7,7 @@ use std::future::pending; use wayrs_client::connection::Connection; use wayrs_client::global::{Global, GlobalExt, Globals, GlobalsExt}; use wayrs_client::proxy::Proxy; -use wayrs_utils::cursor::CursorTheme; +use wayrs_utils::cursor::{CursorImage, CursorTheme, ThemedPointer}; use wayrs_utils::seats::{SeatHandler, Seats}; use wayrs_utils::shm_alloc::ShmAlloc; @@ -29,13 +29,13 @@ pub struct State { pub shared_state: SharedState, - cursor_theme: Option, + default_cursor: Option, } struct Pointer { seat: WlSeat, pointer: WlPointer, - cursor_surface: WlSurface, + themed_pointer: ThemedPointer, current_surface: Option, x: f64, y: f64, @@ -61,11 +61,11 @@ impl State { let wl_shm = globals.bind(conn, 1..=1).expect("could not bind wl_shm"); - let mut cursor_theme = CursorTheme::new(None, None); - let cursor_theme_ok = cursor_theme - .ensure_cursor_is_loaded("default") + let cursor_theme = CursorTheme::new(None, None); + let default_cursor = cursor_theme + .get_image("default") .map_err(|e| error = Err(e.into())) - .is_ok(); + .ok(); let mut this = Self { wl_compositor: globals.bind(conn, 4..=5).unwrap(), @@ -87,7 +87,7 @@ impl State { wm_info_provider: wm_info_provider::bind_wayland(conn, globals, wm_info_cb), }, - cursor_theme: cursor_theme_ok.then_some(cursor_theme), + default_cursor, }; globals @@ -233,10 +233,11 @@ impl SeatHandler for State { fn pointer_added(&mut self, conn: &mut Connection, seat: WlSeat) { assert!(seat.version() >= 5); + let pointer = seat.get_pointer_with_cb(conn, wl_pointer_cb); self.pointers.push(Pointer { seat, - pointer: seat.get_pointer_with_cb(conn, wl_pointer_cb), - cursor_surface: self.wl_compositor.create_surface(conn), + pointer, + themed_pointer: ThemedPointer::new(conn, pointer, self.wl_compositor), current_surface: None, x: 0.0, y: 0.0, @@ -250,7 +251,7 @@ impl SeatHandler for State { let pointer_i = self.pointers.iter().position(|p| p.seat == seat).unwrap(); let pointer = self.pointers.swap_remove(pointer_i); pointer.pointer.release(conn); - pointer.cursor_surface.destroy(conn); + pointer.themed_pointer.destroy(conn); } } @@ -406,18 +407,14 @@ fn wl_pointer_cb( pointer.current_surface = Some(bar.surface); pointer.x = args.surface_x.as_f64(); pointer.y = args.surface_y.as_f64(); - if let Some(cursor_theme) = &mut state.cursor_theme { - cursor_theme - .set_cursor( - conn, - &mut state.shared_state.shm, - "default", - bar.scale, - args.serial, - pointer.cursor_surface, - pointer.pointer, - ) - .unwrap(); + if let Some(default_cursor) = &state.default_cursor { + pointer.themed_pointer.set_cursor( + conn, + &mut state.shared_state.shm, + default_cursor, + bar.scale, + args.serial, + ); } } Event::Leave(_) => pointer.current_surface = None, -- cgit v1.3.1