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 "ash/display/display_manager.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "ash/ash_switches.h" | 10 #include "ash/ash_switches.h" |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
91 | 91 |
92 using aura::RootWindow; | 92 using aura::RootWindow; |
93 using aura::Window; | 93 using aura::Window; |
94 using std::string; | 94 using std::string; |
95 using std::vector; | 95 using std::vector; |
96 | 96 |
97 DEFINE_WINDOW_PROPERTY_KEY(int64, kDisplayIdKey, | 97 DEFINE_WINDOW_PROPERTY_KEY(int64, kDisplayIdKey, |
98 gfx::Display::kInvalidDisplayID); | 98 gfx::Display::kInvalidDisplayID); |
99 | 99 |
100 DisplayManager::DisplayManager() : | 100 DisplayManager::DisplayManager() : |
101 internal_display_id_(gfx::Display::kInvalidDisplayID), | |
102 force_bounds_changed_(false) { | 101 force_bounds_changed_(false) { |
103 Init(); | 102 Init(); |
104 } | 103 } |
105 | 104 |
106 DisplayManager::~DisplayManager() { | 105 DisplayManager::~DisplayManager() { |
107 } | 106 } |
108 | 107 |
109 // static | 108 // static |
110 void DisplayManager::CycleDisplay() { | 109 void DisplayManager::CycleDisplay() { |
111 Shell::GetInstance()->display_manager()->CycleDisplayImpl(); | 110 Shell::GetInstance()->display_manager()->CycleDisplayImpl(); |
112 } | 111 } |
113 | 112 |
114 // static | 113 // static |
115 void DisplayManager::ToggleDisplayScale() { | 114 void DisplayManager::ToggleDisplayScale() { |
116 Shell::GetInstance()->display_manager()->ScaleDisplayImpl(); | 115 Shell::GetInstance()->display_manager()->ScaleDisplayImpl(); |
117 } | 116 } |
118 | 117 |
119 bool DisplayManager::IsActiveDisplay(const gfx::Display& display) const { | 118 bool DisplayManager::IsActiveDisplay(const gfx::Display& display) const { |
120 for (DisplayList::const_iterator iter = displays_.begin(); | 119 for (DisplayList::const_iterator iter = displays_.begin(); |
121 iter != displays_.end(); ++iter) { | 120 iter != displays_.end(); ++iter) { |
122 if ((*iter).id() == display.id()) | 121 if ((*iter).id() == display.id()) |
123 return true; | 122 return true; |
124 } | 123 } |
125 return false; | 124 return false; |
126 } | 125 } |
127 | 126 |
128 bool DisplayManager::HasInternalDisplay() const { | 127 bool DisplayManager::HasInternalDisplay() const { |
129 return internal_display_id_ != gfx::Display::kInvalidDisplayID; | 128 return gfx::Display::InternalDisplayId() != gfx::Display::kInvalidDisplayID; |
130 } | 129 } |
131 | 130 |
132 bool DisplayManager::IsInternalDisplayId(int64 id) const { | 131 bool DisplayManager::IsInternalDisplayId(int64 id) const { |
133 return internal_display_id_ == id; | 132 return gfx::Display::InternalDisplayId() == id; |
134 } | 133 } |
135 | 134 |
136 bool DisplayManager::UpdateWorkAreaOfDisplayNearestWindow( | 135 bool DisplayManager::UpdateWorkAreaOfDisplayNearestWindow( |
137 const aura::Window* window, | 136 const aura::Window* window, |
138 const gfx::Insets& insets) { | 137 const gfx::Insets& insets) { |
139 const RootWindow* root = window->GetRootWindow(); | 138 const RootWindow* root = window->GetRootWindow(); |
140 gfx::Display& display = FindDisplayForRootWindow(root); | 139 gfx::Display& display = FindDisplayForRootWindow(root); |
141 gfx::Rect old_work_area = display.work_area(); | 140 gfx::Rect old_work_area = display.work_area(); |
142 display.UpdateWorkAreaFromInsets(insets); | 141 display.UpdateWorkAreaFromInsets(insets); |
143 return old_work_area != display.work_area(); | 142 return old_work_area != display.work_area(); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
185 // - the device is suspended. (kernel turns off all displays) | 184 // - the device is suspended. (kernel turns off all displays) |
186 // - the internal display's brightness is set to 0 and no external | 185 // - the internal display's brightness is set to 0 and no external |
187 // display is connected. | 186 // display is connected. |
188 // - the internal display's brightness is 0 and external display is | 187 // - the internal display's brightness is 0 and external display is |
189 // disconnected. | 188 // disconnected. |
190 // The display will be updated when one of displays is turned on, and the | 189 // The display will be updated when one of displays is turned on, and the |
191 // display list will be updated correctly. | 190 // display list will be updated correctly. |
192 return; | 191 return; |
193 } | 192 } |
194 DisplayList new_displays = updated_displays; | 193 DisplayList new_displays = updated_displays; |
195 if (internal_display_id_ != gfx::Display::kInvalidDisplayID) { | 194 if (HasInternalDisplay()) { |
196 bool internal_display_connected = false; | 195 bool internal_display_connected = false; |
197 for (DisplayList::const_iterator iter = updated_displays.begin(); | 196 for (DisplayList::const_iterator iter = updated_displays.begin(); |
198 iter != updated_displays.end(); ++iter) { | 197 iter != updated_displays.end(); ++iter) { |
199 if ((*iter).id() == internal_display_id_) { | 198 if ((*iter).IsInternal()) { |
200 internal_display_connected = true; | 199 internal_display_connected = true; |
201 // Update the internal display cache. | 200 // Update the internal display cache. |
202 internal_display_.reset(new gfx::Display); | 201 internal_display_.reset(new gfx::Display); |
203 *internal_display_.get() = *iter; | 202 *internal_display_.get() = *iter; |
204 break; | 203 break; |
205 } | 204 } |
206 } | 205 } |
207 // If the internal display wasn't connected, use the cached value. | 206 // If the internal display wasn't connected, use the cached value. |
208 if (!internal_display_connected) { | 207 if (!internal_display_connected) { |
209 // Internal display may be reported as disconnect during startup time. | 208 // Internal display may be reported as disconnect during startup time. |
210 if (!internal_display_.get()) { | 209 if (!internal_display_.get()) { |
211 internal_display_.reset(new gfx::Display(internal_display_id_, | 210 internal_display_.reset( |
212 gfx::Rect(800, 600))); | 211 new gfx::Display(gfx::Display::InternalDisplayId(), |
| 212 gfx::Rect(800, 600))); |
213 } | 213 } |
214 new_displays.push_back(*internal_display_.get()); | 214 new_displays.push_back(*internal_display_.get()); |
215 } | 215 } |
216 } else { | 216 } else { |
217 new_displays = updated_displays; | 217 new_displays = updated_displays; |
218 } | 218 } |
219 | 219 |
220 RefreshDisplayInfo(); | 220 RefreshDisplayInfo(); |
221 | 221 |
222 for (DisplayList::const_iterator iter = new_displays.begin(); | 222 for (DisplayList::const_iterator iter = new_displays.begin(); |
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
445 | 445 |
446 void DisplayManager::Init() { | 446 void DisplayManager::Init() { |
447 #if defined(OS_CHROMEOS) | 447 #if defined(OS_CHROMEOS) |
448 if (base::chromeos::IsRunningOnChromeOS()) { | 448 if (base::chromeos::IsRunningOnChromeOS()) { |
449 std::vector<XID> outputs; | 449 std::vector<XID> outputs; |
450 ui::GetOutputDeviceHandles(&outputs); | 450 ui::GetOutputDeviceHandles(&outputs); |
451 std::vector<std::string> output_names = ui::GetOutputNames(outputs); | 451 std::vector<std::string> output_names = ui::GetOutputNames(outputs); |
452 for (size_t i = 0; i < output_names.size(); ++i) { | 452 for (size_t i = 0; i < output_names.size(); ++i) { |
453 if (chromeos::OutputConfigurator::IsInternalOutputName( | 453 if (chromeos::OutputConfigurator::IsInternalOutputName( |
454 output_names[i])) { | 454 output_names[i])) { |
455 internal_display_id_ = GetDisplayIdForOutput(outputs[i], i); | 455 gfx::Display::SetInternalDisplayId( |
| 456 GetDisplayIdForOutput(outputs[i], i)); |
456 break; | 457 break; |
457 } | 458 } |
458 } | 459 } |
459 } | 460 } |
460 #endif | 461 #endif |
461 | 462 |
462 RefreshDisplayInfo(); | 463 RefreshDisplayInfo(); |
463 | 464 |
464 // TODO(oshima): Move this logic to DisplayChangeObserver. | 465 // TODO(oshima): Move this logic to DisplayChangeObserver. |
465 const string size_str = CommandLine::ForCurrentProcess()->GetSwitchValueASCII( | 466 const string size_str = CommandLine::ForCurrentProcess()->GetSwitchValueASCII( |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
530 gfx::Display display = CreateDisplayFromSpec(spec); | 531 gfx::Display display = CreateDisplayFromSpec(spec); |
531 | 532 |
532 const gfx::Insets insets = display.GetWorkAreaInsets(); | 533 const gfx::Insets insets = display.GetWorkAreaInsets(); |
533 const gfx::Rect& native_bounds = display.bounds_in_pixel(); | 534 const gfx::Rect& native_bounds = display.bounds_in_pixel(); |
534 display.SetScaleAndBounds(display.device_scale_factor(), native_bounds); | 535 display.SetScaleAndBounds(display.device_scale_factor(), native_bounds); |
535 display.UpdateWorkAreaFromInsets(insets); | 536 display.UpdateWorkAreaFromInsets(insets); |
536 displays_.push_back(display); | 537 displays_.push_back(display); |
537 } | 538 } |
538 | 539 |
539 int64 DisplayManager::SetFirstDisplayAsInternalDisplayForTest() { | 540 int64 DisplayManager::SetFirstDisplayAsInternalDisplayForTest() { |
540 internal_display_id_ = displays_[0].id(); | 541 gfx::Display::SetInternalDisplayId(displays_[0].id()); |
541 internal_display_.reset(new gfx::Display); | 542 internal_display_.reset(new gfx::Display); |
542 *internal_display_ = displays_[0]; | 543 *internal_display_ = displays_[0]; |
543 return internal_display_id_; | 544 return gfx::Display::InternalDisplayId(); |
544 } | 545 } |
545 | 546 |
546 void DisplayManager::EnsurePointerInDisplays() { | 547 void DisplayManager::EnsurePointerInDisplays() { |
547 // Don't try to move the pointer during the boot/startup. | 548 // Don't try to move the pointer during the boot/startup. |
548 if (!DisplayController::HasPrimaryDisplay()) | 549 if (!DisplayController::HasPrimaryDisplay()) |
549 return; | 550 return; |
550 gfx::Point location_in_screen = Shell::GetScreen()->GetCursorScreenPoint(); | 551 gfx::Point location_in_screen = Shell::GetScreen()->GetCursorScreenPoint(); |
551 gfx::Point target_location; | 552 gfx::Point target_location; |
552 int64 closest_distance_squared = -1; | 553 int64 closest_distance_squared = -1; |
553 | 554 |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
648 } | 649 } |
649 | 650 |
650 gfx::Display display(synthesized_display_id++); | 651 gfx::Display display(synthesized_display_id++); |
651 display.SetScaleAndBounds(scale, bounds); | 652 display.SetScaleAndBounds(scale, bounds); |
652 DVLOG(1) << "Display bounds=" << bounds.ToString() << ", scale=" << scale; | 653 DVLOG(1) << "Display bounds=" << bounds.ToString() << ", scale=" << scale; |
653 return display; | 654 return display; |
654 } | 655 } |
655 | 656 |
656 } // namespace internal | 657 } // namespace internal |
657 } // namespace ash | 658 } // namespace ash |
OLD | NEW |