Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(96)

Unified Diff: ash/display/display_manager.cc

Issue 922843002: Fix software mirror mode on Ozone part 2/2 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ash/display/display_manager.cc
diff --git a/ash/display/display_manager.cc b/ash/display/display_manager.cc
index c407da47751977e3c47a3f80052cf4edbe76b058..8906c23cd8adf979899974c3cfbea3394a21eabe 100644
--- a/ash/display/display_manager.cc
+++ b/ash/display/display_manager.cc
@@ -118,7 +118,7 @@ DisplayManager::DisplayManager()
force_bounds_changed_(false),
change_display_upon_host_resize_(false),
second_display_mode_(EXTENDED),
- mirrored_display_id_(gfx::Display::kInvalidDisplayID),
+ mirroring_display_id_(gfx::Display::kInvalidDisplayID),
registered_internal_display_rotation_lock_(false),
registered_internal_display_rotation_(gfx::Display::ROTATE_0),
weak_ptr_factory_(this) {
@@ -240,7 +240,7 @@ DisplayIdPair DisplayManager::GetCurrentDisplayIdPair() const {
// between two checks.
CHECK_EQ(1u, displays_.size());
}
- return std::make_pair(displays_[0].id(), mirrored_display_id_);
+ return std::make_pair(displays_[0].id(), mirroring_display_id_);
} else {
CHECK_LE(2u, displays_.size());
int64 id_at_zero = displays_[0].id();
@@ -607,7 +607,7 @@ void DisplayManager::OnNativeDisplaysChanged(
bool internal_display_connected = false;
num_connected_displays_ = updated_displays.size();
- mirrored_display_id_ = gfx::Display::kInvalidDisplayID;
+ mirroring_display_id_ = gfx::Display::kInvalidDisplayID;
mirroring_display_ = gfx::Display();
DisplayInfoList new_display_info_list;
for (DisplayInfoList::const_iterator iter = updated_displays.begin();
@@ -619,7 +619,10 @@ void DisplayManager::OnNativeDisplaysChanged(
gfx::Point origin = iter->bounds_in_native().origin();
if (origins.find(origin) != origins.end()) {
InsertAndUpdateDisplayInfo(*iter);
- mirrored_display_id_ = iter->id();
+ mirroring_display_id_ = iter->id();
+ mirroring_display_ =
+ CreateDisplayFromDisplayInfoById(mirroring_display_id_);
+ mirroring_display_.set_mirrored_display_id(new_display_info_list[0].id());
} else {
origins.insert(origin);
new_display_info_list.push_back(*iter);
@@ -693,31 +696,34 @@ void DisplayManager::UpdateDisplays(
// the root window so that it matches the external display's
// resolution. This is necessary in order for scaling to work while
// mirrored.
- int64 mirroing_display_id = gfx::Display::kInvalidDisplayID;
+ int64 mirrored_display_id = gfx::Display::kInvalidDisplayID;
+ int64 mirroring_display_id = gfx::Display::kInvalidDisplayID;
if (second_display_mode_ != EXTENDED && new_display_info_list.size() == 2) {
bool zero_is_source =
first_display_id_ == new_display_info_list[0].id() ||
gfx::Display::InternalDisplayId() == new_display_info_list[0].id();
DCHECK_EQ(MIRRORING, second_display_mode_);
- mirrored_display_id_ = new_display_info_list[zero_is_source ? 1 : 0].id();
- mirroing_display_id = mirrored_display_id_;
+ mirrored_display_id = new_display_info_list[zero_is_source ? 0 : 1].id();
+ mirroring_display_id = new_display_info_list[zero_is_source ? 1 : 0].id();
+ mirroring_display_id_ = mirroring_display_id;
}
while (curr_iter != displays_.end() ||
new_info_iter != new_display_info_list.end()) {
if (new_info_iter != new_display_info_list.end() &&
- mirroing_display_id == new_info_iter->id()) {
+ mirroring_display_id == new_info_iter->id()) {
DisplayInfo info = *new_info_iter;
info.SetOverscanInsets(gfx::Insets());
InsertAndUpdateDisplayInfo(info);
mirroring_display_ =
- CreateDisplayFromDisplayInfoById(mirroing_display_id);
+ CreateDisplayFromDisplayInfoById(mirroring_display_id);
+ mirroring_display_.set_mirrored_display_id(mirrored_display_id);
++new_info_iter;
// Remove existing external display if it is going to be used as
// mirroring display.
if (curr_iter != displays_.end() &&
- curr_iter->id() == mirroing_display_id) {
+ curr_iter->id() == mirroring_display_id) {
removed_displays.push_back(*curr_iter);
++curr_iter;
}
@@ -933,7 +939,7 @@ size_t DisplayManager::GetNumDisplays() const {
}
bool DisplayManager::IsMirrored() const {
- return mirrored_display_id_ != gfx::Display::kInvalidDisplayID;
+ return mirroring_display_id_ != gfx::Display::kInvalidDisplayID;
}
const DisplayInfo& DisplayManager::GetDisplayInfo(int64 display_id) const {
@@ -1010,7 +1016,7 @@ void DisplayManager::AddRemoveDisplay() {
"%d+%d-500x400", host_bounds.x(), host_bounds.bottom())));
}
num_connected_displays_ = new_display_info_list.size();
- mirrored_display_id_ = gfx::Display::kInvalidDisplayID;
+ mirroring_display_id_ = gfx::Display::kInvalidDisplayID;
mirroring_display_ = gfx::Display();
UpdateDisplays(new_display_info_list);
}
@@ -1041,7 +1047,7 @@ bool DisplayManager::SoftwareMirroringEnabled() const {
void DisplayManager::SetSecondDisplayMode(SecondDisplayMode mode) {
second_display_mode_ = mode;
- mirrored_display_id_ = gfx::Display::kInvalidDisplayID;
+ mirroring_display_id_ = gfx::Display::kInvalidDisplayID;
mirroring_display_ = gfx::Display();
}
@@ -1050,7 +1056,7 @@ bool DisplayManager::UpdateDisplayBounds(int64 display_id,
if (change_display_upon_host_resize_) {
display_info_[display_id].SetBounds(new_bounds);
// Don't notify observers if the mirrored window has changed.
- if (software_mirroring_enabled() && mirrored_display_id_ == display_id)
+ if (software_mirroring_enabled() && mirroring_display_id_ == display_id)
return false;
gfx::Display* display = FindDisplayForId(display_id);
display->SetSize(display_info_[display_id].size_in_pixel());
@@ -1095,6 +1101,10 @@ gfx::Display* DisplayManager::FindDisplayForId(int64 id) {
if ((*iter).id() == id)
return &(*iter);
}
+
+ if (id == mirroring_display_id_)
+ return &mirroring_display_;
+
DLOG(WARNING) << "Could not find display:" << id;
return NULL;
}
@@ -1102,7 +1112,7 @@ gfx::Display* DisplayManager::FindDisplayForId(int64 id) {
void DisplayManager::AddMirrorDisplayInfoIfAny(
std::vector<DisplayInfo>* display_info_list) {
if (software_mirroring_enabled() && IsMirrored())
- display_info_list->push_back(GetDisplayInfo(mirrored_display_id_));
+ display_info_list->push_back(GetDisplayInfo(mirroring_display_id_));
}
void DisplayManager::InsertAndUpdateDisplayInfo(const DisplayInfo& new_info) {

Powered by Google App Engine
This is Rietveld 408576698