Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 98a44df4 authored by Android (Google) Code Review's avatar Android (Google) Code Review
Browse files

Merge change 8235 into donut

* changes:
  * Revert the change that I introduced while refactroing in SurfaceView#dispatchTouchEvent * Don't scale back the event if the canvas is used in SurfaceView.
parents 0b1a255f 424f6685
Loading
Loading
Loading
Loading
+27 −16
Original line number Diff line number Diff line
@@ -141,6 +141,13 @@ public class SurfaceView extends View {
    final Rect mSurfaceFrame = new Rect();
    private Translator mTranslator;
    
    // A flag to indicate that the Canvas has to be scaled
    private boolean mScaleCanvas = false;
    // A flag to indicate that the Canvas is in use and being scaled.
    // This may remain to be false even if mScaleCanvas is true if the applicatio
    // does not use the canvas (such as GLSurfaceView, VideoView).
    private boolean mCanvasScaled = false;
    
    public SurfaceView(Context context) {
        super(context);
        setWillNotDraw(true);
@@ -254,18 +261,21 @@ public class SurfaceView extends View {

    @Override
    public boolean dispatchTouchEvent(MotionEvent event) {
        // SurfaceView uses pre-scaled size unless fixed size is requested. This hook
        // scales the event back to the pre-scaled coordinates for such surface.
        if (mScaled) {
        if (mTranslator == null || mCanvasScaled) {
            // Use the event as is if no scaling is required, or the surface's canvas
            // is scaled too.
            return super.dispatchTouchEvent(event);
        } else {
            // The surface is in native size, so we need to scale the event
            // back to native location.
            MotionEvent scaledBack = MotionEvent.obtain(event);
            mTranslator.translateEventInScreenToAppWindow(event);
            // scale back to original
            scaledBack.scale(mTranslator.applicationScale);
            try {
                return super.dispatchTouchEvent(scaledBack);
            } finally {
                scaledBack.recycle();
            }
        } else {
            return super.dispatchTouchEvent(event);
        }
    }

@@ -291,8 +301,6 @@ public class SurfaceView extends View {
        mWindowType = type;
    }

    boolean mScaled = false;
    
    private void updateWindow(boolean force) {
        if (!mHaveFrame) {
            return;
@@ -312,14 +320,15 @@ public class SurfaceView extends View {
        int myHeight = mRequestedHeight;
        if (myHeight <= 0) myHeight = getHeight();

        // Use original size if the app specified the size of the view,
        // and let the flinger to scale up.
        // Use requested size if the app specified the size of the view
        // and let the flinger to scale up. Otherwise, use the native size
        // (* appScale) and assume the application can handle it.
        if (mRequestedWidth <= 0 && mTranslator != null) {
            myWidth = (int) (myWidth * appScale + 0.5f);
            myHeight = (int) (myHeight * appScale + 0.5f);
            mScaled = true;
            mScaleCanvas = true;
        } else {
            mScaled = false;
            mScaleCanvas = false;
        }

        getLocationInWindow(mLocation);
@@ -641,7 +650,9 @@ public class SurfaceView extends View {
            if (localLOGV) Log.i(TAG, "Returned canvas: " + c);
            if (c != null) {
                mLastLockTime = SystemClock.uptimeMillis();
                if (mScaled) {
                if (mScaleCanvas) {
                    // When the canvas is scaled, don't scale back the event's location.
                    mCanvasScaled = true;
                    mSaveCount = c.save();
                    mTranslator.translateCanvas(c);
                }
@@ -667,7 +678,7 @@ public class SurfaceView extends View {
        }

        public void unlockCanvasAndPost(Canvas canvas) {
            if (mScaled) {
            if (mCanvasScaled) {
                canvas.restoreToCount(mSaveCount);
            }
            mSurface.unlockCanvasAndPost(canvas);