OLD | NEW |
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 "ui/display/manager/display_manager.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <cmath> | 8 #include <cmath> |
9 #include <limits> | 9 #include <limits> |
10 #include <map> | 10 #include <map> |
11 #include <set> | 11 #include <set> |
12 #include <string> | 12 #include <string> |
13 #include <utility> | 13 #include <utility> |
14 #include <vector> | 14 #include <vector> |
15 | 15 |
(...skipping 13 matching lines...) Expand all Loading... |
29 #include "ui/display/display_observer.h" | 29 #include "ui/display/display_observer.h" |
30 #include "ui/display/display_switches.h" | 30 #include "ui/display/display_switches.h" |
31 #include "ui/display/manager/display_layout_store.h" | 31 #include "ui/display/manager/display_layout_store.h" |
32 #include "ui/display/manager/display_manager_utilities.h" | 32 #include "ui/display/manager/display_manager_utilities.h" |
33 #include "ui/display/manager/managed_display_info.h" | 33 #include "ui/display/manager/managed_display_info.h" |
34 #include "ui/display/screen.h" | 34 #include "ui/display/screen.h" |
35 #include "ui/gfx/font_render_params.h" | 35 #include "ui/gfx/font_render_params.h" |
36 #include "ui/gfx/geometry/rect.h" | 36 #include "ui/gfx/geometry/rect.h" |
37 #include "ui/gfx/geometry/size_conversions.h" | 37 #include "ui/gfx/geometry/size_conversions.h" |
38 | 38 |
39 #if defined(USE_X11) | |
40 #include "ui/base/x/x11_util.h" // nogncheck | |
41 #endif | |
42 | |
43 #if defined(OS_CHROMEOS) | 39 #if defined(OS_CHROMEOS) |
44 #include "base/sys_info.h" | 40 #include "base/sys_info.h" |
45 #endif | 41 #endif |
46 | 42 |
47 #if defined(OS_WIN) | 43 #if defined(OS_WIN) |
48 #include "base/win/windows_version.h" | 44 #include "base/win/windows_version.h" |
49 #endif | 45 #endif |
50 | 46 |
51 namespace ash { | 47 namespace display { |
52 | 48 |
53 namespace { | 49 namespace { |
54 | 50 |
55 // The number of pixels to overlap between the primary and secondary displays, | 51 // The number of pixels to overlap between the primary and secondary displays, |
56 // in case that the offset value is too large. | 52 // in case that the offset value is too large. |
57 const int kMinimumOverlapForInvalidOffset = 100; | 53 const int kMinimumOverlapForInvalidOffset = 100; |
58 | 54 |
59 struct DisplaySortFunctor { | 55 struct DisplaySortFunctor { |
60 bool operator()(const display::Display& a, const display::Display& b) { | 56 bool operator()(const display::Display& a, const display::Display& b) { |
61 return display::CompareDisplayIds(a.id(), b.id()); | 57 return display::CompareDisplayIds(a.id(), b.id()); |
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
265 ApplyDisplayLayout(GetCurrentDisplayLayout(), &active_display_list_, | 261 ApplyDisplayLayout(GetCurrentDisplayLayout(), &active_display_list_, |
266 &updated_ids); | 262 &updated_ids); |
267 for (int64_t id : updated_ids) { | 263 for (int64_t id : updated_ids) { |
268 NotifyMetricsChanged( | 264 NotifyMetricsChanged( |
269 GetDisplayForId(id), | 265 GetDisplayForId(id), |
270 display::DisplayObserver::DISPLAY_METRIC_BOUNDS | | 266 display::DisplayObserver::DISPLAY_METRIC_BOUNDS | |
271 display::DisplayObserver::DISPLAY_METRIC_WORK_AREA); | 267 display::DisplayObserver::DISPLAY_METRIC_WORK_AREA); |
272 } | 268 } |
273 | 269 |
274 if (delegate_) | 270 if (delegate_) |
275 delegate_->PostDisplayConfigurationChange(); | 271 delegate_->PostDisplayConfigurationChange(false); |
276 } | 272 } |
277 | 273 |
278 const display::Display& DisplayManager::GetDisplayForId(int64_t id) const { | 274 const display::Display& DisplayManager::GetDisplayForId(int64_t id) const { |
279 display::Display* display = | 275 display::Display* display = |
280 const_cast<DisplayManager*>(this)->FindDisplayForId(id); | 276 const_cast<DisplayManager*>(this)->FindDisplayForId(id); |
281 return display ? *display : GetInvalidDisplay(); | 277 return display ? *display : GetInvalidDisplay(); |
282 } | 278 } |
283 | 279 |
284 const display::Display& DisplayManager::FindDisplayContainingPoint( | 280 const display::Display& DisplayManager::FindDisplayContainingPoint( |
285 const gfx::Point& point_in_screen) const { | 281 const gfx::Point& point_in_screen) const { |
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
474 } | 470 } |
475 | 471 |
476 void DisplayManager::RegisterDisplayRotationProperties( | 472 void DisplayManager::RegisterDisplayRotationProperties( |
477 bool rotation_lock, | 473 bool rotation_lock, |
478 display::Display::Rotation rotation) { | 474 display::Display::Rotation rotation) { |
479 if (delegate_) | 475 if (delegate_) |
480 delegate_->PreDisplayConfigurationChange(false); | 476 delegate_->PreDisplayConfigurationChange(false); |
481 registered_internal_display_rotation_lock_ = rotation_lock; | 477 registered_internal_display_rotation_lock_ = rotation_lock; |
482 registered_internal_display_rotation_ = rotation; | 478 registered_internal_display_rotation_ = rotation; |
483 if (delegate_) | 479 if (delegate_) |
484 delegate_->PostDisplayConfigurationChange(); | 480 delegate_->PostDisplayConfigurationChange(false); |
485 } | 481 } |
486 | 482 |
487 scoped_refptr<display::ManagedDisplayMode> | 483 scoped_refptr<display::ManagedDisplayMode> |
488 DisplayManager::GetSelectedModeForDisplayId(int64_t id) const { | 484 DisplayManager::GetSelectedModeForDisplayId(int64_t id) const { |
489 std::map<int64_t, scoped_refptr<display::ManagedDisplayMode>>::const_iterator | 485 std::map<int64_t, scoped_refptr<display::ManagedDisplayMode>>::const_iterator |
490 iter = display_modes_.find(id); | 486 iter = display_modes_.find(id); |
491 if (iter == display_modes_.end()) | 487 if (iter == display_modes_.end()) |
492 return scoped_refptr<display::ManagedDisplayMode>(); | 488 return scoped_refptr<display::ManagedDisplayMode>(); |
493 return iter->second; | 489 return iter->second; |
494 } | 490 } |
(...skipping 20 matching lines...) Expand all Loading... |
515 delegate_->PreDisplayConfigurationChange(false); | 511 delegate_->PreDisplayConfigurationChange(false); |
516 // Just sets color profile if it's not running on ChromeOS (like tests). | 512 // Just sets color profile if it's not running on ChromeOS (like tests). |
517 if (!base::SysInfo::IsRunningOnChromeOS() || | 513 if (!base::SysInfo::IsRunningOnChromeOS() || |
518 delegate_->display_configurator()->SetColorCalibrationProfile(display_id, | 514 delegate_->display_configurator()->SetColorCalibrationProfile(display_id, |
519 profile)) { | 515 profile)) { |
520 display_info_[display_id].SetColorProfile(profile); | 516 display_info_[display_id].SetColorProfile(profile); |
521 UMA_HISTOGRAM_ENUMERATION("ChromeOS.Display.ColorProfile", profile, | 517 UMA_HISTOGRAM_ENUMERATION("ChromeOS.Display.ColorProfile", profile, |
522 ui::NUM_COLOR_PROFILES); | 518 ui::NUM_COLOR_PROFILES); |
523 } | 519 } |
524 if (delegate_) | 520 if (delegate_) |
525 delegate_->PostDisplayConfigurationChange(); | 521 delegate_->PostDisplayConfigurationChange(false); |
526 #endif | 522 #endif |
527 } | 523 } |
528 | 524 |
529 void DisplayManager::OnNativeDisplaysChanged( | 525 void DisplayManager::OnNativeDisplaysChanged( |
530 const DisplayInfoList& updated_displays) { | 526 const DisplayInfoList& updated_displays) { |
531 if (updated_displays.empty()) { | 527 if (updated_displays.empty()) { |
532 VLOG(1) << "OnNativeDisplaysChanged(0): # of current displays=" | 528 VLOG(1) << "OnNativeDisplaysChanged(0): # of current displays=" |
533 << active_display_list_.size(); | 529 << active_display_list_.size(); |
534 // If the device is booted without display, or chrome is started | 530 // If the device is booted without display, or chrome is started |
535 // without --ash-host-window-bounds on linux desktop, use the | 531 // without --ash-host-window-bounds on linux desktop, use the |
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
842 metrics |= (display::DisplayObserver::DISPLAY_METRIC_BOUNDS | | 838 metrics |= (display::DisplayObserver::DISPLAY_METRIC_BOUNDS | |
843 display::DisplayObserver::DISPLAY_METRIC_WORK_AREA); | 839 display::DisplayObserver::DISPLAY_METRIC_WORK_AREA); |
844 } | 840 } |
845 if (primary.device_scale_factor() != old_primary.device_scale_factor()) | 841 if (primary.device_scale_factor() != old_primary.device_scale_factor()) |
846 metrics |= display::DisplayObserver::DISPLAY_METRIC_DEVICE_SCALE_FACTOR; | 842 metrics |= display::DisplayObserver::DISPLAY_METRIC_DEVICE_SCALE_FACTOR; |
847 | 843 |
848 NotifyMetricsChanged(primary, metrics); | 844 NotifyMetricsChanged(primary, metrics); |
849 } | 845 } |
850 } | 846 } |
851 | 847 |
| 848 bool must_clear_window = false; |
| 849 #if defined(USE_X11) && defined(OS_CHROMEOS) |
| 850 must_clear_window = |
| 851 !display_changes.empty() && base::SysInfo::IsRunningOnChromeOS(); |
| 852 #endif |
| 853 |
852 if (delegate_) | 854 if (delegate_) |
853 delegate_->PostDisplayConfigurationChange(); | 855 delegate_->PostDisplayConfigurationChange(must_clear_window); |
854 | |
855 #if defined(USE_X11) && defined(OS_CHROMEOS) | |
856 if (!display_changes.empty() && base::SysInfo::IsRunningOnChromeOS()) | |
857 ui::ClearX11DefaultRootWindow(); | |
858 #endif | |
859 | 856 |
860 // Create the mirroring window asynchronously after all displays | 857 // Create the mirroring window asynchronously after all displays |
861 // are added so that it can mirror the display newly added. This can | 858 // are added so that it can mirror the display newly added. This can |
862 // happen when switching from dock mode to software mirror mode. | 859 // happen when switching from dock mode to software mirror mode. |
863 CreateMirrorWindowAsyncIfAny(); | 860 CreateMirrorWindowAsyncIfAny(); |
864 } | 861 } |
865 | 862 |
866 const display::Display& DisplayManager::GetDisplayAt(size_t index) const { | 863 const display::Display& DisplayManager::GetDisplayAt(size_t index) const { |
867 DCHECK_LT(index, active_display_list_.size()); | 864 DCHECK_LT(index, active_display_list_.size()); |
868 return active_display_list_[index]; | 865 return active_display_list_[index]; |
(...skipping 563 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1432 } | 1429 } |
1433 | 1430 |
1434 const display::Display& DisplayManager::GetSecondaryDisplay() const { | 1431 const display::Display& DisplayManager::GetSecondaryDisplay() const { |
1435 CHECK_LE(2U, GetNumDisplays()); | 1432 CHECK_LE(2U, GetNumDisplays()); |
1436 return GetDisplayAt(0).id() == | 1433 return GetDisplayAt(0).id() == |
1437 display::Screen::GetScreen()->GetPrimaryDisplay().id() | 1434 display::Screen::GetScreen()->GetPrimaryDisplay().id() |
1438 ? GetDisplayAt(1) | 1435 ? GetDisplayAt(1) |
1439 : GetDisplayAt(0); | 1436 : GetDisplayAt(0); |
1440 } | 1437 } |
1441 | 1438 |
1442 } // namespace ash | 1439 } // namespace display |
OLD | NEW |