Compare commits

..

1 Commits

Author SHA1 Message Date
Ferdinand Schober
d1f9afdfd4 produce events in dummy capture-backend 2024-09-02 17:27:03 +02:00
5 changed files with 45 additions and 22 deletions

View File

@@ -1,18 +1,4 @@
use std::process::Command;
fn main() {
// commit hash
let git_describe = Command::new("git")
.arg("describe")
.arg("--always")
.arg("--dirty")
.arg("--tags")
.output()
.unwrap();
let git_describe = String::from_utf8(git_describe.stdout).unwrap();
println!("cargo::rustc-env=GIT_DESCRIBE={git_describe}");
// composite_templates
#[cfg(feature = "gtk")]
glib_build_tools::compile_resources(

View File

@@ -53,7 +53,7 @@
libadwaita
librsvg
xorg.libXtst
] ++ lib.optionals stdenv.isDarwin
] ++ lib.optionals stdenv.isDarwin
(with darwin.apple_sdk_11_0.frameworks; [
CoreGraphics
ApplicationServices

View File

@@ -1,16 +1,28 @@
use std::f64::consts::PI;
use std::pin::Pin;
use std::task::{Context, Poll};
use std::task::{ready, Context, Poll};
use std::time::Duration;
use async_trait::async_trait;
use futures_core::Stream;
use input_event::PointerEvent;
use tokio::time::{self, Instant, Interval};
use super::{Capture, CaptureError, CaptureEvent, CaptureHandle, Position};
pub struct DummyInputCapture {}
pub struct DummyInputCapture {
start: Option<Instant>,
interval: Interval,
offset: (i32, i32),
}
impl DummyInputCapture {
pub fn new() -> Self {
Self {}
Self {
start: None,
interval: time::interval(Duration::from_millis(1)),
offset: (0, 0),
}
}
}
@@ -39,10 +51,36 @@ impl Capture for DummyInputCapture {
}
}
const FREQUENCY_HZ: f64 = 1.0;
const RADIUS: f64 = 100.0;
impl Stream for DummyInputCapture {
type Item = Result<(CaptureHandle, CaptureEvent), CaptureError>;
fn poll_next(self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll<Option<Self::Item>> {
Poll::Pending
fn poll_next(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Option<Self::Item>> {
let current = ready!(self.interval.poll_tick(cx));
let event = match self.start {
None => {
self.start.replace(current);
CaptureEvent::Begin
}
Some(start) => {
let elapsed = start.elapsed();
let elapsed_sec_f64 = elapsed.as_secs_f64();
let second_fraction = elapsed_sec_f64 - elapsed_sec_f64 as u64 as f64;
let radians = second_fraction * 2. * PI * FREQUENCY_HZ;
let offset = (radians.cos() * RADIUS * 2., (radians * 2.).sin() * RADIUS);
let offset = (offset.0 as i32, offset.1 as i32);
let relative_motion = (offset.0 - self.offset.0, offset.1 - self.offset.1);
self.offset = offset;
let (dx, dy) = (relative_motion.0 as f64, relative_motion.1 as f64);
CaptureEvent::Input(input_event::Event::Pointer(PointerEvent::Motion {
time: 0,
dx,
dy,
}))
}
};
Poll::Ready(Some(Ok((0, event))))
}
}

View File

@@ -12,7 +12,6 @@ rustPlatform.buildRustPackage {
version = version;
nativeBuildInputs = with pkgs; [
git
pkg-config
cmake
makeWrapper

View File

@@ -50,7 +50,7 @@ impl ConfigToml {
}
#[derive(Parser, Debug)]
#[command(author, version=env!("GIT_DESCRIBE"), about, long_about = None)]
#[command(author, version, about, long_about = None)]
struct CliArgs {
/// the listen port for lan-mouse
#[arg(short, long)]