summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/java/android/content/res/CompatibilityInfo.java15
-rw-r--r--core/java/android/view/SurfaceView.java60
-rw-r--r--core/java/android/view/ViewRoot.java2
-rw-r--r--services/java/com/android/server/WindowManagerService.java4
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