SkAR Java: minor refactoring to TapHelper (now GestureHelper)

Bug: skia:
Change-Id: I1983c6cb1727e86fec91a0c9a5706f26070b1b49
Reviewed-on: https://skia-review.googlesource.com/144021
Reviewed-by: Mike Reed <reed@google.com>
This commit is contained in:
ziadb 2018-07-27 11:51:34 -04:00 committed by Ziad Ben Hadj-Alouane
parent 3c9a0c04f2
commit 2175f1b1b7
5 changed files with 29 additions and 21 deletions

View File

@ -35,9 +35,11 @@ public class PaintUtil {
*/
public static ColorFilter createLightCorrectionColorFilter(float[] colorCorr) {
float[] colorCorrCopy = Arrays.copyOf(colorCorr, 4);
for (int i = 0; i < 3; i++) {
colorCorrCopy[i] *= colorCorrCopy[3] / MIDDLE_GRAY_GAMMA;
}
ColorMatrix m = new ColorMatrix();
m.setScale(colorCorrCopy[0], colorCorrCopy[1], colorCorrCopy[2], 1);
return new ColorMatrixColorFilter(m);

View File

@ -57,6 +57,5 @@ public class CanvasARSurfaceView extends SurfaceView implements SurfaceHolder.Ca
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {}
}

View File

@ -19,17 +19,14 @@ package com.google.skar.examples.helloskar.app;
import android.graphics.Color;
import android.graphics.Path;
import android.graphics.PointF;
import android.util.Log;
import com.google.skar.examples.helloskar.helpers.TapHelper;
import com.google.skar.examples.helloskar.helpers.GestureHelper;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.ArrayList;
public class FingerPainting {
public static class BuiltPath {
public Path path;
@ -87,7 +84,7 @@ public class FingerPainting {
* @param holdTap ScrollEvent associated with the hit test that calls this function
* @return true if point was computed and added. False otherwise.
*/
public boolean computeNextPoint(float[] hitLocation, TapHelper.ScrollEvent holdTap) {
public boolean computeNextPoint(float[] hitLocation, GestureHelper.ScrollEvent holdTap) {
if (isEmpty()) {
// If finger painting is empty, then first point is origin. Model matrix
// of the finger painting is the model matrix of the first point

View File

@ -57,8 +57,8 @@ import com.google.ar.core.examples.java.helloskar.R;
import com.google.skar.examples.helloskar.helpers.CameraPermissionHelper;
import com.google.skar.examples.helloskar.helpers.DisplayRotationHelper;
import com.google.skar.examples.helloskar.helpers.FullScreenHelper;
import com.google.skar.examples.helloskar.helpers.GestureHelper;
import com.google.skar.examples.helloskar.helpers.SnackbarHelper;
import com.google.skar.examples.helloskar.helpers.TapHelper;
import com.google.skar.examples.helloskar.rendering.BackgroundRenderer;
import com.google.skar.examples.helloskar.rendering.DrawManager;
@ -105,7 +105,7 @@ public class HelloCanvasAR extends AppCompatActivity implements GLSurfaceView.Re
private boolean installRequested;
private final SnackbarHelper messageSnackbarHelper = new SnackbarHelper();
private DisplayRotationHelper displayRotationHelper;
private TapHelper tapHelper;
private GestureHelper tapHelper;
// Temporary matrix allocated here to reduce number of allocations for each frame.
private final float[] anchorMatrix = new float[16];
@ -138,7 +138,7 @@ public class HelloCanvasAR extends AppCompatActivity implements GLSurfaceView.Re
holder = arSurfaceView.getHolder();
// Set up tap listener.
tapHelper = new TapHelper(this);
tapHelper = new GestureHelper(this);
glSurfaceView.setOnTouchListener(tapHelper);
// Set up renderer.
@ -439,9 +439,9 @@ public class HelloCanvasAR extends AppCompatActivity implements GLSurfaceView.Re
*/
private void handleHoldTaps(Frame frame, Camera camera) {
// Building finger painting
TapHelper.ScrollEvent holdTap = tapHelper.holdPoll();
GestureHelper.ScrollEvent holdTap = tapHelper.holdPoll();
if (holdTap != null && camera.getTrackingState() == TrackingState.TRACKING) {
for (HitResult hit : frame.hitTest(holdTap.e)) {
for (HitResult hit : frame.hitTest(holdTap.event)) {
// Check if any plane was hit, and if it was hit inside the plane polygon
Trackable trackable = hit.getTrackable();
// Creates an anchor if a plane or an oriented point was hit.

View File

@ -25,32 +25,35 @@ import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
/**
* Helper to detect taps using Android GestureDetector, and pass the taps between UI thread and
* Helper to detect gestures using Android GestureDetector, and pass the taps between UI thread and
* render thread.
*/
public final class TapHelper implements OnTouchListener {
public final class GestureHelper implements OnTouchListener {
private final GestureDetector gestureDetector;
private final BlockingQueue<MotionEvent> queuedSingleTaps = new ArrayBlockingQueue<>(16);
private final BlockingQueue<ScrollEvent> queuedFingerHold = new ArrayBlockingQueue<>(16);
private boolean isScrolling = false;
private boolean previousScroll = true;
// Struct holding a MotionEvent obtained from onScroll() callbacks, and a boolean evaluating to
// true if the MotionEven was the start of the scrolling motion
public static class ScrollEvent {
public MotionEvent e;
public MotionEvent event;
public boolean isStartOfScroll;
public ScrollEvent(MotionEvent e, boolean isStartOfScroll) {
this.e = e;
this.event = e;
this.isStartOfScroll = isStartOfScroll;
}
}
/**
* Creates the tap helper.
* Creates the gesture helper.
*
* @param context the application's context.
*/
public TapHelper(Context context) {
public GestureHelper(Context context) {
gestureDetector =
new GestureDetector(
context,
@ -63,13 +66,15 @@ public final class TapHelper implements OnTouchListener {
}
@Override
public boolean onScroll (MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
public boolean onScroll (MotionEvent e1, MotionEvent e2,
float distanceX, float distanceY) {
// Queue motion events when scrolling
if (e2.getPointerCount() == 1 && e1.getPointerCount() == 1) {
previousScroll = isScrolling;
isScrolling = true;
queuedFingerHold.offer(new ScrollEvent(e2, isStartedScrolling()));
queuedFingerHold.offer(new ScrollEvent(e2,
isStartedScrolling()));
return true;
}
@ -93,13 +98,18 @@ public final class TapHelper implements OnTouchListener {
return queuedSingleTaps.poll();
}
/**
* Polls for a scrolling motion.
*
* @return if a scrolling event was queued, a ScrollEvent for the gesture. Otherwise null
*/
public ScrollEvent holdPoll() { return queuedFingerHold.poll(); }
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
boolean val = gestureDetector.onTouchEvent(motionEvent);
// If finger is up + is scrolling: don't scroll anymore, and empty Touch Hold queue
// If finger is up + is scrolling: don't scroll anymore, and empty touch hold queue
if (motionEvent.getAction() == MotionEvent.ACTION_UP && isScrolling) {
previousScroll = true;
isScrolling = false;