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 "chromeos/display/output_configurator.h" | 5 #include "chromeos/display/output_configurator.h" |
6 | 6 |
7 #include <X11/Xlib.h> | 7 #include <X11/Xlib.h> |
8 #include <X11/extensions/Xrandr.h> | 8 #include <X11/extensions/Xrandr.h> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
11 #include "base/chromeos/chromeos_version.h" | 11 #include "base/chromeos/chromeos_version.h" |
12 #include "base/logging.h" | 12 #include "base/logging.h" |
13 #include "base/strings/string_number_conversions.h" | 13 #include "base/strings/string_number_conversions.h" |
14 #include "base/time.h" | 14 #include "base/time.h" |
15 #include "chromeos/display/output_util.h" | |
15 #include "chromeos/display/real_output_configurator_delegate.h" | 16 #include "chromeos/display/real_output_configurator_delegate.h" |
16 | 17 |
17 namespace chromeos { | 18 namespace chromeos { |
18 | 19 |
19 namespace { | 20 namespace { |
20 | 21 |
21 // Prefixes for the built-in displays. | |
22 const char kInternal_LVDS[] = "LVDS"; | |
23 const char kInternal_eDP[] = "eDP"; | |
24 | |
25 // The delay to perform configuration after RRNotify. See the comment | 22 // The delay to perform configuration after RRNotify. See the comment |
26 // in |Dispatch()|. | 23 // in |Dispatch()|. |
27 const int64 kConfigureDelayMs = 500; | 24 const int64 kConfigureDelayMs = 500; |
28 | 25 |
29 // Returns a string describing |state|. | 26 // Returns a string describing |state|. |
30 std::string DisplayPowerStateToString(DisplayPowerState state) { | 27 std::string DisplayPowerStateToString(DisplayPowerState state) { |
31 switch (state) { | 28 switch (state) { |
32 case DISPLAY_POWER_ALL_ON: | 29 case DISPLAY_POWER_ALL_ON: |
33 return "ALL_ON"; | 30 return "ALL_ON"; |
34 case DISPLAY_POWER_ALL_OFF: | 31 case DISPLAY_POWER_ALL_OFF: |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
85 OutputConfigurator::OutputSnapshot::OutputSnapshot() | 82 OutputConfigurator::OutputSnapshot::OutputSnapshot() |
86 : output(None), | 83 : output(None), |
87 crtc(None), | 84 crtc(None), |
88 current_mode(None), | 85 current_mode(None), |
89 native_mode(None), | 86 native_mode(None), |
90 mirror_mode(None), | 87 mirror_mode(None), |
91 y(0), | 88 y(0), |
92 height(0), | 89 height(0), |
93 is_internal(false), | 90 is_internal(false), |
94 is_aspect_preserving_scaling(false), | 91 is_aspect_preserving_scaling(false), |
95 touch_device_id(0) {} | 92 touch_device_id(0), |
93 display_id(-1) {} | |
Jun Mukai
2013/05/14 07:03:02
can't we use gfx::Display::kInvalidDisplayID?
| |
96 | 94 |
97 OutputConfigurator::CoordinateTransformation::CoordinateTransformation() | 95 OutputConfigurator::CoordinateTransformation::CoordinateTransformation() |
98 : x_scale(1.0), | 96 : x_scale(1.0), |
99 x_offset(0.0), | 97 x_offset(0.0), |
100 y_scale(1.0), | 98 y_scale(1.0), |
101 y_offset(0.0) {} | 99 y_offset(0.0) {} |
102 | 100 |
103 OutputConfigurator::CrtcConfig::CrtcConfig() | 101 OutputConfigurator::CrtcConfig::CrtcConfig() |
104 : crtc(None), | 102 : crtc(None), |
105 x(0), | 103 x(0), |
(...skipping 28 matching lines...) Expand all Loading... | |
134 | 132 |
135 if (!configurator_->configure_timer_->IsRunning()) { | 133 if (!configurator_->configure_timer_->IsRunning()) { |
136 LOG(ERROR) << "ConfigureOutputs() timer not running"; | 134 LOG(ERROR) << "ConfigureOutputs() timer not running"; |
137 return false; | 135 return false; |
138 } | 136 } |
139 | 137 |
140 configurator_->ConfigureOutputs(); | 138 configurator_->ConfigureOutputs(); |
141 return true; | 139 return true; |
142 } | 140 } |
143 | 141 |
144 // static | |
145 bool OutputConfigurator::IsInternalOutputName(const std::string& name) { | |
146 return name.find(kInternal_LVDS) == 0 || name.find(kInternal_eDP) == 0; | |
147 } | |
148 | |
149 OutputConfigurator::OutputConfigurator() | 142 OutputConfigurator::OutputConfigurator() |
150 : state_controller_(NULL), | 143 : state_controller_(NULL), |
151 configure_display_(base::chromeos::IsRunningOnChromeOS()), | 144 configure_display_(base::chromeos::IsRunningOnChromeOS()), |
152 xrandr_event_base_(0), | 145 xrandr_event_base_(0), |
153 output_state_(STATE_INVALID), | 146 output_state_(STATE_INVALID), |
154 power_state_(DISPLAY_POWER_ALL_ON) { | 147 power_state_(DISPLAY_POWER_ALL_ON) { |
155 } | 148 } |
156 | 149 |
157 OutputConfigurator::~OutputConfigurator() {} | 150 OutputConfigurator::~OutputConfigurator() {} |
158 | 151 |
(...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
503 case 1: | 496 case 1: |
504 return STATE_SINGLE; | 497 return STATE_SINGLE; |
505 case 2: { | 498 case 2: { |
506 if (num_on_outputs == 1) { | 499 if (num_on_outputs == 1) { |
507 // If only one output is currently turned on, return the "single" | 500 // If only one output is currently turned on, return the "single" |
508 // state so that its native mode will be used. | 501 // state so that its native mode will be used. |
509 return STATE_SINGLE; | 502 return STATE_SINGLE; |
510 } else { | 503 } else { |
511 // With either both outputs on or both outputs off, use one of the | 504 // With either both outputs on or both outputs off, use one of the |
512 // dual modes. | 505 // dual modes. |
513 std::vector<OutputInfo> output_infos; | 506 std::vector<int64> display_ids; |
514 for (size_t i = 0; i < outputs.size(); ++i) { | 507 for (size_t i = 0; i < outputs.size(); ++i) |
515 output_infos.push_back(OutputInfo()); | 508 display_ids.push_back(outputs[i].display_id); |
516 output_infos[i].output = outputs[i].output; | 509 return state_controller_->GetStateForDisplayIds(display_ids); |
517 output_infos[i].output_index = i; | |
518 } | |
519 return state_controller_->GetStateForOutputs(output_infos); | |
520 } | 510 } |
521 } | 511 } |
522 default: | 512 default: |
523 NOTREACHED(); | 513 NOTREACHED(); |
524 } | 514 } |
525 return STATE_INVALID; | 515 return STATE_INVALID; |
526 } | 516 } |
527 | 517 |
528 OutputConfigurator::CoordinateTransformation | 518 OutputConfigurator::CoordinateTransformation |
529 OutputConfigurator::GetMirrorModeCTM( | 519 OutputConfigurator::GetMirrorModeCTM( |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
582 float width_ratio = static_cast<float>(mirror_mode_width) / | 572 float width_ratio = static_cast<float>(mirror_mode_width) / |
583 static_cast<float>(native_mode_width); | 573 static_cast<float>(native_mode_width); |
584 float height_ratio = static_cast<float>(mirror_mode_height) / | 574 float height_ratio = static_cast<float>(mirror_mode_height) / |
585 static_cast<float>(native_mode_height); | 575 static_cast<float>(native_mode_height); |
586 | 576 |
587 area_ratio = width_ratio * height_ratio; | 577 area_ratio = width_ratio * height_ratio; |
588 return area_ratio; | 578 return area_ratio; |
589 } | 579 } |
590 | 580 |
591 } // namespace chromeos | 581 } // namespace chromeos |
OLD | NEW |