OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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_util.h" | 5 #include "ash/display/display_util.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "ash/display/display_info.h" | 9 #include "ash/display/display_info.h" |
10 #include "ash/display/display_manager.h" | 10 #include "ash/display/display_manager.h" |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
119 DisplayMode mode = native_mode; | 119 DisplayMode mode = native_mode; |
120 mode.ui_scale = ui_scale; | 120 mode.ui_scale = ui_scale; |
121 mode.native = (ui_scale == native_ui_scale); | 121 mode.native = (ui_scale == native_ui_scale); |
122 display_mode_list.push_back(mode); | 122 display_mode_list.push_back(mode); |
123 } | 123 } |
124 return display_mode_list; | 124 return display_mode_list; |
125 } | 125 } |
126 | 126 |
127 std::vector<DisplayMode> CreateUnifiedDisplayModeList( | 127 std::vector<DisplayMode> CreateUnifiedDisplayModeList( |
128 const DisplayMode& native_mode, | 128 const DisplayMode& native_mode, |
129 const std::set<float>& scales) { | 129 const std::set<std::pair<float, float>>& dsf_scale_list) { |
130 std::vector<DisplayMode> display_mode_list; | 130 std::vector<DisplayMode> display_mode_list; |
131 | 131 |
132 for (float ui_scale : scales) { | 132 for (auto& pair : dsf_scale_list) { |
133 DisplayMode mode = native_mode; | 133 DisplayMode mode = native_mode; |
| 134 mode.device_scale_factor = pair.first; |
134 gfx::SizeF scaled_size(native_mode.size); | 135 gfx::SizeF scaled_size(native_mode.size); |
135 scaled_size.Scale(ui_scale); | 136 scaled_size.Scale(pair.second); |
136 mode.size = gfx::ToFlooredSize(scaled_size); | 137 mode.size = gfx::ToFlooredSize(scaled_size); |
137 mode.native = mode.size == native_mode.size; | 138 mode.native = false; |
138 display_mode_list.push_back(mode); | 139 display_mode_list.push_back(mode); |
139 } | 140 } |
| 141 // Sort the mode by the size in DIP. |
| 142 std::sort(display_mode_list.begin(), display_mode_list.end(), |
| 143 [](const DisplayMode& a, const DisplayMode& b) { |
| 144 return a.GetSizeInDIP(false).GetArea() < |
| 145 b.GetSizeInDIP(false).GetArea(); |
| 146 }); |
140 return display_mode_list; | 147 return display_mode_list; |
141 } | 148 } |
142 | 149 |
143 bool GetDisplayModeForResolution(const DisplayInfo& info, | 150 bool GetDisplayModeForResolution(const DisplayInfo& info, |
144 const gfx::Size& resolution, | 151 const gfx::Size& resolution, |
145 DisplayMode* out) { | 152 DisplayMode* out) { |
146 if (gfx::Display::IsInternalDisplayId(info.id())) | 153 if (gfx::Display::IsInternalDisplayId(info.id())) |
147 return false; | 154 return false; |
148 | 155 |
149 const std::vector<DisplayMode>& modes = info.display_modes(); | 156 const std::vector<DisplayMode>& modes = info.display_modes(); |
(...skipping 24 matching lines...) Expand all Loading... |
174 FindNextMode(iter, modes, up, out); | 181 FindNextMode(iter, modes, up, out); |
175 return true; | 182 return true; |
176 } | 183 } |
177 | 184 |
178 bool GetDisplayModeForNextResolution(const DisplayInfo& info, | 185 bool GetDisplayModeForNextResolution(const DisplayInfo& info, |
179 bool up, | 186 bool up, |
180 DisplayMode* out) { | 187 DisplayMode* out) { |
181 if (gfx::Display::IsInternalDisplayId(info.id())) | 188 if (gfx::Display::IsInternalDisplayId(info.id())) |
182 return false; | 189 return false; |
183 const std::vector<DisplayMode>& modes = info.display_modes(); | 190 const std::vector<DisplayMode>& modes = info.display_modes(); |
184 const gfx::Size& resolution = info.size_in_pixel(); | 191 DisplayMode tmp(info.size_in_pixel(), 0.0f, false, false); |
| 192 tmp.device_scale_factor = info.device_scale_factor(); |
| 193 gfx::Size resolution = tmp.GetSizeInDIP(false); |
185 auto iter = std::find_if(modes.begin(), modes.end(), | 194 auto iter = std::find_if(modes.begin(), modes.end(), |
186 [resolution](const DisplayMode& mode) { | 195 [resolution](const DisplayMode& mode) { |
187 return mode.size == resolution; | 196 return mode.GetSizeInDIP(false) == resolution; |
188 }); | 197 }); |
189 FindNextMode(iter, modes, up, out); | 198 FindNextMode(iter, modes, up, out); |
190 return true; | 199 return true; |
191 } | 200 } |
192 | 201 |
193 bool SetDisplayUIScale(int64 id, float ui_scale) { | 202 bool SetDisplayUIScale(int64 id, float ui_scale) { |
194 DisplayManager* display_manager = Shell::GetInstance()->display_manager(); | 203 DisplayManager* display_manager = Shell::GetInstance()->display_manager(); |
195 const DisplayInfo& info = display_manager->GetDisplayInfo(id); | 204 const DisplayInfo& info = display_manager->GetDisplayInfo(id); |
196 DisplayMode mode; | 205 DisplayMode mode; |
197 if (!GetDisplayModeForUIScale(info, ui_scale, &mode)) | 206 if (!GetDisplayModeForUIScale(info, ui_scale, &mode)) |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
323 int FindDisplayIndexContainingPoint(const std::vector<gfx::Display>& displays, | 332 int FindDisplayIndexContainingPoint(const std::vector<gfx::Display>& displays, |
324 const gfx::Point& point_in_screen) { | 333 const gfx::Point& point_in_screen) { |
325 auto iter = std::find_if(displays.begin(), displays.end(), | 334 auto iter = std::find_if(displays.begin(), displays.end(), |
326 [point_in_screen](const gfx::Display& display) { | 335 [point_in_screen](const gfx::Display& display) { |
327 return display.bounds().Contains(point_in_screen); | 336 return display.bounds().Contains(point_in_screen); |
328 }); | 337 }); |
329 return iter == displays.end() ? -1 : (iter - displays.begin()); | 338 return iter == displays.end() ? -1 : (iter - displays.begin()); |
330 } | 339 } |
331 | 340 |
332 } // namespace ash | 341 } // namespace ash |
OLD | NEW |