split scroll/zoom into two modes
accidentally switching to zoom mode ended up being pretty annoying
This commit is contained in:
@@ -26,7 +26,7 @@ impl ControlMode for Media {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn on_start(&mut self, haptics: &DialHaptics) -> DynResult<()> {
|
fn on_start(&mut self, haptics: &DialHaptics) -> DynResult<()> {
|
||||||
haptics.set_mode(false, Some(36))?;
|
haptics.set_mode(true, Some(36))?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,13 @@
|
|||||||
mod media;
|
mod media;
|
||||||
mod null;
|
mod null;
|
||||||
mod paddle;
|
mod paddle;
|
||||||
mod scroll_zoom;
|
mod scroll;
|
||||||
mod volume;
|
mod volume;
|
||||||
|
mod zoom;
|
||||||
|
|
||||||
pub use self::media::*;
|
pub use self::media::*;
|
||||||
pub use self::null::*;
|
pub use self::null::*;
|
||||||
pub use self::paddle::*;
|
pub use self::paddle::*;
|
||||||
pub use self::scroll_zoom::*;
|
pub use self::scroll::*;
|
||||||
pub use self::volume::*;
|
pub use self::volume::*;
|
||||||
|
pub use self::zoom::*;
|
||||||
|
|||||||
50
src/controller/controls/scroll.rs
Normal file
50
src/controller/controls/scroll.rs
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
use crate::controller::{ControlMode, ControlModeMeta};
|
||||||
|
use crate::dial_device::DialHaptics;
|
||||||
|
use crate::fake_input::{FakeInput, ScrollStep};
|
||||||
|
use crate::DynResult;
|
||||||
|
|
||||||
|
pub struct Scroll {
|
||||||
|
fake_input: FakeInput,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Scroll {
|
||||||
|
pub fn new() -> Scroll {
|
||||||
|
Scroll {
|
||||||
|
fake_input: FakeInput::new(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ControlMode for Scroll {
|
||||||
|
fn meta(&self) -> ControlModeMeta {
|
||||||
|
ControlModeMeta {
|
||||||
|
name: "Scroll",
|
||||||
|
icon: "input-mouse",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn on_start(&mut self, haptics: &DialHaptics) -> DynResult<()> {
|
||||||
|
haptics.set_mode(false, Some(90))?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn on_btn_press(&mut self, _: &DialHaptics) -> DynResult<()> {
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn on_btn_release(&mut self, _haptics: &DialHaptics) -> DynResult<()> {
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn on_dial(&mut self, _: &DialHaptics, delta: i32) -> DynResult<()> {
|
||||||
|
if delta > 0 {
|
||||||
|
eprintln!("scroll down");
|
||||||
|
self.fake_input.scroll_step(ScrollStep::Down)?;
|
||||||
|
} else {
|
||||||
|
eprintln!("scroll up");
|
||||||
|
self.fake_input.scroll_step(ScrollStep::Up)?;
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,83 +0,0 @@
|
|||||||
use crate::common::action_notification;
|
|
||||||
use crate::controller::{ControlMode, ControlModeMeta};
|
|
||||||
use crate::dial_device::DialHaptics;
|
|
||||||
use crate::fake_input::{FakeInput, ScrollStep};
|
|
||||||
use crate::DynResult;
|
|
||||||
|
|
||||||
use evdev_rs::enums::EV_KEY;
|
|
||||||
|
|
||||||
pub struct ScrollZoom {
|
|
||||||
zoom: bool,
|
|
||||||
|
|
||||||
fake_input: FakeInput,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl ScrollZoom {
|
|
||||||
pub fn new() -> ScrollZoom {
|
|
||||||
ScrollZoom {
|
|
||||||
zoom: false,
|
|
||||||
|
|
||||||
fake_input: FakeInput::new(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const ZOOM_SENSITIVITY: u16 = 36;
|
|
||||||
const SCROLL_SENSITIVITY: u16 = 90;
|
|
||||||
|
|
||||||
impl ControlMode for ScrollZoom {
|
|
||||||
fn meta(&self) -> ControlModeMeta {
|
|
||||||
ControlModeMeta {
|
|
||||||
name: "Scroll/Zoom",
|
|
||||||
icon: "input-mouse",
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn on_start(&mut self, haptics: &DialHaptics) -> DynResult<()> {
|
|
||||||
haptics.set_mode(false, Some(SCROLL_SENSITIVITY))?;
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
fn on_btn_press(&mut self, _: &DialHaptics) -> DynResult<()> {
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
fn on_btn_release(&mut self, haptics: &DialHaptics) -> DynResult<()> {
|
|
||||||
self.zoom = !self.zoom;
|
|
||||||
haptics.buzz(1)?;
|
|
||||||
|
|
||||||
if self.zoom {
|
|
||||||
action_notification("Zoom Mode", "zoom-in")?;
|
|
||||||
haptics.set_mode(false, Some(ZOOM_SENSITIVITY))?;
|
|
||||||
} else {
|
|
||||||
action_notification("Scroll Mode", "input-mouse")?;
|
|
||||||
haptics.set_mode(false, Some(SCROLL_SENSITIVITY))?;
|
|
||||||
}
|
|
||||||
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
fn on_dial(&mut self, _: &DialHaptics, delta: i32) -> DynResult<()> {
|
|
||||||
if delta > 0 {
|
|
||||||
if self.zoom {
|
|
||||||
eprintln!("zoom in");
|
|
||||||
self.fake_input
|
|
||||||
.key_click(&[EV_KEY::KEY_LEFTCTRL, EV_KEY::KEY_EQUAL])?;
|
|
||||||
} else {
|
|
||||||
eprintln!("scroll down");
|
|
||||||
self.fake_input.scroll_step(ScrollStep::Down)?;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if self.zoom {
|
|
||||||
eprintln!("zoom out");
|
|
||||||
self.fake_input
|
|
||||||
.key_click(&[EV_KEY::KEY_LEFTCTRL, EV_KEY::KEY_MINUS])?;
|
|
||||||
} else {
|
|
||||||
eprintln!("scroll up");
|
|
||||||
self.fake_input.scroll_step(ScrollStep::Up)?;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -31,7 +31,7 @@ impl ControlMode for Volume {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn on_btn_press(&mut self, _: &DialHaptics) -> DynResult<()> {
|
fn on_btn_press(&mut self, _: &DialHaptics) -> DynResult<()> {
|
||||||
// TODO: support double-click to mute
|
// TODO: support double-click to play/pause
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
54
src/controller/controls/zoom.rs
Normal file
54
src/controller/controls/zoom.rs
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
use crate::controller::{ControlMode, ControlModeMeta};
|
||||||
|
use crate::dial_device::DialHaptics;
|
||||||
|
use crate::fake_input::FakeInput;
|
||||||
|
use crate::DynResult;
|
||||||
|
|
||||||
|
use evdev_rs::enums::EV_KEY;
|
||||||
|
|
||||||
|
pub struct Zoom {
|
||||||
|
fake_input: FakeInput,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Zoom {
|
||||||
|
pub fn new() -> Zoom {
|
||||||
|
Zoom {
|
||||||
|
fake_input: FakeInput::new(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ControlMode for Zoom {
|
||||||
|
fn meta(&self) -> ControlModeMeta {
|
||||||
|
ControlModeMeta {
|
||||||
|
name: "Zoom",
|
||||||
|
icon: "zoom-in",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn on_start(&mut self, haptics: &DialHaptics) -> DynResult<()> {
|
||||||
|
haptics.set_mode(true, Some(36))?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn on_btn_press(&mut self, _: &DialHaptics) -> DynResult<()> {
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn on_btn_release(&mut self, _haptics: &DialHaptics) -> DynResult<()> {
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn on_dial(&mut self, _: &DialHaptics, delta: i32) -> DynResult<()> {
|
||||||
|
if delta > 0 {
|
||||||
|
eprintln!("zoom in");
|
||||||
|
self.fake_input
|
||||||
|
.key_click(&[EV_KEY::KEY_LEFTCTRL, EV_KEY::KEY_EQUAL])?;
|
||||||
|
} else {
|
||||||
|
eprintln!("zoom out");
|
||||||
|
self.fake_input
|
||||||
|
.key_click(&[EV_KEY::KEY_LEFTCTRL, EV_KEY::KEY_MINUS])?;
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
#![allow(clippy::collapsible_if, clippy::new_without_default)]
|
#![allow(clippy::collapsible_if, clippy::new_without_default)]
|
||||||
|
|
||||||
mod common;
|
pub mod common;
|
||||||
mod config;
|
mod config;
|
||||||
pub mod controller;
|
pub mod controller;
|
||||||
mod dial_device;
|
mod dial_device;
|
||||||
@@ -88,7 +88,8 @@ fn true_main(kill_notif_tx: mpsc::Sender<Option<(String, &'static str)>>) -> Dyn
|
|||||||
dial,
|
dial,
|
||||||
cfg.last_mode,
|
cfg.last_mode,
|
||||||
vec![
|
vec![
|
||||||
Box::new(controller::controls::ScrollZoom::new()),
|
Box::new(controller::controls::Scroll::new()),
|
||||||
|
Box::new(controller::controls::Zoom::new()),
|
||||||
Box::new(controller::controls::Volume::new()),
|
Box::new(controller::controls::Volume::new()),
|
||||||
Box::new(controller::controls::Media::new()),
|
Box::new(controller::controls::Media::new()),
|
||||||
Box::new(controller::controls::Paddle::new()),
|
Box::new(controller::controls::Paddle::new()),
|
||||||
|
|||||||
Reference in New Issue
Block a user