summaryrefslogtreecommitdiffstats
path: root/ui/base
diff options
context:
space:
mode:
authorraymes@chromium.org <raymes@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-09 22:34:31 +0000
committerraymes@chromium.org <raymes@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-09 22:34:31 +0000
commit78449d188a8fd1883e450fa00d07872239043c08 (patch)
treea8e8fae3e62b1fdcae62b64c2a4e224412d9cf41 /ui/base
parent23e23c2b255dc1808ea79b38579645bb70527b91 (diff)
downloadchromium_src-78449d188a8fd1883e450fa00d07872239043c08.zip
chromium_src-78449d188a8fd1883e450fa00d07872239043c08.tar.gz
chromium_src-78449d188a8fd1883e450fa00d07872239043c08.tar.bz2
Revert 166986 - Make the fling acceleration curve be easily configurable.
Broke the build at: http://build.chromium.org/p/chromium.chromiumos/builders/Linux%20ChromiumOS%20Tests%20%28dbg%29%283%29/builds/16022 A previous CL introduced a smooth curve for computing an acceleration to be applied at the start of a touchscreen fling. This CL adds the curve coefficients to the gesture configuration page. BUG=141653 Review URL: https://chromiumcodereview.appspot.com/11369140 TBR=rjkroege@chromium.org Review URL: https://codereview.chromium.org/11312176 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@166998 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui/base')
-rw-r--r--ui/base/gestures/gesture_configuration.cc12
-rw-r--r--ui/base/gestures/gesture_configuration.h14
-rw-r--r--ui/base/gestures/gesture_sequence.cc59
3 files changed, 61 insertions, 24 deletions
diff --git a/ui/base/gestures/gesture_configuration.cc b/ui/base/gestures/gesture_configuration.cc
index 8310ed8..a3b289f 100644
--- a/ui/base/gestures/gesture_configuration.cc
+++ b/ui/base/gestures/gesture_configuration.cc
@@ -40,15 +40,7 @@ int GestureConfiguration::points_buffered_for_velocity_ = 3;
double GestureConfiguration::rail_break_proportion_ = 15;
double GestureConfiguration::rail_start_proportion_ = 2;
-// Coefficients for a function that computes fling acceleration.
-// These are empirically determined defaults. Do not adjust without
-// additional empirical validation.
-float GestureConfiguration::fling_acceleration_curve_coefficients_[
- NumAccelParams] = {
- 0.0166667f,
- -0.0238095f,
- 0.0452381f,
- 0.8f
-};
+// The additional acceleration to apply to touchscreen flings.
+double GestureConfiguration::touchscreen_fling_acceleration_adjustment_ = 0.85;
} // namespace ui
diff --git a/ui/base/gestures/gesture_configuration.h b/ui/base/gestures/gesture_configuration.h
index 256c5d2..d0b5cbc 100644
--- a/ui/base/gestures/gesture_configuration.h
+++ b/ui/base/gestures/gesture_configuration.h
@@ -16,10 +16,6 @@ namespace ui {
class UI_EXPORT GestureConfiguration {
public:
- // Number of parameters in the array of parameters for the fling acceleration
- // curve.
- static const int NumAccelParams = 4;
-
// Ordered alphabetically ignoring underscores, to align with the
// associated list of prefs in gesture_prefs_aura.cc.
static int default_radius() {
@@ -143,11 +139,11 @@ class UI_EXPORT GestureConfiguration {
static void set_rail_start_proportion(double val) {
rail_start_proportion_ = val;
}
- static void set_fling_acceleration_curve_coefficients(int i, float val) {
- fling_acceleration_curve_coefficients_[i] = val;
+ static double touchscreen_fling_acceleration_adjustment() {
+ return touchscreen_fling_acceleration_adjustment_;
}
- static float fling_acceleration_curve_coefficients(int i) {
- return fling_acceleration_curve_coefficients_[i];
+ static void set_touchscreen_fling_acceleration_adjustment(double val) {
+ touchscreen_fling_acceleration_adjustment_ = val;
}
private:
@@ -186,7 +182,7 @@ class UI_EXPORT GestureConfiguration {
static int points_buffered_for_velocity_;
static double rail_break_proportion_;
static double rail_start_proportion_;
- static float fling_acceleration_curve_coefficients_[NumAccelParams];
+ static double touchscreen_fling_acceleration_adjustment_;
DISALLOW_COPY_AND_ASSIGN(GestureConfiguration);
};
diff --git a/ui/base/gestures/gesture_sequence.cc b/ui/base/gestures/gesture_sequence.cc
index 115229a..c4a6d31 100644
--- a/ui/base/gestures/gesture_sequence.cc
+++ b/ui/base/gestures/gesture_sequence.cc
@@ -7,6 +7,7 @@
#include <cmath>
#include <stdlib.h>
+#include "base/basictypes.h"
#include "base/logging.h"
#include "base/memory/scoped_ptr.h"
#include "base/string_number_conversions.h"
@@ -285,20 +286,68 @@ unsigned int ComputeTouchBitmask(const GesturePoint* points) {
const float kFlingCurveNormalization = 1.0f / 1875.f;
-float CalibrateFlingVelocity(float velocity) {
- const unsigned last_coefficient =
- GestureConfiguration::NumAccelParams - 1;
+// TODO(rjkroege): Make this configurable from the config page.
+// Touchscreen fling acceleration is cubic function of four
+// parameters. These are empirically determined defaults.
+// Do not adjust the default values without empirical validation.
+static float fling_acceleration_curve_coefficients[4] = {
+ 0.0166667f,
+ -0.0238095f,
+ 0.0452381f,
+ 0.8f
+};
+
+// Read 4 comma-separated floating point values from an environment
+// variable and use that to configure the fling acceleration curve.
+void ReadFlingVelocityScalingIfNecessary() {
+ static bool did_setup_scaling = false;
+ if (did_setup_scaling)
+ return;
+ did_setup_scaling = true;
+ char* pk = getenv("FLING_ACCELERATION_CURVE_COEFFICIENTS");
+ if (!pk)
+ return;
+ LOG(INFO) << "Attempting to configure fling from environment.\n";
+
+ unsigned coefficient_count = arraysize(fling_acceleration_curve_coefficients);
+ unsigned i = 0;
+ CStringTokenizer t(pk, pk + strlen(pk), ",");
+ while (t.GetNext() && i < coefficient_count) {
+ double d;
+ if (base::StringToDouble(t.token(), &d)) {
+ fling_acceleration_curve_coefficients[i++] = d;
+ } else {
+ LOG(WARNING)
+ << "BANDED_FLING_VELOCITY_ADJUSTMENT bad value: "
+ << t.token();
+ }
+ }
+}
+
+float SmoothFlingVelocityAdjustment(float velocity) {
+ ReadFlingVelocityScalingIfNecessary();
+ unsigned last_coefficient =
+ arraysize(fling_acceleration_curve_coefficients) - 1;
float normalized_velocity = fabs(velocity * kFlingCurveNormalization);
float nu = 0.0f, x = 1.f;
for (int i = last_coefficient ; i >= 0; i--) {
- float a = GestureConfiguration::fling_acceleration_curve_coefficients(i);
- nu += x * a;
+ nu += x * fling_acceleration_curve_coefficients[i];
x *= normalized_velocity;
}
return nu * velocity;
}
+// TODO(rjkroege): Provide a nicer means to turn this feature on/off.
+float CalibrateFlingVelocity(float velocity) {
+ const float velocity_scaling =
+ GestureConfiguration::touchscreen_fling_acceleration_adjustment();
+ if (velocity_scaling < 0.5f)
+ return SmoothFlingVelocityAdjustment(velocity);
+ else
+ return velocity_scaling * velocity;
+}
+
} // namespace
////////////////////////////////////////////////////////////////////////////////