| 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 "chrome/browser/ui/webui/options/chromeos/display_options_handler.h" | 5 #include "chrome/browser/ui/webui/options/chromeos/display_options_handler.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "ash/display/display_configurator_animation.h" | 9 #include "ash/display/display_configurator_animation.h" |
| 10 #include "ash/display/display_controller.h" | 10 #include "ash/display/display_controller.h" |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 47 | 47 |
| 48 int64 display_id = gfx::Display::kInvalidDisplayID; | 48 int64 display_id = gfx::Display::kInvalidDisplayID; |
| 49 if (!base::StringToInt64(id_value, &display_id)) { | 49 if (!base::StringToInt64(id_value, &display_id)) { |
| 50 LOG(ERROR) << "Invalid display id: " << id_value; | 50 LOG(ERROR) << "Invalid display id: " << id_value; |
| 51 return gfx::Display::kInvalidDisplayID; | 51 return gfx::Display::kInvalidDisplayID; |
| 52 } | 52 } |
| 53 | 53 |
| 54 return display_id; | 54 return display_id; |
| 55 } | 55 } |
| 56 | 56 |
| 57 bool CompareDisplayMode(ash::DisplayMode d1, ash::DisplayMode d2) { | 57 bool CompareResolution(base::Value* v1, base::Value* v2) { |
| 58 if (d1.size.GetArea() == d2.size.GetArea()) | 58 base::DictionaryValue* r1 = NULL; |
| 59 return d1.refresh_rate < d2.refresh_rate; | 59 base::DictionaryValue* r2 = NULL; |
| 60 return d1.size.GetArea() < d2.size.GetArea(); | 60 if (!v1->GetAsDictionary(&r1)) |
| 61 return true; |
| 62 if (!v2->GetAsDictionary(&r2)) |
| 63 return false; |
| 64 int width1 = 0, height1 = 0, width2 = 0, height2 = 0; |
| 65 if (!r1->GetInteger("width", &width1) || !r1->GetInteger("height", &height1)) |
| 66 return true; |
| 67 if (!r2->GetInteger("width", &width2) || !r2->GetInteger("height", &height2)) |
| 68 return false; |
| 69 |
| 70 if (width1 * height1 != width2 * height2) |
| 71 return width1 * height1 < width2 * height2; |
| 72 |
| 73 double dsf1 = 0, dsf2 = 0; |
| 74 if (!r1->GetDouble("deviceScaleFactor", &dsf1)) |
| 75 return true; |
| 76 if (!r2->GetDouble("deviceScaleFactor", &dsf2)) |
| 77 return false; |
| 78 return dsf1 < dsf2; |
| 79 |
| 80 double refresh1 = 0, refresh2 = 0; |
| 81 if (!r1->GetDouble("refreshRate", &refresh1)) |
| 82 return true; |
| 83 if (!r2->GetDouble("refreshRate", &refresh2)) |
| 84 return false; |
| 85 // Higher refresh rate should appear first. |
| 86 if (refresh1 != refresh2) |
| 87 return refresh1 > refresh2; |
| 61 } | 88 } |
| 62 | 89 |
| 63 base::string16 GetColorProfileName(ui::ColorCalibrationProfile profile) { | 90 base::string16 GetColorProfileName(ui::ColorCalibrationProfile profile) { |
| 64 switch (profile) { | 91 switch (profile) { |
| 65 case ui::COLOR_PROFILE_STANDARD: | 92 case ui::COLOR_PROFILE_STANDARD: |
| 66 return l10n_util::GetStringUTF16( | 93 return l10n_util::GetStringUTF16( |
| 67 IDS_OPTIONS_SETTINGS_DISPLAY_OPTIONS_COLOR_PROFILE_STANDARD); | 94 IDS_OPTIONS_SETTINGS_DISPLAY_OPTIONS_COLOR_PROFILE_STANDARD); |
| 68 case ui::COLOR_PROFILE_DYNAMIC: | 95 case ui::COLOR_PROFILE_DYNAMIC: |
| 69 return l10n_util::GetStringUTF16( | 96 return l10n_util::GetStringUTF16( |
| 70 IDS_OPTIONS_SETTINGS_DISPLAY_OPTIONS_COLOR_PROFILE_DYNAMIC); | 97 IDS_OPTIONS_SETTINGS_DISPLAY_OPTIONS_COLOR_PROFILE_DYNAMIC); |
| 71 case ui::COLOR_PROFILE_MOVIE: | 98 case ui::COLOR_PROFILE_MOVIE: |
| 72 return l10n_util::GetStringUTF16( | 99 return l10n_util::GetStringUTF16( |
| 73 IDS_OPTIONS_SETTINGS_DISPLAY_OPTIONS_COLOR_PROFILE_MOVIE); | 100 IDS_OPTIONS_SETTINGS_DISPLAY_OPTIONS_COLOR_PROFILE_MOVIE); |
| 74 case ui::COLOR_PROFILE_READING: | 101 case ui::COLOR_PROFILE_READING: |
| 75 return l10n_util::GetStringUTF16( | 102 return l10n_util::GetStringUTF16( |
| 76 IDS_OPTIONS_SETTINGS_DISPLAY_OPTIONS_COLOR_PROFILE_READING); | 103 IDS_OPTIONS_SETTINGS_DISPLAY_OPTIONS_COLOR_PROFILE_READING); |
| 77 case ui::NUM_COLOR_PROFILES: | 104 case ui::NUM_COLOR_PROFILES: |
| 78 break; | 105 break; |
| 79 } | 106 } |
| 80 | 107 |
| 81 NOTREACHED(); | 108 NOTREACHED(); |
| 82 return base::string16(); | 109 return base::string16(); |
| 83 } | 110 } |
| 84 | 111 |
| 112 base::ListValue* CreateResolutionsForUIScale( |
| 113 const ash::DisplayInfo& display_info) { |
| 114 std::vector<float> ui_scales = |
| 115 DisplayManager::GetScalesForDisplay(display_info); |
| 116 gfx::SizeF base_size = display_info.bounds_in_native().size(); |
| 117 base::ListValue* result = new base::ListValue(); |
| 118 |
| 119 base_size.Scale(1.0f / display_info.device_scale_factor()); |
| 120 if (display_info.rotation() == gfx::Display::ROTATE_90 || |
| 121 display_info.rotation() == gfx::Display::ROTATE_270) { |
| 122 float tmp = base_size.width(); |
| 123 base_size.set_width(base_size.height()); |
| 124 base_size.set_height(tmp); |
| 125 } |
| 126 for (size_t i = 0; i < ui_scales.size(); ++i) { |
| 127 base::DictionaryValue* resolution_info = new base::DictionaryValue(); |
| 128 resolution_info->SetDouble("scale", ui_scales[i]); |
| 129 if (ui_scales[i] == 1.0f) |
| 130 resolution_info->SetBoolean("isBest", true); |
| 131 resolution_info->SetBoolean( |
| 132 "selected", display_info.configured_ui_scale() == ui_scales[i]); |
| 133 resolution_info->SetInteger("width", base_size.width() * ui_scales[i]); |
| 134 resolution_info->SetInteger("height", base_size.height() * ui_scales[i]); |
| 135 result->Append(resolution_info); |
| 136 } |
| 137 |
| 138 return result; |
| 139 } |
| 140 |
| 141 base::ListValue* CreateResolutionsForExternalDisplay( |
| 142 const ash::DisplayInfo& display_info) { |
| 143 base::ListValue* result = new base::ListValue(); |
| 144 gfx::Size current_size = display_info.bounds_in_native().size(); |
| 145 |
| 146 const std::vector<ash::DisplayMode>& display_modes = |
| 147 display_info.display_modes(); |
| 148 base::DictionaryValue* largest_resolution_info = NULL; |
| 149 gfx::Size largest_resolution; |
| 150 bool largest_is_selected = false; |
| 151 for (size_t i = 0; i < display_modes.size(); ++i) { |
| 152 base::DictionaryValue* resolution_info = new base::DictionaryValue(); |
| 153 gfx::Size resolution = display_modes[i].size; |
| 154 // Picks the largest one as the "best", which is the last element |
| 155 // because |display_modes| is sorted by its area. |
| 156 if (largest_resolution.GetArea() < resolution.GetArea()) { |
| 157 if (largest_resolution_info) |
| 158 largest_resolution_info->SetBoolean("isBest", false); |
| 159 resolution_info->SetBoolean("isBest", true); |
| 160 largest_resolution_info = resolution_info; |
| 161 largest_resolution = resolution; |
| 162 largest_is_selected = (resolution == current_size); |
| 163 } |
| 164 resolution_info->SetBoolean("selected", (resolution == current_size)); |
| 165 resolution_info->SetInteger("width", resolution.width()); |
| 166 resolution_info->SetInteger("height", resolution.height()); |
| 167 if (display_modes[i].refresh_rate > 0.0f) { |
| 168 resolution_info->SetDouble("refreshRate", |
| 169 display_modes[i].refresh_rate); |
| 170 } |
| 171 result->Append(resolution_info); |
| 172 } |
| 173 |
| 174 // Add other scale factors for larger external displays. |
| 175 std::vector<float> device_scale_factors = |
| 176 DisplayManager::GetDeviceScaleFactorsForDisplay(display_info); |
| 177 if (device_scale_factors.size() > 1) { |
| 178 for (size_t i = 0; i < device_scale_factors.size(); ++i) { |
| 179 if (device_scale_factors[i] == 1.0f) |
| 180 continue; |
| 181 base::DictionaryValue* resolution_info = |
| 182 largest_resolution_info->DeepCopy(); |
| 183 resolution_info->SetBoolean("isBest", false); |
| 184 if (largest_is_selected && |
| 185 display_info.device_scale_factor() == device_scale_factors[i]) { |
| 186 resolution_info->SetBoolean("selected", true); |
| 187 largest_resolution_info->SetBoolean("selected", false); |
| 188 } else { |
| 189 resolution_info->SetBoolean("selected", false); |
| 190 } |
| 191 resolution_info->SetDouble( |
| 192 "deviceScaleFactor", device_scale_factors[i]); |
| 193 resolution_info->SetInteger( |
| 194 "originalWidth", largest_resolution.width()); |
| 195 resolution_info->SetInteger( |
| 196 "originalHeight", largest_resolution.height()); |
| 197 resolution_info->SetInteger( |
| 198 "width", largest_resolution.width() / device_scale_factors[i]); |
| 199 resolution_info->SetInteger( |
| 200 "height", largest_resolution.height() / device_scale_factors[i]); |
| 201 result->Append(resolution_info); |
| 202 } |
| 203 largest_resolution_info->SetDouble("deviceScaleFactor", 1.0); |
| 204 } |
| 205 return result; |
| 206 } |
| 207 |
| 85 } // namespace | 208 } // namespace |
| 86 | 209 |
| 87 DisplayOptionsHandler::DisplayOptionsHandler() { | 210 DisplayOptionsHandler::DisplayOptionsHandler() { |
| 88 ash::Shell::GetInstance()->display_controller()->AddObserver(this); | 211 ash::Shell::GetInstance()->display_controller()->AddObserver(this); |
| 89 } | 212 } |
| 90 | 213 |
| 91 DisplayOptionsHandler::~DisplayOptionsHandler() { | 214 DisplayOptionsHandler::~DisplayOptionsHandler() { |
| 92 ash::Shell::GetInstance()->display_controller()->RemoveObserver(this); | 215 ash::Shell::GetInstance()->display_controller()->RemoveObserver(this); |
| 93 } | 216 } |
| 94 | 217 |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 160 base::Unretained(this))); | 283 base::Unretained(this))); |
| 161 web_ui()->RegisterMessageCallback( | 284 web_ui()->RegisterMessageCallback( |
| 162 "setUIScale", | 285 "setUIScale", |
| 163 base::Bind(&DisplayOptionsHandler::HandleSetUIScale, | 286 base::Bind(&DisplayOptionsHandler::HandleSetUIScale, |
| 164 base::Unretained(this))); | 287 base::Unretained(this))); |
| 165 web_ui()->RegisterMessageCallback( | 288 web_ui()->RegisterMessageCallback( |
| 166 "setResolution", | 289 "setResolution", |
| 167 base::Bind(&DisplayOptionsHandler::HandleSetResolution, | 290 base::Bind(&DisplayOptionsHandler::HandleSetResolution, |
| 168 base::Unretained(this))); | 291 base::Unretained(this))); |
| 169 web_ui()->RegisterMessageCallback( | 292 web_ui()->RegisterMessageCallback( |
| 293 "setDeviceScaleFactor", |
| 294 base::Bind(&DisplayOptionsHandler::HandleSetDeviceScaleFactor, |
| 295 base::Unretained(this))); |
| 296 web_ui()->RegisterMessageCallback( |
| 170 "setOrientation", | 297 "setOrientation", |
| 171 base::Bind(&DisplayOptionsHandler::HandleSetOrientation, | 298 base::Bind(&DisplayOptionsHandler::HandleSetOrientation, |
| 172 base::Unretained(this))); | 299 base::Unretained(this))); |
| 173 web_ui()->RegisterMessageCallback( | 300 web_ui()->RegisterMessageCallback( |
| 174 "setColorProfile", | 301 "setColorProfile", |
| 175 base::Bind(&DisplayOptionsHandler::HandleSetColorProfile, | 302 base::Bind(&DisplayOptionsHandler::HandleSetColorProfile, |
| 176 base::Unretained(this))); | 303 base::Unretained(this))); |
| 177 } | 304 } |
| 178 | 305 |
| 179 void DisplayOptionsHandler::OnDisplayConfigurationChanging() { | 306 void DisplayOptionsHandler::OnDisplayConfigurationChanging() { |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 212 js_display->SetInteger("width", bounds.width()); | 339 js_display->SetInteger("width", bounds.width()); |
| 213 js_display->SetInteger("height", bounds.height()); | 340 js_display->SetInteger("height", bounds.height()); |
| 214 js_display->SetString("name", | 341 js_display->SetString("name", |
| 215 display_manager->GetDisplayNameForId(display.id())); | 342 display_manager->GetDisplayNameForId(display.id())); |
| 216 js_display->SetBoolean("isPrimary", display.id() == primary_id); | 343 js_display->SetBoolean("isPrimary", display.id() == primary_id); |
| 217 js_display->SetBoolean("isInternal", display.IsInternal()); | 344 js_display->SetBoolean("isInternal", display.IsInternal()); |
| 218 js_display->SetInteger("orientation", | 345 js_display->SetInteger("orientation", |
| 219 static_cast<int>(display_info.rotation())); | 346 static_cast<int>(display_info.rotation())); |
| 220 std::vector<ash::DisplayMode> display_modes; | 347 std::vector<ash::DisplayMode> display_modes; |
| 221 std::vector<float> ui_scales; | 348 std::vector<float> ui_scales; |
| 222 if (display.IsInternal()) { | 349 base::ListValue* js_resolutions = display.IsInternal() ? |
| 223 ui_scales = DisplayManager::GetScalesForDisplay(display_info); | 350 CreateResolutionsForUIScale(display_info) : |
| 224 gfx::SizeF base_size = display_info.bounds_in_native().size(); | 351 CreateResolutionsForExternalDisplay(display_info); |
| 225 base_size.Scale(1.0f / display_info.device_scale_factor()); | 352 std::sort(js_resolutions->begin(), js_resolutions->end(), |
| 226 if (display_info.rotation() == gfx::Display::ROTATE_90 || | 353 CompareResolution); |
| 227 display_info.rotation() == gfx::Display::ROTATE_270) { | |
| 228 float tmp = base_size.width(); | |
| 229 base_size.set_width(base_size.height()); | |
| 230 base_size.set_height(tmp); | |
| 231 } | |
| 232 for (size_t i = 0; i < ui_scales.size(); ++i) { | |
| 233 gfx::SizeF new_size = base_size; | |
| 234 new_size.Scale(ui_scales[i]); | |
| 235 display_modes.push_back(ash::DisplayMode( | |
| 236 gfx::ToFlooredSize(new_size), -1.0f, false, false)); | |
| 237 } | |
| 238 } else { | |
| 239 for (size_t i = 0; i < display_info.display_modes().size(); ++i) | |
| 240 display_modes.push_back(display_info.display_modes()[i]); | |
| 241 } | |
| 242 std::sort(display_modes.begin(), display_modes.end(), CompareDisplayMode); | |
| 243 | |
| 244 base::ListValue* js_resolutions = new base::ListValue(); | |
| 245 gfx::Size current_size = display_info.bounds_in_native().size(); | |
| 246 for (size_t i = 0; i < display_modes.size(); ++i) { | |
| 247 base::DictionaryValue* resolution_info = new base::DictionaryValue(); | |
| 248 gfx::Size resolution = display_modes[i].size; | |
| 249 if (!ui_scales.empty()) { | |
| 250 resolution_info->SetDouble("scale", ui_scales[i]); | |
| 251 if (ui_scales[i] == 1.0f) | |
| 252 resolution_info->SetBoolean("isBest", true); | |
| 253 resolution_info->SetBoolean( | |
| 254 "selected", display_info.configured_ui_scale() == ui_scales[i]); | |
| 255 } else { | |
| 256 // Picks the largest one as the "best", which is the last element | |
| 257 // because |display_modes| is sorted by its area. | |
| 258 if (i == display_modes.size() - 1) | |
| 259 resolution_info->SetBoolean("isBest", true); | |
| 260 resolution_info->SetBoolean("selected", (resolution == current_size)); | |
| 261 } | |
| 262 resolution_info->SetInteger("width", resolution.width()); | |
| 263 resolution_info->SetInteger("height", resolution.height()); | |
| 264 if (display_modes[i].refresh_rate > 0.0f) { | |
| 265 resolution_info->SetDouble("refreshRate", | |
| 266 display_modes[i].refresh_rate); | |
| 267 } | |
| 268 js_resolutions->Append(resolution_info); | |
| 269 } | |
| 270 js_display->Set("resolutions", js_resolutions); | 354 js_display->Set("resolutions", js_resolutions); |
| 271 | 355 |
| 272 js_display->SetInteger("colorProfile", display_info.color_profile()); | 356 js_display->SetInteger("colorProfile", display_info.color_profile()); |
| 273 base::ListValue* available_color_profiles = new base::ListValue(); | 357 base::ListValue* available_color_profiles = new base::ListValue(); |
| 274 for (size_t i = 0; | 358 for (size_t i = 0; |
| 275 i < display_info.available_color_profiles().size(); ++i) { | 359 i < display_info.available_color_profiles().size(); ++i) { |
| 276 base::DictionaryValue* color_profile_dict = new base::DictionaryValue(); | 360 base::DictionaryValue* color_profile_dict = new base::DictionaryValue(); |
| 277 ui::ColorCalibrationProfile color_profile = | 361 ui::ColorCalibrationProfile color_profile = |
| 278 display_info.available_color_profiles()[i]; | 362 display_info.available_color_profiles()[i]; |
| 279 color_profile_dict->SetInteger("profileId", color_profile); | 363 color_profile_dict->SetInteger("profileId", color_profile); |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 374 | 458 |
| 375 GetDisplayManager()->SetDisplayUIScale(display_id, ui_scale); | 459 GetDisplayManager()->SetDisplayUIScale(display_id, ui_scale); |
| 376 } | 460 } |
| 377 | 461 |
| 378 void DisplayOptionsHandler::HandleSetResolution(const base::ListValue* args) { | 462 void DisplayOptionsHandler::HandleSetResolution(const base::ListValue* args) { |
| 379 DCHECK(!args->empty()); | 463 DCHECK(!args->empty()); |
| 380 int64 display_id = GetDisplayId(args); | 464 int64 display_id = GetDisplayId(args); |
| 381 if (display_id == gfx::Display::kInvalidDisplayID) | 465 if (display_id == gfx::Display::kInvalidDisplayID) |
| 382 return; | 466 return; |
| 383 | 467 |
| 384 content::RecordAction( | |
| 385 base::UserMetricsAction("Options_DisplaySetResolution")); | |
| 386 double width = 0.0f; | 468 double width = 0.0f; |
| 387 double height = 0.0f; | 469 double height = 0.0f; |
| 388 if (!args->GetDouble(1, &width) || width == 0.0f) { | 470 if (!args->GetDouble(1, &width) || width == 0.0f) { |
| 389 LOG(ERROR) << "Can't find new width"; | 471 LOG(ERROR) << "Can't find new width"; |
| 390 return; | 472 return; |
| 391 } | 473 } |
| 392 if (!args->GetDouble(2, &height) || height == 0.0f) { | 474 if (!args->GetDouble(2, &height) || height == 0.0f) { |
| 393 LOG(ERROR) << "Can't find new height"; | 475 LOG(ERROR) << "Can't find new height"; |
| 394 return; | 476 return; |
| 395 } | 477 } |
| 396 | 478 |
| 397 const ash::DisplayInfo& display_info = | 479 const ash::DisplayInfo& display_info = |
| 398 GetDisplayManager()->GetDisplayInfo(display_id); | 480 GetDisplayManager()->GetDisplayInfo(display_id); |
| 399 gfx::Size new_resolution = gfx::ToFlooredSize(gfx::SizeF(width, height)); | 481 gfx::Size new_resolution = gfx::ToFlooredSize(gfx::SizeF(width, height)); |
| 400 gfx::Size old_resolution = display_info.bounds_in_native().size(); | 482 gfx::Size old_resolution = display_info.bounds_in_native().size(); |
| 483 if (new_resolution == old_resolution) |
| 484 return; |
| 485 |
| 401 bool has_new_resolution = false; | 486 bool has_new_resolution = false; |
| 402 bool has_old_resolution = false; | 487 bool has_old_resolution = false; |
| 403 for (size_t i = 0; i < display_info.display_modes().size(); ++i) { | 488 for (size_t i = 0; i < display_info.display_modes().size(); ++i) { |
| 404 ash::DisplayMode display_mode = display_info.display_modes()[i]; | 489 ash::DisplayMode display_mode = display_info.display_modes()[i]; |
| 405 if (display_mode.size == new_resolution) | 490 if (display_mode.size == new_resolution) |
| 406 has_new_resolution = true; | 491 has_new_resolution = true; |
| 407 if (display_mode.size == old_resolution) | 492 if (display_mode.size == old_resolution) |
| 408 has_old_resolution = true; | 493 has_old_resolution = true; |
| 409 } | 494 } |
| 410 if (!has_new_resolution) { | 495 if (!has_new_resolution) { |
| 411 LOG(ERROR) << "No new resolution " << new_resolution.ToString() | 496 LOG(ERROR) << "No new resolution " << new_resolution.ToString() |
| 412 << " is found in the display info " << display_info.ToString(); | 497 << " is found in the display info " << display_info.ToString(); |
| 413 return; | 498 return; |
| 414 } | 499 } |
| 415 if (!has_old_resolution) { | 500 if (!has_old_resolution) { |
| 416 LOG(ERROR) << "No old resolution " << old_resolution.ToString() | 501 LOG(ERROR) << "No old resolution " << old_resolution.ToString() |
| 417 << " is found in the display info " << display_info.ToString(); | 502 << " is found in the display info " << display_info.ToString(); |
| 418 return; | 503 return; |
| 419 } | 504 } |
| 420 | 505 |
| 506 content::RecordAction( |
| 507 base::UserMetricsAction("Options_DisplaySetResolution")); |
| 508 |
| 509 if (display_info.device_scale_factor() != 1.0f) |
| 510 GetDisplayManager()->SetDisplayDeviceScaleFactor(display_id, 1.0f); |
| 511 |
| 421 ash::Shell::GetInstance()->resolution_notification_controller()-> | 512 ash::Shell::GetInstance()->resolution_notification_controller()-> |
| 422 SetDisplayResolutionAndNotify( | 513 SetDisplayResolutionAndNotify( |
| 423 display_id, old_resolution, new_resolution, | 514 display_id, old_resolution, new_resolution, |
| 424 base::Bind(&StoreDisplayPrefs)); | 515 base::Bind(&StoreDisplayPrefs)); |
| 425 } | 516 } |
| 426 | 517 |
| 518 void DisplayOptionsHandler::HandleSetDeviceScaleFactor( |
| 519 const base::ListValue* args) { |
| 520 DCHECK(!args->empty()); |
| 521 int64 display_id = GetDisplayId(args); |
| 522 if (display_id == gfx::Display::kInvalidDisplayID) |
| 523 return; |
| 524 |
| 525 double device_scale_factor = 0.0f; |
| 526 if (!args->GetDouble(1, &device_scale_factor) || |
| 527 device_scale_factor == 0.0f) { |
| 528 LOG(ERROR) << "Can't find new device scale factor"; |
| 529 return; |
| 530 } |
| 531 |
| 532 const ash::DisplayInfo& display_info = |
| 533 GetDisplayManager()->GetDisplayInfo(display_id); |
| 534 if (display_info.device_scale_factor() == device_scale_factor) |
| 535 return; |
| 536 |
| 537 content::RecordAction( |
| 538 base::UserMetricsAction("Options_DisplaySetExternalDeviceScaleFactor")); |
| 539 |
| 540 GetDisplayManager()->SetDisplayDeviceScaleFactor( |
| 541 display_id, device_scale_factor); |
| 542 } |
| 543 |
| 427 void DisplayOptionsHandler::HandleSetOrientation(const base::ListValue* args) { | 544 void DisplayOptionsHandler::HandleSetOrientation(const base::ListValue* args) { |
| 428 DCHECK(!args->empty()); | 545 DCHECK(!args->empty()); |
| 429 | 546 |
| 430 int64 display_id = GetDisplayId(args); | 547 int64 display_id = GetDisplayId(args); |
| 431 if (display_id == gfx::Display::kInvalidDisplayID) | 548 if (display_id == gfx::Display::kInvalidDisplayID) |
| 432 return; | 549 return; |
| 433 | 550 |
| 434 std::string rotation_value; | 551 std::string rotation_value; |
| 435 gfx::Display::Rotation new_rotation = gfx::Display::ROTATE_0; | 552 gfx::Display::Rotation new_rotation = gfx::Display::ROTATE_0; |
| 436 if (!args->GetString(1, &rotation_value)) { | 553 if (!args->GetString(1, &rotation_value)) { |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 475 return; | 592 return; |
| 476 } | 593 } |
| 477 | 594 |
| 478 GetDisplayManager()->SetColorCalibrationProfile( | 595 GetDisplayManager()->SetColorCalibrationProfile( |
| 479 display_id, static_cast<ui::ColorCalibrationProfile>(profile_id)); | 596 display_id, static_cast<ui::ColorCalibrationProfile>(profile_id)); |
| 480 SendAllDisplayInfo(); | 597 SendAllDisplayInfo(); |
| 481 } | 598 } |
| 482 | 599 |
| 483 } // namespace options | 600 } // namespace options |
| 484 } // namespace chromeos | 601 } // namespace chromeos |
| OLD | NEW |