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

Unified Diff: ui/base/x/valuators.h

Issue 17049002: Revert "Merge CMTEventData and ValuatorTracker" (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 6 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
« no previous file with comments | « ui/base/x/events_x.cc ('k') | ui/base/x/valuators.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/base/x/valuators.h
diff --git a/ui/base/x/valuators.h b/ui/base/x/valuators.h
new file mode 100644
index 0000000000000000000000000000000000000000..6a3168afe305ebf38b9bcbd17ca44c1c057f9446
--- /dev/null
+++ b/ui/base/x/valuators.h
@@ -0,0 +1,117 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_BASE_X_VALUATORS_H_
+#define UI_BASE_X_VALUATORS_H_
+
+#include "base/basictypes.h"
+#include "ui/base/ui_export.h"
+
+template <typename T> struct DefaultSingletonTraits;
+
+typedef union _XEvent XEvent;
+
+namespace ui {
+
+// A valuator is not reported in an XEvent if it hasn't changed from the
+// previous event from the same device. As a result, it is necessary to track
+// the last reported valuator values for a specific device.
+// Right now, this is only used to keep track of valuators for events coming in
+// from touch-devices, but it can be used for other devices as well.
+class UI_EXPORT ValuatorTracker {
+ private:
+ ValuatorTracker();
+ ~ValuatorTracker();
+
+ public:
+ // Define the valuators following the Multi-touch Protocol.
+ enum Valuator {
+ VAL_TOUCH_MAJOR = 0, // Length of the touch area.
+ VAL_TOUCH_MINOR, // Width of the touch area.
+ VAL_ORIENTATION, // Angle between the X-axis and the major axis of the
+ // touch area.
+ VAL_PRESSURE, // Pressure of the touch contact.
+
+ // NOTE: A touch event can have multiple touch points. So when we receive a
+ // touch event, we need to determine which point triggered the event.
+ // A touch point can have both a 'Slot ID' and a 'Tracking ID', and they can
+ // be (in fact, usually are) different. The 'Slot ID' ranges between 0 and
+ // (X - 1), where X is the maximum touch points supported by the device. The
+ // 'Tracking ID' can be any 16-bit value. With XInput 2.0, an XI_Motion
+ // event that comes from a currently-unused 'Slot ID' indicates the creation
+ // of a new touch point, and any event that comes with a 0 value for
+ // 'Tracking ID' marks the removal of a touch point. During the lifetime of
+ // a touchpoint, we use the 'Slot ID' as its identifier. The XI_ButtonPress
+ // and XI_ButtonRelease events are ignored.
+#if !defined(USE_XI2_MT)
+ VAL_SLOT_ID, // ID of the finger that triggered a touch event
+ // (useful when tracking multiple simultaneous
+ // touches)
+#endif
+ // NOTE for XInput MT: 'Tracking ID' is provided in every touch event to
+ // track individual touch. 'Tracking ID' is an unsigned 32-bit value and
+ // is increased for each new touch. It will wrap back to 0 when reaching
+ // the numerical limit.
+ VAL_TRACKING_ID, // ID of the touch point.
+
+ // Kernel timestamp from touch screen (if available).
+ VAL_TOUCH_RAW_TIMESTAMP,
+
+ VAL_LAST_ENTRY
+ };
+
+ // Returns the ValuatorTracker singleton.
+ static ValuatorTracker* GetInstance();
+
+ // Extract the Valuator from the XEvent. Return true and the value is set
+ // if the Valuator is found, false and value unchanged if the Valuator
+ // is not found.
+ bool ExtractValuator(const XEvent& xev, Valuator val, double* value);
+
+ // Normalize the Valuator with value on deviceid to fall into [0, 1].
+ // *value = (*value - min_value_of_tp) / (max_value_of_tp - min_value_of_tp)
+ // Returns true and sets the normalized value in|value| if normalization is
+ // successful. Returns false and |value| is unchanged otherwise.
+ bool NormalizeValuator(unsigned int deviceid, Valuator val, double* value);
+
+ // Extract the range of the Valuator. Return true if the range is available
+ // and written into min & max, false if the range is not available.
+ bool GetValuatorRange(unsigned int deviceid,
+ Valuator val,
+ double* min,
+ double* max);
+
+ // Sets up the internal bookkeeping of the valuator information. It currently
+ // does this for touch devices only.
+ void SetupValuator();
+
+ private:
+ // Requirement for Singleton.
+ friend struct DefaultSingletonTraits<ValuatorTracker>;
+
+ static const int kMaxDeviceNum = 128;
+
+ // Index table to find the valuator for the Valuator on the specific device
+ // by valuator_lookup_[device_id][valuator]. Use 2-D array to get fast
+ // index at the expense of space. If the kMaxDeviceNum grows larger so that
+ // the space waste becomes a concern, the 2D lookup table can be replaced by a
+ // hash map.
+ signed char valuator_lookup_[kMaxDeviceNum][VAL_LAST_ENTRY];
+
+ // Index table to find the min & max value of the Valuator on a specific
+ // device.
+ double valuator_min_[kMaxDeviceNum][VAL_LAST_ENTRY];
+ double valuator_max_[kMaxDeviceNum][VAL_LAST_ENTRY];
+
+ // Table to keep track of the last seen value for the specified valuator for
+ // a device. Defaults to 0 if the valuator was not specified in an earlier
+ // event.
+ double last_seen_valuator_[kMaxDeviceNum][VAL_LAST_ENTRY];
+
+ DISALLOW_COPY_AND_ASSIGN(ValuatorTracker);
+};
+
+} // namespace ui
+
+#endif // UI_BASE_X_VALUATORS_H_
« no previous file with comments | « ui/base/x/events_x.cc ('k') | ui/base/x/valuators.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698