Index: chromeos/display/output_configurator.cc |
diff --git a/chromeos/display/output_configurator.cc b/chromeos/display/output_configurator.cc |
index 94b603f9b2806b5a9a57fa0f67774560544eef07..76b2670f4b2cf6d98876f21cab56323eaec5efec 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.0; |
oshima
2013/04/18 08:38:12
1.0f;
Yufeng Shen (Slow to review)
2013/04/18 16:22:56
Done.
|
+ 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 |