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

Unified Diff: chrome/browser/extensions/display_info_provider_chromeos.cc

Issue 2656433004: - Plumbs through native touch calibration from MD settings to display manager via the system dis… (Closed)
Patch Set: Created 3 years, 11 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: chrome/browser/extensions/display_info_provider_chromeos.cc
diff --git a/chrome/browser/extensions/display_info_provider_chromeos.cc b/chrome/browser/extensions/display_info_provider_chromeos.cc
index b8f392453b8ee16f77fa226a4cce1d6fffaa52ff..aba27aa2c1c22342533887fda211ed35911f7332 100644
--- a/chrome/browser/extensions/display_info_provider_chromeos.cc
+++ b/chrome/browser/extensions/display_info_provider_chromeos.cc
@@ -9,6 +9,7 @@
#include "ash/display/display_configuration_controller.h"
#include "ash/display/resolution_notification_controller.h"
#include "ash/shell.h"
+#include "ash/touch/ash_touch_transform_controller.h"
#include "base/strings/string_number_conversions.h"
#include "chrome/browser/chromeos/display/display_preferences.h"
#include "chrome/browser/chromeos/display/overscan_calibrator.h"
@@ -408,6 +409,33 @@ bool ValidateParamsForTouchCalibration(
} // namespace
+// static
+const char DisplayInfoProviderChromeOS::
+ kCustomTouchCalibrationInProgressError[] =
+ "Another custom touch calibration already under progress.";
+
+// static
+const char DisplayInfoProviderChromeOS::
+ kCompleteCalibrationCalledBeforeStartError[] =
+ "system.display.completeCustomTouchCalibration called before "
+ "system.display.startCustomTouchCalibration before.";
+
+// static
+const char DisplayInfoProviderChromeOS::kTouchBoundsNegativeError[] =
+ "Bounds cannot have negative values.";
+
+// static
+const char DisplayInfoProviderChromeOS::kTouchCalibrationPointsNegativeError[] =
+ "Display points and touch points cannot have negative coordinates";
+
+// static
+const char DisplayInfoProviderChromeOS::kTouchCalibrationPointsTooLargeError[] =
+ "Display point coordinates cannot be more than size of the display.";
+
+// static
+const char DisplayInfoProviderChromeOS::kNativeTouchCalibrationActiveError[] =
+ "Another touch calibration is already active.";
+
DisplayInfoProviderChromeOS::DisplayInfoProviderChromeOS() {}
DisplayInfoProviderChromeOS::~DisplayInfoProviderChromeOS() {}
@@ -660,19 +688,71 @@ bool DisplayInfoProviderChromeOS::OverscanCalibrationComplete(
return true;
}
-bool DisplayInfoProviderChromeOS::TouchCalibrationSet(
+bool DisplayInfoProviderChromeOS::ShowNativeTouchCalibration(
+ const std::string& id, std::string* error,
+ const DisplayInfoProvider::TouchCalibrationCallback& callback) {
+ VLOG(1) << "StartNativeTouchCalibration: " << id;
+
+ // If a custom calibration is already running, then throw an error.
+ if (custom_touch_calibration_active_) {
+ *error = kCustomTouchCalibrationInProgressError;
+ return false;
+ }
+
+ const display::Display display = GetDisplay(id);
+ if (!ValidateParamsForTouchCalibration(id, display, GetTouchCalibrator(),
+ error)) {
+ return false;
+ }
+
+ GetTouchCalibrator()->StartCalibration(display, callback);
+ return true;
+}
+
+bool DisplayInfoProviderChromeOS::StartCustomTouchCalibration(
const std::string& id,
- const api::system_display::TouchCalibrationPairQuad& pairs,
- const api::system_display::Bounds& bounds,
std::string* error) {
- VLOG(1) << "TouchCalibrationSet: " << id;
-
+ VLOG(1) << "StartCustomTouchCalibration: " << id;
const display::Display display = GetDisplay(id);
if (!ValidateParamsForTouchCalibration(id, display, GetTouchCalibrator(),
error)) {
return false;
}
+ touch_calibration_target_id_ = id;
+ custom_touch_calibration_active_ = true;
+
+ // Enable un-transformed touch input.
+ ash::Shell::GetInstance()->touch_transformer_controller()->SetForCalibration(
+ true);
+ return true;
+}
+
+bool DisplayInfoProviderChromeOS::CompleteCustomTouchCalibration(
+ const api::system_display::TouchCalibrationPairQuad& pairs,
+ const api::system_display::Bounds& bounds,
+ std::string* error) {
+ VLOG(1) << "CompleteCustomTouchCalibration: " << touch_calibration_target_id_;
+
+ ash::Shell::GetInstance()->touch_transformer_controller()->SetForCalibration(
+ false);
+
+ const display::Display display = GetDisplay(touch_calibration_target_id_);
+ touch_calibration_target_id_.clear();
+
+ // If Complete() is called before calling Start(), throw an error.
+ if (!custom_touch_calibration_active_) {
+ *error = kCompleteCalibrationCalledBeforeStartError;
+ return false;
+ }
+
+ custom_touch_calibration_active_ = false;
+
+ if (!ValidateParamsForTouchCalibration(
+ touch_calibration_target_id_, display, GetTouchCalibrator(), error)) {
+ return false;
+ }
+
display::TouchCalibrationData::CalibrationPointPairQuad calibration_points;
calibration_points[0] = GetCalibrationPair(pairs.pair1);
calibration_points[1] = GetCalibrationPair(pairs.pair2);
@@ -681,7 +761,7 @@ bool DisplayInfoProviderChromeOS::TouchCalibrationSet(
// The display bounds cannot have negative values.
if (bounds.width < 0 || bounds.height < 0) {
- *error = "Bounds cannot have negative values.";
+ *error = kTouchBoundsNegativeError;
return false;
}
@@ -691,15 +771,13 @@ bool DisplayInfoProviderChromeOS::TouchCalibrationSet(
calibration_points[row].first.y() < 0 ||
calibration_points[row].second.x() < 0 ||
calibration_points[row].second.y() < 0) {
- *error = "Display points and touch points cannot have negative "
- "coordinates";
+ *error = kTouchCalibrationPointsNegativeError;
return false;
}
// Coordinates for display points cannot be greater than the screen bounds.
if (calibration_points[row].first.x() > bounds.width ||
calibration_points[row].first.y() > bounds.height) {
- *error = "Display point coordinates cannot be more than size of the "
- "display.";
+ *error = kTouchCalibrationPointsTooLargeError;
return false;
}
}
@@ -710,7 +788,7 @@ bool DisplayInfoProviderChromeOS::TouchCalibrationSet(
return true;
}
-bool DisplayInfoProviderChromeOS::TouchCalibrationReset(const std::string& id,
+bool DisplayInfoProviderChromeOS::ClearTouchCalibration(const std::string& id,
std::string* error) {
const display::Display display = GetDisplay(id);
@@ -724,9 +802,11 @@ bool DisplayInfoProviderChromeOS::TouchCalibrationReset(const std::string& id,
return true;
}
-bool DisplayInfoProviderChromeOS::IsTouchCalibrationActive(std::string* error) {
+bool DisplayInfoProviderChromeOS::IsNativeTouchCalibrationActive(
+ std::string* error) {
+ // If native touch calibration UX is active, set error and return false.
if (GetTouchCalibrator()->is_calibrating()) {
- *error = "Another touch calibration is already active.";
+ *error = kNativeTouchCalibrationActiveError;
return true;
}
return false;

Powered by Google App Engine
This is Rietveld 408576698