From: Alan Newberger Date: Fri, 19 Sep 2014 23:37:07 +0000 (+0000) Subject: Merge "Add scrolling support with a mouse wheel" X-Git-Tag: android-x86-6.0-r3~68^2~27^2~45^2~1 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=d0927687682a7ad433b23d25e87379177bb8edc7;hp=ece4866dc575b956801f6dab2d6c4923e272c5fa;p=android-x86%2Fpackages-apps-Camera2.git Merge "Add scrolling support with a mouse wheel" --- diff --git a/src/com/android/camera/ui/FilmStripGestureRecognizer.java b/src/com/android/camera/ui/FilmStripGestureRecognizer.java index e9ac1c76e..6b65d304c 100644 --- a/src/com/android/camera/ui/FilmStripGestureRecognizer.java +++ b/src/com/android/camera/ui/FilmStripGestureRecognizer.java @@ -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 diff --git a/src/com/android/camera/ui/FilmStripView.java b/src/com/android/camera/ui/FilmStripView.java index 6b2b7f5e0..095da75ad 100644 --- a/src/com/android/camera/ui/FilmStripView.java +++ b/src/com/android/camera/ui/FilmStripView.java @@ -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) {