* Adjust canvas size under compatibility mode.
This commit is contained in:
@@ -19,6 +19,7 @@ package android.view;
|
|||||||
import android.graphics.*;
|
import android.graphics.*;
|
||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
import android.os.Parcel;
|
import android.os.Parcel;
|
||||||
|
import android.util.DisplayMetrics;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -131,6 +132,10 @@ public class Surface implements Parcelable {
|
|||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
private Canvas mCanvas;
|
private Canvas mCanvas;
|
||||||
|
|
||||||
|
// The display metrics used to provide the pseudo canvas size for applications
|
||||||
|
// running in compatibility mode. This is set to null for regular mode.
|
||||||
|
private DisplayMetrics mDisplayMetrics;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Exception thrown when a surface couldn't be created or resized
|
* Exception thrown when a surface couldn't be created or resized
|
||||||
*/
|
*/
|
||||||
@@ -167,7 +172,23 @@ public class Surface implements Parcelable {
|
|||||||
* {@hide}
|
* {@hide}
|
||||||
*/
|
*/
|
||||||
public Surface() {
|
public Surface() {
|
||||||
mCanvas = new Canvas();
|
mCanvas = new Canvas() {
|
||||||
|
@Override
|
||||||
|
public int getWidth() {
|
||||||
|
return mDisplayMetrics == null ? super.getWidth() : mDisplayMetrics.widthPixels;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public int getHeight() {
|
||||||
|
return mDisplayMetrics == null ? super.getHeight() : mDisplayMetrics.heightPixels;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the display metrics used to provide canva's width/height in comaptibility mode.
|
||||||
|
*/
|
||||||
|
void setCompatibleDisplayMetrics(DisplayMetrics metrics) {
|
||||||
|
mDisplayMetrics = metrics;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
package android.view;
|
package android.view;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.res.Resources;
|
||||||
import android.content.res.CompatibilityInfo.Translator;
|
import android.content.res.CompatibilityInfo.Translator;
|
||||||
import android.graphics.Canvas;
|
import android.graphics.Canvas;
|
||||||
import android.graphics.PixelFormat;
|
import android.graphics.PixelFormat;
|
||||||
@@ -301,6 +302,11 @@ public class SurfaceView extends View {
|
|||||||
|
|
||||||
float appScale = mTranslator == null ? 1.0f : mTranslator.applicationScale;
|
float appScale = mTranslator == null ? 1.0f : mTranslator.applicationScale;
|
||||||
|
|
||||||
|
Resources res = getContext().getResources();
|
||||||
|
if (mTranslator != null || !res.getCompatibilityInfo().supportsScreen()) {
|
||||||
|
mSurface.setCompatibleDisplayMetrics(res.getDisplayMetrics());
|
||||||
|
}
|
||||||
|
|
||||||
int myWidth = mRequestedWidth;
|
int myWidth = mRequestedWidth;
|
||||||
if (myWidth <= 0) myWidth = getWidth();
|
if (myWidth <= 0) myWidth = getWidth();
|
||||||
int myHeight = mRequestedHeight;
|
int myHeight = mRequestedHeight;
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ import android.view.inputmethod.InputMethodManager;
|
|||||||
import android.widget.Scroller;
|
import android.widget.Scroller;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.content.res.CompatibilityInfo;
|
import android.content.res.CompatibilityInfo;
|
||||||
|
import android.content.res.Resources;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.app.ActivityManagerNative;
|
import android.app.ActivityManagerNative;
|
||||||
import android.Manifest;
|
import android.Manifest;
|
||||||
@@ -386,10 +387,14 @@ public final class ViewRoot extends Handler implements ViewParent,
|
|||||||
mView = view;
|
mView = view;
|
||||||
mWindowAttributes.copyFrom(attrs);
|
mWindowAttributes.copyFrom(attrs);
|
||||||
attrs = mWindowAttributes;
|
attrs = mWindowAttributes;
|
||||||
|
Resources resources = mView.getContext().getResources();
|
||||||
CompatibilityInfo compatibilityInfo =
|
CompatibilityInfo compatibilityInfo = resources.getCompatibilityInfo();
|
||||||
mView.getContext().getResources().getCompatibilityInfo();
|
|
||||||
mTranslator = compatibilityInfo.getTranslator(attrs);
|
mTranslator = compatibilityInfo.getTranslator(attrs);
|
||||||
|
|
||||||
|
if (mTranslator != null || !compatibilityInfo.supportsScreen()) {
|
||||||
|
mSurface.setCompatibleDisplayMetrics(resources.getDisplayMetrics());
|
||||||
|
}
|
||||||
|
|
||||||
boolean restore = false;
|
boolean restore = false;
|
||||||
if (attrs != null && mTranslator != null) {
|
if (attrs != null && mTranslator != null) {
|
||||||
restore = true;
|
restore = true;
|
||||||
|
|||||||
Reference in New Issue
Block a user