diff --git a/src/renderer/vaxis/renderer.zig b/src/renderer/vaxis/renderer.zig index 0350d2e..4806a2a 100644 --- a/src/renderer/vaxis/renderer.zig +++ b/src/renderer/vaxis/renderer.zig @@ -76,7 +76,7 @@ pub fn run(self: *Self) !void { const ws = try vaxis.Tty.getWinsize(self.input_fd_blocking()); try self.vx.resize(self.a, ws); self.vx.queueRefresh(); - try self.vx.setMouseMode(true); + try self.vx.setMouseMode(.pixels); } pub fn render(self: *Self) !void { @@ -158,44 +158,52 @@ pub fn process_input(self: *Self, input_: []const u8) !void { if (self.dispatch_input) |f| f(self.handler_ctx, cbor_msg); }, .mouse => |mouse| { + const ypos = mouse.row - 1; + const xpos = mouse.col - 1; + const ycell = self.vx.screen.height_pix / self.vx.screen.height; + const xcell = self.vx.screen.width_pix / self.vx.screen.width; + const y = ypos / ycell; + const x = xpos / xcell; + const ypx = ypos % ycell; + const xpx = xpos % xcell; if (self.dispatch_mouse) |f| switch (mouse.type) { - .motion => f(self.handler_ctx, @intCast(mouse.row), @intCast(mouse.col), try self.fmtmsg(.{ + .motion => f(self.handler_ctx, @intCast(y), @intCast(x), try self.fmtmsg(.{ "M", - mouse.col, - mouse.row, - 0, - 0, + x, + y, + xpx, + ypx, })), - .press => f(self.handler_ctx, @intCast(mouse.row), @intCast(mouse.col), try self.fmtmsg(.{ + .press => f(self.handler_ctx, @intCast(y), @intCast(x), try self.fmtmsg(.{ "B", event_type.PRESS, @intFromEnum(mouse.button), input.utils.button_id_string(@intFromEnum(mouse.button)), - mouse.col, - mouse.row, - 0, - 0, + x, + y, + xpx, + ypx, })), - .release => f(self.handler_ctx, @intCast(mouse.row), @intCast(mouse.col), try self.fmtmsg(.{ + .release => f(self.handler_ctx, @intCast(y), @intCast(x), try self.fmtmsg(.{ "B", event_type.RELEASE, @intFromEnum(mouse.button), input.utils.button_id_string(@intFromEnum(mouse.button)), - mouse.col, - mouse.row, - 0, - 0, + x, + y, + xpx, + ypx, })), .drag => if (self.dispatch_mouse_drag) |f_| - f_(self.handler_ctx, @intCast(mouse.row), @intCast(mouse.col), true, try self.fmtmsg(.{ + f_(self.handler_ctx, @intCast(y), @intCast(x), true, try self.fmtmsg(.{ "D", event_type.PRESS, @intFromEnum(mouse.button), input.utils.button_id_string(@intFromEnum(mouse.button)), - mouse.col, - mouse.row, - 0, - 0, + x, + y, + xpx, + ypx, })), }; },