diff --git a/src/device_controller/device_controller.h b/src/device_controller/device_controller.h index 6383d31..3f1ae84 100644 --- a/src/device_controller/device_controller.h +++ b/src/device_controller/device_controller.h @@ -28,8 +28,8 @@ typedef enum { } MouseFlag; typedef enum { key_down = 0, key_up } KeyFlag; typedef struct { - int x; - int y; + float x; + float y; int s; MouseFlag flag; } Mouse; diff --git a/src/device_controller/mouse/linux/mouse_controller.cpp b/src/device_controller/mouse/linux/mouse_controller.cpp index ae92982..5467002 100644 --- a/src/device_controller/mouse/linux/mouse_controller.cpp +++ b/src/device_controller/mouse/linux/mouse_controller.cpp @@ -49,8 +49,8 @@ int MouseController::Init(int screen_width, int screen_height) { int MouseController::Destroy() { return 0; } int MouseController::SendMouseCommand(RemoteAction remote_action) { - int mouse_pos_x = remote_action.m.x; - int mouse_pos_y = remote_action.m.y; + int mouse_pos_x = remote_action.m.x * screen_width_; + int mouse_pos_y = remote_action.m.y * screen_height_; if (remote_action.type == ControlType::mouse) { struct input_event event; diff --git a/src/device_controller/mouse/mac/mouse_controller.cpp b/src/device_controller/mouse/mac/mouse_controller.cpp index 7d870cd..f289790 100644 --- a/src/device_controller/mouse/mac/mouse_controller.cpp +++ b/src/device_controller/mouse/mac/mouse_controller.cpp @@ -12,19 +12,14 @@ int MouseController::Init(int screen_width, int screen_height) { screen_width_ = screen_width; screen_height_ = screen_height; - pixel_width_ = - CGDisplayModeGetPixelWidth(CGDisplayCopyDisplayMode(CGMainDisplayID())); - pixel_height_ = - CGDisplayModeGetPixelHeight(CGDisplayCopyDisplayMode(CGMainDisplayID())); - return 0; } int MouseController::Destroy() { return 0; } int MouseController::SendMouseCommand(RemoteAction remote_action) { - int mouse_pos_x = remote_action.m.x * screen_width_ / pixel_width_; - int mouse_pos_y = remote_action.m.y * screen_height_ / pixel_height_; + int mouse_pos_x = remote_action.m.x * screen_width_; + int mouse_pos_y = remote_action.m.y * screen_height_; if (remote_action.type == ControlType::mouse) { CGEventRef mouse_event = nullptr; diff --git a/src/device_controller/mouse/mac/mouse_controller.h b/src/device_controller/mouse/mac/mouse_controller.h index 526f8eb..276d5a1 100644 --- a/src/device_controller/mouse/mac/mouse_controller.h +++ b/src/device_controller/mouse/mac/mouse_controller.h @@ -22,9 +22,6 @@ class MouseController : public DeviceController { private: int screen_width_ = 0; int screen_height_ = 0; - - int pixel_width_ = 0; - int pixel_height_ = 0; }; #endif \ No newline at end of file diff --git a/src/device_controller/mouse/windows/mouse_controller.cpp b/src/device_controller/mouse/windows/mouse_controller.cpp index 9760ad1..1cf04ea 100644 --- a/src/device_controller/mouse/windows/mouse_controller.cpp +++ b/src/device_controller/mouse/windows/mouse_controller.cpp @@ -20,8 +20,8 @@ int MouseController::SendMouseCommand(RemoteAction remote_action) { if (remote_action.type == ControlType::mouse) { ip.type = INPUT_MOUSE; - ip.mi.dx = (LONG)remote_action.m.x; - ip.mi.dy = (LONG)remote_action.m.y; + ip.mi.dx = (LONG)(remote_action.m.x * screen_width_); + ip.mi.dy = (LONG)(remote_action.m.y * screen_height_); switch (remote_action.m.flag) { case MouseFlag::left_down: diff --git a/src/single_window/render_callback_func.cpp b/src/single_window/render_callback_func.cpp index cd4a7bf..62584f8 100644 --- a/src/single_window/render_callback_func.cpp +++ b/src/single_window/render_callback_func.cpp @@ -62,13 +62,11 @@ int Render::ProcessMouseEvent(SDL_Event &event) { last_mouse_event.button.x = event.button.x; last_mouse_event.button.y = event.button.y; - ratio_x = (float)props->video_width_ / (float)render_width; - ratio_y = (float)props->video_height_ / (float)render_height; - remote_action.m.x = - (size_t)((event.button.x - props->stream_render_rect_.x) * ratio_x); + (float)(event.button.x - props->stream_render_rect_.x) / render_width; remote_action.m.y = - (size_t)((event.button.y - props->stream_render_rect_.y) * ratio_y); + (float)(event.button.y - props->stream_render_rect_.y) / + render_height; if (SDL_MOUSEBUTTONDOWN == event.type) { remote_action.type = ControlType::mouse; @@ -123,14 +121,11 @@ int Render::ProcessMouseEvent(SDL_Event &event) { render_width = props->stream_render_rect_.w; render_height = props->stream_render_rect_.h; - ratio_x = (float)props->video_width_ / (float)render_width; - ratio_y = (float)props->video_height_ / (float)render_height; remote_action.m.x = - (size_t)((last_mouse_event.button.x - props->stream_render_rect_.x) * - ratio_x); + (float)(event.button.x - props->stream_render_rect_.x) / render_width; remote_action.m.y = - (size_t)((last_mouse_event.button.y - props->stream_render_rect_.y) * - ratio_y); + (float)(event.button.y - props->stream_render_rect_.y) / + render_height; SendDataFrame(props->peer_, (const char *)&remote_action, sizeof(remote_action));