From 9acbcfbe047e109e6a7a83cad8fd5dac07bbf49b Mon Sep 17 00:00:00 2001 From: vinvol <690908+vinvol@users.noreply.github.com> Date: Thu, 11 Jun 2020 20:17:29 -0400 Subject: [PATCH] add isMainDisplay --- package.json | 2 +- src/robotjs.cc | 7 +++++++ src/screen.c | 7 ++++++- src/types.h | 9 ++++++++- 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 6eb19ded..1ea167a1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "robotjs", - "version": "0.6.0", + "version": "0.6.1", "description": "Node.js Desktop Automation.", "main": "index.js", "typings": "index.d.ts", diff --git a/src/robotjs.cc b/src/robotjs.cc index 56415bed..5281b9c8 100644 --- a/src/robotjs.cc +++ b/src/robotjs.cc @@ -745,9 +745,16 @@ NAN_METHOD(getAllScreensSize) { Local obj = Nan::New(); Nan::Set(obj, Nan::New("displayID").ToLocalChecked(), Nan::New(displaySizes[i].displayID)); + Nan::Set(obj, Nan::New("isMainDisplay").ToLocalChecked(), Nan::New(displaySizes[i].isMainDisplay)); + Nan::Set(obj, Nan::New("width").ToLocalChecked(), Nan::New(displaySizes[i].size.width)); Nan::Set(obj, Nan::New("height").ToLocalChecked(), Nan::New(displaySizes[i].size.height)); + Nan::Set(obj, Nan::New("x").ToLocalChecked(), Nan::New(displaySizes[i].bounds.origin.x)); + Nan::Set(obj, Nan::New("y").ToLocalChecked(), Nan::New(displaySizes[i].bounds.origin.y)); + Nan::Set(obj, Nan::New("w").ToLocalChecked(), Nan::New(displaySizes[i].bounds.size.width)); + Nan::Set(obj, Nan::New("h").ToLocalChecked(), Nan::New(displaySizes[i].bounds.size.height)); + Nan::Set(list, i, obj); } diff --git a/src/screen.c b/src/screen.c index b86c8af3..05c042be 100644 --- a/src/screen.c +++ b/src/screen.c @@ -13,14 +13,19 @@ void getAllDisplaySize(uint32_t *_Nullable numDisplays, MMDisplaySize *_Nullable #if defined(IS_MACOSX) CGDirectDisplayID displays[10]; + CGDirectDisplayID mainDisplayID = CGMainDisplayID(); CGGetOnlineDisplayList(10, displays, numDisplays); for (uint32_t i = 0; i < *numDisplays; i++) { + CGRect bounds = CGDisplayBounds(displays[i]); displaySizes[i] = MMDisplaySizeMake( displays[i], + mainDisplayID == displays[i], CGDisplayPixelsWide(displays[i]), - CGDisplayPixelsHigh(displays[i])); + CGDisplayPixelsHigh(displays[i]), + MMRectMake(bounds.origin.x, bounds.origin.y, bounds.size.width, bounds.size.height) + ); } #endif diff --git a/src/types.h b/src/types.h index 1f96892a..fd7858d4 100644 --- a/src/types.h +++ b/src/types.h @@ -41,7 +41,9 @@ typedef struct _MMRect MMRect; struct _MMDisplaySize { int32_t displayID; + int isMainDisplay; MMSize size; + MMRect bounds; }; typedef struct _MMDisplaySize MMDisplaySize; @@ -62,12 +64,17 @@ H_INLINE MMSignedPoint MMSignedPointMake(int32_t x, int32_t y) return point; } -H_INLINE MMDisplaySize MMDisplaySizeMake(int32_t displayID, size_t width, size_t height) +H_INLINE MMDisplaySize MMDisplaySizeMake(int32_t displayID, int isMainDisplay, size_t width, size_t height, MMRect bounds) { MMDisplaySize diplaySize; diplaySize.displayID = displayID; + diplaySize.isMainDisplay = isMainDisplay; diplaySize.size.width = width; diplaySize.size.height = height; + diplaySize.bounds.origin.x = bounds.origin.x; + diplaySize.bounds.origin.y = bounds.origin.y; + diplaySize.bounds.size.width = bounds.size.width; + diplaySize.bounds.size.height = bounds.size.height; return diplaySize; }