diff --git a/README.md b/README.md index 376414c2..1b6cecbb 100644 --- a/README.md +++ b/README.md @@ -251,16 +251,16 @@ func main() { imgo.Save("test.png", img) num := robotgo.DisplaysNum() - for i := 0; i < num; i++ { - robotgo.DisplayID = i - img1 := robotgo.CaptureImg() + for i := 0; i < num; i++ { + robotgo.DisplayID = i + img1 := robotgo.CaptureImg() path1 := "save_" + strconv.Itoa(i) - robotgo.Save(img1, path1+".png") - robotgo.SaveJpeg(img1, path1+".jpeg", 50) + robotgo.Save(img1, path1+".png") + robotgo.SaveJpeg(img1, path1+".jpeg", 50) - img2 := robotgo.CaptureImg(10, 10, 20, 20) - robotgo.Save(img2, "test_"+strconv.Itoa(i)+".png") - } + img2 := robotgo.CaptureImg(10, 10, 20, 20) + robotgo.Save(img2, "test_"+strconv.Itoa(i)+".png") + } } ``` diff --git a/base/bitmap_free_c.h b/base/bitmap_free_c.h index e4c751f3..2c97af91 100644 --- a/base/bitmap_free_c.h +++ b/base/bitmap_free_c.h @@ -2,14 +2,9 @@ #include #include -MMBitmapRef createMMBitmap_c( - uint8_t *buffer, - size_t width, - size_t height, - size_t bytewidth, - uint8_t bitsPerPixel, - uint8_t bytesPerPixel -){ +MMBitmapRef createMMBitmap_c(uint8_t *buffer, size_t width, size_t height, + size_t bytewidth, uint8_t bitsPerPixel, uint8_t bytesPerPixel +) { MMBitmapRef bitmap = malloc(sizeof(MMBitmap)); if (bitmap == NULL) { return NULL; } diff --git a/base/endian.h b/base/endian.h index 2bc7c521..cbc7c542 100644 --- a/base/endian.h +++ b/base/endian.h @@ -82,7 +82,7 @@ #define bitswap16(i) bswap_16(i) /* Linux system function */ #else /* Default macro */ #define bitswap16(i) (((uint16_t)(i) & 0xFF00) >> 8) | \ - (((uint16_t)(i) & 0x00FF) << 8) + (((uint16_t)(i) & 0x00FF) << 8) #endif #endif /* bitswap16 */ diff --git a/base/ms_stdbool.h b/base/ms_stdbool.h index a6554452..1aae547f 100644 --- a/base/ms_stdbool.h +++ b/base/ms_stdbool.h @@ -10,7 +10,6 @@ #define __bool_true_false_are_defined 1 #ifndef __cplusplus - #if defined(true) || defined(false) || defined(bool) #error "Boolean type already defined" #endif @@ -21,7 +20,6 @@ }; typedef unsigned char bool; - #endif /* !__cplusplus */ #endif /* MS_STDBOOL_H */ diff --git a/base/rgb.h b/base/rgb.h index db0e3f79..0810fc4a 100644 --- a/base/rgb.h +++ b/base/rgb.h @@ -12,7 +12,6 @@ #include #endif - /* RGB colors in MMBitmaps are stored as BGR for convenience in converting * to/from certain formats (mainly OpenGL). * @@ -46,8 +45,7 @@ typedef uint32_t MMRGBHex; #define RGB_TO_HEX(red, green, blue) (((red) << 16) | ((green) << 8) | (blue)) /* Convenience wrapper for MMRGBColors. */ -H_INLINE MMRGBHex hexFromMMRGB(MMRGBColor rgb) -{ +H_INLINE MMRGBHex hexFromMMRGB(MMRGBColor rgb) { return RGB_TO_HEX(rgb.red, rgb.green, rgb.blue); } @@ -56,8 +54,7 @@ H_INLINE MMRGBHex hexFromMMRGB(MMRGBColor rgb) #define BLUE_FROM_HEX(hex) (hex & 0xFF) /* Converts hexadecimal color to MMRGBColor. */ -H_INLINE MMRGBColor MMRGBFromHex(MMRGBHex hex) -{ +H_INLINE MMRGBColor MMRGBFromHex(MMRGBHex hex) { MMRGBColor color; color.red = RED_FROM_HEX(hex); color.green = GREEN_FROM_HEX(hex); @@ -73,9 +70,7 @@ H_INLINE MMRGBColor MMRGBFromHex(MMRGBHex hex) /* Returns whether two colors are similar within the given range, |tolerance|. * Tolerance can be in the range 0.0f - 1.0f, where 0 denotes the exact * color and 1 denotes any color. */ -H_INLINE int MMRGBColorSimilarToColor(MMRGBColor c1, MMRGBColor c2, - float tolerance) -{ +H_INLINE int MMRGBColorSimilarToColor(MMRGBColor c1, MMRGBColor c2, float tolerance) { /* Speedy case */ if (tolerance <= 0.0f) { return MMRGBColorEqualToColor(c1, c2); @@ -87,12 +82,10 @@ H_INLINE int MMRGBColorSimilarToColor(MMRGBColor c1, MMRGBColor c2, (d2 * d2) + (d3 * d3)) <= (tolerance * 442.0f); } - } /* Identical to MMRGBColorSimilarToColor, only for hex values. */ -H_INLINE int MMRGBHexSimilarToColor(MMRGBHex h1, MMRGBHex h2, float tolerance) -{ +H_INLINE int MMRGBHexSimilarToColor(MMRGBHex h1, MMRGBHex h2, float tolerance) { if (tolerance <= 0.0f) { return h1 == h2; } else { diff --git a/base/types.h b/base/types.h index 0e68a830..d76ef3e7 100644 --- a/base/types.h +++ b/base/types.h @@ -8,7 +8,6 @@ #include /* Some generic, cross-platform types. */ - #ifdef RobotGo_64 typedef int64_t intptr; typedef uint64_t uintptr; @@ -21,87 +20,74 @@ struct _MMPoint { size_t x; size_t y; }; - typedef struct _MMPoint MMPoint; struct _MMPointInt32 { int32_t x; int32_t y; }; - typedef struct _MMPointInt32 MMPointInt32; struct _MMSize { size_t width; size_t height; }; - typedef struct _MMSize MMSize; struct _MMSizeInt32 { int32_t w; int32_t h; }; - typedef struct _MMSizeInt32 MMSizeInt32; - struct _MMRect { MMPoint origin; MMSize size; }; - typedef struct _MMRect MMRect; struct _MMRectInt32 { MMPointInt32 origin; MMSizeInt32 size; }; - typedef struct _MMRectInt32 MMRectInt32; -H_INLINE MMPoint MMPointMake(size_t x, size_t y) -{ +H_INLINE MMPoint MMPointMake(size_t x, size_t y) { MMPoint point; point.x = x; point.y = y; return point; } -H_INLINE MMPointInt32 MMPointInt32Make(int32_t x, int32_t y) -{ +H_INLINE MMPointInt32 MMPointInt32Make(int32_t x, int32_t y) { MMPointInt32 point; point.x = x; point.y = y; return point; } -H_INLINE MMSize MMSizeMake(size_t width, size_t height) -{ +H_INLINE MMSize MMSizeMake(size_t width, size_t height) { MMSize size; size.width = width; size.height = height; return size; } -H_INLINE MMSizeInt32 MMSizeInt32Make(int32_t w, int32_t h) -{ +H_INLINE MMSizeInt32 MMSizeInt32Make(int32_t w, int32_t h) { MMSizeInt32 size; size.w = w; size.h = h; return size; } -H_INLINE MMRect MMRectMake(size_t x, size_t y, size_t width, size_t height) -{ +H_INLINE MMRect MMRectMake(size_t x, size_t y, size_t width, size_t height) { MMRect rect; rect.origin = MMPointMake(x, y); rect.size = MMSizeMake(width, height); return rect; } -H_INLINE MMRectInt32 MMRectInt32Make(int32_t x, int32_t y, int32_t w, int32_t h) -{ +H_INLINE MMRectInt32 MMRectInt32Make(int32_t x, int32_t y, int32_t w, int32_t h) { MMRectInt32 rect; rect.origin = MMPointInt32Make(x, y); rect.size = MMSizeInt32Make(w, h); @@ -112,18 +98,14 @@ H_INLINE MMRectInt32 MMRectInt32Make(int32_t x, int32_t y, int32_t w, int32_t h) #define MMPointZero MMPointMake(0, 0) #if defined(IS_MACOSX) + #define CGPointFromMMPoint(p) CGPointMake((CGFloat)(p).x, (CGFloat)(p).y) + #define MMPointFromCGPoint(p) MMPointMake((size_t)(p).x, (size_t)(p).y) -#define CGPointFromMMPoint(p) CGPointMake((CGFloat)(p).x, (CGFloat)(p).y) -#define MMPointFromCGPoint(p) MMPointMake((size_t)(p).x, (size_t)(p).y) - -#define CGPointFromMMPointInt32(p) CGPointMake((CGFloat)(p).x, (CGFloat)(p).y) -#define MMPointInt32FromCGPoint(p) MMPointInt32Make((int32_t)(p).x, (int32_t)(p).y) - + #define CGPointFromMMPointInt32(p) CGPointMake((CGFloat)(p).x, (CGFloat)(p).y) + #define MMPointInt32FromCGPoint(p) MMPointInt32Make((int32_t)(p).x, (int32_t)(p).y) #elif defined(IS_WINDOWS) - -#define MMPointFromPOINT(p) MMPointMake((size_t)p.x, (size_t)p.y) -#define MMPointInt32FromPOINT(p) MMPointInt32Make((int32_t)p.x, (int32_t)p.y) - + #define MMPointFromPOINT(p) MMPointMake((size_t)p.x, (size_t)p.y) + #define MMPointInt32FromPOINT(p) MMPointInt32Make((int32_t)p.x, (int32_t)p.y) #endif #endif /* TYPES_H */ diff --git a/base/win32.h b/base/win32.h index d4e24852..6dfecc73 100644 --- a/base/win32.h +++ b/base/win32.h @@ -30,5 +30,4 @@ // printf("%d\n", info.hWnd); return info.hWnd; } - #endif \ No newline at end of file diff --git a/key/goKey.h b/key/goKey.h index 29dfa310..b1f79c67 100644 --- a/key/goKey.h +++ b/key/goKey.h @@ -172,23 +172,23 @@ int CheckKeyCodes(char* k, MMKeyCode *key){ int CheckKeyFlags(char* f, MMKeyFlags* flags){ if (!flags) { return -1; } - if ( strcmp(f, "alt") == 0 || strcmp(f, "ralt") == 0 || + if (strcmp(f, "alt") == 0 || strcmp(f, "ralt") == 0 || strcmp(f, "lalt") == 0 ) { *flags = MOD_ALT; } - else if( strcmp(f, "command") == 0 || strcmp(f, "cmd") == 0 || + else if(strcmp(f, "command") == 0 || strcmp(f, "cmd") == 0 || strcmp(f, "rcmd") == 0 || strcmp(f, "lcmd") == 0 ) { *flags = MOD_META; } - else if( strcmp(f, "control") == 0 || strcmp(f, "ctrl") == 0 || + else if(strcmp(f, "control") == 0 || strcmp(f, "ctrl") == 0 || strcmp(f, "rctrl") == 0 || strcmp(f, "lctrl") == 0 ) { *flags = MOD_CONTROL; } - else if( strcmp(f, "shift") == 0 || strcmp(f, "right_shift") == 0 || + else if(strcmp(f, "shift") == 0 || strcmp(f, "right_shift") == 0 || strcmp(f, "rshift") == 0 || strcmp(f, "lshift") == 0 ) { *flags = MOD_SHIFT; } - else if( strcmp(f, "none") == 0 ) { + else if(strcmp(f, "none") == 0 ) { *flags = (MMKeyFlags) MOD_NONE; } else { return -2; @@ -332,6 +332,7 @@ char* key_Toggles(char* k, char* keyArr[], int num) { return ""; } +// remove char* key_toggle(char* k, char* d, char* akey, char* keyT){ MMKeyFlags flags = (MMKeyFlags) MOD_NONE; MMKeyCode key; @@ -390,13 +391,6 @@ char* key_toggle(char* k, char* d, char* akey, char* keyT){ return ""; } -void type_string(char *str){ - typeStringDelayed(str, 0); -} - -void type_string_delayed(char *str, size_t cpm){ - typeStringDelayed(str, cpm); -} void set_keyboard_delay(size_t val){ keyboardDelay = val; diff --git a/key/keycode_c.h b/key/keycode_c.h index 8e54dcba..97c5a50d 100644 --- a/key/keycode_c.h +++ b/key/keycode_c.h @@ -1,19 +1,16 @@ #include "keycode.h" #if defined(IS_MACOSX) + #include + #include /* For kVK_ constants, and TIS functions. */ -#include -#include /* For kVK_ constants, and TIS functions. */ - -/* Returns string representation of key, if it is printable. - * Ownership follows the Create Rule; that is, it is the caller's - * responsibility to release the returned object. */ -CFStringRef createStringForKey(CGKeyCode keyCode); - -MMKeyCode keyCodeForCharFallBack(const char c); + /* Returns string representation of key, if it is printable. + * Ownership follows the Create Rule; that is, it is the caller's + * responsibility to release the returned object. */ + CFStringRef createStringForKey(CGKeyCode keyCode); + MMKeyCode keyCodeForCharFallBack(const char c); #elif defined(USE_X11) - /* * Structs to store key mappings not handled by XStringToKeysym() on some * Linux systems. @@ -77,11 +74,9 @@ MMKeyCode keyCodeForChar(const char c){ /* Generate table of keycodes and characters. */ if (charToCodeDict == NULL) { size_t i; - charToCodeDict = CFDictionaryCreateMutable(kCFAllocatorDefault, - 128, - &kCFCopyStringDictionaryKeyCallBacks, - NULL); - if (charToCodeDict == NULL) return K_NOT_A_KEY; + charToCodeDict = CFDictionaryCreateMutable(kCFAllocatorDefault, 128, + &kCFCopyStringDictionaryKeyCallBacks, NULL); + if (charToCodeDict == NULL) { return K_NOT_A_KEY; } /* Loop through every keycode (0 - 127) to find its current mapping. */ for (i = 0; i < 128; ++i) { @@ -135,7 +130,7 @@ MMKeyCode keyCodeForChar(const char c){ * mapping table. */ struct XSpecialCharacterMapping* xs = XSpecialCharacterTable; while (xs->name) { - if (c == xs->name ) { + if (c == xs->name) { code = xs->code; // break; @@ -152,34 +147,22 @@ MMKeyCode keyCodeForChar(const char c){ #endif } - #if defined(IS_MACOSX) - CFStringRef createStringForKey(CGKeyCode keyCode){ TISInputSourceRef currentKeyboard = TISCopyCurrentASCIICapableKeyboardInputSource(); - CFDataRef layoutData = - (CFDataRef)TISGetInputSourceProperty(currentKeyboard, - kTISPropertyUnicodeKeyLayoutData); + CFDataRef layoutData = (CFDataRef) TISGetInputSourceProperty( + currentKeyboard, kTISPropertyUnicodeKeyLayoutData); if (layoutData == nil) { return 0; } - const UCKeyboardLayout *keyboardLayout = - (const UCKeyboardLayout *)CFDataGetBytePtr(layoutData); - + const UCKeyboardLayout *keyboardLayout = (const UCKeyboardLayout *) CFDataGetBytePtr(layoutData); UInt32 keysDown = 0; UniChar chars[4]; UniCharCount realLength; - UCKeyTranslate(keyboardLayout, - keyCode, - kUCKeyActionDisplay, - 0, - LMGetKbdType(), - kUCKeyTranslateNoDeadKeysBit, - &keysDown, - sizeof(chars) / sizeof(chars[0]), - &realLength, - chars); + UCKeyTranslate(keyboardLayout, keyCode, kUCKeyActionDisplay, 0, LMGetKbdType(), + kUCKeyTranslateNoDeadKeysBit, &keysDown, + sizeof(chars) / sizeof(chars[0]), &realLength, chars); CFRelease(currentKeyboard); return CFStringCreateWithCharacters(kCFAllocatorDefault, chars, 1); diff --git a/key/keypress.h b/key/keypress.h index 20e84d69..946a66e5 100644 --- a/key/keypress.h +++ b/key/keypress.h @@ -17,7 +17,6 @@ extern "C" #endif #if defined(IS_MACOSX) - typedef enum { MOD_NONE = 0, MOD_META = kCGEventFlagMaskCommand, @@ -25,9 +24,7 @@ extern "C" MOD_CONTROL = kCGEventFlagMaskControl, MOD_SHIFT = kCGEventFlagMaskShift } MMKeyFlags; - #elif defined(USE_X11) - enum _MMKeyFlags { MOD_NONE = 0, MOD_META = Mod4Mask, @@ -37,9 +34,7 @@ extern "C" }; typedef unsigned int MMKeyFlags; - #elif defined(IS_WINDOWS) - enum _MMKeyFlags { MOD_NONE = 0, /* These are already defined by the Win32 API */ @@ -50,7 +45,6 @@ extern "C" }; typedef unsigned int MMKeyFlags; - #endif #if defined(IS_WINDOWS) diff --git a/key/keypress_c.h b/key/keypress_c.h index 8fd05029..e9e0d9fe 100644 --- a/key/keypress_c.h +++ b/key/keypress_c.h @@ -3,7 +3,6 @@ #include "../base/microsleep.h" #include /* For isupper() */ - #if defined(IS_MACOSX) #include #import @@ -18,34 +17,29 @@ #define WIN32_KEY_EVENT_WAIT(key, flags) \ (win32KeyEvent(key, flags), Sleep(DEADBEEF_RANDRANGE(0, 1))) #elif defined(USE_X11) - #define X_KEY_EVENT(display, key, is_press) \ - (XTestFakeKeyEvent(display, \ - XKeysymToKeycode(display, key), \ - is_press, CurrentTime), \ - XSync(display, false)) - #define X_KEY_EVENT_WAIT(display, key, is_press) \ - (X_KEY_EVENT(display, key, is_press), \ - microsleep(DEADBEEF_UNIFORM(0.0, 0.5))) + #define X_KEY_EVENT(display, key, is_press) ( \ + XTestFakeKeyEvent(display, XKeysymToKeycode(display, key), is_press, CurrentTime), \ + XSync(display, false)) + #define X_KEY_EVENT_WAIT(display, key, is_press) ( \ + X_KEY_EVENT(display, key, is_press), microsleep(DEADBEEF_UNIFORM(0.0, 0.5))) #endif #if defined(IS_MACOSX) -static io_connect_t _getAuxiliaryKeyDriver(void){ +static io_connect_t _getAuxiliaryKeyDriver(void) { static mach_port_t sEventDrvrRef = 0; mach_port_t masterPort, service, iter; kern_return_t kr; if (!sEventDrvrRef) { - kr = IOMasterPort( bootstrap_port, &masterPort ); + kr = IOMasterPort(bootstrap_port, &masterPort); assert(KERN_SUCCESS == kr); - kr = IOServiceGetMatchingServices(masterPort, - IOServiceMatching( kIOHIDSystemClass), &iter ); + kr = IOServiceGetMatchingServices(masterPort, IOServiceMatching(kIOHIDSystemClass), &iter); assert(KERN_SUCCESS == kr); - service = IOIteratorNext( iter ); + service = IOIteratorNext(iter); assert(service); - kr = IOServiceOpen(service, - mach_task_self(), kIOHIDParamConnectType, &sEventDrvrRef ); + kr = IOServiceOpen(service, mach_task_self(), kIOHIDParamConnectType, &sEventDrvrRef); assert(KERN_SUCCESS == kr); IOObjectRelease(service); @@ -56,7 +50,7 @@ static io_connect_t _getAuxiliaryKeyDriver(void){ #endif #if defined(IS_WINDOWS) -void win32KeyEvent(int key, MMKeyFlags flags){ +void win32KeyEvent(int key, MMKeyFlags flags) { int scan = MapVirtualKey(key & 0xff, MAPVK_VK_TO_VSC); /* Set the scan code for extended keys */ @@ -103,7 +97,6 @@ void win32KeyEvent(int key, MMKeyFlags flags){ // if ( flags & KEYEVENTF_KEYUP ) { // scan |= 0x80; // } - // keybd_event(key, scan, flags, 0); INPUT keyInput; @@ -118,12 +111,12 @@ void win32KeyEvent(int key, MMKeyFlags flags){ } #endif -void toggleKeyCode(MMKeyCode code, const bool down, MMKeyFlags flags){ +void toggleKeyCode(MMKeyCode code, const bool down, MMKeyFlags flags) { #if defined(IS_MACOSX) /* The media keys all have 1000 added to them to help us detect them. */ if (code >= 1000) { code = code - 1000; /* Get the real keycode. */ - NXEventData event; + NXEventData event; kern_return_t kr; IOGPoint loc = { 0, 0 }; @@ -133,12 +126,11 @@ void toggleKeyCode(MMKeyCode code, const bool down, MMKeyFlags flags){ event.compound.subType = NX_SUBTYPE_AUX_CONTROL_BUTTONS; event.compound.misc.L[0] = evtInfo; - kr = IOHIDPostEvent( _getAuxiliaryKeyDriver(), - NX_SYSDEFINED, loc, &event, kNXEventDataVersion, 0, FALSE ); - assert( KERN_SUCCESS == kr ); + kr = IOHIDPostEvent(_getAuxiliaryKeyDriver(), + NX_SYSDEFINED, loc, &event, kNXEventDataVersion, 0, FALSE); + assert(KERN_SUCCESS == kr); } else { - CGEventRef keyEvent = CGEventCreateKeyboardEvent(NULL, - (CGKeyCode)code, down); + CGEventRef keyEvent = CGEventCreateKeyboardEvent(NULL, (CGKeyCode)code, down); assert(keyEvent != NULL); CGEventSetType(keyEvent, down ? kCGEventKeyDown : kCGEventKeyUp); @@ -269,13 +261,11 @@ void toggleUnicode(UniChar ch, const bool down){ XFlush(dpy); KeyCode code = XKeysymToKeycode(dpy, sym); - XTestFakeKeyEvent(dpy, code, True, 1); XTestFakeKeyEvent(dpy, code, False, 1); XFlush(dpy); XCloseDisplay(dpy); - return 0; } #endif @@ -313,52 +303,4 @@ void unicodeType(const unsigned value){ microsleep(5.0); toggleUniKey(value, false); #endif -} - -// todo: removed -void typeStringDelayed(const char *str, const unsigned cpm){ - - /* Characters per second */ - const double cps = (double)cpm / 60.0; - - /* Average milli-seconds per character */ - const double mspc = (cps == 0.0) ? 0.0 : 1000.0 / cps; - - unsigned long n; - unsigned short c; - unsigned short c1; - unsigned short c2; - unsigned short c3; - - while (*str != '\0') { - c = *str++; - - // warning, the following utf8 decoder - // doesn't perform validation - if (c <= 0x7F) { - // 0xxxxxxx one byte - n = c; - } else if ((c & 0xE0) == 0xC0) { - // 110xxxxx two bytes - c1 = (*str++) & 0x3F; - n = ((c & 0x1F) << 6) | c1; - } else if ((c & 0xF0) == 0xE0) { - // 1110xxxx three bytes - c1 = (*str++) & 0x3F; - c2 = (*str++) & 0x3F; - n = ((c & 0x0F) << 12) | (c1 << 6) | c2; - } else if ((c & 0xF8) == 0xF0) { - // 11110xxx four bytes - c1 = (*str++) & 0x3F; - c2 = (*str++) & 0x3F; - c3 = (*str++) & 0x3F; - n = ((c & 0x07) << 18) | (c1 << 12) | (c2 << 6) | c3; - } - - unicodeType(n); - - if (mspc > 0) { - microsleep(mspc + (DEADBEEF_UNIFORM(0.0, 0.5))); - } - } } \ No newline at end of file diff --git a/mouse/mouse_c.h b/mouse/mouse_c.h index d6da85d9..a34e44b5 100644 --- a/mouse/mouse_c.h +++ b/mouse/mouse_c.h @@ -30,18 +30,15 @@ #define MMMouseDownToCGEventType(button) \ ((button) == (LEFT_BUTTON) ? kCGEventLeftMouseDown \ - : ((button) == RIGHT_BUTTON ? kCGEventRightMouseDown \ - : kCGEventOtherMouseDown)) + : ((button) == RIGHT_BUTTON ? kCGEventRightMouseDown : kCGEventOtherMouseDown)) #define MMMouseUpToCGEventType(button) \ ((button) == LEFT_BUTTON ? kCGEventLeftMouseUp \ - : ((button) == RIGHT_BUTTON ? kCGEventRightMouseUp \ - : kCGEventOtherMouseUp)) + : ((button) == RIGHT_BUTTON ? kCGEventRightMouseUp : kCGEventOtherMouseUp)) #define MMMouseDragToCGEventType(button) \ ((button) == LEFT_BUTTON ? kCGEventLeftMouseDragged \ - : ((button) == RIGHT_BUTTON ? kCGEventRightMouseDragged \ - : kCGEventOtherMouseDragged)) + : ((button) == RIGHT_BUTTON ? kCGEventRightMouseDragged : kCGEventOtherMouseDragged)) #elif defined(IS_WINDOWS) @@ -50,13 +47,11 @@ #define MMMouseUpToMEventF(button) \ ((button) == LEFT_BUTTON ? MOUSEEVENTF_LEFTUP \ - : ((button) == RIGHT_BUTTON ? MOUSEEVENTF_RIGHTUP \ - : MOUSEEVENTF_MIDDLEUP)) + : ((button) == RIGHT_BUTTON ? MOUSEEVENTF_RIGHTUP : MOUSEEVENTF_MIDDLEUP)) #define MMMouseDownToMEventF(button) \ ((button) == LEFT_BUTTON ? MOUSEEVENTF_LEFTDOWN \ - : ((button) == RIGHT_BUTTON ? MOUSEEVENTF_RIGHTDOWN \ - : MOUSEEVENTF_MIDDLEDOWN)) + : ((button) == RIGHT_BUTTON ? MOUSEEVENTF_RIGHTDOWN : MOUSEEVENTF_MIDDLEDOWN)) #endif @@ -158,8 +153,8 @@ MMPointInt32 getMousePos(){ unsigned int more_garbage; Display *display = XGetMainDisplay(); - XQueryPointer(display, XDefaultRootWindow(display), &garb1, &garb2, - &x, &y, &garb_x, &garb_y, &more_garbage); + XQueryPointer(display, XDefaultRootWindow(display), &garb1, &garb2, &x, &y, + &garb_x, &garb_y, &more_garbage); return MMPointInt32Make(x, y); #elif defined(IS_WINDOWS) @@ -179,8 +174,7 @@ void toggleMouse(bool down, MMMouseButton button){ #if defined(IS_MACOSX) const CGPoint currentPos = CGPointFromMMPoint(getMousePos()); const CGEventType mouseType = MMMouseToCGEventType(down, button); - CGEventRef event = CGEventCreateMouseEvent(NULL, - mouseType, currentPos, (CGMouseButton)button); + CGEventRef event = CGEventCreateMouseEvent(NULL, mouseType, currentPos, (CGMouseButton)button); CGEventPost(kCGSessionEventTap, event); CFRelease(event); @@ -215,32 +209,26 @@ void clickMouse(MMMouseButton button){ */ void doubleClick(MMMouseButton button){ #if defined(IS_MACOSX) - /* Double click for Mac. */ const CGPoint currentPos = CGPointFromMMPoint(getMousePos()); const CGEventType mouseTypeDown = MMMouseToCGEventType(true, button); const CGEventType mouseTypeUP = MMMouseToCGEventType(false, button); - CGEventRef event = CGEventCreateMouseEvent( - NULL, mouseTypeDown, currentPos, kCGMouseButtonLeft); + CGEventRef event = CGEventCreateMouseEvent(NULL, mouseTypeDown, currentPos, kCGMouseButtonLeft); /* Set event to double click. */ CGEventSetIntegerValueField(event, kCGMouseEventClickState, 2); - CGEventPost(kCGHIDEventTap, event); CGEventSetType(event, mouseTypeUP); CGEventPost(kCGHIDEventTap, event); CFRelease(event); - #else - /* Double click for everything else. */ clickMouse(button); microsleep(200); clickMouse(button); - #endif } @@ -272,13 +260,9 @@ void scrollMouse(int scrollMagnitude, MMMouseWheelDirection scrollDirection){ /* Make scroll magnitude negative if we're scrolling down. */ cleanScrollMagnitude = cleanScrollMagnitude * scrollDirection; - event = CGEventCreateScrollWheelEvent(NULL, - kCGScrollEventUnitLine, wheel, cleanScrollMagnitude, 0); - + event = CGEventCreateScrollWheelEvent(NULL, kCGScrollEventUnitLine, wheel, cleanScrollMagnitude, 0); CGEventPost(kCGHIDEventTap, event); - #elif defined(USE_X11) - int x; int dir = 4; /* Button 4 is up, 5 is down. */ Display *display = XGetMainDisplay(); @@ -293,9 +277,7 @@ void scrollMouse(int scrollMagnitude, MMMouseWheelDirection scrollDirection){ } XSync(display, false); - #elif defined(IS_WINDOWS) - mouseScrollInput.type = INPUT_MOUSE; mouseScrollInput.mi.dx = 0; mouseScrollInput.mi.dy = 0; @@ -305,7 +287,6 @@ void scrollMouse(int scrollMagnitude, MMMouseWheelDirection scrollDirection){ mouseScrollInput.mi.mouseData = WHEEL_DELTA * scrollDirection * cleanScrollMagnitude; SendInput(1, &mouseScrollInput, sizeof(mouseScrollInput)); - #endif } @@ -322,16 +303,12 @@ void scrollMouseXY(int x, int y) { /* Set up the OS specific solution */ #if defined(__APPLE__) - CGEventRef event; - event = CGEventCreateScrollWheelEvent(NULL, kCGScrollEventUnitPixel, 2, y, x); CGEventPost(kCGHIDEventTap, event); CFRelease(event); - #elif defined(USE_X11) - int ydir = 4; /* Button 4 is up, 5 is down. */ int xdir = 6; Display *display = XGetMainDisplay(); @@ -355,9 +332,7 @@ void scrollMouseXY(int x, int y) { } XSync(display, false); - #elif defined(IS_WINDOWS) - mouseScrollInputH.type = INPUT_MOUSE; mouseScrollInputH.mi.dx = 0; mouseScrollInputH.mi.dy = 0; @@ -408,9 +383,7 @@ bool smoothlyMoveMouse(MMPointInt32 endPoint, double lowSpeed, double highSpeed) double velo_x = 0.0, velo_y = 0.0; double distance; - while ((distance = - crude_hypot((double)pos.x - endPoint.x, (double)pos.y - endPoint.y) - ) > 1.0) { + while ((distance =crude_hypot((double)pos.x - endPoint.x, (double)pos.y - endPoint.y)) > 1.0) { double gravity = DEADBEEF_UNIFORM(5.0, 500.0); // double gravity = DEADBEEF_UNIFORM(lowSpeed, highSpeed); diff --git a/robotgo.go b/robotgo.go index e2561431..ea02289b 100644 --- a/robotgo.go +++ b/robotgo.go @@ -1136,25 +1136,6 @@ func PasteStr(str string) string { return KeyTap("v", "control") } -// Deprecated: use the TypeStr(), -// -// TypeString send a string, support unicode(no linux support) -// TypeStr(string: The string to send), Wno-deprecated -// -// This function will be removed in version v1.0.0 -func TypeString(str string, delay ...int) { - tt.Drop("TypeString", "TypeStr") - var cdelay C.size_t - cstr := C.CString(str) - if len(delay) > 0 { - cdelay = C.size_t(delay[0]) - } - - C.type_string_delayed(cstr, cdelay) - - C.free(unsafe.Pointer(cstr)) -} - // TypeStrDelay type string delayed func TypeStrDelay(str string, delay int) { TypeStr(str) diff --git a/screen/screengrab_c.h b/screen/screengrab_c.h index 72f8203a..1b13b67f 100644 --- a/screen/screengrab_c.h +++ b/screen/screengrab_c.h @@ -37,13 +37,10 @@ MMBitmapRef copyMMBitmapFromDisplayInRect(MMRectInt32 rect, int32_t display_id) bufferSize = CFDataGetLength(imageData); buffer = malloc(bufferSize); - CFDataGetBytes(imageData, CFRangeMake(0, bufferSize), buffer); - bitmap = createMMBitmap_c(buffer, - CGImageGetWidth(image), CGImageGetHeight(image), - CGImageGetBytesPerRow(image), CGImageGetBitsPerPixel(image), - CGImageGetBitsPerPixel(image) / 8); + bitmap = createMMBitmap_c(buffer, CGImageGetWidth(image), CGImageGetHeight(image), + CGImageGetBytesPerRow(image), CGImageGetBitsPerPixel(image),CGImageGetBitsPerPixel(image) / 8); CFRelease(imageData); CGImageRelease(image); @@ -58,16 +55,15 @@ MMBitmapRef copyMMBitmapFromDisplayInRect(MMRectInt32 rect, int32_t display_id) display = XGetMainDisplay(); } - XImage *image = XGetImage(display, XDefaultRootWindow(display), + XImage *image = XGetImage(display, XDefaultRootWindow(display), (int)rect.origin.x, (int)rect.origin.y, - (unsigned int)rect.size.w, (unsigned int)rect.size.h, - AllPlanes, ZPixmap); + (unsigned int)rect.size.w, (unsigned int)rect.size.h, AllPlanes, ZPixmap); XCloseDisplay(display); if (image == NULL) { return NULL; } bitmap = createMMBitmap_c((uint8_t *)image->data, - rect.size.w, rect.size.h, (size_t)image->bytes_per_line, - (uint8_t)image->bits_per_pixel, (uint8_t)image->bits_per_pixel / 8); + rect.size.w, rect.size.h, (size_t)image->bytes_per_line, + (uint8_t)image->bits_per_pixel, (uint8_t)image->bits_per_pixel / 8); image->data = NULL; /* Steal ownership of bitmap data so we don't have to copy it. */ XDestroyImage(image); @@ -103,9 +99,8 @@ MMBitmapRef copyMMBitmapFromDisplayInRect(MMRectInt32 rect, int32_t display_id) dib = CreateDIBSection(screen, &bi, DIB_RGB_COLORS, &data, NULL, 0); /* Copy the data into a bitmap struct. */ - if ((screenMem = CreateCompatibleDC(screen)) == NULL || - SelectObject(screenMem, dib) == NULL || - !BitBlt(screenMem, (int)0, (int)0, (int)rect.size.w, (int)rect.size.h, + if ((screenMem = CreateCompatibleDC(screen)) == NULL || SelectObject(screenMem, dib) == NULL || + !BitBlt(screenMem, (int)0, (int)0, (int)rect.size.w, (int)rect.size.h, screen, rect.origin.x, rect.origin.y, SRCCOPY) ) { @@ -118,7 +113,7 @@ MMBitmapRef copyMMBitmapFromDisplayInRect(MMRectInt32 rect, int32_t display_id) } bitmap = createMMBitmap_c(NULL, rect.size.w, rect.size.h, 4 * rect.size.w, - (uint8_t)bi.bmiHeader.biBitCount, 4); + (uint8_t)bi.bmiHeader.biBitCount, 4); /* Copy the data to our pixel buffer. */ if (bitmap != NULL) {