diff options
author | Jeff Brown <jeffbrown@google.com> | 2011-02-19 01:08:02 -0800 |
---|---|---|
committer | Jeff Brown <jeffbrown@google.com> | 2011-02-19 05:23:10 -0800 |
commit | 6f2fba428ca5e77a26d991ad728e346cc47609ee (patch) | |
tree | 5dd07c24bd9b474ccfbcba4f63e078598fbd2b50 /core/jni/android_view_MotionEvent.cpp | |
parent | b1bdb64d641ac63097619e5ef08d5a25bfdc61bb (diff) | |
download | frameworks_base-6f2fba428ca5e77a26d991ad728e346cc47609ee.zip frameworks_base-6f2fba428ca5e77a26d991ad728e346cc47609ee.tar.gz frameworks_base-6f2fba428ca5e77a26d991ad728e346cc47609ee.tar.bz2 |
Add new axes for joysticks and mouse wheels.
Added API on InputDevice to query the set of axes available.
Added API on KeyEvent and MotionEvent to convert keycodes and axes
to symbolic name strings for diagnostic purposes.
Added API on KeyEvent to query if a given key code is a gamepad button.
Added a new "axis" element to key layout files to specify the
mapping between raw absolute axis values and motion axis ids.
Expanded the axis bitfield to 64bits to allow for future growth.
Modified the Makefile for keyboard prebuilts to run the keymap
validation tool during the build.
Added layouts for two game controllers.
Added default actions for game pad button keys.
Added more tests.
Fixed a bunch of bugs.
Change-Id: I73f9166c3b3c5bcf4970845b58088ad467525525
Diffstat (limited to 'core/jni/android_view_MotionEvent.cpp')
-rw-r--r-- | core/jni/android_view_MotionEvent.cpp | 39 |
1 files changed, 19 insertions, 20 deletions
diff --git a/core/jni/android_view_MotionEvent.cpp b/core/jni/android_view_MotionEvent.cpp index 069e40b..5ba1cff 100644 --- a/core/jni/android_view_MotionEvent.cpp +++ b/core/jni/android_view_MotionEvent.cpp @@ -207,8 +207,7 @@ static void pointerCoordsToNative(JNIEnv* env, jobject pointerCoordsObj, outRawPointerCoords->setAxisValue(AMOTION_EVENT_AXIS_ORIENTATION, env->GetFloatField(pointerCoordsObj, gPointerCoordsClassInfo.orientation)); - uint32_t bits = env->GetIntField(pointerCoordsObj, - gPointerCoordsClassInfo.mPackedAxisBits); + uint64_t bits = env->GetLongField(pointerCoordsObj, gPointerCoordsClassInfo.mPackedAxisBits); if (bits) { jfloatArray valuesArray = jfloatArray(env->GetObjectField(pointerCoordsObj, gPointerCoordsClassInfo.mPackedAxisValues)); @@ -219,7 +218,7 @@ static void pointerCoordsToNative(JNIEnv* env, jobject pointerCoordsObj, uint32_t index = 0; do { uint32_t axis = __builtin_ctz(bits); - uint32_t axisBit = 1 << axis; + uint64_t axisBit = 1LL << axis; bits &= ~axisBit; outRawPointerCoords->setAxisValue(axis, values[index++]); } while (bits); @@ -272,21 +271,21 @@ static void pointerCoordsFromNative(JNIEnv* env, const PointerCoords* rawPointer env->SetFloatField(outPointerCoordsObj, gPointerCoordsClassInfo.orientation, rawPointerCoords->getAxisValue(AMOTION_EVENT_AXIS_ORIENTATION)); - const uint32_t unpackedAxisBits = 0 - | (1 << AMOTION_EVENT_AXIS_X) - | (1 << AMOTION_EVENT_AXIS_Y) - | (1 << AMOTION_EVENT_AXIS_PRESSURE) - | (1 << AMOTION_EVENT_AXIS_SIZE) - | (1 << AMOTION_EVENT_AXIS_TOUCH_MAJOR) - | (1 << AMOTION_EVENT_AXIS_TOUCH_MINOR) - | (1 << AMOTION_EVENT_AXIS_TOOL_MAJOR) - | (1 << AMOTION_EVENT_AXIS_TOOL_MINOR) - | (1 << AMOTION_EVENT_AXIS_ORIENTATION); - - uint32_t outBits = 0; - uint32_t remainingBits = rawPointerCoords->bits & ~unpackedAxisBits; + const uint64_t unpackedAxisBits = 0 + | (1LL << AMOTION_EVENT_AXIS_X) + | (1LL << AMOTION_EVENT_AXIS_Y) + | (1LL << AMOTION_EVENT_AXIS_PRESSURE) + | (1LL << AMOTION_EVENT_AXIS_SIZE) + | (1LL << AMOTION_EVENT_AXIS_TOUCH_MAJOR) + | (1LL << AMOTION_EVENT_AXIS_TOUCH_MINOR) + | (1LL << AMOTION_EVENT_AXIS_TOOL_MAJOR) + | (1LL << AMOTION_EVENT_AXIS_TOOL_MINOR) + | (1LL << AMOTION_EVENT_AXIS_ORIENTATION); + + uint64_t outBits = 0; + uint64_t remainingBits = rawPointerCoords->bits & ~unpackedAxisBits; if (remainingBits) { - uint32_t packedAxesCount = __builtin_popcount(remainingBits); + uint32_t packedAxesCount = __builtin_popcountll(remainingBits); jfloatArray outValuesArray = obtainPackedAxisValuesArray(env, packedAxesCount, outPointerCoordsObj); if (!outValuesArray) { @@ -300,7 +299,7 @@ static void pointerCoordsFromNative(JNIEnv* env, const PointerCoords* rawPointer uint32_t index = 0; do { uint32_t axis = __builtin_ctz(remainingBits); - uint32_t axisBit = 1 << axis; + uint64_t axisBit = 1LL << axis; remainingBits &= ~axisBit; outBits |= axisBit; outValues[index++] = rawPointerCoords->getAxisValue(axis); @@ -309,7 +308,7 @@ static void pointerCoordsFromNative(JNIEnv* env, const PointerCoords* rawPointer env->ReleasePrimitiveArrayCritical(outValuesArray, outValues, 0); env->DeleteLocalRef(outValuesArray); } - env->SetIntField(outPointerCoordsObj, gPointerCoordsClassInfo.mPackedAxisBits, outBits); + env->SetLongField(outPointerCoordsObj, gPointerCoordsClassInfo.mPackedAxisBits, outBits); } @@ -758,7 +757,7 @@ int register_android_view_MotionEvent(JNIEnv* env) { FIND_CLASS(gPointerCoordsClassInfo.clazz, "android/view/MotionEvent$PointerCoords"); GET_FIELD_ID(gPointerCoordsClassInfo.mPackedAxisBits, gPointerCoordsClassInfo.clazz, - "mPackedAxisBits", "I"); + "mPackedAxisBits", "J"); GET_FIELD_ID(gPointerCoordsClassInfo.mPackedAxisValues, gPointerCoordsClassInfo.clazz, "mPackedAxisValues", "[F"); GET_FIELD_ID(gPointerCoordsClassInfo.x, gPointerCoordsClassInfo.clazz, |