diff options
author | Android (Google) Code Review <android-gerrit@google.com> | 2009-07-27 12:05:44 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2009-07-27 12:05:44 -0700 |
commit | 2c3fc83ac5b267d6a551deb36b30064a2e617944 (patch) | |
tree | 2e47d6095e72bbcee19cbfa2a93eef311e944ef9 /graphics/java/android | |
parent | a9e3e7254446670b4649239f9ee6453e2e083b80 (diff) | |
parent | ef9fd18d90829ecbd37769cc05a8d5288aff821c (diff) | |
download | frameworks_base-2c3fc83ac5b267d6a551deb36b30064a2e617944.zip frameworks_base-2c3fc83ac5b267d6a551deb36b30064a2e617944.tar.gz frameworks_base-2c3fc83ac5b267d6a551deb36b30064a2e617944.tar.bz2 |
am ef9fd18d: Merge change 8616 into donut
Merge commit 'ef9fd18d90829ecbd37769cc05a8d5288aff821c'
* commit 'ef9fd18d90829ecbd37769cc05a8d5288aff821c':
Fiddle with default densities to try to sanitize the API.
Diffstat (limited to 'graphics/java/android')
-rw-r--r-- | graphics/java/android/graphics/Bitmap.java | 70 | ||||
-rw-r--r-- | graphics/java/android/graphics/Canvas.java | 47 |
2 files changed, 86 insertions, 31 deletions
diff --git a/graphics/java/android/graphics/Bitmap.java b/graphics/java/android/graphics/Bitmap.java index bb19229..eef1096 100644 --- a/graphics/java/android/graphics/Bitmap.java +++ b/graphics/java/android/graphics/Bitmap.java @@ -46,10 +46,29 @@ public final class Bitmap implements Parcelable { private boolean mRecycled; // Package-scoped for fast access. - /*package*/ int mDensity = DENSITY_NONE; + /*package*/ int mDensity = sDefaultDensity = getDefaultDensity(); private static volatile Matrix sScaleMatrix; + private static volatile int sDefaultDensity = -1; + + /** + * For backwards compatibility, allows the app layer to change the default + * density when running old apps. + * @hide + */ + public static void setDefaultDensity(int density) { + sDefaultDensity = density; + } + + /*package*/ static int getDefaultDensity() { + if (sDefaultDensity >= 0) { + return sDefaultDensity; + } + sDefaultDensity = DisplayMetrics.DENSITY_DEVICE; + return sDefaultDensity; + } + /** * @noinspection UnusedDeclaration */ @@ -72,9 +91,16 @@ public final class Bitmap implements Parcelable { /** * <p>Returns the density for this bitmap.</p> * - * <p>The default density scale is {@link #DENSITY_NONE}.</p> + * <p>The default density is the same density as the current display, + * unless the current application does not support different screen + * densities in which case it is + * {@link android.util.DisplayMetrics#DENSITY_DEFAULT}. Note that + * compatibility mode is determined by the application that was initially + * loaded into a process -- applications that share the same process should + * all have the same compatibility, or ensure they explicitly set the + * density of their bitmaps appropriately.</p> * - * @return A scaling factor of the default density (160) or {@link #DENSITY_NONE} + * @return A scaling factor of the default density or {@link #DENSITY_NONE} * if the scaling factor is unknown. * * @see #setDensity(int) @@ -272,7 +298,8 @@ public final class Bitmap implements Parcelable { * Tries to make a new bitmap based on the dimensions of this bitmap, * setting the new bitmap's config to the one specified, and then copying * this bitmap's pixels into the new bitmap. If the conversion is not - * supported, or the allocator fails, then this returns NULL. + * supported, or the allocator fails, then this returns NULL. The returned + * bitmap initially has the same density as the original. * * @param config The desired config for the resulting bitmap * @param isMutable True if the resulting bitmap should be mutable (i.e. @@ -281,7 +308,11 @@ public final class Bitmap implements Parcelable { */ public Bitmap copy(Config config, boolean isMutable) { checkRecycled("Can't copy a recycled bitmap"); - return nativeCopy(mNativeBitmap, config.nativeInt, isMutable); + Bitmap b = nativeCopy(mNativeBitmap, config.nativeInt, isMutable); + if (b != null) { + b.mDensity = mDensity; + } + return b; } public static Bitmap createScaledBitmap(Bitmap src, int dstWidth, @@ -316,7 +347,8 @@ public final class Bitmap implements Parcelable { /** * Returns an immutable bitmap from the source bitmap. The new bitmap may - * be the same object as source, or a copy may have been made. + * be the same object as source, or a copy may have been made. It is + * initialized with the same density as the original bitmap. */ public static Bitmap createBitmap(Bitmap src) { return createBitmap(src, 0, 0, src.getWidth(), src.getHeight()); @@ -325,7 +357,8 @@ public final class Bitmap implements Parcelable { /** * Returns an immutable bitmap from the specified subset of the source * bitmap. The new bitmap may be the same object as source, or a copy may - * have been made. + * have been made. It is + * initialized with the same density as the original bitmap. * * @param source The bitmap we are subsetting * @param x The x coordinate of the first pixel in source @@ -339,7 +372,8 @@ public final class Bitmap implements Parcelable { /** * Returns an immutable bitmap from subset of the source bitmap, - * transformed by the optional matrix. + * transformed by the optional matrix. It is + * initialized with the same density as the original bitmap. * * @param source The bitmap we are subsetting * @param x The x coordinate of the first pixel in source @@ -406,18 +440,20 @@ public final class Bitmap implements Parcelable { paint.setAntiAlias(true); } } - canvas.setBitmap(bitmap); - canvas.drawBitmap(source, srcR, dstR, paint); - + // The new bitmap was created from a known bitmap source so assume that // they use the same density bitmap.mDensity = source.mDensity; + + canvas.setBitmap(bitmap); + canvas.drawBitmap(source, srcR, dstR, paint); return bitmap; } /** - * Returns a mutable bitmap with the specified width and height. + * Returns a mutable bitmap with the specified width and height. Its + * initial density is as per {@link #getDensity}. * * @param width The width of the bitmap * @param height The height of the bitmap @@ -432,7 +468,8 @@ public final class Bitmap implements Parcelable { /** * Returns a immutable bitmap with the specified width and height, with each - * pixel value set to the corresponding value in the colors array. + * pixel value set to the corresponding value in the colors array. Its + * initial density is as per {@link #getDensity}. * * @param colors Array of {@link Color} used to initialize the pixels. * @param offset Number of values to skip before the first color in the @@ -466,7 +503,8 @@ public final class Bitmap implements Parcelable { /** * Returns a immutable bitmap with the specified width and height, with each - * pixel value set to the corresponding value in the colors array. + * pixel value set to the corresponding value in the colors array. Its + * initial density is as per {@link #getDensity}. * * @param colors Array of {@link Color} used to initialize the pixels. * This array must be at least as large as width * height. @@ -882,6 +920,9 @@ public final class Bitmap implements Parcelable { * -2, -2, so that drawing the alpha bitmap offset by (-2, -2) and then * drawing the original would result in the blur visually aligning with * the original. + * + * <p>The initial density of the returned bitmap is the same as the original's. + * * @param paint Optional paint used to modify the alpha values in the * resulting bitmap. Pass null for default behavior. * @param offsetXY Optional array that returns the X (index 0) and Y @@ -899,6 +940,7 @@ public final class Bitmap implements Parcelable { if (bm == null) { throw new RuntimeException("Failed to extractAlpha on Bitmap"); } + bm.mDensity = mDensity; return bm; } diff --git a/graphics/java/android/graphics/Canvas.java b/graphics/java/android/graphics/Canvas.java index 8ecbfbd..bc2e42e 100644 --- a/graphics/java/android/graphics/Canvas.java +++ b/graphics/java/android/graphics/Canvas.java @@ -49,7 +49,7 @@ public class Canvas { private DrawFilter mDrawFilter; // Package-scoped for quick access. - /*package*/ int mDensity = DisplayMetrics.DENSITY_DEFAULT; + /*package*/ int mDensity = Bitmap.DENSITY_NONE; // Used by native code @SuppressWarnings({"UnusedDeclaration"}) @@ -57,7 +57,9 @@ public class Canvas { /** * Construct an empty raster canvas. Use setBitmap() to specify a bitmap to - * draw into. + * draw into. The initial target density is {@link Bitmap#DENSITY_NONE}; + * this will typically be replaced when a target bitmap is set for the + * canvas. */ public Canvas() { // 0 means no native bitmap @@ -67,6 +69,9 @@ public class Canvas { /** * Construct a canvas with the specified bitmap to draw into. The bitmap * must be mutable. + * + * <p>The initial target density of the canvas is the same as the given + * bitmap's density. * * @param bitmap Specifies a mutable bitmap for the canvas to draw into. */ @@ -78,9 +83,7 @@ public class Canvas { throwIfRecycled(bitmap); mNativeCanvas = initRaster(bitmap.ni()); mBitmap = bitmap; - final int density = bitmap.mDensity; - mDensity = density == Bitmap.DENSITY_NONE - ? DisplayMetrics.DENSITY_DEFAULT : density; + mDensity = bitmap.mDensity; } /*package*/ Canvas(int nativeCanvas) { @@ -88,6 +91,7 @@ public class Canvas { throw new IllegalStateException(); } mNativeCanvas = nativeCanvas; + mDensity = Bitmap.getDefaultDensity(); } /** @@ -96,10 +100,14 @@ public class Canvas { * be supported in this mode (e.g. some GL implementations may not support * antialiasing or certain effects like ColorMatrix or certain Xfermodes). * However, no exception will be thrown in those cases. + * + * <p>The initial target density of the canvas is the same as the initial + * density of bitmaps as per {@link Bitmap#getDensity() Bitmap.getDensity()}. */ public Canvas(GL gl) { mNativeCanvas = initGL(); mGL = gl; + mDensity = Bitmap.getDefaultDensity(); } /** @@ -120,9 +128,13 @@ public class Canvas { } /** - * Specify a bitmap for the canvas to draw into. + * Specify a bitmap for the canvas to draw into. As a side-effect, also + * updates the canvas's target density to match that of the bitmap. * * @param bitmap Specifies a mutable bitmap for the canvas to draw into. + * + * @see #setDensity(int) + * @see #getDensity() */ public void setBitmap(Bitmap bitmap) { if (!bitmap.isMutable()) { @@ -135,9 +147,7 @@ public class Canvas { native_setBitmap(mNativeCanvas, bitmap.ni()); mBitmap = bitmap; - final int density = bitmap.mDensity; - mDensity = density == Bitmap.DENSITY_NONE - ? DisplayMetrics.DENSITY_DEFAULT : density; + mDensity = bitmap.mDensity; } /** @@ -176,12 +186,12 @@ public class Canvas { public native int getHeight(); /** - * <p>Returns the density for this Canvas' backing bitmap.</p> - * - * <p>The default density scale is {@link Bitmap#DENSITY_NONE}.</p> + * <p>Returns the target density of the canvas. The default density is + * derived from the density of its backing bitmap, or + * {@link Bitmap#DENSITY_NONE} if there is not one.</p> * - * @return A scaling factor of the default density (160dpi) or - * {@link Bitmap#DENSITY_NONE} if the scaling factor is unknown. + * @return Returns the current target density of the canvas, which is used + * to determine the scaling factor when drawing a bitmap into it. * * @see #setDensity(int) * @see Bitmap#getDensity() @@ -191,10 +201,13 @@ public class Canvas { } /** - * <p>Specifies the density for this Canvas' backing bitmap. + * <p>Specifies the density for this Canvas' backing bitmap. This modifies + * the target density of the canvas itself, as well as the density of its + * backing bitmap via {@link Bitmap#setDensity(int) Bitmap.setDensity(int)}. * - * @param density The density scaling factor to use with this bitmap or - * {@link Bitmap#DENSITY_NONE} if the factor is unknown. + * @param density The new target density of the canvas, which is used + * to determine the scaling factor when drawing a bitmap into it. Use + * {@link Bitmap#DENSITY_NONE} to disable bitmap scaling. * * @see #getDensity() * @see Bitmap#setDensity(int) |