Pass the display in screen events
This commit is contained in:
parent
7749484628
commit
50b96ca7ef
1 changed files with 22 additions and 3 deletions
|
@ -5,6 +5,7 @@
|
||||||
#include "atom/browser/api/atom_api_screen.h"
|
#include "atom/browser/api/atom_api_screen.h"
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
#include "atom/browser/browser.h"
|
#include "atom/browser/browser.h"
|
||||||
#include "atom/common/native_mate_converters/gfx_converter.h"
|
#include "atom/common/native_mate_converters/gfx_converter.h"
|
||||||
|
@ -21,6 +22,7 @@ namespace api {
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
|
// Find an item in container according to its ID.
|
||||||
template<class T>
|
template<class T>
|
||||||
typename T::iterator FindById(T* container, int id) {
|
typename T::iterator FindById(T* container, int id) {
|
||||||
auto predicate = [id] (const typename T::value_type& item) -> bool {
|
auto predicate = [id] (const typename T::value_type& item) -> bool {
|
||||||
|
@ -29,6 +31,20 @@ typename T::iterator FindById(T* container, int id) {
|
||||||
return std::find_if(container->begin(), container->end(), predicate);
|
return std::find_if(container->begin(), container->end(), predicate);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Convert the changed_metrics bitmask to string array.
|
||||||
|
std::vector<std::string> MetricsToArray(uint32_t metrics) {
|
||||||
|
std::vector<std::string> array;
|
||||||
|
if (metrics & gfx::DisplayObserver::DISPLAY_METRIC_BOUNDS)
|
||||||
|
array.push_back("bounds");
|
||||||
|
if (metrics & gfx::DisplayObserver::DISPLAY_METRIC_WORK_AREA)
|
||||||
|
array.push_back("workArea");
|
||||||
|
if (metrics & gfx::DisplayObserver::DISPLAY_METRIC_DEVICE_SCALE_FACTOR)
|
||||||
|
array.push_back("scaleFactor");
|
||||||
|
if (metrics & gfx::DisplayObserver::DISPLAY_METRIC_ROTATION)
|
||||||
|
array.push_back("rotaion");
|
||||||
|
return array;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
Screen::Screen(gfx::Screen* screen) : screen_(screen) {
|
Screen::Screen(gfx::Screen* screen) : screen_(screen) {
|
||||||
|
@ -48,6 +64,9 @@ gfx::Display Screen::GetPrimaryDisplay() {
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<gfx::Display> Screen::GetAllDisplays() {
|
std::vector<gfx::Display> Screen::GetAllDisplays() {
|
||||||
|
// The Screen::GetAllDisplays doesn't update when there is display added or
|
||||||
|
// removed, so we have to manually maintain the displays_ to make it up to
|
||||||
|
// date.
|
||||||
if (displays_.size() == 0)
|
if (displays_.size() == 0)
|
||||||
displays_ = screen_->GetAllDisplays();
|
displays_ = screen_->GetAllDisplays();
|
||||||
return displays_;
|
return displays_;
|
||||||
|
@ -63,17 +82,17 @@ gfx::Display Screen::GetDisplayMatching(const gfx::Rect& match_rect) {
|
||||||
|
|
||||||
void Screen::OnDisplayAdded(const gfx::Display& new_display) {
|
void Screen::OnDisplayAdded(const gfx::Display& new_display) {
|
||||||
displays_.push_back(new_display);
|
displays_.push_back(new_display);
|
||||||
Emit("display-added");
|
Emit("display-added", new_display);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Screen::OnDisplayRemoved(const gfx::Display& old_display) {
|
void Screen::OnDisplayRemoved(const gfx::Display& old_display) {
|
||||||
displays_.erase(FindById(&displays_, old_display.id()));
|
displays_.erase(FindById(&displays_, old_display.id()));
|
||||||
Emit("display-removed");
|
Emit("display-removed", old_display);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Screen::OnDisplayMetricsChanged(const gfx::Display& display,
|
void Screen::OnDisplayMetricsChanged(const gfx::Display& display,
|
||||||
uint32_t changed_metrics) {
|
uint32_t changed_metrics) {
|
||||||
Emit("display-metrics-changed");
|
Emit("display-metrics-changed", display, MetricsToArray(changed_metrics));
|
||||||
}
|
}
|
||||||
|
|
||||||
mate::ObjectTemplateBuilder Screen::GetObjectTemplateBuilder(
|
mate::ObjectTemplateBuilder Screen::GetObjectTemplateBuilder(
|
||||||
|
|
Loading…
Reference in a new issue