From bcc8164f2e6ed4401dc5ecb74a28ebe8554f7b82 Mon Sep 17 00:00:00 2001 From: Jason Stallings Date: Thu, 23 Jul 2015 11:44:47 -0500 Subject: [PATCH 01/11] Add Windows support. --- binding.gyp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/binding.gyp b/binding.gyp index 34b495bb..4e5f86d0 100644 --- a/binding.gyp +++ b/binding.gyp @@ -2,7 +2,7 @@ 'targets': [{ 'target_name': 'robotjs', 'include_dirs': [ - ' Date: Thu, 23 Jul 2015 11:46:21 -0500 Subject: [PATCH 02/11] No ms_stdint.h. --- src/MMBitmap.h | 7 +------ src/deadbeef_rand.h | 6 +----- src/io.h | 6 +----- src/rgb.h | 6 +----- src/str_io.h | 6 +----- src/uthash.h | 6 +----- 6 files changed, 6 insertions(+), 31 deletions(-) diff --git a/src/MMBitmap.h b/src/MMBitmap.h index b32b9a58..b34f57b5 100644 --- a/src/MMBitmap.h +++ b/src/MMBitmap.h @@ -5,12 +5,7 @@ #include "types.h" #include "rgb.h" #include - -#if defined(_MSC_VER) - #include "ms_stdint.h" -#else - #include -#endif +#include #ifdef __cplusplus extern "C" diff --git a/src/deadbeef_rand.h b/src/deadbeef_rand.h index d607db66..ec569a24 100644 --- a/src/deadbeef_rand.h +++ b/src/deadbeef_rand.h @@ -1,11 +1,7 @@ #ifndef DEADBEEF_RAND_H #define DEADBEEF_RAND_H -#if defined(_MSC_VER) - #include "ms_stdint.h" -#else - #include -#endif +#include #define DEADBEEF_MAX UINT32_MAX diff --git a/src/io.h b/src/io.h index b341d452..47eb974f 100644 --- a/src/io.h +++ b/src/io.h @@ -4,12 +4,8 @@ #include "MMBitmap.h" #include +#include -#if defined(_MSC_VER) - #include "ms_stdint.h" -#else - #include -#endif enum _MMImageType { kInvalidImageType = 0, diff --git a/src/rgb.h b/src/rgb.h index 2dbeea2c..f7e032fe 100644 --- a/src/rgb.h +++ b/src/rgb.h @@ -5,12 +5,8 @@ #include /* For abs() */ #include #include "inline_keywords.h" /* For H_INLINE */ +#include -#if defined(_MSC_VER) - #include "ms_stdint.h" -#else - #include -#endif /* RGB colors in MMBitmaps are stored as BGR for convenience in converting * to/from certain formats (mainly OpenGL). diff --git a/src/str_io.h b/src/str_io.h index 1f7639c7..0a6f8ed0 100644 --- a/src/str_io.h +++ b/src/str_io.h @@ -4,12 +4,8 @@ #include "MMBitmap.h" #include "io.h" +#include -#if defined(_MSC_VER) - #include "ms_stdint.h" -#else - #include -#endif enum _MMBMPStringError { kMMBMPStringGenericError = 0, diff --git a/src/uthash.h b/src/uthash.h index 9f6c2b53..1ea0fea1 100644 --- a/src/uthash.h +++ b/src/uthash.h @@ -27,12 +27,8 @@ #include /* memcmp, strlen */ #include /* ptrdiff_t */ +#include -#if defined(_MSC_VER) - #include "ms_stdint.h" -#else - #include -#endif #define UTHASH_VERSION 1.8 From 5bc2eb22e9a62d41136a377083436d399c37d838 Mon Sep 17 00:00:00 2001 From: Jason Stallings Date: Thu, 23 Jul 2015 11:46:56 -0500 Subject: [PATCH 03/11] These throw errors, need to come back to this. --- src/rgb.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/rgb.h b/src/rgb.h index f7e032fe..8b931714 100644 --- a/src/rgb.h +++ b/src/rgb.h @@ -78,9 +78,9 @@ H_INLINE int MMRGBColorSimilarToColor(MMRGBColor c1, MMRGBColor c2, uint8_t d1 = c1.red - c2.red; uint8_t d2 = c1.green - c2.green; uint8_t d3 = c1.blue - c2.blue; - return sqrt((d1 * d1) + + /*return sqrt((d1 * d1) + (d2 * d2) + - (d3 * d3)) <= (tolerance * 442.0f); + (d3 * d3)) <= (tolerance * 442.0f);*/ } } @@ -94,9 +94,9 @@ H_INLINE int MMRGBHexSimilarToColor(MMRGBHex h1, MMRGBHex h2, float tolerance) uint8_t d1 = RED_FROM_HEX(h1) - RED_FROM_HEX(h2); uint8_t d2 = GREEN_FROM_HEX(h1) - GREEN_FROM_HEX(h2); uint8_t d3 = BLUE_FROM_HEX(h1) - BLUE_FROM_HEX(h2); - return sqrt((d1 * d1) + + /*return sqrt((d1 * d1) + (d2 * d2) + - (d3 * d3)) <= (tolerance * 442.0f); + (d3 * d3)) <= (tolerance * 442.0f);*/ } } From 5e1dadfb7628dff16c57aafd6519f0bdaea8bbb3 Mon Sep 17 00:00:00 2001 From: Jason Stallings Date: Thu, 23 Jul 2015 11:47:26 -0500 Subject: [PATCH 04/11] Make the portable snprintf C++ compatible. --- src/snprintf.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/snprintf.h b/src/snprintf.h index f097afa2..60046e56 100644 --- a/src/snprintf.h +++ b/src/snprintf.h @@ -15,6 +15,11 @@ #include #include +#ifdef __cplusplus +extern "C" +{ +#endif + #ifdef HAVE_SNPRINTF #include #else @@ -35,3 +40,7 @@ extern int asnprintf (char **ptr, size_t str_m, const char *fmt, /*args*/ ...); extern int vasnprintf(char **ptr, size_t str_m, const char *fmt, va_list ap); #endif + +#ifdef __cplusplus +} +#endif \ No newline at end of file From fc4016dc583ddf3850b4b7945c1a3f5daddb73cc Mon Sep 17 00:00:00 2001 From: Jason Stallings Date: Thu, 23 Jul 2015 11:47:43 -0500 Subject: [PATCH 05/11] Include the portable snprintf. --- src/robotjs.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/src/robotjs.cc b/src/robotjs.cc index c2d169a1..3a9cf913 100644 --- a/src/robotjs.cc +++ b/src/robotjs.cc @@ -8,6 +8,7 @@ #include "screen.h" #include "screengrab.h" #include "MMBitmap.h" +#include "snprintf.h" using namespace v8; From a5117244deccb9125b23bca133bb7031c9c9259a Mon Sep 17 00:00:00 2001 From: Jason Stallings Date: Thu, 23 Jul 2015 11:48:19 -0500 Subject: [PATCH 06/11] Use cross platform microsleep instead of mssleep. --- src/robotjs.cc | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/src/robotjs.cc b/src/robotjs.cc index 3a9cf913..ccc36ff6 100644 --- a/src/robotjs.cc +++ b/src/robotjs.cc @@ -9,6 +9,7 @@ #include "screengrab.h" #include "MMBitmap.h" #include "snprintf.h" +#include "microsleep.h" using namespace v8; @@ -288,18 +289,6 @@ int CheckKeyFlags(char* f, MMKeyFlags* flags) return 0; } -int mssleep(unsigned long millisecond) -{ - struct timespec req; - time_t sec=(int)(millisecond/1000); - millisecond=millisecond-(sec*1000); - req.tv_sec=sec; - req.tv_nsec=millisecond*1000000L; - while(nanosleep(&req,&req)==-1) - continue; - return 1; -} - NAN_METHOD(keyTap) { NanScope(); @@ -349,7 +338,7 @@ NAN_METHOD(keyTap) break; default: tapKeyCode(key, flags); - mssleep(10); + microsleep(10); } NanReturnValue(NanNew("1")); @@ -407,7 +396,7 @@ NAN_METHOD(keyToggle) break; default: toggleKeyCode(key, down, flags); - mssleep(10); + microsleep(10); } NanReturnValue(NanNew("1")); From 20c9a1973cd9a078a8899f70a3fbe27412a0bbc1 Mon Sep 17 00:00:00 2001 From: Deltatiger Date: Fri, 24 Jul 2015 20:43:53 +0530 Subject: [PATCH 07/11] getPixelColor bug fix. This should make this work. --- src/screengrab.c | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/src/screengrab.c b/src/screengrab.c index 59a8fd5a..828dfcfa 100644 --- a/src/screengrab.c +++ b/src/screengrab.c @@ -25,10 +25,10 @@ MMBitmapRef copyMMBitmapFromDisplayInRect(MMRect rect) CGDirectDisplayID displayID = CGMainDisplayID(); - //Replacement for CGDisplayBitsPerPixel. + //Replacement for CGDisplayBitsPerPixel. CGDisplayModeRef mode = CGDisplayCopyDisplayMode(displayID); size_t depth = 0; - + CFStringRef pixEnc = CGDisplayModeCopyPixelEncoding(mode); if(CFStringCompare(pixEnc, CFSTR(IO32BitDirectPixels), kCFCompareCaseInsensitive) == kCFCompareEqualTo) depth = 32; @@ -37,7 +37,7 @@ MMBitmapRef copyMMBitmapFromDisplayInRect(MMRect rect) else if(CFStringCompare(pixEnc, CFSTR(IO8BitIndexedPixels), kCFCompareCaseInsensitive) == kCFCompareEqualTo) depth = 8; - bitsPerPixel = (uint8_t) depth; + bitsPerPixel = (uint8_t) depth; bytesPerPixel = bitsPerPixel / 8; /* Align width to padding. */ //bytewidth = ADD_PADDING(rect.size.width * bytesPerPixel); @@ -52,15 +52,15 @@ MMBitmapRef copyMMBitmapFromDisplayInRect(MMRect rect) CGDataProviderRef provider = CGImageGetDataProvider(image); CFDataRef data = CGDataProviderCopyData(provider); - size_t width, height; + size_t width, height; width = CGImageGetWidth(image); - height = CGImageGetHeight(image); + height = CGImageGetHeight(image); size_t bpp = CGImageGetBitsPerPixel(image) / 8; uint8 *pixels = malloc(width * height * bpp); memcpy(pixels, CFDataGetBytePtr(data), width * height * bpp); - CFRelease(data); - CGImageRelease(image); + CFRelease(data); + CGImageRelease(image); return createMMBitmap(pixels, rect.size.width, rect.size.height, bytewidth, bitsPerPixel, bytesPerPixel); @@ -118,11 +118,15 @@ MMBitmapRef copyMMBitmapFromDisplayInRect(MMRect rect) /* Copy the data into a bitmap struct. */ if ((screenMem = CreateCompatibleDC(screen)) == NULL || SelectObject(screenMem, dib) == NULL || - !BitBlt(screenMem, - (int)rect.origin.x, - (int)rect.origin.y, + !BitBlt(screenMem, + (int)0, + (int)0, (int)rect.size.width, - (int)rect.size.height, screen, 0, 0, SRCCOPY)) { + (int)rect.size.height, + screen, + rect.origin.x, + rect.origin.y, + SRCCOPY)) { /* Error copying data. */ ReleaseDC(NULL, screen); DeleteObject(dib); @@ -135,7 +139,7 @@ MMBitmapRef copyMMBitmapFromDisplayInRect(MMRect rect) rect.size.width, rect.size.height, 4 * rect.size.width, - (uint8_t)bi.bmiHeader.biBitCount, + (uint8_t)bi.bmiHeader.biBitCount, 4); /* Copy the data to our pixel buffer. */ From 8730e94d4c86bde2a5d2362c921682647bc2de8a Mon Sep 17 00:00:00 2001 From: Jason Stallings Date: Sat, 25 Jul 2015 09:33:50 -0500 Subject: [PATCH 08/11] Typecast from int to double. --- src/rgb.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/rgb.h b/src/rgb.h index 8b931714..7a2ef5c1 100644 --- a/src/rgb.h +++ b/src/rgb.h @@ -78,9 +78,9 @@ H_INLINE int MMRGBColorSimilarToColor(MMRGBColor c1, MMRGBColor c2, uint8_t d1 = c1.red - c2.red; uint8_t d2 = c1.green - c2.green; uint8_t d3 = c1.blue - c2.blue; - /*return sqrt((d1 * d1) + + return sqrt((double)(d1 * d1) + (d2 * d2) + - (d3 * d3)) <= (tolerance * 442.0f);*/ + (d3 * d3)) <= (tolerance * 442.0f); } } @@ -94,9 +94,9 @@ H_INLINE int MMRGBHexSimilarToColor(MMRGBHex h1, MMRGBHex h2, float tolerance) uint8_t d1 = RED_FROM_HEX(h1) - RED_FROM_HEX(h2); uint8_t d2 = GREEN_FROM_HEX(h1) - GREEN_FROM_HEX(h2); uint8_t d3 = BLUE_FROM_HEX(h1) - BLUE_FROM_HEX(h2); - /*return sqrt((d1 * d1) + + return sqrt((double)(d1 * d1) + (d2 * d2) + - (d3 * d3)) <= (tolerance * 442.0f);*/ + (d3 * d3)) <= (tolerance * 442.0f); } } From 25c3b844c53a57f6326013d927cc67d872d6b37d Mon Sep 17 00:00:00 2001 From: Jason Stallings Date: Sat, 25 Jul 2015 10:04:30 -0500 Subject: [PATCH 09/11] Unnecessary and causes warnings. Sorry Mark! --- src/snprintf.c | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/snprintf.c b/src/snprintf.c index ca476727..22ae3677 100644 --- a/src/snprintf.c +++ b/src/snprintf.c @@ -410,11 +410,6 @@ int portable_vsnprintf(char *str, size_t str_m, const char *fmt, va_list ap); /* declarations */ -static char credits[] = "\n\ -@(#)snprintf.c, v2.2: Mark Martinec, \n\ -@(#)snprintf.c, v2.2: Copyright 1999, Mark Martinec. Frontier Artistic License applies.\n\ -@(#)snprintf.c, v2.2: http://www.ijs.si/software/snprintf/\n"; - #if defined(NEED_ASPRINTF) int asprintf(char **ptr, const char *fmt, /*args*/ ...) { va_list ap; @@ -593,8 +588,6 @@ int portable_vsnprintf(char *str, size_t str_m, const char *fmt, va_list ap) { char fmt_spec = '\0'; /* current conversion specifier character */ - str_arg = credits;/* just to make compiler happy (defined but not used)*/ - str_arg = NULL; starting_p = p; p++; /* skip '%' */ /* parse flags */ while (*p == '0' || *p == '-' || *p == '+' || From 7222506ee9023f21728f6cc4841290cf5c89e11f Mon Sep 17 00:00:00 2001 From: Jason Stallings Date: Sat, 25 Jul 2015 10:18:49 -0500 Subject: [PATCH 10/11] Fixed formatting. --- binding.gyp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/binding.gyp b/binding.gyp index 4e5f86d0..19860425 100644 --- a/binding.gyp +++ b/binding.gyp @@ -45,10 +45,10 @@ 'src/xdisplay.c' ] }], - ["OS=='win'", { - 'defines': [ - 'IS_WINDOWS'] - }] + + ["OS=='win'", { + 'defines': ['IS_WINDOWS'] + }] ], 'sources': [ From 056b6b1f1948d63662de4d2ff0457ee4ca23b2ff Mon Sep 17 00:00:00 2001 From: Jason Stallings Date: Sat, 25 Jul 2015 14:53:03 -0500 Subject: [PATCH 11/11] Line up arguments. --- src/screengrab.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/screengrab.c b/src/screengrab.c index 828dfcfa..8061b6c0 100644 --- a/src/screengrab.c +++ b/src/screengrab.c @@ -123,10 +123,11 @@ MMBitmapRef copyMMBitmapFromDisplayInRect(MMRect rect) (int)0, (int)rect.size.width, (int)rect.size.height, - screen, - rect.origin.x, - rect.origin.y, - SRCCOPY)) { + screen, + rect.origin.x, + rect.origin.y, + SRCCOPY)) { + /* Error copying data. */ ReleaseDC(NULL, screen); DeleteObject(dib);