Add events on display add/remove.
This commit is contained in:
parent
809c995c0b
commit
b5898d3355
4 changed files with 138 additions and 20 deletions
1
atom.gyp
1
atom.gyp
|
@ -80,6 +80,7 @@
|
||||||
'atom/browser/api/atom_api_protocol.cc',
|
'atom/browser/api/atom_api_protocol.cc',
|
||||||
'atom/browser/api/atom_api_protocol.h',
|
'atom/browser/api/atom_api_protocol.h',
|
||||||
'atom/browser/api/atom_api_screen.cc',
|
'atom/browser/api/atom_api_screen.cc',
|
||||||
|
'atom/browser/api/atom_api_screen.h',
|
||||||
'atom/browser/api/atom_api_tray.cc',
|
'atom/browser/api/atom_api_tray.cc',
|
||||||
'atom/browser/api/atom_api_tray.h',
|
'atom/browser/api/atom_api_tray.h',
|
||||||
'atom/browser/api/atom_api_web_contents.cc',
|
'atom/browser/api/atom_api_web_contents.cc',
|
||||||
|
|
|
@ -2,29 +2,92 @@
|
||||||
// Use of this source code is governed by the MIT license that can be
|
// Use of this source code is governed by the MIT license that can be
|
||||||
// found in the LICENSE file.
|
// found in the LICENSE file.
|
||||||
|
|
||||||
|
#include "atom/browser/api/atom_api_screen.h"
|
||||||
|
|
||||||
|
#include "atom/browser/browser.h"
|
||||||
#include "atom/common/native_mate_converters/gfx_converter.h"
|
#include "atom/common/native_mate_converters/gfx_converter.h"
|
||||||
#include "base/bind.h"
|
#include "base/bind.h"
|
||||||
#include "native_mate/dictionary.h"
|
#include "native_mate/dictionary.h"
|
||||||
|
#include "native_mate/object_template_builder.h"
|
||||||
#include "ui/gfx/screen.h"
|
#include "ui/gfx/screen.h"
|
||||||
|
|
||||||
#include "atom/common/node_includes.h"
|
#include "atom/common/node_includes.h"
|
||||||
|
|
||||||
|
namespace atom {
|
||||||
|
|
||||||
|
namespace api {
|
||||||
|
|
||||||
|
Screen::Screen(gfx::Screen* screen) : screen_(screen) {
|
||||||
|
}
|
||||||
|
|
||||||
|
Screen::~Screen() {
|
||||||
|
}
|
||||||
|
|
||||||
|
gfx::Point Screen::GetCursorScreenPoint() {
|
||||||
|
return screen_->GetCursorScreenPoint();
|
||||||
|
}
|
||||||
|
|
||||||
|
gfx::Display Screen::GetPrimaryDisplay() {
|
||||||
|
return screen_->GetPrimaryDisplay();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<gfx::Display> Screen::GetAllDisplays() {
|
||||||
|
return screen_->GetAllDisplays();
|
||||||
|
}
|
||||||
|
|
||||||
|
gfx::Display Screen::GetDisplayNearestPoint(const gfx::Point& point) {
|
||||||
|
return screen_->GetDisplayNearestPoint(point);
|
||||||
|
}
|
||||||
|
|
||||||
|
gfx::Display Screen::GetDisplayMatching(const gfx::Rect& match_rect) {
|
||||||
|
return screen_->GetDisplayMatching(match_rect);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Screen::OnDisplayAdded(const gfx::Display& new_display) {
|
||||||
|
Emit("display-added");
|
||||||
|
}
|
||||||
|
|
||||||
|
void Screen::OnDisplayRemoved(const gfx::Display& old_display) {
|
||||||
|
Emit("display-removed");
|
||||||
|
}
|
||||||
|
|
||||||
|
void Screen::OnDisplayMetricsChanged(const gfx::Display& display,
|
||||||
|
uint32_t changed_metrics) {
|
||||||
|
Emit("display-metrics-changed");
|
||||||
|
}
|
||||||
|
|
||||||
|
mate::ObjectTemplateBuilder Screen::GetObjectTemplateBuilder(
|
||||||
|
v8::Isolate* isolate) {
|
||||||
|
return mate::ObjectTemplateBuilder(isolate)
|
||||||
|
.SetMethod("getCursorScreenPoint", &Screen::GetCursorScreenPoint)
|
||||||
|
.SetMethod("getPrimaryDisplay", &Screen::GetPrimaryDisplay)
|
||||||
|
.SetMethod("getAllDisplays", &Screen::GetAllDisplays)
|
||||||
|
.SetMethod("getDisplayNearestPoint", &Screen::GetDisplayNearestPoint)
|
||||||
|
.SetMethod("getDisplayMatching", &Screen::GetDisplayMatching);
|
||||||
|
}
|
||||||
|
|
||||||
|
// static
|
||||||
|
mate::Handle<Screen> Screen::Create(v8::Isolate* isolate) {
|
||||||
|
gfx::Screen* screen = gfx::Screen::GetNativeScreen();
|
||||||
|
if (!screen) {
|
||||||
|
isolate->ThrowException(v8::Exception::Error(mate::StringToV8(
|
||||||
|
isolate, "Failed to get screen information")));
|
||||||
|
return mate::Handle<Screen>();
|
||||||
|
}
|
||||||
|
|
||||||
|
return CreateHandle(isolate, new Screen(screen));
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace api
|
||||||
|
|
||||||
|
} // namespace atom
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
void Initialize(v8::Handle<v8::Object> exports, v8::Handle<v8::Value> unused,
|
void Initialize(v8::Handle<v8::Object> exports, v8::Handle<v8::Value> unused,
|
||||||
v8::Handle<v8::Context> context, void* priv) {
|
v8::Handle<v8::Context> context, void* priv) {
|
||||||
auto screen = base::Unretained(gfx::Screen::GetNativeScreen());
|
|
||||||
mate::Dictionary dict(context->GetIsolate(), exports);
|
mate::Dictionary dict(context->GetIsolate(), exports);
|
||||||
dict.SetMethod("getCursorScreenPoint",
|
dict.Set("screen", atom::api::Screen::Create(context->GetIsolate()));
|
||||||
base::Bind(&gfx::Screen::GetCursorScreenPoint, screen));
|
|
||||||
dict.SetMethod("getPrimaryDisplay",
|
|
||||||
base::Bind(&gfx::Screen::GetPrimaryDisplay, screen));
|
|
||||||
dict.SetMethod("getAllDisplays",
|
|
||||||
base::Bind(&gfx::Screen::GetAllDisplays, screen));
|
|
||||||
dict.SetMethod("getDisplayNearestPoint",
|
|
||||||
base::Bind(&gfx::Screen::GetDisplayNearestPoint, screen));
|
|
||||||
dict.SetMethod("getDisplayMatching",
|
|
||||||
base::Bind(&gfx::Screen::GetDisplayMatching, screen));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
59
atom/browser/api/atom_api_screen.h
Normal file
59
atom/browser/api/atom_api_screen.h
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
// Copyright (c) 2015 GitHub, Inc.
|
||||||
|
// Use of this source code is governed by the MIT license that can be
|
||||||
|
// found in the LICENSE file.
|
||||||
|
|
||||||
|
#ifndef ATOM_BROWSER_API_ATOM_API_SCREEN_H_
|
||||||
|
#define ATOM_BROWSER_API_ATOM_API_SCREEN_H_
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#include "atom/browser/api/event_emitter.h"
|
||||||
|
#include "native_mate/handle.h"
|
||||||
|
#include "ui/gfx/display_observer.h"
|
||||||
|
|
||||||
|
namespace gfx {
|
||||||
|
class Point;
|
||||||
|
class Rect;
|
||||||
|
class Screen;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace atom {
|
||||||
|
|
||||||
|
namespace api {
|
||||||
|
|
||||||
|
class Screen : public mate::EventEmitter,
|
||||||
|
public gfx::DisplayObserver {
|
||||||
|
public:
|
||||||
|
static mate::Handle<Screen> Create(v8::Isolate* isolate);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
explicit Screen(gfx::Screen* screen);
|
||||||
|
virtual ~Screen();
|
||||||
|
|
||||||
|
gfx::Point GetCursorScreenPoint();
|
||||||
|
gfx::Display GetPrimaryDisplay();
|
||||||
|
std::vector<gfx::Display> GetAllDisplays();
|
||||||
|
gfx::Display GetDisplayNearestPoint(const gfx::Point& point);
|
||||||
|
gfx::Display GetDisplayMatching(const gfx::Rect& match_rect);
|
||||||
|
|
||||||
|
// gfx::DisplayObserver:
|
||||||
|
void OnDisplayAdded(const gfx::Display& new_display) override;
|
||||||
|
void OnDisplayRemoved(const gfx::Display& old_display) override;
|
||||||
|
void OnDisplayMetricsChanged(const gfx::Display& display,
|
||||||
|
uint32_t changed_metrics) override;
|
||||||
|
|
||||||
|
// mate::Wrappable:
|
||||||
|
mate::ObjectTemplateBuilder GetObjectTemplateBuilder(
|
||||||
|
v8::Isolate* isolate) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
gfx::Screen* screen_;
|
||||||
|
|
||||||
|
DISALLOW_COPY_AND_ASSIGN(Screen);
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace api
|
||||||
|
|
||||||
|
} // namespace atom
|
||||||
|
|
||||||
|
#endif // ATOM_BROWSER_API_ATOM_API_SCREEN_H_
|
|
@ -1,11 +1,6 @@
|
||||||
binding = process.atomBinding 'screen'
|
EventEmitter = require('events').EventEmitter
|
||||||
|
|
||||||
checkAppIsReady = ->
|
screen = process.atomBinding('screen').screen
|
||||||
unless process.type is 'renderer' or require('app').isReady()
|
screen.__proto__ = EventEmitter.prototype
|
||||||
throw new Error('Can not use screen module before the "ready" event of app module gets emitted')
|
|
||||||
|
|
||||||
for name, _ of binding
|
module.exports = screen
|
||||||
do (name) ->
|
|
||||||
module.exports[name] = (args...) ->
|
|
||||||
checkAppIsReady()
|
|
||||||
binding[name](args...)
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue