seat: uniformly convert scroll steps to scroll px
This commit is contained in:
parent
2a9c746781
commit
b89d72fcd9
7 changed files with 23 additions and 58 deletions
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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() {
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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>) {
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue