Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(125)

Unified Diff: chromeos/display/output_configurator.cc

Issue 191223007: Move touch CTM from X into Chrome (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: move CTM update code into a separate file ash/touch/touch_ctm_controller.cc Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chromeos/display/output_configurator.cc
diff --git a/chromeos/display/output_configurator.cc b/chromeos/display/output_configurator.cc
index bc6124815ce0aeef3a7a47bdcde20e7086602deb..984838a96f9bda41731232d032e891b5fc59e671 100644
--- a/chromeos/display/output_configurator.cc
+++ b/chromeos/display/output_configurator.cc
@@ -123,12 +123,6 @@ OutputConfigurator::ModeInfo::ModeInfo(int width,
interlaced(interlaced),
refresh_rate(refresh_rate) {}
-OutputConfigurator::CoordinateTransformation::CoordinateTransformation()
- : x_scale(1.0),
- x_offset(0.0),
- y_scale(1.0),
- y_offset(0.0) {}
-
OutputConfigurator::OutputSnapshot::OutputSnapshot()
: output(None),
crtc(None),
@@ -804,11 +798,8 @@ bool OutputConfigurator::EnterState(ui::OutputState output_state,
output->y = 0;
output->current_mode = output_power[i] ? output->mirror_mode : None;
if (output->touch_device_id) {
- // CTM needs to be calculated if aspect preserving scaling is used.
- // Otherwise, assume it is full screen, and use identity CTM.
if (output->mirror_mode != output->native_mode &&
output->is_aspect_preserving_scaling) {
- output->transform = GetMirrorModeCTM(*output);
mirrored_display_area_ratio_map_[output->touch_device_id] =
GetMirroredDisplayAreaRatio(*output);
}
@@ -841,12 +832,6 @@ bool OutputConfigurator::EnterState(ui::OutputState output_state,
width = std::max<int>(width, mode_info->width);
height += (height ? kVerticalGap : 0) + mode_info->height;
}
-
- for (size_t i = 0; i < updated_outputs.size(); ++i) {
- OutputSnapshot* output = &updated_outputs[i];
- if (output->touch_device_id)
- output->transform = GetExtendedModeCTM(*output, width, height);
- }
break;
}
}
@@ -899,9 +884,6 @@ bool OutputConfigurator::EnterState(ui::OutputState output_state,
}
if (configure_succeeded) {
- if (output.touch_device_id)
- touchscreen_delegate_->ConfigureCTM(output.touch_device_id,
- output.transform);
cached_outputs_[i] = updated_outputs[i];
} else {
all_succeeded = false;
@@ -956,80 +938,6 @@ ui::OutputState OutputConfigurator::ChooseOutputState(
return ui::OUTPUT_STATE_INVALID;
}
-OutputConfigurator::CoordinateTransformation
-OutputConfigurator::GetMirrorModeCTM(
- const OutputConfigurator::OutputSnapshot& output) {
- CoordinateTransformation ctm; // Default to identity
- const ModeInfo* native_mode_info = GetModeInfo(output, output.native_mode);
- const ModeInfo* mirror_mode_info = GetModeInfo(output, output.mirror_mode);
-
- if (!native_mode_info || !mirror_mode_info ||
- native_mode_info->height == 0 || mirror_mode_info->height == 0 ||
- native_mode_info->width == 0 || mirror_mode_info->width == 0)
- return ctm;
-
- float native_mode_ar = static_cast<float>(native_mode_info->width) /
- static_cast<float>(native_mode_info->height);
- float mirror_mode_ar = static_cast<float>(mirror_mode_info->width) /
- static_cast<float>(mirror_mode_info->height);
-
- if (mirror_mode_ar > native_mode_ar) { // Letterboxing
- ctm.x_scale = 1.0;
- ctm.x_offset = 0.0;
- ctm.y_scale = mirror_mode_ar / native_mode_ar;
- ctm.y_offset = (native_mode_ar / mirror_mode_ar - 1.0) * 0.5;
- return ctm;
- }
- if (native_mode_ar > mirror_mode_ar) { // Pillarboxing
- ctm.y_scale = 1.0;
- ctm.y_offset = 0.0;
- ctm.x_scale = native_mode_ar / mirror_mode_ar;
- ctm.x_offset = (mirror_mode_ar / native_mode_ar - 1.0) * 0.5;
- return ctm;
- }
-
- return ctm; // Same aspect ratio - return identity
-}
-
-OutputConfigurator::CoordinateTransformation
-OutputConfigurator::GetExtendedModeCTM(
- const OutputConfigurator::OutputSnapshot& output,
- int framebuffer_width,
- int framebuffer_height) {
- CoordinateTransformation ctm; // Default to identity
- const ModeInfo* mode_info = GetModeInfo(output, output.selected_mode);
- DCHECK(mode_info);
- if (!mode_info)
- return ctm;
- // An example of how to calculate the CTM.
- // Suppose we have 2 monitors, the first one has size 1366 x 768.
- // The second one has size 2560 x 1600
- // The total size of framebuffer is 2560 x 2428
- // where 2428 = 768 + 60 (hidden gap) + 1600
- // and the sceond monitor is translated to Point (0, 828) in the
- // framebuffer.
- // X will first map input event location to [0, 2560) x [0, 2428),
- // then apply CTM on it.
- // So to compute CTM, for monitor1, we have
- // x_scale = (1366 - 1) / (2560 - 1)
- // x_offset = 0 / (2560 - 1)
- // y_scale = (768 - 1) / (2428 - 1)
- // y_offset = 0 / (2428 -1)
- // For Monitor 2, we have
- // x_scale = (2560 - 1) / (2560 - 1)
- // x_offset = 0 / (2560 - 1)
- // y_scale = (1600 - 1) / (2428 - 1)
- // y_offset = 828 / (2428 -1)
- // See the unittest OutputConfiguratorTest.CTMForMultiScreens.
- ctm.x_scale =
- static_cast<float>(mode_info->width - 1) / (framebuffer_width - 1);
- ctm.x_offset = static_cast<float>(output.x) / (framebuffer_width - 1);
- ctm.y_scale =
- static_cast<float>(mode_info->height - 1) / (framebuffer_height - 1);
- ctm.y_offset = static_cast<float>(output.y) / (framebuffer_height - 1);
- return ctm;
-}
-
float OutputConfigurator::GetMirroredDisplayAreaRatio(
const OutputConfigurator::OutputSnapshot& output) {
float area_ratio = 1.0f;

Powered by Google App Engine
This is Rietveld 408576698