From 83c09685f2e62bc3cf7e71bc61d903f4b9ccaeb4 Mon Sep 17 00:00:00 2001 From: Jeff Brown Date: Thu, 23 Dec 2010 17:50:18 -0800 Subject: Add initial support for cursor-based pointing devices. Some parts stubbed out but you can plug in a mouse and move a green cursor around to interact with the UI. Change-Id: I80d597a7f11d3bd92041890f74b3c77326975e6e --- include/ui/EventHub.h | 4 +-- include/ui/InputReader.h | 21 ++++++++++++-- include/ui/PointerController.h | 63 ++++++++++++++++++++++++++++++++++++++++++ include/utils/PropertyMap.h | 6 ++++ 4 files changed, 89 insertions(+), 5 deletions(-) create mode 100644 include/ui/PointerController.h (limited to 'include') diff --git a/include/ui/EventHub.h b/include/ui/EventHub.h index 6c6c297..8f922a5 100644 --- a/include/ui/EventHub.h +++ b/include/ui/EventHub.h @@ -109,8 +109,8 @@ enum { /* The input device is a touchscreen (either single-touch or multi-touch). */ INPUT_DEVICE_CLASS_TOUCHSCREEN = 0x00000004, - /* The input device is a trackball. */ - INPUT_DEVICE_CLASS_TRACKBALL = 0x00000008, + /* The input device is a cursor device such as a trackball or mouse. */ + INPUT_DEVICE_CLASS_CURSOR = 0x00000008, /* The input device is a multi-touch touchscreen. */ INPUT_DEVICE_CLASS_TOUCHSCREEN_MT= 0x00000010, diff --git a/include/ui/InputReader.h b/include/ui/InputReader.h index b466ff1..00a06be 100644 --- a/include/ui/InputReader.h +++ b/include/ui/InputReader.h @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -77,6 +78,9 @@ public: /* Gets the excluded device names for the platform. */ virtual void getExcludedDeviceNames(Vector& outExcludedDeviceNames) = 0; + + /* Gets a pointer controller associated with the specified cursor device (ie. a mouse). */ + virtual sp obtainPointerController(int32_t deviceId) = 0; }; @@ -421,10 +425,10 @@ private: }; -class TrackballInputMapper : public InputMapper { +class CursorInputMapper : public InputMapper { public: - TrackballInputMapper(InputDevice* device); - virtual ~TrackballInputMapper(); + CursorInputMapper(InputDevice* device); + virtual ~CursorInputMapper(); virtual uint32_t getSources(); virtual void populateDeviceInfo(InputDeviceInfo* deviceInfo); @@ -443,6 +447,12 @@ private: // Immutable configuration parameters. struct Parameters { + enum Mode { + MODE_POINTER, + MODE_NAVIGATION, + }; + + Mode mode; int32_t associatedDisplayId; bool orientationAware; } mParameters; @@ -465,10 +475,12 @@ private: } } mAccumulator; + int32_t mSources; float mXScale; float mYScale; float mXPrecision; float mYPrecision; + sp mPointerController; struct LockedState { bool down; @@ -572,6 +584,9 @@ protected: } }; + // Input sources supported by the device. + int32_t mSources; + // Immutable configuration parameters. struct Parameters { enum DeviceType { diff --git a/include/ui/PointerController.h b/include/ui/PointerController.h new file mode 100644 index 0000000..4db24e5 --- /dev/null +++ b/include/ui/PointerController.h @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _UI_POINTER_CONTROLLER_H +#define _UI_POINTER_CONTROLLER_H + +#include + +namespace android { + +enum { + POINTER_BUTTON_1 = 1 << 0, +}; + +/** + * Interface for tracking a single (mouse) pointer. + * + * The pointer controller is responsible for providing synchronization and for tracking + * display orientation changes if needed. + */ +class PointerControllerInterface : public virtual RefBase { +protected: + PointerControllerInterface() { } + virtual ~PointerControllerInterface() { } + +public: + /* Gets the bounds of the region that the pointer can traverse. + * Returns true if the bounds are available. */ + virtual bool getBounds(float* outMinX, float* outMinY, + float* outMaxX, float* outMaxY) const = 0; + + /* Move the pointer. */ + virtual void move(float deltaX, float deltaY) = 0; + + /* Sets a mask that indicates which buttons are pressed. */ + virtual void setButtonState(uint32_t buttonState) = 0; + + /* Gets a mask that indicates which buttons are pressed. */ + virtual uint32_t getButtonState() const = 0; + + /* Sets the absolute location of the pointer. */ + virtual void setPosition(float x, float y) = 0; + + /* Gets the absolute location of the pointer. */ + virtual void getPosition(float* outX, float* outY) const = 0; +}; + +} // namespace android + +#endif // _UI_POINTER_CONTROLLER_H diff --git a/include/utils/PropertyMap.h b/include/utils/PropertyMap.h index a54f819..a9e674f 100644 --- a/include/utils/PropertyMap.h +++ b/include/utils/PropertyMap.h @@ -71,6 +71,12 @@ public: bool tryGetProperty(const String8& key, int32_t& outValue) const; bool tryGetProperty(const String8& key, float& outValue) const; + /* Adds all values from the specified property map. */ + void addAll(const PropertyMap* map); + + /* Gets the underlying property map. */ + inline const KeyedVector& getProperties() const { return mProperties; } + /* Loads a property map from a file. */ static status_t load(const String8& filename, PropertyMap** outMap); -- cgit v1.1