[feat] cursor mapping in different displays supported

This commit is contained in:
dijunkun
2025-05-15 19:47:08 +08:00
parent 11358e0b60
commit eca4f614c8
10 changed files with 91 additions and 60 deletions

View File

@@ -9,6 +9,8 @@
#include <stdio.h>
#include "display_info.h"
typedef enum {
mouse = 0,
keyboard,

View File

@@ -6,22 +6,26 @@ MouseController::MouseController() {}
MouseController::~MouseController() {}
int MouseController::Init(int screen_width, int screen_height) {
screen_width_ = screen_width;
screen_height_ = screen_height;
int MouseController::Init(std::vector<DisplayInfo> display_info_list) {
display_info_list_ = display_info_list;
return 0;
}
int MouseController::Destroy() { return 0; }
int MouseController::SendMouseCommand(RemoteAction remote_action) {
int MouseController::SendMouseCommand(RemoteAction remote_action,
int display_index) {
INPUT ip;
if (remote_action.type == ControlType::mouse) {
ip.type = INPUT_MOUSE;
ip.mi.dx = (LONG)(remote_action.m.x * screen_width_);
ip.mi.dy = (LONG)(remote_action.m.y * screen_height_);
ip.mi.dx =
(LONG)(remote_action.m.x * display_info_list_[display_index].width) +
display_info_list_[display_index].left;
ip.mi.dy =
(LONG)(remote_action.m.y * display_info_list_[display_index].height) +
display_info_list_[display_index].top;
switch (remote_action.m.flag) {
case MouseFlag::left_down:
@@ -58,6 +62,7 @@ int MouseController::SendMouseCommand(RemoteAction remote_action) {
ip.mi.time = 0;
SetCursorPos(ip.mi.dx, ip.mi.dy);
LOG_ERROR("mouse {}x{}", ip.mi.dx, ip.mi.dy);
if (ip.mi.dwFlags != MOUSEEVENTF_MOVE) {
SendInput(1, &ip, sizeof(INPUT));

View File

@@ -7,6 +7,8 @@
#ifndef _MOUSE_CONTROLLER_H_
#define _MOUSE_CONTROLLER_H_
#include <vector>
#include "device_controller.h"
class MouseController : public DeviceController {
@@ -15,13 +17,12 @@ class MouseController : public DeviceController {
virtual ~MouseController();
public:
virtual int Init(int screen_width, int screen_height);
virtual int Init(std::vector<DisplayInfo> display_info_list);
virtual int Destroy();
virtual int SendMouseCommand(RemoteAction remote_action);
virtual int SendMouseCommand(RemoteAction remote_action, int display_index);
private:
int screen_width_ = 0;
int screen_height_ = 0;
std::vector<DisplayInfo> display_info_list_;
};
#endif