1
0

split scroll/zoom into two modes

accidentally switching to zoom mode ended up being pretty annoying
This commit is contained in:
Daniel Prilik
2020-11-01 23:55:51 -05:00
parent 0edac73be3
commit ffa936a0e3
7 changed files with 113 additions and 89 deletions

View File

@@ -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(())
} }

View File

@@ -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::*;

View 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(())
}
}

View File

@@ -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(())
}
}

View File

@@ -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(())
} }

View 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(())
}
}

View File

@@ -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()),