OSDN Git Service

Move motion event related methods to class MotionEventHelper.
authorAhbong Chang <cwahbong@google.com>
Tue, 7 Aug 2012 08:46:09 +0000 (16:46 +0800)
committerAhbong Chang <cwahbong@google.com>
Tue, 7 Aug 2012 09:51:35 +0000 (17:51 +0800)
Bug: 6943189
Change-Id: I9084cc8ebb501a5b772ed4e00bd64a3b2e8bafb3

src/com/android/gallery3d/ui/GLRootView.java
src/com/android/gallery3d/util/MotionEventHelper.java [new file with mode: 0644]

index 7f717b7..d396934 100644 (file)
@@ -25,9 +25,7 @@ import android.os.Build;
 import android.os.Process;
 import android.os.SystemClock;
 import android.util.AttributeSet;
-import android.util.FloatMath;
 import android.view.MotionEvent;
-import android.view.MotionEvent.PointerCoords;
 import android.view.SurfaceHolder;
 import android.view.View;
 
@@ -36,6 +34,7 @@ import com.android.gallery3d.anim.CanvasAnimation;
 import com.android.gallery3d.common.ApiHelper;
 import com.android.gallery3d.common.Utils;
 import com.android.gallery3d.util.GalleryUtils;
+import com.android.gallery3d.util.MotionEventHelper;
 import com.android.gallery3d.util.Profile;
 
 import java.util.ArrayDeque;
@@ -432,7 +431,7 @@ public class GLRootView extends GLSurfaceView
         }
 
         if (mCompensation != 0) {
-            event = transformEvent(event, mCompensationMatrix);
+            event = MotionEventHelper.transformEvent(event, mCompensationMatrix);
         }
 
         mRenderLock.lock();
@@ -449,97 +448,6 @@ public class GLRootView extends GLSurfaceView
         }
     }
 
