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 "ui/display/chromeos/output_configurator.h" | 5 #include "ui/display/chromeos/output_configurator.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "base/strings/string_number_conversions.h" | 9 #include "base/strings/string_number_conversions.h" |
10 #include "base/strings/stringprintf.h" | 10 #include "base/strings/stringprintf.h" |
11 #include "base/sys_info.h" | 11 #include "base/sys_info.h" |
12 #include "base/time/time.h" | 12 #include "base/time/time.h" |
13 #include "ui/display/chromeos/display_mode.h" | 13 #include "ui/display/chromeos/display_mode.h" |
14 #include "ui/display/chromeos/display_snapshot.h" | 14 #include "ui/display/chromeos/display_snapshot.h" |
15 #include "ui/display/chromeos/x11/native_display_delegate_x11.h" | 15 #include "ui/display/chromeos/x11/native_display_delegate_x11.h" |
16 #include "ui/display/chromeos/x11/touchscreen_delegate_x11.h" | 16 #include "ui/display/chromeos/x11/touchscreen_delegate_x11.h" |
17 | 17 |
18 namespace ui { | 18 namespace ui { |
19 | 19 |
20 namespace { | 20 namespace { |
21 | 21 |
22 typedef std::vector<const DisplayMode*> DisplayModeList; | 22 typedef std::vector<const DisplayMode*> DisplayModeList; |
23 | 23 |
24 // The delay to perform configuration after RRNotify. See the comment | 24 // The delay to perform configuration after RRNotify. See the comment |
25 // in |Dispatch()|. | 25 // in |Dispatch()|. |
26 const int64 kConfigureDelayMs = 500; | 26 const int kConfigureDelayMs = 500; |
27 | 27 |
28 // Returns a string describing |state|. | 28 // Returns a string describing |state|. |
29 std::string DisplayPowerStateToString(chromeos::DisplayPowerState state) { | 29 std::string DisplayPowerStateToString(chromeos::DisplayPowerState state) { |
30 switch (state) { | 30 switch (state) { |
31 case chromeos::DISPLAY_POWER_ALL_ON: | 31 case chromeos::DISPLAY_POWER_ALL_ON: |
32 return "ALL_ON"; | 32 return "ALL_ON"; |
33 case chromeos::DISPLAY_POWER_ALL_OFF: | 33 case chromeos::DISPLAY_POWER_ALL_OFF: |
34 return "ALL_OFF"; | 34 return "ALL_OFF"; |
35 case chromeos::DISPLAY_POWER_INTERNAL_OFF_EXTERNAL_ON: | 35 case chromeos::DISPLAY_POWER_INTERNAL_OFF_EXTERNAL_ON: |
36 return "INTERNAL_OFF_EXTERNAL_ON"; | 36 return "INTERNAL_OFF_EXTERNAL_ON"; |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
190 | 190 |
191 if (!native_display_delegate_) { | 191 if (!native_display_delegate_) { |
192 native_display_delegate_.reset(new NativeDisplayDelegateX11()); | 192 native_display_delegate_.reset(new NativeDisplayDelegateX11()); |
193 native_display_delegate_->AddObserver(this); | 193 native_display_delegate_->AddObserver(this); |
194 } | 194 } |
195 | 195 |
196 if (!touchscreen_delegate_) | 196 if (!touchscreen_delegate_) |
197 touchscreen_delegate_.reset(new TouchscreenDelegateX11()); | 197 touchscreen_delegate_.reset(new TouchscreenDelegateX11()); |
198 } | 198 } |
199 | 199 |
200 void OutputConfigurator::ForceInitialConfigure(uint32 background_color_argb) { | 200 void OutputConfigurator::ForceInitialConfigure(uint32_t background_color_argb) { |
201 if (!configure_display_) | 201 if (!configure_display_) |
202 return; | 202 return; |
203 | 203 |
204 native_display_delegate_->GrabServer(); | 204 native_display_delegate_->GrabServer(); |
205 native_display_delegate_->Initialize(); | 205 native_display_delegate_->Initialize(); |
206 | 206 |
207 UpdateCachedOutputs(); | 207 UpdateCachedOutputs(); |
208 if (cached_outputs_.size() > 1 && background_color_argb) | 208 if (cached_outputs_.size() > 1 && background_color_argb) |
209 native_display_delegate_->SetBackgroundColor(background_color_argb); | 209 native_display_delegate_->SetBackgroundColor(background_color_argb); |
210 const OutputState new_state = ChooseOutputState(power_state_); | 210 const OutputState new_state = ChooseOutputState(power_state_); |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
278 ++it2) { | 278 ++it2) { |
279 protections[it2->first] |= it2->second; | 279 protections[it2->first] |= it2->second; |
280 } | 280 } |
281 } | 281 } |
282 | 282 |
283 ApplyProtections(protections); | 283 ApplyProtections(protections); |
284 } | 284 } |
285 | 285 |
286 bool OutputConfigurator::QueryOutputProtectionStatus( | 286 bool OutputConfigurator::QueryOutputProtectionStatus( |
287 OutputProtectionClientId client_id, | 287 OutputProtectionClientId client_id, |
288 int64 display_id, | 288 int64_t display_id, |
289 uint32_t* link_mask, | 289 uint32_t* link_mask, |
290 uint32_t* protection_mask) { | 290 uint32_t* protection_mask) { |
291 if (!configure_display_) | 291 if (!configure_display_) |
292 return false; | 292 return false; |
293 | 293 |
294 uint32_t enabled = 0; | 294 uint32_t enabled = 0; |
295 uint32_t unfulfilled = 0; | 295 uint32_t unfulfilled = 0; |
296 *link_mask = 0; | 296 *link_mask = 0; |
297 for (DisplayStateList::const_iterator it = cached_outputs_.begin(); | 297 for (DisplayStateList::const_iterator it = cached_outputs_.begin(); |
298 it != cached_outputs_.end(); | 298 it != cached_outputs_.end(); |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
335 requested_mask = it->second[display_id]; | 335 requested_mask = it->second[display_id]; |
336 *protection_mask = enabled & ~unfulfilled & requested_mask; | 336 *protection_mask = enabled & ~unfulfilled & requested_mask; |
337 } else { | 337 } else { |
338 *protection_mask = 0; | 338 *protection_mask = 0; |
339 } | 339 } |
340 return true; | 340 return true; |
341 } | 341 } |
342 | 342 |
343 bool OutputConfigurator::EnableOutputProtection( | 343 bool OutputConfigurator::EnableOutputProtection( |
344 OutputProtectionClientId client_id, | 344 OutputProtectionClientId client_id, |
345 int64 display_id, | 345 int64_t display_id, |
346 uint32_t desired_method_mask) { | 346 uint32_t desired_method_mask) { |
347 if (!configure_display_) | 347 if (!configure_display_) |
348 return false; | 348 return false; |
349 | 349 |
350 DisplayProtections protections; | 350 DisplayProtections protections; |
351 for (ProtectionRequests::const_iterator it = | 351 for (ProtectionRequests::const_iterator it = |
352 client_protection_requests_.begin(); | 352 client_protection_requests_.begin(); |
353 it != client_protection_requests_.end(); | 353 it != client_protection_requests_.end(); |
354 ++it) { | 354 ++it) { |
355 for (DisplayProtections::const_iterator it2 = it->second.begin(); | 355 for (DisplayProtections::const_iterator it2 = it->second.begin(); |
(...skipping 18 matching lines...) Expand all Loading... |
374 } | 374 } |
375 } else { | 375 } else { |
376 client_protection_requests_[client_id][display_id] = desired_method_mask; | 376 client_protection_requests_[client_id][display_id] = desired_method_mask; |
377 } | 377 } |
378 | 378 |
379 return true; | 379 return true; |
380 } | 380 } |
381 | 381 |
382 std::vector<ui::ColorCalibrationProfile> | 382 std::vector<ui::ColorCalibrationProfile> |
383 OutputConfigurator::GetAvailableColorCalibrationProfiles( | 383 OutputConfigurator::GetAvailableColorCalibrationProfiles( |
384 int64 display_id) { | 384 int64_t display_id) { |
385 for (size_t i = 0; i < cached_outputs_.size(); ++i) { | 385 for (size_t i = 0; i < cached_outputs_.size(); ++i) { |
386 if (cached_outputs_[i].display && | 386 if (cached_outputs_[i].display && |
387 cached_outputs_[i].display->display_id() == display_id) { | 387 cached_outputs_[i].display->display_id() == display_id) { |
388 return native_display_delegate_->GetAvailableColorCalibrationProfiles( | 388 return native_display_delegate_->GetAvailableColorCalibrationProfiles( |
389 *cached_outputs_[i].display); | 389 *cached_outputs_[i].display); |
390 } | 390 } |
391 } | 391 } |
392 | 392 |
393 return std::vector<ui::ColorCalibrationProfile>(); | 393 return std::vector<ui::ColorCalibrationProfile>(); |
394 } | 394 } |
395 | 395 |
396 bool OutputConfigurator::SetColorCalibrationProfile( | 396 bool OutputConfigurator::SetColorCalibrationProfile( |
397 int64 display_id, | 397 int64_t display_id, |
398 ui::ColorCalibrationProfile new_profile) { | 398 ui::ColorCalibrationProfile new_profile) { |
399 for (size_t i = 0; i < cached_outputs_.size(); ++i) { | 399 for (size_t i = 0; i < cached_outputs_.size(); ++i) { |
400 if (cached_outputs_[i].display && | 400 if (cached_outputs_[i].display && |
401 cached_outputs_[i].display->display_id() == display_id) { | 401 cached_outputs_[i].display->display_id() == display_id) { |
402 return native_display_delegate_->SetColorCalibrationProfile( | 402 return native_display_delegate_->SetColorCalibrationProfile( |
403 *cached_outputs_[i].display, new_profile); | 403 *cached_outputs_[i].display, new_profile); |
404 } | 404 } |
405 } | 405 } |
406 | 406 |
407 return false; | 407 return false; |
(...skipping 501 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
909 case 2: { | 909 case 2: { |
910 if (num_on_outputs == 1) { | 910 if (num_on_outputs == 1) { |
911 // If only one output is currently turned on, return the "single" | 911 // If only one output is currently turned on, return the "single" |
912 // state so that its native mode will be used. | 912 // state so that its native mode will be used. |
913 return OUTPUT_STATE_SINGLE; | 913 return OUTPUT_STATE_SINGLE; |
914 } else { | 914 } else { |
915 if (!state_controller_) | 915 if (!state_controller_) |
916 return OUTPUT_STATE_DUAL_EXTENDED; | 916 return OUTPUT_STATE_DUAL_EXTENDED; |
917 // With either both outputs on or both outputs off, use one of the | 917 // With either both outputs on or both outputs off, use one of the |
918 // dual modes. | 918 // dual modes. |
919 std::vector<int64> display_ids; | 919 std::vector<int64_t> display_ids; |
920 for (size_t i = 0; i < cached_outputs_.size(); ++i) { | 920 for (size_t i = 0; i < cached_outputs_.size(); ++i) { |
921 // If display id isn't available, switch to extended mode. | 921 // If display id isn't available, switch to extended mode. |
922 if (!cached_outputs_[i].display->has_proper_display_id()) | 922 if (!cached_outputs_[i].display->has_proper_display_id()) |
923 return OUTPUT_STATE_DUAL_EXTENDED; | 923 return OUTPUT_STATE_DUAL_EXTENDED; |
924 display_ids.push_back(cached_outputs_[i].display->display_id()); | 924 display_ids.push_back(cached_outputs_[i].display->display_id()); |
925 } | 925 } |
926 return state_controller_->GetStateForDisplayIds(display_ids); | 926 return state_controller_->GetStateForDisplayIds(display_ids); |
927 } | 927 } |
928 } | 928 } |
929 default: | 929 default: |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1024 float width_ratio = static_cast<float>(mirror_mode_info->size().width()) / | 1024 float width_ratio = static_cast<float>(mirror_mode_info->size().width()) / |
1025 static_cast<float>(native_mode_info->size().width()); | 1025 static_cast<float>(native_mode_info->size().width()); |
1026 float height_ratio = static_cast<float>(mirror_mode_info->size().height()) / | 1026 float height_ratio = static_cast<float>(mirror_mode_info->size().height()) / |
1027 static_cast<float>(native_mode_info->size().height()); | 1027 static_cast<float>(native_mode_info->size().height()); |
1028 | 1028 |
1029 area_ratio = width_ratio * height_ratio; | 1029 area_ratio = width_ratio * height_ratio; |
1030 return area_ratio; | 1030 return area_ratio; |
1031 } | 1031 } |
1032 | 1032 |
1033 } // namespace ui | 1033 } // namespace ui |
OLD | NEW |