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

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

Issue 22662005: Don't remember best resolution. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 4 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 | Annotate | Revision Log
« no previous file with comments | « ash/display/display_info_unittest.cc ('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 <cmath> 7 #include <cmath>
8 #include <set> 8 #include <set>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 return a.id() < b.id(); 65 return a.id() < b.id();
66 } 66 }
67 }; 67 };
68 68
69 struct DisplayInfoSortFunctor { 69 struct DisplayInfoSortFunctor {
70 bool operator()(const DisplayInfo& a, const DisplayInfo& b) { 70 bool operator()(const DisplayInfo& a, const DisplayInfo& b) {
71 return a.id() < b.id(); 71 return a.id() < b.id();
72 } 72 }
73 }; 73 };
74 74
75 struct ResolutionMatcher {
76 ResolutionMatcher(const gfx::Size& size) : size(size) {}
77 bool operator()(const Resolution& resolution) {
78 return resolution.size == size;
79 }
80 gfx::Size size;
81 };
82
75 struct ScaleComparator { 83 struct ScaleComparator {
76 ScaleComparator(float s) : scale(s) {} 84 ScaleComparator(float s) : scale(s) {}
77 85
78 bool operator()(float s) const { 86 bool operator()(float s) const {
79 const float kEpsilon = 0.0001f; 87 const float kEpsilon = 0.0001f;
80 return std::abs(scale - s) < kEpsilon; 88 return std::abs(scale - s) < kEpsilon;
81 } 89 }
82 float scale; 90 float scale;
83 }; 91 };
84 92
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
319 } 327 }
320 AddMirrorDisplayInfoIfAny(&display_info_list); 328 AddMirrorDisplayInfoIfAny(&display_info_list);
321 UpdateDisplays(display_info_list); 329 UpdateDisplays(display_info_list);
322 } 330 }
323 331
324 void DisplayManager::SetDisplayResolution(int64 display_id, 332 void DisplayManager::SetDisplayResolution(int64 display_id,
325 const gfx::Size& resolution) { 333 const gfx::Size& resolution) {
326 DCHECK_NE(gfx::Display::InternalDisplayId(), display_id); 334 DCHECK_NE(gfx::Display::InternalDisplayId(), display_id);
327 if (gfx::Display::InternalDisplayId() == display_id) 335 if (gfx::Display::InternalDisplayId() == display_id)
328 return; 336 return;
329 resolutions_[display_id] = resolution; 337 const DisplayInfo& display_info = GetDisplayInfo(display_id);
338 const std::vector<Resolution>& resolutions = display_info.resolutions();
339 DCHECK_NE(0u, resolutions.size());
340 std::vector<Resolution>::const_iterator iter =
341 std::find_if(resolutions.begin(),
342 resolutions.end(),
343 ResolutionMatcher(resolution));
344 if (iter == resolutions.end()) {
345 LOG(WARNING) << "Unsupported resolution was requested:"
346 << resolution.ToString();
347 return;
348 } else if (iter == resolutions.begin()) {
349 // The best resolution was set, so forget it.
350 resolutions_.erase(display_id);
351 } else {
352 resolutions_[display_id] = resolution;
353 }
330 #if defined(OS_CHROMEOS) && defined(USE_X11) 354 #if defined(OS_CHROMEOS) && defined(USE_X11)
331 if (base::chromeos::IsRunningOnChromeOS()) 355 if (base::chromeos::IsRunningOnChromeOS())
332 Shell::GetInstance()->output_configurator()->ScheduleConfigureOutputs(); 356 Shell::GetInstance()->output_configurator()->ScheduleConfigureOutputs();
333 #endif 357 #endif
334 } 358 }
335 359
336 void DisplayManager::RegisterDisplayProperty( 360 void DisplayManager::RegisterDisplayProperty(
337 int64 display_id, 361 int64 display_id,
338 gfx::Display::Rotation rotation, 362 gfx::Display::Rotation rotation,
339 float ui_scale, 363 float ui_scale,
(...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after
726 if (Shell::GetInstance()->output_configurator_animation()) { 750 if (Shell::GetInstance()->output_configurator_animation()) {
727 Shell::GetInstance()->output_configurator_animation()-> 751 Shell::GetInstance()->output_configurator_animation()->
728 StartFadeInAnimation(); 752 StartFadeInAnimation();
729 } 753 }
730 #endif 754 #endif
731 } 755 }
732 756
733 void DisplayManager::AddRemoveDisplay() { 757 void DisplayManager::AddRemoveDisplay() {
734 DCHECK(!displays_.empty()); 758 DCHECK(!displays_.empty());
735 std::vector<DisplayInfo> new_display_info_list; 759 std::vector<DisplayInfo> new_display_info_list;
736 DisplayInfo first_display = GetDisplayInfo(displays_[0].id()); 760 const DisplayInfo& first_display = GetDisplayInfo(displays_[0].id());
737 new_display_info_list.push_back(first_display); 761 new_display_info_list.push_back(first_display);
738 // Add if there is only one display connected. 762 // Add if there is only one display connected.
739 if (num_connected_displays() == 1) { 763 if (num_connected_displays() == 1) {
740 // Layout the 2nd display below the primary as with the real device. 764 // Layout the 2nd display below the primary as with the real device.
741 gfx::Rect host_bounds = first_display.bounds_in_pixel(); 765 gfx::Rect host_bounds = first_display.bounds_in_pixel();
742 new_display_info_list.push_back(DisplayInfo::CreateFromSpec( 766 new_display_info_list.push_back(DisplayInfo::CreateFromSpec(
743 base::StringPrintf( 767 base::StringPrintf(
744 "%d+%d-500x400", host_bounds.x(), host_bounds.bottom()))); 768 "%d+%d-500x400", host_bounds.x(), host_bounds.bottom())));
745 } 769 }
746 num_connected_displays_ = new_display_info_list.size(); 770 num_connected_displays_ = new_display_info_list.size();
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
904 break; 928 break;
905 } 929 }
906 gfx::Insets insets = secondary_display->GetWorkAreaInsets(); 930 gfx::Insets insets = secondary_display->GetWorkAreaInsets();
907 secondary_display->set_bounds( 931 secondary_display->set_bounds(
908 gfx::Rect(new_secondary_origin, secondary_bounds.size())); 932 gfx::Rect(new_secondary_origin, secondary_bounds.size()));
909 secondary_display->UpdateWorkAreaFromInsets(insets); 933 secondary_display->UpdateWorkAreaFromInsets(insets);
910 } 934 }
911 935
912 } // namespace internal 936 } // namespace internal
913 } // namespace ash 937 } // namespace ash
OLDNEW
« no previous file with comments | « ash/display/display_info_unittest.cc ('k') | ash/display/display_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698