From dee7a282a07bc12619942f704793f24f58c2b4eb Mon Sep 17 00:00:00 2001 From: vcaesar Date: Wed, 10 Nov 2021 12:12:29 -0400 Subject: [PATCH] add more mouse button support and Toggle() function style with KeyToggle() --- mouse/mouse.h | 27 +++++++++++++++++------- robotgo.go | 57 +++++++++++++++++++++++++++++++++++++-------------- 2 files changed, 62 insertions(+), 22 deletions(-) diff --git a/mouse/mouse.h b/mouse/mouse.h index 7dff62a..ef061c5 100644 --- a/mouse/mouse.h +++ b/mouse/mouse.h @@ -23,10 +23,14 @@ extern "C" #include // #include - typedef enum { + typedef enum { LEFT_BUTTON = kCGMouseButtonLeft, RIGHT_BUTTON = kCGMouseButtonRight, - CENTER_BUTTON = kCGMouseButtonCenter + CENTER_BUTTON = kCGMouseButtonCenter, + WheelDown = 4, + WheelUp = 5, + WheelLeft = 6, + WheelRight = 7, } MMMouseButton; #elif defined(USE_X11) @@ -34,7 +38,11 @@ extern "C" enum _MMMouseButton { LEFT_BUTTON = 1, CENTER_BUTTON = 2, - RIGHT_BUTTON = 3 + RIGHT_BUTTON = 3, + WheelDown = 4, + WheelUp = 5, + WheelLeft = 6, + WheelRight = 7, }; typedef unsigned int MMMouseButton; @@ -43,7 +51,11 @@ extern "C" enum _MMMouseButton { LEFT_BUTTON = 1, CENTER_BUTTON = 2, - RIGHT_BUTTON = 3 + RIGHT_BUTTON = 3, + WheelDown = 4, + WheelUp = 5, + WheelLeft = 6, + WheelRight = 7, }; typedef unsigned int MMMouseButton; @@ -53,10 +65,11 @@ extern "C" #define MMMouseButtonIsValid(button) \ (button == LEFT_BUTTON || button == RIGHT_BUTTON || \ - button == CENTER_BUTTON) + button == CENTER_BUTTON || button == WheelDown || \ + button == WheelUp || button == WheelLeft || \ + button == WheelRight) -enum __MMMouseWheelDirection -{ +enum __MMMouseWheelDirection { DIRECTION_DOWN = -1, DIRECTION_UP = 1 }; diff --git a/robotgo.go b/robotgo.go index da07d88..8c2cfd1 100644 --- a/robotgo.go +++ b/robotgo.go @@ -415,16 +415,17 @@ func ToRGBA(bit C.MMBitmapRef) *image.RGBA { // CheckMouse check the mouse button func CheckMouse(btn string) C.MMMouseButton { // button = args[0].(C.MMMouseButton) - if btn == "left" { - return C.LEFT_BUTTON + m1 := map[string]C.MMMouseButton{ + "left": C.LEFT_BUTTON, + "center": C.CENTER_BUTTON, + "right": C.RIGHT_BUTTON, + "wheelDown": C.WheelDown, + "wheelUp": C.WheelUp, + "wheelLeft": C.WheelLeft, + "wheelRight": C.WheelRight, } - - if btn == "center" { - return C.CENTER_BUTTON - } - - if btn == "right" { - return C.RIGHT_BUTTON + if v, ok := m1[btn]; ok { + return v } return C.LEFT_BUTTON @@ -445,9 +446,13 @@ func Move(x, y int) { } // DragMouse drag the mouse to (x, y), -// It's not valid now, use the DragSmooth() -func DragMouse(x, y int, args ...string) { - Drag(x, y, args...) +// It's same with the DragSmooth() now +func DragMouse(x, y int, args ...interface{}) { + Toggle("left") + MilliSleep(50) + // Drag(x, y, args...) + MoveSmooth(x, y, args...) + Toggle("left", "up") } // Drag drag the mouse to (x, y), @@ -465,12 +470,12 @@ func Drag(x, y int, args ...string) { MilliSleep(MouseSleep) } -// DragSmooth drag the mouse smooth +// DragSmooth drag the mouse like smooth to (x, y) func DragSmooth(x, y int, args ...interface{}) { - MouseToggle("down") + Toggle("left") MilliSleep(50) MoveSmooth(x, y, args...) - MouseToggle("up") + Toggle("left", "up") } // MoveMouseSmooth move the mouse smooth, @@ -583,6 +588,28 @@ func MovesClick(x, y int, args ...interface{}) { MouseClick(args...) } +// Toggle toggle the mose, support: "left", "center", "right", +// "wheelDown", "wheelUp", "wheelLeft", "wheelRight" +// +// Examples: +// robotgo.Toggle("left", "up") +// robotgo.Toggle("left") // default is down +func Toggle(key ...string) int { + var button C.MMMouseButton = C.LEFT_BUTTON + if len(key) > 0 { + button = CheckMouse(key[0]) + } + down := C.CString("down") + if len(key) > 1 { + down = C.CString(key[1]) + } + + i := C.mouse_toggle(down, button) + C.free(unsafe.Pointer(down)) + MilliSleep(MouseSleep) + return int(i) +} + // MouseToggle toggle the mouse func MouseToggle(togKey string, args ...interface{}) int { var button C.MMMouseButton = C.LEFT_BUTTON