am 8cae124a: Various cleanup around resources and nine-patches.

Merge commit '8cae124af2142687a6833dbaab8a43df6dd67b43' into eclair-plus-aosp

* commit '8cae124af2142687a6833dbaab8a43df6dd67b43':
  Various cleanup around resources and nine-patches.
This commit is contained in:
Dianne Hackborn
2009-09-11 13:47:56 -07:00
committed by Android Git Automerger
6 changed files with 63 additions and 27 deletions

View File

@@ -24,7 +24,6 @@ import android.util.TypedValue;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.Locale;
/** /**
* Provides access to an application's raw asset files; see {@link Resources} * Provides access to an application's raw asset files; see {@link Resources}

View File

@@ -66,8 +66,6 @@ public class Resources {
= new SparseArray<ColorStateList>(); = new SparseArray<ColorStateList>();
private static boolean mPreloaded; private static boolean mPreloaded;
private final LongSparseArray<Drawable.ConstantState> mPreloadedDrawables;
/*package*/ final TypedValue mTmpValue = new TypedValue(); /*package*/ final TypedValue mTmpValue = new TypedValue();
// These are protected by the mTmpValue lock. // These are protected by the mTmpValue lock.
@@ -158,11 +156,6 @@ public class Resources {
} }
updateConfiguration(config, metrics); updateConfiguration(config, metrics);
assets.ensureStringBlocks(); assets.ensureStringBlocks();
if (mCompatibilityInfo.isScalingRequired()) {
mPreloadedDrawables = emptySparseArray();
} else {
mPreloadedDrawables = sPreloadedDrawables;
}
} }
/** /**
@@ -1669,7 +1662,7 @@ public class Resources {
return dr; return dr;
} }
Drawable.ConstantState cs = mPreloadedDrawables.get(key); Drawable.ConstantState cs = sPreloadedDrawables.get(key);
if (cs != null) { if (cs != null) {
dr = cs.newDrawable(); dr = cs.newDrawable();
} else { } else {
@@ -1976,7 +1969,6 @@ public class Resources {
mMetrics.setToDefaults(); mMetrics.setToDefaults();
updateConfiguration(null, null); updateConfiguration(null, null);
mAssets.ensureStringBlocks(); mAssets.ensureStringBlocks();
mPreloadedDrawables = sPreloadedDrawables;
mCompatibilityInfo = CompatibilityInfo.DEFAULT_COMPATIBILITY_INFO; mCompatibilityInfo = CompatibilityInfo.DEFAULT_COMPATIBILITY_INFO;
} }
} }

View File

@@ -6038,16 +6038,23 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
* some form of this public, but should think about the API. * some form of this public, but should think about the API.
*/ */
Bitmap createSnapshot(Bitmap.Config quality, int backgroundColor) { Bitmap createSnapshot(Bitmap.Config quality, int backgroundColor) {
final int width = mRight - mLeft; int width = mRight - mLeft;
final int height = mBottom - mTop; int height = mBottom - mTop;
Bitmap bitmap = Bitmap.createBitmap(width, height, quality); final AttachInfo attachInfo = mAttachInfo;
final float scale = attachInfo.mApplicationScale;
width = (int) ((width * scale) + 0.5f);
height = (int) ((height * scale) + 0.5f);
Bitmap bitmap = Bitmap.createBitmap(width > 0 ? width : 1,
height > 0 ? height : 1, quality);
if (bitmap == null) { if (bitmap == null) {
throw new OutOfMemoryError(); throw new OutOfMemoryError();
} }
bitmap.setDensity(getResources().getDisplayMetrics().densityDpi);
Canvas canvas; Canvas canvas;
final AttachInfo attachInfo = mAttachInfo;
if (attachInfo != null) { if (attachInfo != null) {
canvas = attachInfo.mCanvas; canvas = attachInfo.mCanvas;
if (canvas == null) { if (canvas == null) {
@@ -6070,6 +6077,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
computeScroll(); computeScroll();
final int restoreCount = canvas.save(); final int restoreCount = canvas.save();
canvas.scale(scale, scale);
canvas.translate(-mScrollX, -mScrollY); canvas.translate(-mScrollX, -mScrollY);
// Temporarily remove the dirty mask // Temporarily remove the dirty mask

View File

@@ -1,4 +1,25 @@
/*
**
** Copyright 2006, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
#define LOG_TAG "9patch"
#define LOG_NDEBUG 1
#include <utils/ResourceTypes.h> #include <utils/ResourceTypes.h>
#include <utils/Log.h>
#include "SkCanvas.h" #include "SkCanvas.h"
#include "SkRegion.h" #include "SkRegion.h"
@@ -62,6 +83,9 @@ public:
if (destDensity == srcDensity || destDensity == 0 if (destDensity == srcDensity || destDensity == 0
|| srcDensity == 0) { || srcDensity == 0) {
LOGV("Drawing unscaled 9-patch: (%g,%g)-(%g,%g)",
SkScalarToFloat(bounds.fLeft), SkScalarToFloat(bounds.fTop),
SkScalarToFloat(bounds.fRight), SkScalarToFloat(bounds.fBottom));
NinePatch_Draw(canvas, bounds, *bitmap, *chunk, paint, NULL); NinePatch_Draw(canvas, bounds, *bitmap, *chunk, paint, NULL);
} else { } else {
canvas->save(); canvas->save();
@@ -74,6 +98,11 @@ public:
bounds.fBottom = SkScalarDiv(bounds.fBottom-bounds.fTop, scale); bounds.fBottom = SkScalarDiv(bounds.fBottom-bounds.fTop, scale);
bounds.fLeft = bounds.fTop = 0; bounds.fLeft = bounds.fTop = 0;
LOGV("Drawing scaled 9-patch: (%g,%g)-(%g,%g) srcDensity=%d destDensity=%d",
SkScalarToFloat(bounds.fLeft), SkScalarToFloat(bounds.fTop),
SkScalarToFloat(bounds.fRight), SkScalarToFloat(bounds.fBottom),
srcDensity, destDensity);
NinePatch_Draw(canvas, bounds, *bitmap, *chunk, paint, NULL); NinePatch_Draw(canvas, bounds, *bitmap, *chunk, paint, NULL);
canvas->restore(); canvas->restore();

View File

@@ -16,8 +16,10 @@
*/ */
#define LOG_TAG "NinePatch" #define LOG_TAG "NinePatch"
#define LOG_NDEBUG 1
#include <utils/ResourceTypes.h> #include <utils/ResourceTypes.h>
#include <utils/Log.h>
#include "SkBitmap.h" #include "SkBitmap.h"
#include "SkCanvas.h" #include "SkCanvas.h"
@@ -25,7 +27,7 @@
#include "SkPaint.h" #include "SkPaint.h"
#include "SkUnPreMultiply.h" #include "SkUnPreMultiply.h"
#define USE_TRACEx #define USE_TRACE
#ifdef USE_TRACE #ifdef USE_TRACE
static bool gTrace; static bool gTrace;
@@ -130,10 +132,10 @@ void NinePatch_Draw(SkCanvas* canvas, const SkRect& bounds,
SkASSERT(canvas || outRegion); SkASSERT(canvas || outRegion);
#if 0 #ifdef USE_TRACE
if (canvas) { if (canvas) {
const SkMatrix& m = canvas->getTotalMatrix(); const SkMatrix& m = canvas->getTotalMatrix();
SkDebugf("ninepatch [%g %g %g] [%g %g %g]\n", LOGV("ninepatch [%g %g %g] [%g %g %g]\n",
SkScalarToFloat(m[0]), SkScalarToFloat(m[1]), SkScalarToFloat(m[2]), SkScalarToFloat(m[0]), SkScalarToFloat(m[1]), SkScalarToFloat(m[2]),
SkScalarToFloat(m[3]), SkScalarToFloat(m[4]), SkScalarToFloat(m[5])); SkScalarToFloat(m[3]), SkScalarToFloat(m[4]), SkScalarToFloat(m[5]));
} }
@@ -141,10 +143,10 @@ void NinePatch_Draw(SkCanvas* canvas, const SkRect& bounds,
#ifdef USE_TRACE #ifdef USE_TRACE
if (gTrace) { if (gTrace) {
SkDEBUGF(("======== ninepatch bounds [%g %g]\n", SkScalarToFloat(bounds.width()), SkScalarToFloat(bounds.height()))); LOGV("======== ninepatch bounds [%g %g]\n", SkScalarToFloat(bounds.width()), SkScalarToFloat(bounds.height()));
SkDEBUGF(("======== ninepatch paint bm [%d,%d]\n", bitmap.width(), bitmap.height())); LOGV("======== ninepatch paint bm [%d,%d]\n", bitmap.width(), bitmap.height());
SkDEBUGF(("======== ninepatch xDivs [%d,%d]\n", chunk.xDivs[0], chunk.xDivs[1])); LOGV("======== ninepatch xDivs [%d,%d]\n", chunk.xDivs[0], chunk.xDivs[1]);
SkDEBUGF(("======== ninepatch yDivs [%d,%d]\n", chunk.yDivs[0], chunk.yDivs[1])); LOGV("======== ninepatch yDivs [%d,%d]\n", chunk.yDivs[0], chunk.yDivs[1]);
} }
#endif #endif
@@ -153,7 +155,7 @@ void NinePatch_Draw(SkCanvas* canvas, const SkRect& bounds,
(paint && paint->getXfermode() == NULL && paint->getAlpha() == 0)) (paint && paint->getXfermode() == NULL && paint->getAlpha() == 0))
{ {
#ifdef USE_TRACE #ifdef USE_TRACE
if (gTrace) SkDEBUGF(("======== abort ninepatch draw\n")); if (gTrace) LOGV("======== abort ninepatch draw\n");
#endif #endif
return; return;
} }
@@ -198,8 +200,8 @@ void NinePatch_Draw(SkCanvas* canvas, const SkRect& bounds,
} }
int numFixedYPixelsRemaining = bitmapHeight - numStretchyYPixelsRemaining; int numFixedYPixelsRemaining = bitmapHeight - numStretchyYPixelsRemaining;
#if 0 #ifdef USE_TRACE
SkDebugf("NinePatch [%d %d] bounds [%g %g %g %g] divs [%d %d]\n", LOGV("NinePatch [%d %d] bounds [%g %g %g %g] divs [%d %d]\n",
bitmap.width(), bitmap.height(), bitmap.width(), bitmap.height(),
SkScalarToFloat(bounds.fLeft), SkScalarToFloat(bounds.fTop), SkScalarToFloat(bounds.fLeft), SkScalarToFloat(bounds.fTop),
SkScalarToFloat(bounds.width()), SkScalarToFloat(bounds.height()), SkScalarToFloat(bounds.width()), SkScalarToFloat(bounds.height()),
@@ -302,13 +304,13 @@ void NinePatch_Draw(SkCanvas* canvas, const SkRect& bounds,
goto nextDiv; goto nextDiv;
} }
if (canvas) { if (canvas) {
#if 0 #ifdef USE_TRACE
SkDebugf("-- src [%d %d %d %d] dst [%g %g %g %g]\n", LOGV("-- src [%d %d %d %d] dst [%g %g %g %g]\n",
src.fLeft, src.fTop, src.width(), src.height(), src.fLeft, src.fTop, src.width(), src.height(),
SkScalarToFloat(dst.fLeft), SkScalarToFloat(dst.fTop), SkScalarToFloat(dst.fLeft), SkScalarToFloat(dst.fTop),
SkScalarToFloat(dst.width()), SkScalarToFloat(dst.height())); SkScalarToFloat(dst.width()), SkScalarToFloat(dst.height()));
if (2 == src.width() && SkIntToScalar(5) == dst.width()) { if (2 == src.width() && SkIntToScalar(5) == dst.width()) {
SkDebugf("--- skip patch\n"); LOGV("--- skip patch\n");
} }
#endif #endif
drawStretchyPatch(canvas, src, dst, bitmap, *paint, initColor, drawStretchyPatch(canvas, src, dst, bitmap, *paint, initColor,

View File

@@ -21,6 +21,7 @@ import android.content.res.Resources;
import android.content.res.TypedArray; import android.content.res.TypedArray;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.util.DisplayMetrics; import android.util.DisplayMetrics;
import android.util.Log;
import android.util.TypedValue; import android.util.TypedValue;
import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlPullParserException;
@@ -170,6 +171,11 @@ public class NinePatchDrawable extends Drawable {
@Override @Override
public void draw(Canvas canvas) { public void draw(Canvas canvas) {
if (false) {
float[] pts = new float[2];
canvas.getMatrix().mapPoints(pts);
Log.v("9patch", "Drawing 9-patch @ " + pts[0] + "," + pts[1] + ": " + getBounds());
}
mNinePatch.draw(canvas, getBounds(), mPaint); mNinePatch.draw(canvas, getBounds(), mPaint);
} }