Index: ui/base/x/scroll_factory.h |
diff --git a/ui/base/x/scroll_factory.h b/ui/base/x/scroll_factory.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d37ee07d6c0877b221aa377ff98e5ba67fb753b7 |
--- /dev/null |
+++ b/ui/base/x/scroll_factory.h |
@@ -0,0 +1,53 @@ |
+// Copyright (c) 2011 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_SCROLL_FACTORY_H_ |
+#define UI_BASE_X_SCROLL_FACTORY_H_ |
+#pragma once |
+ |
+#include <bitset> |
+#include <map> |
+ |
+#include "base/memory/singleton.h" |
+#include "ui/base/ui_export.h" |
+ |
+typedef struct _XDisplay Display; |
+typedef union _XEvent XEvent; |
+ |
+namespace ui { |
+ |
+// A class to support the detection of scroll events, using X11 valuators. |
+class UI_EXPORT ScrollFactory { |
+ public: |
+ // Returns the ScrollFactory singleton. |
+ static ScrollFactory* GetInstance(); |
+ |
+ // Updates the list of devices. |
+ void UpdateDeviceList(Display* display); |
+ |
+ // Returns true if this is a scroll event (a motion event with the necessary |
+ // valuators. Also returns the offsets. |x_offset| and |y_offset| can be |
+ // NULL. |
+ bool GetScrollOffsets(const XEvent& xev, float* x_offset, float* y_offset); |
+ |
+ private: |
+ ScrollFactory(); |
+ ~ScrollFactory(); |
+ // Requirement for Signleton |
Ben Goodger (Google)
2011/12/14 19:01:39
nit: I believe your type definitions have to go be
DaveMoore
2011/12/14 21:26:04
Done.
|
+ friend struct DefaultSingletonTraits<ScrollFactory>; |
+ struct Valuators { |
+ int x_scroll; |
+ int y_scroll; |
+ }; |
+ |
+ // A quick lookup table for determining if events from the pointer device |
+ // should be processed. |
+ static const int kMaxDeviceNum = 128; |
+ std::bitset<kMaxDeviceNum> scroll_devices_; |
+ std::map<int, Valuators> device_to_valuators_; |
+}; |
+ |
+} // namespace ui |
+ |
+#endif // UI_BASE_X_SCROLL_FACTORY_H_ |