-    private static MotionEvent transformEvent(MotionEvent e, Matrix m) {
-        // We try to use the new transform method if possible because it uses
-        // less memory.
-        if (ApiHelper.HAS_MOTION_EVENT_TRANSFORM) {
-            return transformEventNew(e, m);
-        } else {
-            return transformEventOld(e, m);
-        }
-    }
-
-    @TargetApi(ApiHelper.VERSION_CODES.HONEYCOMB)
-    private static MotionEvent transformEventNew(MotionEvent e, Matrix m) {
-        e.transform(m);
-        return e;
-    }
-
-    // This is copied from Input.cpp in the android framework.
-    private static MotionEvent transformEventOld(MotionEvent e, Matrix m) {
-        long downTime = e.getDownTime();
-        long eventTime = e.getEventTime();
-        int action = e.getAction();
-        int pointerCount = e.getPointerCount();
-        int[] pointerIds = getPointerIds(e);
-        PointerCoords[] pointerCoords = getPointerCoords(e);
-        int metaState = e.getMetaState();
-        float xPrecision = e.getXPrecision();
-        float yPrecision = e.getYPrecision();
-        int deviceId = e.getDeviceId();
-        int edgeFlags = e.getEdgeFlags();
-        int source = e.getSource();
-        int flags = e.getFlags();
-
-        // Copy the x and y coordinates into an array, map them, and copy back.
-        float[] xy = new float[pointerCoords.length * 2];
-        for (int i = 0; i < pointerCount;i++) {
-            xy[2 * i] = pointerCoords[i].x;
-            xy[2 * i + 1] = pointerCoords[i].y;
-        }
-        m.mapPoints(xy);
-        for (int i = 0; i < pointerCount;i++) {
-            pointerCoords[i].x = xy[2 * i];
-            pointerCoords[i].y = xy[2 * i + 1];
-            pointerCoords[i].orientation = transformAngle(
-                m, pointerCoords[i].orientation);
-        }
-
-        MotionEvent n = MotionEvent.obtain(downTime, eventTime, action,
-                pointerCount, pointerIds, pointerCoords, metaState, xPrecision,
-                yPrecision, deviceId, edgeFlags, source, flags);
-
-        return n;
-    }
-
-    private static int[] getPointerIds(MotionEvent e) {
-        int n = e.getPointerCount();
-        int[] r = new int[n];
-        for (int i = 0; i < n; i++) {
-            r[i] = e.getPointerId(i);
-        }
-        return r;
-    }
-
-    private static PointerCoords[] getPointerCoords(MotionEvent e) {
-        int n = e.getPointerCount();
-        PointerCoords[] r = new PointerCoords[n];
-        for (int i = 0; i < n; i++) {
-            r[i] = new PointerCoords();
-            e.getPointerCoords(i, r[i]);
-        }
-        return r;
-    }
-
-    private static float transformAngle(Matrix m, float angleRadians) {
-        // Construct and transform a vector oriented at the specified clockwise
-        // angle from vertical.  Coordinate system: down is increasing Y, right is
-        // increasing X.
-        float[] v = new float[2];
-        v[0] = FloatMath.sin(angleRadians);
-        v[1] = -FloatMath.cos(angleRadians);
-        m.mapVectors(v);
-
-        // Derive the transformed vector's clockwise angle from vertical.
-        float result = (float) Math.atan2(v[0], -v[1]);
-        if (result < -Math.PI / 2) {
-            result += Math.PI;
-        } else if (result > Math.PI / 2) {
-            result -= Math.PI;
-        }
-        return result;
-    }
-
     private class IdleRunner implements Runnable {
         // true if the idle runner is in the queue
         private boolean mActive = false;
diff --git a/src/com/android/gallery3d/util/MotionEventHelper.java b/src/com/android/gallery3d/util/MotionEventHelper.java
new file mode 100644 (file)
index 0000000..1c9d062
--- /dev/null
@@ -0,0 +1,119 @@
+/*
+ * Copyright (C) 2012 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.
+ */
+package com.android.gallery3d.util;
+
+import android.annotation.TargetApi;
+import android.graphics.Matrix;
+import android.util.FloatMath;
+import android.view.MotionEvent;
+import android.view.MotionEvent.PointerCoords;
+
+import com.android.gallery3d.common.ApiHelper;
+
+public final class MotionEventHelper {
+    private MotionEventHelper() {}
+
+    public static MotionEvent transformEvent(MotionEvent e, Matrix m) {
+        // We try to use the new transform method if possible because it uses
+        // less memory.
+        if (ApiHelper.HAS_MOTION_EVENT_TRANSFORM) {
+            return transformEventNew(e, m);
+        } else {
+            return transformEventOld(e, m);
+        }
+    }
+
+    @TargetApi(ApiHelper.VERSION_CODES.HONEYCOMB)
+    private static MotionEvent transformEventNew(MotionEvent e, Matrix m) {
+        e.transform(m);
+        return e;
+    }
+
+    // This is copied from Input.cpp in the android framework.
+    private static MotionEvent transformEventOld(MotionEvent e, Matrix m) {
+        long downTime = e.getDownTime();
+        long eventTime = e.getEventTime();
+        int action = e.getAction();
+        int pointerCount = e.getPointerCount();
+        int[] pointerIds = getPointerIds(e);
+        PointerCoords[] pointerCoords = getPointerCoords(e);
+        int metaState = e.getMetaState();
+        float xPrecision = e.getXPrecision();
+        float yPrecision = e.getYPrecision();
+        int deviceId = e.getDeviceId();
+        int edgeFlags = e.getEdgeFlags();
+        int source = e.getSource();
+        int flags = e.getFlags();
+
+        // Copy the x and y coordinates into an array, map them, and copy back.
+        float[] xy = new float[pointerCoords.length * 2];
+        for (int i = 0; i < pointerCount;i++) {
+            xy[2 * i] = pointerCoords[i].x;
+            xy[2 * i + 1] = pointerCoords[i].y;
+        }
+        m.mapPoints(xy);
+        for (int i = 0; i < pointerCount;i++) {
+            pointerCoords[i].x = xy[2 * i];
+            pointerCoords[i].y = xy[2 * i + 1];
+            pointerCoords[i].orientation = transformAngle(
+                m, pointerCoords[i].orientation);
+        }
+
+        MotionEvent n = MotionEvent.obtain(downTime, eventTime, action,
+                pointerCount, pointerIds, pointerCoords, metaState, xPrecision,
+                yPrecision, deviceId, edgeFlags, source, flags);
+
+        return n;
+    }
+
+    private static int[] getPointerIds(MotionEvent e) {
+        int n = e.getPointerCount();
+        int[] r = new int[n];
+        for (int i = 0; i < n; i++) {
+            r[i] = e.getPointerId(i);
+        }
+        return r;
+    }
+
+    private static PointerCoords[] getPointerCoords(MotionEvent e) {
+        int n = e.getPointerCount();
+        PointerCoords[] r = new PointerCoords[n];
+        for (int i = 0; i < n; i++) {
+            r[i] = new PointerCoords();
+            e.getPointerCoords(i, r[i]);
+        }
+        return r;
+    }
+
+    private static float transformAngle(Matrix m, float angleRadians) {
+        // Construct and transform a vector oriented at the specified clockwise
+        // angle from vertical.  Coordinate system: down is increasing Y, right is
+        // increasing X.
+        float[] v = new float[2];
+        v[0] = FloatMath.sin(angleRadians);
+        v[1] = -FloatMath.cos(angleRadians);
+        m.mapVectors(v);
+
+        // Derive the transformed vector's clockwise angle from vertical.
+        float result = (float) Math.atan2(v[0], -v[1]);
+        if (result < -Math.PI / 2) {
+            result += Math.PI;
+        } else if (result > Math.PI / 2) {
+            result -= Math.PI;
+        }
+        return result;
+    }
+}