diff options
-rw-r--r-- | core/java/android/content/res/CompatibilityInfo.java | 15 | ||||
-rw-r--r-- | core/java/android/view/SurfaceView.java | 60 | ||||
-rw-r--r-- | core/java/android/view/ViewRoot.java | 2 | ||||
-rw-r--r-- | services/java/com/android/server/WindowManagerService.java | 4 |
4 files changed, 17 insertions, 64 deletions
diff --git a/core/java/android/content/res/CompatibilityInfo.java b/core/java/android/content/res/CompatibilityInfo.java index e2abfd1..50faf57 100644 --- a/core/java/android/content/res/CompatibilityInfo.java +++ b/core/java/android/content/res/CompatibilityInfo.java @@ -228,20 +228,11 @@ public class CompatibilityInfo { } /** - * Returns the translator which can translate the coordinates of the window. - * There are five different types of Translator. + * Returns the translator which translates the coordinates in compatibility mode. * @param params the window's parameter */ - public Translator getTranslator(WindowManager.LayoutParams params) { - if ( (mCompatibilityFlags & SCALING_EXPANDABLE_MASK) - == (EXPANDABLE|LARGE_SCREENS)) { - if (DBG) Log.d(TAG, "no translation required"); - return null; - } - if (!isScalingRequired()) { - return null; - } - return new Translator(); + public Translator getTranslator() { + return isScalingRequired() ? new Translator() : null; } /** diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java index ae5968e..4546572 100644 --- a/core/java/android/view/SurfaceView.java +++ b/core/java/android/view/SurfaceView.java @@ -142,13 +142,6 @@ 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); @@ -261,26 +254,6 @@ public class SurfaceView extends View { } @Override - public boolean dispatchTouchEvent(MotionEvent event) { - 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); - // scale back to original - scaledBack.scale(mTranslator.applicationScale); - try { - return super.dispatchTouchEvent(scaledBack); - } finally { - scaledBack.recycle(); - } - } - } - - @Override protected void dispatchDraw(Canvas canvas) { // if SKIP_DRAW is cleared, draw() has already punched a hole if ((mPrivateFlags & SKIP_DRAW) == SKIP_DRAW) { @@ -309,8 +282,6 @@ public class SurfaceView extends View { ViewRoot viewRoot = (ViewRoot) getRootView().getParent(); mTranslator = viewRoot.mTranslator; - float appScale = mTranslator == null ? 1.0f : mTranslator.applicationScale; - Resources res = getContext().getResources(); if (mTranslator != null || !res.getCompatibilityInfo().supportsScreen()) { mSurface.setCompatibleDisplayMetrics(res.getDisplayMetrics(), mTranslator); @@ -321,17 +292,6 @@ public class SurfaceView extends View { int myHeight = mRequestedHeight; if (myHeight <= 0) myHeight = getHeight(); - // 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); - mScaleCanvas = true; - } else { - mScaleCanvas = false; - } - getLocationInWindow(mLocation); final boolean creating = mWindow == null; final boolean formatChanged = mFormat != mRequestedFormat; @@ -404,10 +364,17 @@ public class SurfaceView extends View { if (localLOGV) Log.i(TAG, "New surface: " + mSurface + ", vis=" + visible + ", frame=" + mWinFrame); + mSurfaceFrame.left = 0; mSurfaceFrame.top = 0; - mSurfaceFrame.right = mWinFrame.width(); - mSurfaceFrame.bottom = mWinFrame.height(); + if (mTranslator == null) { + mSurfaceFrame.right = mWinFrame.width(); + mSurfaceFrame.bottom = mWinFrame.height(); + } else { + float appInvertedScale = mTranslator.applicationInvertedScale; + mSurfaceFrame.right = (int) (mWinFrame.width() * appInvertedScale + 0.5f); + mSurfaceFrame.bottom = (int) (mWinFrame.height() * appInvertedScale + 0.5f); + } mSurfaceLock.unlock(); try { @@ -651,12 +618,6 @@ public class SurfaceView extends View { if (localLOGV) Log.i(TAG, "Returned canvas: " + c); if (c != null) { mLastLockTime = SystemClock.uptimeMillis(); - if (mScaleCanvas) { - // When the canvas is scaled, don't scale back the event's location. - mCanvasScaled = true; - mSaveCount = c.save(); - mTranslator.translateCanvas(c); - } return c; } @@ -679,9 +640,6 @@ public class SurfaceView extends View { } public void unlockCanvasAndPost(Canvas canvas) { - if (mCanvasScaled) { - canvas.restoreToCount(mSaveCount); - } mSurface.unlockCanvasAndPost(canvas); mSurfaceLock.unlock(); } diff --git a/core/java/android/view/ViewRoot.java b/core/java/android/view/ViewRoot.java index 7429a89..0003eb7 100644 --- a/core/java/android/view/ViewRoot.java +++ b/core/java/android/view/ViewRoot.java @@ -396,7 +396,7 @@ public final class ViewRoot extends Handler implements ViewParent, attrs = mWindowAttributes; Resources resources = mView.getContext().getResources(); CompatibilityInfo compatibilityInfo = resources.getCompatibilityInfo(); - mTranslator = compatibilityInfo.getTranslator(attrs); + mTranslator = compatibilityInfo.getTranslator(); if (mTranslator != null || !compatibilityInfo.supportsScreen()) { mSurface.setCompatibleDisplayMetrics(resources.getDisplayMetrics(), diff --git a/services/java/com/android/server/WindowManagerService.java b/services/java/com/android/server/WindowManagerService.java index b43acaf..e1804a7 100644 --- a/services/java/com/android/server/WindowManagerService.java +++ b/services/java/com/android/server/WindowManagerService.java @@ -6886,6 +6886,10 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo pw.print(mOrientationChanging); pw.print(" mAppFreezing="); pw.println(mAppFreezing); } + if (mHScale != 1 || mVScale != 1) { + pw.print(prefix); pw.print("mHScale="); pw.print(mHScale); + pw.print(" mVScale="); pw.println(mVScale); + } } @Override |