diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2023-10-01 07:59:28 +0400 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2023-10-01 08:03:12 +0400 |
| commit | 8d443c2e841505dd9a09d50dbb24a2a5956ecbd7 (patch) | |
| tree | 09d98ab7566dc72a34842c5f1083355e62e2eca3 /src/niri.rs | |
| parent | d39da3f46112395e5e359efd756e9c510c03e243 (diff) | |
| download | niri-8d443c2e841505dd9a09d50dbb24a2a5956ecbd7.tar.gz niri-8d443c2e841505dd9a09d50dbb24a2a5956ecbd7.tar.bz2 niri-8d443c2e841505dd9a09d50dbb24a2a5956ecbd7.zip | |
Make default cursor respect output scale
First part of https://github.com/YaLTeR/niri/issues/16
Diffstat (limited to 'src/niri.rs')
| -rw-r--r-- | src/niri.rs | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/src/niri.rs b/src/niri.rs index eea0a2c0..dda9cd29 100644 --- a/src/niri.rs +++ b/src/niri.rs @@ -15,7 +15,7 @@ use smithay::backend::allocator::Fourcc; use smithay::backend::renderer::element::surface::{ render_elements_from_surface_tree, WaylandSurfaceRenderElement, }; -use smithay::backend::renderer::element::texture::{TextureBuffer, TextureRenderElement}; +use smithay::backend::renderer::element::texture::TextureRenderElement; use smithay::backend::renderer::element::utils::{Relocate, RelocateRenderElement}; use smithay::backend::renderer::element::{ render_elements, AsRenderElements, Kind, RenderElement, RenderElementStates, @@ -71,6 +71,7 @@ use zbus::fdo::RequestNameFlags; use crate::backend::{Backend, Tty, Winit}; use crate::config::Config; +use crate::cursor::Cursor; use crate::dbus::gnome_shell_screenshot::{self, NiriToScreenshot, ScreenshotToNiri}; use crate::dbus::mutter_display_config::DisplayConfig; #[cfg(feature = "xdp-gnome-screencast")] @@ -79,7 +80,7 @@ use crate::dbus::mutter_service_channel::ServiceChannel; use crate::frame_clock::FrameClock; use crate::layout::{output_size, MonitorRenderElement, MonitorSet}; use crate::pw_utils::{Cast, PipeWire}; -use crate::utils::{center, get_monotonic_time, load_default_cursor, make_screenshot_path}; +use crate::utils::{center, get_monotonic_time, make_screenshot_path}; pub struct Niri { pub config: Rc<RefCell<Config>>, @@ -122,7 +123,7 @@ pub struct Niri { pub seat: Seat<State>, - pub pointer_buffer: Option<(TextureBuffer<GlesTexture>, Point<i32, Physical>)>, + pub default_cursor: Cursor, pub cursor_image: CursorImageStatus, pub dnd_icon: Option<WlSurface>, @@ -328,6 +329,8 @@ impl Niri { .unwrap(); seat.add_pointer(); + let default_cursor = Cursor::load(); + let socket_source = ListeningSocketSource::new_auto().unwrap(); let socket_name = socket_source.socket_name().to_os_string(); event_loop @@ -675,7 +678,7 @@ impl Niri { presentation_state, seat, - pointer_buffer: None, + default_cursor, cursor_image: CursorImageStatus::Default, dnd_icon: None, @@ -985,10 +988,9 @@ impl Niri { let output_pos = self.global_space.output_geometry(output).unwrap().loc; let pointer_pos = self.seat.get_pointer().unwrap().current_location() - output_pos.to_f64(); - let (default_buffer, default_hotspot) = self - .pointer_buffer - .get_or_insert_with(|| load_default_cursor(renderer)); - let default_hotspot = default_hotspot.to_logical(1); + let output_scale_int = output.current_scale().integer_scale(); + let (default_buffer, default_hotspot) = self.default_cursor.get(renderer, output_scale_int); + let default_hotspot = default_hotspot.to_logical(output_scale_int); let hotspot = if let CursorImageStatus::Surface(surface) = &mut self.cursor_image { if surface.alive() { @@ -1015,7 +1017,7 @@ impl Niri { CursorImageStatus::Default => vec