diff --git a/atom/browser/api/atom_api_screen.cc b/atom/browser/api/atom_api_screen.cc index c45e20da4c2c..a87d6d3598f8 100644 --- a/atom/browser/api/atom_api_screen.cc +++ b/atom/browser/api/atom_api_screen.cc @@ -120,6 +120,9 @@ void Screen::BuildPrototype( .SetMethod("getPrimaryDisplay", &Screen::GetPrimaryDisplay) .SetMethod("getAllDisplays", &Screen::GetAllDisplays) .SetMethod("getDisplayNearestPoint", &Screen::GetDisplayNearestPoint) +#if defined(OS_MACOSX) + .SetMethod("getMenuBarHeight", &Screen::getMenuBarHeight) +#endif .SetMethod("getDisplayMatching", &Screen::GetDisplayMatching); } diff --git a/atom/browser/api/atom_api_screen.h b/atom/browser/api/atom_api_screen.h index 2bbaa13f6df5..1af170327d45 100644 --- a/atom/browser/api/atom_api_screen.h +++ b/atom/browser/api/atom_api_screen.h @@ -40,6 +40,10 @@ class Screen : public mate::EventEmitter, display::Display GetDisplayNearestPoint(const gfx::Point& point); display::Display GetDisplayMatching(const gfx::Rect& match_rect); +#if defined(OS_MACOSX) + int getMenuBarHeight(); +#endif + // display::DisplayObserver: void OnDisplayAdded(const display::Display& new_display) override; void OnDisplayRemoved(const display::Display& old_display) override; diff --git a/atom/browser/api/atom_api_screen_mac.mm b/atom/browser/api/atom_api_screen_mac.mm new file mode 100644 index 000000000000..0d22fad5b8b5 --- /dev/null +++ b/atom/browser/api/atom_api_screen_mac.mm @@ -0,0 +1,18 @@ +// Copyright (c) 2017 GitHub, Inc. +// Use of this source code is governed by the MIT license that can be +// found in the LICENSE file. + +#import "atom/browser/api/atom_api_screen.h" +#import + +namespace atom { + +namespace api { + +int Screen::getMenuBarHeight() { + return [[NSApp mainMenu] menuBarHeight]; +} + +}// namespace api + +}// namespace atom diff --git a/docs/api/screen.md b/docs/api/screen.md index 49f0d9f55c9c..e84da88c831b 100644 --- a/docs/api/screen.md +++ b/docs/api/screen.md @@ -95,6 +95,10 @@ Returns [`Point`](structures/point.md) The current absolute position of the mouse pointer. +### `screen.getMenuBarHeight()` _macOS_ + +Returns `Integer` - The height of the menu bar in pixels. + ### `screen.getPrimaryDisplay()` Returns [`Display`](structures/display.md) - The primary display. diff --git a/filenames.gypi b/filenames.gypi index 86c27b9ae9a5..bc72ebfee6e5 100644 --- a/filenames.gypi +++ b/filenames.gypi @@ -140,6 +140,7 @@ 'atom/browser/api/atom_api_render_process_preferences.h', 'atom/browser/api/atom_api_screen.cc', 'atom/browser/api/atom_api_screen.h', + 'atom/browser/api/atom_api_screen_mac.mm', 'atom/browser/api/atom_api_session.cc', 'atom/browser/api/atom_api_session.h', 'atom/browser/api/atom_api_system_preferences.cc', diff --git a/spec/api-screen-spec.js b/spec/api-screen-spec.js index 8c4f4305baff..93d048acf490 100644 --- a/spec/api-screen-spec.js +++ b/spec/api-screen-spec.js @@ -18,4 +18,15 @@ describe('screen module', function () { assert(display.size.height > 0) }) }) + + describe('screen.getMenuBarHeight()', function () { + if (process.platform !== 'darwin') { + return + } + + it('returns an integer', function () { + var screenHeight = screen.getMenuBarHeight() + assert.equal(typeof screenHeight, 'number') + }) + }) })