OSDN Git Service

Merge "Add scrolling support with a mouse wheel"
authorAlan Newberger <alann@google.com>
Fri, 19 Sep 2014 23:37:07 +0000 (23:37 +0000)
committerGerrit Code Review <noreply-gerritcodereview@google.com>
Fri, 19 Sep 2014 23:37:07 +0000 (23:37 +0000)
src/com/android/camera/ui/FilmStripGestureRecognizer.java
src/com/android/camera/ui/FilmStripView.java

index e9ac1c7..6b65d30 100644 (file)
@@ -18,6 +18,8 @@ package com.android.camera.ui;
 
 import android.content.Context;
 import android.view.GestureDetector;
+import android.view.InputDevice;
+import android.view.KeyEvent;
 import android.view.MotionEvent;
 import android.view.ScaleGestureDetector;
 
@@ -31,6 +33,7 @@ public class FilmStripGestureRecognizer {
         boolean onSingleTapUp(float x, float y);
         boolean onDoubleTap(float x, float y);
         boolean onScroll(float x, float y, float dx, float dy);
+        boolean onMouseScroll(float hscroll, float vscroll);
         boolean onFling(float velocityX, float velocityY);
         boolean onScaleBegin(float focusX, float focusY);
         boolean onScale(float focusX, float focusY, float scale);
@@ -60,6 +63,23 @@ public class FilmStripGestureRecognizer {
         }
     }
 
+    public boolean onGenericMotionEvent(MotionEvent event) {
+        if ((event.getSource() & InputDevice.SOURCE_CLASS_POINTER) != 0) {
+            switch (event.getAction()) {
+                case MotionEvent.ACTION_SCROLL: {
+                    final float hscroll = event.getAxisValue(MotionEvent.AXIS_HSCROLL);
+                    final float vscroll = -event.getAxisValue(MotionEvent.AXIS_VSCROLL);
+
+                    if (hscroll != 0.0f || vscroll != 0.0f) {
+                        mListener.onMouseScroll(hscroll, vscroll);
+                    }
+                }
+            }
+        }
+
+        return true;
+    }
+
     private class MyGestureListener
                 extends GestureDetector.SimpleOnGestureListener {
         @Override
index 6b2b7f5..095da75 100644 (file)
@@ -30,6 +30,7 @@ import android.net.Uri;
 import android.os.Handler;
 import android.util.AttributeSet;
 import android.util.DisplayMetrics;
+import android.view.KeyEvent;
 import android.util.Log;
 import android.view.MotionEvent;
 import android.view.View;
@@ -64,6 +65,7 @@ public class FilmStripView extends ViewGroup implements BottomControlsListener {
     // Only check for intercepting touch events within first 500ms
     private static final int SWIPE_TIME_OUT = 500;
     private static final int DECELERATION_FACTOR = 4;
+    private static final float MOUSE_SCROLL_FACTOR = 128f;
 
     private CameraActivity mActivity;
     private FilmStripGestureRecognizer mGestureRecognizer;
@@ -1806,6 +1808,12 @@ public class FilmStripView extends ViewGroup implements BottomControlsListener {
         return true;
     }
 
+    @Override
+    public boolean onGenericMotionEvent(MotionEvent ev) {
+        mGestureRecognizer.onGenericMotionEvent(ev);
+        return true;
+    }
+
     private void updateViewItem(int itemID) {
         ViewItem item = mViewItem[itemID];
         if (item == null) {
@@ -2777,6 +2785,30 @@ public class FilmStripView extends ViewGroup implements BottomControlsListener {
         }
 
         @Override
+        public boolean onMouseScroll(float hscroll, float vscroll) {
+            final float scroll;
+
+            hscroll *= MOUSE_SCROLL_FACTOR;
+            vscroll *= MOUSE_SCROLL_FACTOR;
+
+            if (vscroll != 0f) {
+                scroll = vscroll;
+            } else {
+                scroll = hscroll;
+            }
+
+            if (inFullScreen()) {
+                onFling(-scroll, 0f);
+            } else if (mController.isZoomStarted()) {
+                onScroll(0f, 0f, hscroll, vscroll);
+            } else {
+                onScroll(0f, 0f, scroll, 0f);
+            }
+
+            return true;
+        }
+
+        @Override
         public boolean onFling(float velocityX, float velocityY) {
             final ViewItem currItem = mViewItem[mCurrentItem];
             if (currItem == null) {