| Index: chromeos/display/output_configurator.cc
|
| diff --git a/chromeos/display/output_configurator.cc b/chromeos/display/output_configurator.cc
|
| index 94b603f9b2806b5a9a57fa0f67774560544eef07..903f49b7e9368736c07080d9017ed03f425b0a9e 100644
|
| --- a/chromeos/display/output_configurator.cc
|
| +++ b/chromeos/display/output_configurator.cc
|
| @@ -428,6 +428,8 @@ bool OutputConfigurator::EnterState(
|
| if (outputs[i].mirror_mode != outputs[i].native_mode &&
|
| outputs[i].is_aspect_preserving_scaling) {
|
| ctm = GetMirrorModeCTM(&outputs[i]);
|
| + mirrored_display_area_ratio_map_[outputs[i].touch_device_id] =
|
| + GetMirroredDisplayAreaRatio(&outputs[i]);
|
| }
|
| delegate_->ConfigureCTM(outputs[i].touch_device_id, ctm);
|
| }
|
| @@ -562,4 +564,28 @@ OutputConfigurator::GetMirrorModeCTM(
|
| return ctm; // Same aspect ratio - return identity
|
| }
|
|
|
| +float OutputConfigurator::GetMirroredDisplayAreaRatio(
|
| + const OutputConfigurator::OutputSnapshot* output) {
|
| + float area_ratio = 1.0f;
|
| + int native_mode_width = 0, native_mode_height = 0;
|
| + int mirror_mode_width = 0, mirror_mode_height = 0;
|
| + if (!delegate_->GetModeDetails(output->native_mode,
|
| + &native_mode_width, &native_mode_height, NULL) ||
|
| + !delegate_->GetModeDetails(output->mirror_mode,
|
| + &mirror_mode_width, &mirror_mode_height, NULL))
|
| + return area_ratio;
|
| +
|
| + if (native_mode_height == 0 || mirror_mode_height == 0 ||
|
| + native_mode_width == 0 || mirror_mode_width == 0)
|
| + return area_ratio;
|
| +
|
| + float width_ratio = static_cast<float>(mirror_mode_width) /
|
| + static_cast<float>(native_mode_width);
|
| + float height_ratio = static_cast<float>(mirror_mode_height) /
|
| + static_cast<float>(native_mode_height);
|
| +
|
| + area_ratio = width_ratio * height_ratio;
|
| + return area_ratio;
|
| +}
|
| +
|
| } // namespace chromeos
|
|
|