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 <algorithm> | 7 #include <algorithm> |
8 #include <cmath> | 8 #include <cmath> |
9 #include <set> | 9 #include <set> |
10 #include <string> | 10 #include <string> |
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
336 } | 336 } |
337 if (update) { | 337 if (update) { |
338 AddMirrorDisplayInfoIfAny(&display_info_list); | 338 AddMirrorDisplayInfoIfAny(&display_info_list); |
339 UpdateDisplays(display_info_list); | 339 UpdateDisplays(display_info_list); |
340 } else { | 340 } else { |
341 display_info_[display_id].SetOverscanInsets(insets_in_dip); | 341 display_info_[display_id].SetOverscanInsets(insets_in_dip); |
342 } | 342 } |
343 } | 343 } |
344 | 344 |
345 void DisplayManager::SetDisplayRotation(int64 display_id, | 345 void DisplayManager::SetDisplayRotation(int64 display_id, |
346 gfx::Display::Rotation rotation) { | 346 gfx::Display::Rotation rotation, |
| 347 gfx::Display::RotationSource source) { |
347 DisplayInfoList display_info_list; | 348 DisplayInfoList display_info_list; |
348 for (DisplayList::const_iterator iter = displays_.begin(); | 349 for (DisplayList::const_iterator iter = displays_.begin(); |
349 iter != displays_.end(); ++iter) { | 350 iter != displays_.end(); ++iter) { |
350 DisplayInfo info = GetDisplayInfo(iter->id()); | 351 DisplayInfo info = GetDisplayInfo(iter->id()); |
351 if (info.id() == display_id) { | 352 if (info.id() == display_id) { |
352 if (info.rotation() == rotation) | 353 if (info.GetRotation(source) == rotation && |
| 354 info.GetActiveRotation() == rotation) { |
353 return; | 355 return; |
354 info.set_rotation(rotation); | 356 } |
| 357 info.SetRotation(rotation, source); |
355 } | 358 } |
356 display_info_list.push_back(info); | 359 display_info_list.push_back(info); |
357 } | 360 } |
358 AddMirrorDisplayInfoIfAny(&display_info_list); | 361 AddMirrorDisplayInfoIfAny(&display_info_list); |
359 UpdateDisplays(display_info_list); | 362 UpdateDisplays(display_info_list); |
360 } | 363 } |
361 | 364 |
362 bool DisplayManager::SetDisplayUIScale(int64 display_id, | 365 bool DisplayManager::SetDisplayUIScale(int64 display_id, |
363 float ui_scale) { | 366 float ui_scale) { |
364 if (!IsDisplayUIScalingEnabled() || | 367 if (!IsDisplayUIScalingEnabled() || |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
462 int64 display_id, | 465 int64 display_id, |
463 gfx::Display::Rotation rotation, | 466 gfx::Display::Rotation rotation, |
464 float ui_scale, | 467 float ui_scale, |
465 const gfx::Insets* overscan_insets, | 468 const gfx::Insets* overscan_insets, |
466 const gfx::Size& resolution_in_pixels, | 469 const gfx::Size& resolution_in_pixels, |
467 float device_scale_factor, | 470 float device_scale_factor, |
468 ui::ColorCalibrationProfile color_profile) { | 471 ui::ColorCalibrationProfile color_profile) { |
469 if (display_info_.find(display_id) == display_info_.end()) | 472 if (display_info_.find(display_id) == display_info_.end()) |
470 display_info_[display_id] = DisplayInfo(display_id, std::string(), false); | 473 display_info_[display_id] = DisplayInfo(display_id, std::string(), false); |
471 | 474 |
472 display_info_[display_id].set_rotation(rotation); | 475 display_info_[display_id].SetRotation(rotation, |
| 476 gfx::Display::ROTATION_SOURCE_ACTIVE); |
473 display_info_[display_id].SetColorProfile(color_profile); | 477 display_info_[display_id].SetColorProfile(color_profile); |
474 // Just in case the preference file was corrupted. | 478 // Just in case the preference file was corrupted. |
475 // TODO(mukai): register |display_modes_| here as well, so the lookup for the | 479 // TODO(mukai): register |display_modes_| here as well, so the lookup for the |
476 // default mode in GetActiveModeForDisplayId() gets much simpler. | 480 // default mode in GetActiveModeForDisplayId() gets much simpler. |
477 if (0.5f <= ui_scale && ui_scale <= 2.0f) | 481 if (0.5f <= ui_scale && ui_scale <= 2.0f) |
478 display_info_[display_id].set_configured_ui_scale(ui_scale); | 482 display_info_[display_id].set_configured_ui_scale(ui_scale); |
479 if (overscan_insets) | 483 if (overscan_insets) |
480 display_info_[display_id].SetOverscanInsets(*overscan_insets); | 484 display_info_[display_id].SetOverscanInsets(*overscan_insets); |
481 if (!resolution_in_pixels.IsEmpty()) { | 485 if (!resolution_in_pixels.IsEmpty()) { |
482 DCHECK(!IsInternalDisplayId(display_id)); | 486 DCHECK(!IsInternalDisplayId(display_id)); |
(...skipping 662 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1145 | 1149 |
1146 gfx::Display new_display(display_info.id()); | 1150 gfx::Display new_display(display_info.id()); |
1147 gfx::Rect bounds_in_native(display_info.size_in_pixel()); | 1151 gfx::Rect bounds_in_native(display_info.size_in_pixel()); |
1148 float device_scale_factor = display_info.GetEffectiveDeviceScaleFactor(); | 1152 float device_scale_factor = display_info.GetEffectiveDeviceScaleFactor(); |
1149 | 1153 |
1150 // Simply set the origin to (0,0). The primary display's origin is | 1154 // Simply set the origin to (0,0). The primary display's origin is |
1151 // always (0,0) and the bounds of non-primary display(s) will be updated | 1155 // always (0,0) and the bounds of non-primary display(s) will be updated |
1152 // in |UpdateNonPrimaryDisplayBoundsForLayout| called in |UpdateDisplay|. | 1156 // in |UpdateNonPrimaryDisplayBoundsForLayout| called in |UpdateDisplay|. |
1153 new_display.SetScaleAndBounds( | 1157 new_display.SetScaleAndBounds( |
1154 device_scale_factor, gfx::Rect(bounds_in_native.size())); | 1158 device_scale_factor, gfx::Rect(bounds_in_native.size())); |
1155 new_display.set_rotation(display_info.rotation()); | 1159 new_display.set_rotation(display_info.GetActiveRotation()); |
1156 new_display.set_touch_support(display_info.touch_support()); | 1160 new_display.set_touch_support(display_info.touch_support()); |
1157 return new_display; | 1161 return new_display; |
1158 } | 1162 } |
1159 | 1163 |
1160 bool DisplayManager::UpdateNonPrimaryDisplayBoundsForLayout( | 1164 bool DisplayManager::UpdateNonPrimaryDisplayBoundsForLayout( |
1161 DisplayList* displays, | 1165 DisplayList* displays, |
1162 std::vector<size_t>* updated_indices) const { | 1166 std::vector<size_t>* updated_indices) const { |
1163 | 1167 |
1164 if (displays->size() < 2U) | 1168 if (displays->size() < 2U) |
1165 return false; | 1169 return false; |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1266 new_secondary_origin.Offset(-secondary_bounds.width(), offset); | 1270 new_secondary_origin.Offset(-secondary_bounds.width(), offset); |
1267 break; | 1271 break; |
1268 } | 1272 } |
1269 gfx::Insets insets = secondary_display->GetWorkAreaInsets(); | 1273 gfx::Insets insets = secondary_display->GetWorkAreaInsets(); |
1270 secondary_display->set_bounds( | 1274 secondary_display->set_bounds( |
1271 gfx::Rect(new_secondary_origin, secondary_bounds.size())); | 1275 gfx::Rect(new_secondary_origin, secondary_bounds.size())); |
1272 secondary_display->UpdateWorkAreaFromInsets(insets); | 1276 secondary_display->UpdateWorkAreaFromInsets(insets); |
1273 } | 1277 } |
1274 | 1278 |
1275 } // namespace ash | 1279 } // namespace ash |
OLD | NEW |