| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 <stdio.h> | 5 #include <stdio.h> |
| 6 #include <string> | 6 #include <string> |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "ash/display/display_info.h" | 9 #include "ash/display/display_info.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| 11 #include "base/strings/string_number_conversions.h" | 11 #include "base/strings/string_number_conversions.h" |
| 12 #include "base/strings/string_split.h" |
| 12 #include "base/strings/string_util.h" | 13 #include "base/strings/string_util.h" |
| 13 #include "base/strings/stringprintf.h" | 14 #include "base/strings/stringprintf.h" |
| 14 #include "ui/gfx/display.h" | 15 #include "ui/gfx/display.h" |
| 15 #include "ui/gfx/geometry/size_conversions.h" | 16 #include "ui/gfx/geometry/size_conversions.h" |
| 16 #include "ui/gfx/geometry/size_f.h" | 17 #include "ui/gfx/geometry/size_f.h" |
| 17 | 18 |
| 18 #if defined(OS_WIN) | 19 #if defined(OS_WIN) |
| 19 #include "ui/aura/window_tree_host.h" | 20 #include "ui/aura/window_tree_host.h" |
| 20 #include "ui/gfx/win/dpi.h" | 21 #include "ui/gfx/win/dpi.h" |
| 21 #endif | 22 #endif |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 122 const int kDefaultHostWindowX = 200; | 123 const int kDefaultHostWindowX = 200; |
| 123 const int kDefaultHostWindowY = 200; | 124 const int kDefaultHostWindowY = 200; |
| 124 const int kDefaultHostWindowWidth = 1366; | 125 const int kDefaultHostWindowWidth = 1366; |
| 125 const int kDefaultHostWindowHeight = 768; | 126 const int kDefaultHostWindowHeight = 768; |
| 126 gfx::Rect bounds_in_native(kDefaultHostWindowX, kDefaultHostWindowY, | 127 gfx::Rect bounds_in_native(kDefaultHostWindowX, kDefaultHostWindowY, |
| 127 kDefaultHostWindowWidth, kDefaultHostWindowHeight); | 128 kDefaultHostWindowWidth, kDefaultHostWindowHeight); |
| 128 #endif | 129 #endif |
| 129 std::string main_spec = spec; | 130 std::string main_spec = spec; |
| 130 | 131 |
| 131 float ui_scale = 1.0f; | 132 float ui_scale = 1.0f; |
| 132 std::vector<std::string> parts; | 133 std::vector<std::string> parts = base::SplitString( |
| 133 if (Tokenize(main_spec, "@", &parts) == 2) { | 134 main_spec, "@", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); |
| 135 if (parts.size() == 2) { |
| 134 double scale_in_double = 0; | 136 double scale_in_double = 0; |
| 135 if (base::StringToDouble(parts[1], &scale_in_double)) | 137 if (base::StringToDouble(parts[1], &scale_in_double)) |
| 136 ui_scale = scale_in_double; | 138 ui_scale = scale_in_double; |
| 137 main_spec = parts[0]; | 139 main_spec = parts[0]; |
| 138 } | 140 } |
| 139 | 141 |
| 140 size_t count = Tokenize(main_spec, "/", &parts); | 142 parts = base::SplitString(main_spec, "/", base::KEEP_WHITESPACE, |
| 143 base::SPLIT_WANT_NONEMPTY); |
| 141 gfx::Display::Rotation rotation(gfx::Display::ROTATE_0); | 144 gfx::Display::Rotation rotation(gfx::Display::ROTATE_0); |
| 142 bool has_overscan = false; | 145 bool has_overscan = false; |
| 143 if (count) { | 146 if (!parts.empty()) { |
| 144 main_spec = parts[0]; | 147 main_spec = parts[0]; |
| 145 if (count >= 2) { | 148 if (parts.size() >= 2) { |
| 146 std::string options = parts[1]; | 149 std::string options = parts[1]; |
| 147 for (size_t i = 0; i < options.size(); ++i) { | 150 for (size_t i = 0; i < options.size(); ++i) { |
| 148 char c = options[i]; | 151 char c = options[i]; |
| 149 switch (c) { | 152 switch (c) { |
| 150 case 'o': | 153 case 'o': |
| 151 has_overscan = true; | 154 has_overscan = true; |
| 152 break; | 155 break; |
| 153 case 'r': // rotate 90 degrees to 'right'. | 156 case 'r': // rotate 90 degrees to 'right'. |
| 154 rotation = gfx::Display::ROTATE_90; | 157 rotation = gfx::Display::ROTATE_90; |
| 155 break; | 158 break; |
| 156 case 'u': // 180 degrees, 'u'pside-down. | 159 case 'u': // 180 degrees, 'u'pside-down. |
| 157 rotation = gfx::Display::ROTATE_180; | 160 rotation = gfx::Display::ROTATE_180; |
| 158 break; | 161 break; |
| 159 case 'l': // rotate 90 degrees to 'left'. | 162 case 'l': // rotate 90 degrees to 'left'. |
| 160 rotation = gfx::Display::ROTATE_270; | 163 rotation = gfx::Display::ROTATE_270; |
| 161 break; | 164 break; |
| 162 } | 165 } |
| 163 } | 166 } |
| 164 } | 167 } |
| 165 } | 168 } |
| 166 | 169 |
| 167 float device_scale_factor = 1.0f; | 170 float device_scale_factor = 1.0f; |
| 168 if (!GetDisplayBounds(main_spec, &bounds_in_native, &device_scale_factor)) { | 171 if (!GetDisplayBounds(main_spec, &bounds_in_native, &device_scale_factor)) { |
| 169 #if defined(OS_WIN) | 172 #if defined(OS_WIN) |
| 170 device_scale_factor = gfx::GetDPIScale(); | 173 device_scale_factor = gfx::GetDPIScale(); |
| 171 #endif | 174 #endif |
| 172 } | 175 } |
| 173 | 176 |
| 174 std::vector<DisplayMode> display_modes; | 177 std::vector<DisplayMode> display_modes; |
| 175 if (Tokenize(main_spec, "#", &parts) == 2) { | 178 parts = base::SplitString(main_spec, "#", base::KEEP_WHITESPACE, |
| 179 base::SPLIT_WANT_NONEMPTY); |
| 180 if (parts.size() == 2) { |
| 176 size_t native_mode = 0; | 181 size_t native_mode = 0; |
| 177 int largest_area = -1; | 182 int largest_area = -1; |
| 178 float highest_refresh_rate = -1.0f; | 183 float highest_refresh_rate = -1.0f; |
| 179 main_spec = parts[0]; | 184 main_spec = parts[0]; |
| 180 std::string resolution_list = parts[1]; | 185 std::string resolution_list = parts[1]; |
| 181 count = Tokenize(resolution_list, "|", &parts); | 186 parts = base::SplitString(resolution_list, "|", base::KEEP_WHITESPACE, |
| 182 for (size_t i = 0; i < count; ++i) { | 187 base::SPLIT_WANT_NONEMPTY); |
| 188 for (size_t i = 0; i < parts.size(); ++i) { |
| 183 DisplayMode mode; | 189 DisplayMode mode; |
| 184 gfx::Rect mode_bounds; | 190 gfx::Rect mode_bounds; |
| 185 std::vector<std::string> resolution; | 191 std::vector<std::string> resolution = base::SplitString( |
| 186 Tokenize(parts[i], "%", &resolution); | 192 parts[i], "%", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); |
| 187 if (GetDisplayBounds( | 193 if (GetDisplayBounds( |
| 188 resolution[0], &mode_bounds, &mode.device_scale_factor)) { | 194 resolution[0], &mode_bounds, &mode.device_scale_factor)) { |
| 189 mode.size = mode_bounds.size(); | 195 mode.size = mode_bounds.size(); |
| 190 if (resolution.size() > 1) | 196 if (resolution.size() > 1) |
| 191 sscanf(resolution[1].c_str(), "%f", &mode.refresh_rate); | 197 sscanf(resolution[1].c_str(), "%f", &mode.refresh_rate); |
| 192 if (mode.size.GetArea() >= largest_area && | 198 if (mode.size.GetArea() >= largest_area && |
| 193 mode.refresh_rate > highest_refresh_rate) { | 199 mode.refresh_rate > highest_refresh_rate) { |
| 194 // Use mode with largest area and highest refresh rate as native. | 200 // Use mode with largest area and highest refresh rate as native. |
| 195 largest_area = mode.size.GetArea(); | 201 largest_area = mode.size.GetArea(); |
| 196 highest_refresh_rate = mode.refresh_rate; | 202 highest_refresh_rate = mode.refresh_rate; |
| (...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 421 return std::find(available_color_profiles_.begin(), | 427 return std::find(available_color_profiles_.begin(), |
| 422 available_color_profiles_.end(), | 428 available_color_profiles_.end(), |
| 423 profile) != available_color_profiles_.end(); | 429 profile) != available_color_profiles_.end(); |
| 424 } | 430 } |
| 425 | 431 |
| 426 bool DisplayInfo::Use125DSFRorUIScaling() const { | 432 bool DisplayInfo::Use125DSFRorUIScaling() const { |
| 427 return use_125_dsf_for_ui_scaling && id_ == gfx::Display::InternalDisplayId(); | 433 return use_125_dsf_for_ui_scaling && id_ == gfx::Display::InternalDisplayId(); |
| 428 } | 434 } |
| 429 | 435 |
| 430 } // namespace ash | 436 } // namespace ash |
| OLD | NEW |