[feat] enable mouse dragging for MacOSx

This commit is contained in:
dijunkun
2025-05-29 17:05:56 +08:00
parent 05d73ebe9a
commit d72c6d9df7
2 changed files with 19 additions and 2 deletions

View File

@@ -28,26 +28,31 @@ int MouseController::SendMouseCommand(RemoteAction remote_action,
if (remote_action.type == ControlType::mouse) { if (remote_action.type == ControlType::mouse) {
CGEventRef mouse_event = nullptr; CGEventRef mouse_event = nullptr;
CGEventType mouse_type; CGEventType mouse_type;
CGMouseButton mouse_button;
CGPoint mouse_point = CGPointMake(mouse_pos_x, mouse_pos_y); CGPoint mouse_point = CGPointMake(mouse_pos_x, mouse_pos_y);
switch (remote_action.m.flag) { switch (remote_action.m.flag) {
case MouseFlag::left_down: case MouseFlag::left_down:
mouse_type = kCGEventLeftMouseDown; mouse_type = kCGEventLeftMouseDown;
left_dragging_ = true;
mouse_event = CGEventCreateMouseEvent(NULL, mouse_type, mouse_point, mouse_event = CGEventCreateMouseEvent(NULL, mouse_type, mouse_point,
kCGMouseButtonLeft); kCGMouseButtonLeft);
break; break;
case MouseFlag::left_up: case MouseFlag::left_up:
mouse_type = kCGEventLeftMouseUp; mouse_type = kCGEventLeftMouseUp;
left_dragging_ = false;
mouse_event = CGEventCreateMouseEvent(NULL, mouse_type, mouse_point, mouse_event = CGEventCreateMouseEvent(NULL, mouse_type, mouse_point,
kCGMouseButtonLeft); kCGMouseButtonLeft);
break; break;
case MouseFlag::right_down: case MouseFlag::right_down:
mouse_type = kCGEventRightMouseDown; mouse_type = kCGEventRightMouseDown;
right_dragging_ = true;
mouse_event = CGEventCreateMouseEvent(NULL, mouse_type, mouse_point, mouse_event = CGEventCreateMouseEvent(NULL, mouse_type, mouse_point,
kCGMouseButtonRight); kCGMouseButtonRight);
break; break;
case MouseFlag::right_up: case MouseFlag::right_up:
mouse_type = kCGEventRightMouseUp; mouse_type = kCGEventRightMouseUp;
right_dragging_ = false;
mouse_event = CGEventCreateMouseEvent(NULL, mouse_type, mouse_point, mouse_event = CGEventCreateMouseEvent(NULL, mouse_type, mouse_point,
kCGMouseButtonRight); kCGMouseButtonRight);
break; break;
@@ -70,9 +75,19 @@ int MouseController::SendMouseCommand(RemoteAction remote_action,
NULL, kCGScrollEventUnitLine, 2, 0, remote_action.m.s); NULL, kCGScrollEventUnitLine, 2, 0, remote_action.m.s);
break; break;
default: default:
if (left_dragging_) {
mouse_type = kCGEventLeftMouseDragged;
mouse_button = kCGMouseButtonLeft;
} else if (right_dragging_) {
mouse_type = kCGEventRightMouseDragged;
mouse_button = kCGMouseButtonRight;
} else {
mouse_type = kCGEventMouseMoved; mouse_type = kCGEventMouseMoved;
mouse_button = kCGMouseButtonLeft;
}
mouse_event = CGEventCreateMouseEvent(NULL, mouse_type, mouse_point, mouse_event = CGEventCreateMouseEvent(NULL, mouse_type, mouse_point,
kCGMouseButtonLeft); mouse_button);
break; break;
} }

View File

@@ -23,6 +23,8 @@ class MouseController : public DeviceController {
private: private:
std::vector<DisplayInfo> display_info_list_; std::vector<DisplayInfo> display_info_list_;
bool left_dragging_ = false;
bool right_dragging_ = false;
}; };
#endif #endif