From ac5a5ca9498f82e46d4892739da501ee596f2ef0 Mon Sep 17 00:00:00 2001 From: Julian Orth Date: Wed, 10 Jul 2024 20:01:59 +0200 Subject: [PATCH] toplevel-drag: move render logic into toplevel drag --- src/cursor_user.rs | 5 +++++ src/gfx_api.rs | 14 +++----------- src/ifs/xdg_toplevel_drag_v1.rs | 11 +++++++++++ 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/src/cursor_user.rs b/src/cursor_user.rs index 0c66c675..9459e393 100644 --- a/src/cursor_user.rs +++ b/src/cursor_user.rs @@ -352,6 +352,11 @@ impl CursorUser { self.pos.get() } + pub fn position_int(&self) -> (i32, i32) { + let (x, y) = self.pos.get(); + (x.round_down(), y.round_down()) + } + pub fn set_position(&self, mut x: Fixed, mut y: Fixed) -> (Fixed, Fixed) { let x_int = x.round_down(); let y_int = y.round_down(); diff --git a/src/gfx_api.rs b/src/gfx_api.rs index 51027c19..a36c9a4e 100644 --- a/src/gfx_api.rs +++ b/src/gfx_api.rs @@ -345,7 +345,7 @@ impl dyn GfxFramebuffer { if let Some(rect) = cursor_rect { let seats = state.globals.lock_seats(); for seat in seats.values() { - let (x, y) = seat.pointer_cursor().position(); + let (x, y) = seat.pointer_cursor().position_int(); if let Some(im) = seat.input_method() { for (_, popup) in &im.popups { if popup.surface.node_visible() { @@ -359,18 +359,10 @@ impl dyn GfxFramebuffer { } } if let Some(drag) = seat.toplevel_drag() { - if let Some(tl) = drag.toplevel.get() { - if tl.xdg.surface.buffer.get().is_some() { - let (x, y) = rect.translate( - x.round_down() - drag.x_off.get(), - y.round_down() - drag.y_off.get(), - ); - renderer.render_xdg_surface(&tl.xdg, x, y, None) - } - } + drag.render(&mut renderer, &rect, x, y); } if let Some(dnd_icon) = seat.dnd_icon() { - dnd_icon.render(&mut renderer, &rect, x.round_down(), y.round_down()); + dnd_icon.render(&mut renderer, &rect, x, y); } if render_cursor { let cursor_user_group = seat.cursor_group(); diff --git a/src/ifs/xdg_toplevel_drag_v1.rs b/src/ifs/xdg_toplevel_drag_v1.rs index d8ce9513..f6f062cd 100644 --- a/src/ifs/xdg_toplevel_drag_v1.rs +++ b/src/ifs/xdg_toplevel_drag_v1.rs @@ -7,6 +7,8 @@ use { }, leaks::Tracker, object::{Object, Version}, + rect::Rect, + renderer::Renderer, utils::clonecell::CloneCell, wire::{xdg_toplevel_drag_v1::*, XdgToplevelDragV1Id}, }, @@ -49,6 +51,15 @@ impl XdgToplevelDragV1 { tl.drag.take(); } } + + pub fn render(&self, renderer: &mut Renderer<'_>, cursor_rect: &Rect, x: i32, y: i32) { + if let Some(tl) = self.toplevel.get() { + if tl.xdg.surface.buffer.get().is_some() { + let (x, y) = cursor_rect.translate(x - self.x_off.get(), y - self.y_off.get()); + renderer.render_xdg_surface(&tl.xdg, x, y, None) + } + } + } } impl XdgToplevelDragV1RequestHandler for XdgToplevelDragV1 {