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

Side by Side Diff: ash/display/display_manager.cc

Issue 1126933004: Allow switching between extended and unified (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 7 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 unified diff | Download patch
« no previous file with comments | « ash/display/display_manager.h ('k') | ash/display/display_manager_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ash/display/display_manager.h" 5 #include "ash/display/display_manager.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cmath> 8 #include <cmath>
9 #include <set> 9 #include <set>
10 #include <string> 10 #include <string>
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 mirroring_display_id_(gfx::Display::kInvalidDisplayID), 134 mirroring_display_id_(gfx::Display::kInvalidDisplayID),
135 registered_internal_display_rotation_lock_(false), 135 registered_internal_display_rotation_lock_(false),
136 registered_internal_display_rotation_(gfx::Display::ROTATE_0), 136 registered_internal_display_rotation_(gfx::Display::ROTATE_0),
137 weak_ptr_factory_(this) { 137 weak_ptr_factory_(this) {
138 #if defined(OS_CHROMEOS) 138 #if defined(OS_CHROMEOS)
139 // Enable only on the device so that DisplayManagerFontTest passes. 139 // Enable only on the device so that DisplayManagerFontTest passes.
140 if (base::SysInfo::IsRunningOnChromeOS()) 140 if (base::SysInfo::IsRunningOnChromeOS())
141 DisplayInfo::SetUse125DSFForUIScaling(true); 141 DisplayInfo::SetUse125DSFForUIScaling(true);
142 142
143 if (switches::UnifiedDesktopEnabled()) 143 if (switches::UnifiedDesktopEnabled())
144 multi_display_mode_ = default_multi_display_mode_ = UNIFIED; 144 default_multi_display_mode_ = UNIFIED;
145 145
146 change_display_upon_host_resize_ = !base::SysInfo::IsRunningOnChromeOS(); 146 change_display_upon_host_resize_ = !base::SysInfo::IsRunningOnChromeOS();
147 #endif 147 #endif
148 gfx::Screen::SetScreenInstance(gfx::SCREEN_TYPE_ALTERNATE, screen_.get()); 148 gfx::Screen::SetScreenInstance(gfx::SCREEN_TYPE_ALTERNATE, screen_.get());
149 gfx::Screen* current_native = 149 gfx::Screen* current_native =
150 gfx::Screen::GetScreenByType(gfx::SCREEN_TYPE_NATIVE); 150 gfx::Screen::GetScreenByType(gfx::SCREEN_TYPE_NATIVE);
151 // If there is no native, or the native was for shutdown, 151 // If there is no native, or the native was for shutdown,
152 // use ash's screen. 152 // use ash's screen.
153 if (!current_native || 153 if (!current_native ||
154 current_native == screen_for_shutdown) { 154 current_native == screen_for_shutdown) {
(...skipping 512 matching lines...) Expand 10 before | Expand all | Expand 10 after
667 "skip (don't disable) the test using SupportsMultipleDisplays()"; 667 "skip (don't disable) the test using SupportsMultipleDisplays()";
668 #endif 668 #endif
669 669
670 DisplayInfoList new_display_info_list = updated_display_info_list; 670 DisplayInfoList new_display_info_list = updated_display_info_list;
671 std::sort(active_display_list_.begin(), active_display_list_.end(), 671 std::sort(active_display_list_.begin(), active_display_list_.end(),
672 DisplaySortFunctor()); 672 DisplaySortFunctor());
673 std::sort(new_display_info_list.begin(), 673 std::sort(new_display_info_list.begin(),
674 new_display_info_list.end(), 674 new_display_info_list.end(),
675 DisplayInfoSortFunctor()); 675 DisplayInfoSortFunctor());
676 676
677 if (multi_display_mode_ != MIRRORING)
678 multi_display_mode_ = default_multi_display_mode_;
679
677 CreateSoftwareMirroringDisplayInfo(&new_display_info_list); 680 CreateSoftwareMirroringDisplayInfo(&new_display_info_list);
678 681
679 // Close the mirroring window if any here to avoid creating two compositor on 682 // Close the mirroring window if any here to avoid creating two compositor on
680 // one display. 683 // one display.
681 if (delegate_) 684 if (delegate_)
682 delegate_->CloseMirroringDisplayIfNotNecessary(); 685 delegate_->CloseMirroringDisplayIfNotNecessary();
683 686
684 DisplayList new_displays; 687 DisplayList new_displays;
685 DisplayList removed_displays; 688 DisplayList removed_displays;
686 std::map<size_t, uint32_t> display_changes; 689 std::map<size_t, uint32_t> display_changes;
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
944 if (iter->id() == kUnifiedDisplayId) 947 if (iter->id() == kUnifiedDisplayId)
945 continue; 948 continue;
946 display_info_list.push_back(GetDisplayInfo(iter->id())); 949 display_info_list.push_back(GetDisplayInfo(iter->id()));
947 } 950 }
948 for (auto iter = software_mirroring_display_list_.begin(); 951 for (auto iter = software_mirroring_display_list_.begin();
949 (display_info_list.size() < 2 && 952 (display_info_list.size() < 2 &&
950 iter != software_mirroring_display_list_.end()); 953 iter != software_mirroring_display_list_.end());
951 ++iter) { 954 ++iter) {
952 display_info_list.push_back(GetDisplayInfo(iter->id())); 955 display_info_list.push_back(GetDisplayInfo(iter->id()));
953 } 956 }
954 957 multi_display_mode_ = mirror ? MIRRORING : default_multi_display_mode_;
955 SetSoftwareMirroring(mirror); 958 ReconfigureDisplays();
956 UpdateDisplays(display_info_list);
957 if (Shell::GetInstance()->display_configurator_animation()) { 959 if (Shell::GetInstance()->display_configurator_animation()) {
958 Shell::GetInstance()->display_configurator_animation()-> 960 Shell::GetInstance()->display_configurator_animation()->
959 StartFadeInAnimation(); 961 StartFadeInAnimation();
960 } 962 }
961 RunPendingTasksForTest(); 963 RunPendingTasksForTest();
962 #endif 964 #endif
963 } 965 }
964 966
965 void DisplayManager::AddRemoveDisplay() { 967 void DisplayManager::AddRemoveDisplay() {
966 DCHECK(!active_display_list_.empty()); 968 DCHECK(!active_display_list_.empty());
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1010 } 1012 }
1011 #endif 1013 #endif
1012 1014
1013 void DisplayManager::SetMultiDisplayMode(MultiDisplayMode mode) { 1015 void DisplayManager::SetMultiDisplayMode(MultiDisplayMode mode) {
1014 multi_display_mode_ = mode; 1016 multi_display_mode_ = mode;
1015 mirroring_display_id_ = gfx::Display::kInvalidDisplayID; 1017 mirroring_display_id_ = gfx::Display::kInvalidDisplayID;
1016 software_mirroring_display_list_.clear(); 1018 software_mirroring_display_list_.clear();
1017 } 1019 }
1018 1020
1019 void DisplayManager::SetDefaultMultiDisplayMode(MultiDisplayMode mode) { 1021 void DisplayManager::SetDefaultMultiDisplayMode(MultiDisplayMode mode) {
1020 // TODO(oshima): Remove this constrain. 1022 DCHECK_NE(mode, MIRRORING);
1021 DCHECK_EQ(default_multi_display_mode_, EXTENDED);
1022 DCHECK_EQ(mode, UNIFIED);
1023 default_multi_display_mode_ = mode; 1023 default_multi_display_mode_ = mode;
1024 } 1024 }
1025 1025
1026 void DisplayManager::ReconfigureDisplays() {
1027 DisplayInfoList display_info_list;
1028 for (DisplayList::const_iterator iter = active_display_list_.begin();
1029 (display_info_list.size() < 2 && iter != active_display_list_.end());
1030 ++iter) {
1031 if (iter->id() == kUnifiedDisplayId)
1032 continue;
1033 display_info_list.push_back(GetDisplayInfo(iter->id()));
1034 }
1035 for (auto iter = software_mirroring_display_list_.begin();
1036 (display_info_list.size() < 2 &&
1037 iter != software_mirroring_display_list_.end());
1038 ++iter) {
1039 display_info_list.push_back(GetDisplayInfo(iter->id()));
1040 }
1041 mirroring_display_id_ = gfx::Display::kInvalidDisplayID;
1042 software_mirroring_display_list_.clear();
1043 UpdateDisplays(display_info_list);
1044 }
1045
1026 bool DisplayManager::UpdateDisplayBounds(int64 display_id, 1046 bool DisplayManager::UpdateDisplayBounds(int64 display_id,
1027 const gfx::Rect& new_bounds) { 1047 const gfx::Rect& new_bounds) {
1028 if (change_display_upon_host_resize_) { 1048 if (change_display_upon_host_resize_) {
1029 display_info_[display_id].SetBounds(new_bounds); 1049 display_info_[display_id].SetBounds(new_bounds);
1030 // Don't notify observers if the mirrored window has changed. 1050 // Don't notify observers if the mirrored window has changed.
1031 if (software_mirroring_enabled() && mirroring_display_id_ == display_id) 1051 if (software_mirroring_enabled() && mirroring_display_id_ == display_id)
1032 return false; 1052 return false;
1033 gfx::Display* display = FindDisplayForId(display_id); 1053 gfx::Display* display = FindDisplayForId(display_id);
1034 display->SetSize(display_info_[display_id].size_in_pixel()); 1054 display->SetSize(display_info_[display_id].size_in_pixel());
1035 screen_->NotifyMetricsChanged(*display, 1055 screen_->NotifyMetricsChanged(*display,
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
1313 gfx::Rect(new_secondary_origin, secondary_bounds.size())); 1333 gfx::Rect(new_secondary_origin, secondary_bounds.size()));
1314 secondary_display->UpdateWorkAreaFromInsets(insets); 1334 secondary_display->UpdateWorkAreaFromInsets(insets);
1315 } 1335 }
1316 1336
1317 void DisplayManager::RunPendingTasksForTest() { 1337 void DisplayManager::RunPendingTasksForTest() {
1318 if (!software_mirroring_display_list_.empty()) 1338 if (!software_mirroring_display_list_.empty())
1319 base::RunLoop().RunUntilIdle(); 1339 base::RunLoop().RunUntilIdle();
1320 } 1340 }
1321 1341
1322 } // namespace ash 1342 } // namespace ash
OLDNEW
« no previous file with comments | « ash/display/display_manager.h ('k') | ash/display/display_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698