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:
parent
3c9a0c04f2
commit
2175f1b1b7
@ -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);
|
||||
|
@ -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) {}
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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.
|
||||
|
@ -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;
|
Loading…
Reference in New Issue
Block a user