1
0
Fork 0
forked from wry/wry

seat: uniformly convert scroll steps to scroll px

This commit is contained in:
Julian Orth 2022-06-05 14:14:53 +02:00
parent 2a9c746781
commit b89d72fcd9
7 changed files with 23 additions and 58 deletions

View file

@ -1,12 +1,11 @@
use { use {
crate::{ crate::{
backend::{self, KeyState}, backend::KeyState,
client::Client, client::Client,
fixed::Fixed, fixed::Fixed,
ifs::wl_seat::{wl_pointer::PendingScroll, SeatId}, ifs::wl_seat::{wl_pointer::PendingScroll, SeatId},
leaks::Tracker, leaks::Tracker,
object::Object, object::Object,
state::DeviceHandlerData,
wire::{jay_seat_events::*, JaySeatEventsId}, wire::{jay_seat_events::*, JaySeatEventsId},
xkbcommon::ModifierState, xkbcommon::ModifierState,
}, },
@ -83,13 +82,7 @@ impl JaySeatEvents {
}); });
} }
pub fn send_axis( pub fn send_axis(&self, seat: SeatId, time_usec: u64, ps: &PendingScroll) {
&self,
seat: SeatId,
time_usec: u64,
dev: &DeviceHandlerData,
ps: &PendingScroll,
) {
if let Some(source) = ps.source.get() { if let Some(source) = ps.source.get() {
self.client.event(AxisSource { self.client.event(AxisSource {
self_id: self.id, self_id: self.id,
@ -103,13 +96,8 @@ impl JaySeatEvents {
dist, dist,
axis: axis as _, axis: axis as _,
}); });
let px = (dist as f64 / backend::AXIS_120 as f64) * dev.px_per_scroll_wheel.get(); }
self.client.event(AxisPx { if let Some(dist) = ps.px[axis].get() {
self_id: self.id,
dist: Fixed::from_f64(px),
axis: axis as _,
});
} else if let Some(dist) = ps.px[axis].get() {
self.client.event(AxisPx { self.client.event(AxisPx {
self_id: self.id, self_id: self.id,
dist, dist,

View file

@ -564,12 +564,7 @@ impl WlSeatGlobal {
// Scroll callbacks // Scroll callbacks
impl WlSeatGlobal { impl WlSeatGlobal {
pub fn scroll_surface( pub fn scroll_surface(&self, surface: &WlSurface, event: &PendingScroll) {
&self,
dev: &DeviceHandlerData,
surface: &WlSurface,
event: &PendingScroll,
) {
if let Some(source) = event.source.get() { if let Some(source) = event.source.get() {
let since = if source >= WHEEL_TILT { let since = if source >= WHEEL_TILT {
WHEEL_TILT_SINCE_VERSION WHEEL_TILT_SINCE_VERSION
@ -588,9 +583,8 @@ impl WlSeatGlobal {
} else if p.seat.version >= AXIS_DISCRETE_SINCE_VERSION { } else if p.seat.version >= AXIS_DISCRETE_SINCE_VERSION {
p.send_axis_discrete(axis, delta / AXIS_120); p.send_axis_discrete(axis, delta / AXIS_120);
} }
let px = (delta as f64 / AXIS_120 as f64) * dev.px_per_scroll_wheel.get(); }
p.send_axis(time, axis, Fixed::from_f64(px)); if let Some(delta) = event.px[i].get() {
} else if let Some(delta) = event.px[i].get() {
p.send_axis(time, axis, delta); p.send_axis(time, axis, delta);
} }
if p.seat.version >= AXIS_STOP_SINCE_VERSION && event.stop[i].get() { if p.seat.version >= AXIS_STOP_SINCE_VERSION && event.stop[i].get() {

View file

@ -1,6 +1,6 @@
use { use {
crate::{ crate::{
backend::{AxisSource, KeyState, ScrollAxis}, backend::{AxisSource, KeyState, ScrollAxis, AXIS_120},
fixed::Fixed, fixed::Fixed,
ifs::{ ifs::{
ipc, ipc,
@ -55,11 +55,17 @@ impl PointerOwnerHolder {
pub fn frame(&self, dev: &DeviceHandlerData, seat: &Rc<WlSeatGlobal>, time_usec: u64) { pub fn frame(&self, dev: &DeviceHandlerData, seat: &Rc<WlSeatGlobal>, time_usec: u64) {
self.pending_scroll.time_usec.set(time_usec); self.pending_scroll.time_usec.set(time_usec);
let pending = self.pending_scroll.take(); let pending = self.pending_scroll.take();
for axis in 0..2 {
if let Some(dist) = pending.v120[axis].get() {
let px = (dist as f64 / AXIS_120 as f64) * dev.px_per_scroll_wheel.get();
pending.px[axis].set(Some(Fixed::from_f64(px)));
}
}
seat.state.for_each_seat_tester(|t| { seat.state.for_each_seat_tester(|t| {
t.send_axis(seat.id, time_usec, dev, &pending); t.send_axis(seat.id, time_usec, &pending);
}); });
if let Some(node) = self.owner.get().axis_node(seat) { if let Some(node) = self.owner.get().axis_node(seat) {
node.node_on_axis_event(dev, seat, &pending); node.node_on_axis_event(seat, &pending);
} }
} }

View file

@ -32,7 +32,6 @@ use {
object::Object, object::Object,
rect::{Rect, Region}, rect::{Rect, Region},
render::Renderer, render::Renderer,
state::DeviceHandlerData,
tree::{ tree::{
FindTreeResult, FoundNode, Node, NodeId, NodeVisitor, NodeVisitorBase, OutputNode, FindTreeResult, FoundNode, Node, NodeId, NodeVisitor, NodeVisitorBase, OutputNode,
ToplevelNode, ToplevelNode,
@ -1094,13 +1093,8 @@ impl Node for WlSurface {
seat.button_surface(&self, time_usec, button, state, serial); seat.button_surface(&self, time_usec, button, state, serial);
} }
fn node_on_axis_event( fn node_on_axis_event(self: Rc<Self>, seat: &Rc<WlSeatGlobal>, event: &PendingScroll) {
self: Rc<Self>, seat.scroll_surface(&*self, event);
dev: &DeviceHandlerData,
seat: &Rc<WlSeatGlobal>,
event: &PendingScroll,
) {
seat.scroll_surface(dev, &*self, event);
} }
fn node_on_focus(self: Rc<Self>, seat: &Rc<WlSeatGlobal>) { fn node_on_focus(self: Rc<Self>, seat: &Rc<WlSeatGlobal>) {

View file

@ -9,7 +9,6 @@ use {
}, },
rect::Rect, rect::Rect,
render::Renderer, render::Renderer,
state::DeviceHandlerData,
utils::numcell::NumCell, utils::numcell::NumCell,
xkbcommon::ModifierState, xkbcommon::ModifierState,
}, },
@ -185,13 +184,7 @@ pub trait Node: 'static {
let _ = serial; let _ = serial;
} }
fn node_on_axis_event( fn node_on_axis_event(self: Rc<Self>, seat: &Rc<WlSeatGlobal>, event: &PendingScroll) {
self: Rc<Self>,
dev: &DeviceHandlerData,
seat: &Rc<WlSeatGlobal>,
event: &PendingScroll,
) {
let _ = dev;
let _ = seat; let _ = seat;
let _ = event; let _ = event;
} }

View file

@ -9,7 +9,7 @@ use {
}, },
rect::Rect, rect::Rect,
render::{Renderer, Texture}, render::{Renderer, Texture},
state::{DeviceHandlerData, State}, state::State,
text, text,
tree::{ tree::{
walker::NodeVisitor, ContainingNode, Direction, FindTreeResult, FoundNode, Node, walker::NodeVisitor, ContainingNode, Direction, FindTreeResult, FoundNode, Node,
@ -1162,12 +1162,7 @@ impl Node for ContainerNode {
} }
} }
fn node_on_axis_event( fn node_on_axis_event(self: Rc<Self>, seat: &Rc<WlSeatGlobal>, event: &PendingScroll) {
self: Rc<Self>,
_dev: &DeviceHandlerData,
seat: &Rc<WlSeatGlobal>,
event: &PendingScroll,
) {
let mut seat_datas = self.seats.borrow_mut(); let mut seat_datas = self.seats.borrow_mut();
let seat_data = match seat_datas.get_mut(&seat.id()) { let seat_data = match seat_datas.get_mut(&seat.id()) {
Some(s) => s, Some(s) => s,

View file

@ -17,7 +17,7 @@ use {
}, },
rect::Rect, rect::Rect,
render::{Renderer, Texture}, render::{Renderer, Texture},
state::{DeviceHandlerData, State}, state::State,
text, text,
tree::{ tree::{
walker::NodeVisitor, Direction, FindTreeResult, FoundNode, Node, NodeId, WorkspaceNode, walker::NodeVisitor, Direction, FindTreeResult, FoundNode, Node, NodeId, WorkspaceNode,
@ -577,12 +577,7 @@ impl Node for OutputNode {
self.state.tree_changed(); self.state.tree_changed();
} }
fn node_on_axis_event( fn node_on_axis_event(self: Rc<Self>, seat: &Rc<WlSeatGlobal>, event: &PendingScroll) {
self: Rc<Self>,
_dev: &DeviceHandlerData,
seat: &Rc<WlSeatGlobal>,
event: &PendingScroll,
) {
let steps = match self.scroll.handle(event) { let steps = match self.scroll.handle(event) {
Some(e) => e, Some(e) => e,
_ => return, _ => return,