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 <cmath> | 7 #include <cmath> |
8 #include <set> | 8 #include <set> |
9 #include <string> | 9 #include <string> |
10 #include <vector> | 10 #include <vector> |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
78 struct ScaleComparator { | 78 struct ScaleComparator { |
79 ScaleComparator(float s) : scale(s) {} | 79 ScaleComparator(float s) : scale(s) {} |
80 | 80 |
81 bool operator()(float s) const { | 81 bool operator()(float s) const { |
82 const float kEpsilon = 0.0001f; | 82 const float kEpsilon = 0.0001f; |
83 return std::abs(scale - s) < kEpsilon; | 83 return std::abs(scale - s) < kEpsilon; |
84 } | 84 } |
85 float scale; | 85 float scale; |
86 }; | 86 }; |
87 | 87 |
88 std::vector<float> GetScalesForDisplay(const DisplayInfo& info) { | |
89 std::vector<float> ret; | |
90 if (info.device_scale_factor() == 2.0f) { | |
91 ret.assign(kUIScalesFor2x, kUIScalesFor2x + arraysize(kUIScalesFor2x)); | |
92 return ret; | |
93 } | |
94 switch (info.bounds_in_pixel().width()) { | |
95 case 1280: | |
96 ret.assign(kUIScalesFor1280, | |
97 kUIScalesFor1280 + arraysize(kUIScalesFor1280)); | |
98 break; | |
99 case 1366: | |
100 ret.assign(kUIScalesFor1366, | |
101 kUIScalesFor1366 + arraysize(kUIScalesFor1366)); | |
102 break; | |
103 default: | |
104 ret.assign(kUIScalesFor1280, | |
105 kUIScalesFor1280 + arraysize(kUIScalesFor1280)); | |
106 #if defined(OS_CHROMEOS) | |
107 if (base::chromeos::IsRunningOnChromeOS()) | |
108 NOTREACHED() << "Unknown resolution:" << info.ToString(); | |
109 #endif | |
110 } | |
111 return ret; | |
112 } | |
113 | |
114 gfx::Display& GetInvalidDisplay() { | 88 gfx::Display& GetInvalidDisplay() { |
115 static gfx::Display* invalid_display = new gfx::Display(); | 89 static gfx::Display* invalid_display = new gfx::Display(); |
116 return *invalid_display; | 90 return *invalid_display; |
117 } | 91 } |
118 | 92 |
119 } // namespace | 93 } // namespace |
120 | 94 |
121 using aura::RootWindow; | 95 using aura::RootWindow; |
122 using aura::Window; | 96 using aura::Window; |
123 using std::string; | 97 using std::string; |
(...skipping 21 matching lines...) Expand all Loading... |
145 void DisplayManager::CycleDisplay() { | 119 void DisplayManager::CycleDisplay() { |
146 Shell::GetInstance()->display_manager()->CycleDisplayImpl(); | 120 Shell::GetInstance()->display_manager()->CycleDisplayImpl(); |
147 } | 121 } |
148 | 122 |
149 // static | 123 // static |
150 void DisplayManager::ToggleDisplayScaleFactor() { | 124 void DisplayManager::ToggleDisplayScaleFactor() { |
151 Shell::GetInstance()->display_manager()->ScaleDisplayImpl(); | 125 Shell::GetInstance()->display_manager()->ScaleDisplayImpl(); |
152 } | 126 } |
153 | 127 |
154 // static | 128 // static |
| 129 std::vector<float> DisplayManager::GetScalesForDisplay( |
| 130 const DisplayInfo& info) { |
| 131 std::vector<float> ret; |
| 132 if (info.device_scale_factor() == 2.0f) { |
| 133 ret.assign(kUIScalesFor2x, kUIScalesFor2x + arraysize(kUIScalesFor2x)); |
| 134 return ret; |
| 135 } |
| 136 switch (info.bounds_in_pixel().width()) { |
| 137 case 1280: |
| 138 ret.assign(kUIScalesFor1280, |
| 139 kUIScalesFor1280 + arraysize(kUIScalesFor1280)); |
| 140 break; |
| 141 case 1366: |
| 142 ret.assign(kUIScalesFor1366, |
| 143 kUIScalesFor1366 + arraysize(kUIScalesFor1366)); |
| 144 break; |
| 145 default: |
| 146 ret.assign(kUIScalesFor1280, |
| 147 kUIScalesFor1280 + arraysize(kUIScalesFor1280)); |
| 148 #if defined(OS_CHROMEOS) |
| 149 if (base::chromeos::IsRunningOnChromeOS()) |
| 150 NOTREACHED() << "Unknown resolution:" << info.ToString(); |
| 151 #endif |
| 152 } |
| 153 return ret; |
| 154 } |
| 155 |
| 156 // static |
155 float DisplayManager::GetNextUIScale(const DisplayInfo& info, bool up) { | 157 float DisplayManager::GetNextUIScale(const DisplayInfo& info, bool up) { |
156 float scale = info.ui_scale(); | 158 float scale = info.ui_scale(); |
157 std::vector<float> scales = GetScalesForDisplay(info); | 159 std::vector<float> scales = GetScalesForDisplay(info); |
158 for (size_t i = 0; i < scales.size(); ++i) { | 160 for (size_t i = 0; i < scales.size(); ++i) { |
159 if (ScaleComparator(scales[i])(scale)) { | 161 if (ScaleComparator(scales[i])(scale)) { |
160 if (up && i != scales.size() - 1) | 162 if (up && i != scales.size() - 1) |
161 return scales[i + 1]; | 163 return scales[i + 1]; |
162 if (!up && i != 0) | 164 if (!up && i != 0) |
163 return scales[i - 1]; | 165 return scales[i - 1]; |
164 return scales[i]; | 166 return scales[i]; |
(...skipping 569 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
734 // always (0,0) and the secondary display's bounds will be updated | 736 // always (0,0) and the secondary display's bounds will be updated |
735 // by |DisplayController::UpdateDisplayBoundsForLayout|. | 737 // by |DisplayController::UpdateDisplayBoundsForLayout|. |
736 new_display.SetScaleAndBounds( | 738 new_display.SetScaleAndBounds( |
737 display_info.device_scale_factor(), gfx::Rect(bounds_in_pixel.size())); | 739 display_info.device_scale_factor(), gfx::Rect(bounds_in_pixel.size())); |
738 new_display.set_rotation(display_info.rotation()); | 740 new_display.set_rotation(display_info.rotation()); |
739 return new_display; | 741 return new_display; |
740 } | 742 } |
741 | 743 |
742 } // namespace internal | 744 } // namespace internal |
743 } // namespace ash | 745 } // namespace ash |
OLD | NEW |