diff --git a/core/java/android/view/GLES20Canvas.java b/core/java/android/view/GLES20Canvas.java index 80519231204f3..80c9324aae996 100644 --- a/core/java/android/view/GLES20Canvas.java +++ b/core/java/android/view/GLES20Canvas.java @@ -515,22 +515,22 @@ class GLES20Canvas extends HardwareCanvas { @Override public boolean quickReject(float left, float top, float right, float bottom, EdgeType type) { - return nQuickReject(mRenderer, left, top, right, bottom, type.nativeInt); + return nQuickReject(mRenderer, left, top, right, bottom); } private static native boolean nQuickReject(int renderer, float left, float top, - float right, float bottom, int edge); + float right, float bottom); @Override public boolean quickReject(Path path, EdgeType type) { path.computeBounds(mPathBounds, true); return nQuickReject(mRenderer, mPathBounds.left, mPathBounds.top, - mPathBounds.right, mPathBounds.bottom, type.nativeInt); + mPathBounds.right, mPathBounds.bottom); } @Override public boolean quickReject(RectF rect, EdgeType type) { - return nQuickReject(mRenderer, rect.left, rect.top, rect.right, rect.bottom, type.nativeInt); + return nQuickReject(mRenderer, rect.left, rect.top, rect.right, rect.bottom); } /////////////////////////////////////////////////////////////////////////// diff --git a/core/java/android/view/Surface.java b/core/java/android/view/Surface.java index a972b750743ed..c10f28742888d 100644 --- a/core/java/android/view/Surface.java +++ b/core/java/android/view/Surface.java @@ -215,7 +215,6 @@ public class Surface implements Parcelable { private int mNativeSurfaceControl; // SurfaceControl* private int mGenerationId; // incremented each time mNativeSurface changes private final Canvas mCanvas = new CompatibleCanvas(); - private int mCanvasSaveCount; // Canvas save count at time of lockCanvas() // The Translator for density compatibility mode. This is used for scaling // the canvas to perform the appropriate density transformation. diff --git a/core/jni/Android.mk b/core/jni/Android.mk index d705024166f28..44e87573af939 100644 --- a/core/jni/Android.mk +++ b/core/jni/Android.mk @@ -160,7 +160,8 @@ LOCAL_C_INCLUDES += \ external/skia/include/effects \ external/skia/include/images \ external/skia/include/ports \ - external/skia/src/ports \ + external/skia/src/core \ + external/skia/src/images \ external/skia/include/utils \ external/sqlite/dist \ external/sqlite/android \ diff --git a/core/jni/android/graphics/BitmapFactory.cpp b/core/jni/android/graphics/BitmapFactory.cpp index b7fdecf9b7b4a..daabce3d8b105 100644 --- a/core/jni/android/graphics/BitmapFactory.cpp +++ b/core/jni/android/graphics/BitmapFactory.cpp @@ -231,7 +231,7 @@ static jobject doDecode(JNIEnv* env, SkStream* stream, jobject padding, } SkAutoTDelete add(decoder); - SkAutoTDelete adb(bitmap, !useExistingBitmap); + SkAutoTDelete adb(!useExistingBitmap ? bitmap : NULL); decoder->setPeeker(&peeker); if (!isPurgeable) { diff --git a/core/jni/android/graphics/Canvas.cpp b/core/jni/android/graphics/Canvas.cpp index 5d6f73849b8c8..7208c570f3911 100644 --- a/core/jni/android/graphics/Canvas.cpp +++ b/core/jni/android/graphics/Canvas.cpp @@ -93,14 +93,6 @@ public: return canvas->getDevice()->accessBitmap(false).height(); } - static void setBitmap(JNIEnv* env, jobject, SkCanvas* canvas, SkBitmap* bitmap) { - if (bitmap) { - canvas->setBitmapDevice(*bitmap); - } else { - canvas->setDevice(NULL); - } - } - static int saveAll(JNIEnv* env, jobject jcanvas) { NPE_CHECK_RETURN_ZERO(env, jcanvas); return GraphicsJNI::getNativeCanvas(env, jcanvas)->save(); @@ -278,25 +270,25 @@ public: canvas->setDrawFilter(filter); } - static jboolean quickReject__RectFI(JNIEnv* env, jobject, SkCanvas* canvas, - jobject rect, int edgetype) { + static jboolean quickReject__RectF(JNIEnv* env, jobject, SkCanvas* canvas, + jobject rect) { SkRect rect_; GraphicsJNI::jrectf_to_rect(env, rect, &rect_); - return canvas->quickReject(rect_, (SkCanvas::EdgeType)edgetype); + return canvas->quickReject(rect_); } - - static jboolean quickReject__PathI(JNIEnv* env, jobject, SkCanvas* canvas, - SkPath* path, int edgetype) { - return canvas->quickReject(*path, (SkCanvas::EdgeType)edgetype); + + static jboolean quickReject__Path(JNIEnv* env, jobject, SkCanvas* canvas, + SkPath* path) { + return canvas->quickReject(*path); } - - static jboolean quickReject__FFFFI(JNIEnv* env, jobject, SkCanvas* canvas, + + static jboolean quickReject__FFFF(JNIEnv* env, jobject, SkCanvas* canvas, jfloat left, jfloat top, jfloat right, - jfloat bottom, int edgetype) { + jfloat bottom) { SkRect r; r.set(SkFloatToScalar(left), SkFloatToScalar(top), SkFloatToScalar(right), SkFloatToScalar(bottom)); - return canvas->quickReject(r, (SkCanvas::EdgeType)edgetype); + return canvas->quickReject(r); } static void drawRGB(JNIEnv* env, jobject, SkCanvas* canvas, @@ -938,12 +930,19 @@ static void doDrawTextDecorations(SkCanvas* canvas, jfloat x, jfloat y, jfloat l jobject bounds) { SkRect r; SkIRect ir; - bool result = canvas->getClipBounds(&r, SkCanvas::kBW_EdgeType); + bool result = canvas->getClipBounds(&r); if (!result) { r.setEmpty(); + } else { + // ensure the clip is not larger than the canvas + SkRect canvasRect; + SkISize deviceSize = canvas->getDeviceSize(); + canvasRect.iset(0, 0, deviceSize.fWidth, deviceSize.fHeight); + r.intersect(canvasRect); } r.round(&ir); + (void)GraphicsJNI::irect_to_jrect(ir, env, bounds); return result; } @@ -960,7 +959,6 @@ static JNINativeMethod gCanvasMethods[] = { {"isOpaque","()Z", (void*) SkCanvasGlue::isOpaque}, {"getWidth","()I", (void*) SkCanvasGlue::getWidth}, {"getHeight","()I", (void*) SkCanvasGlue::getHeight}, - {"native_setBitmap","(II)V", (void*) SkCanvasGlue::setBitmap}, {"save","()I", (void*) SkCanvasGlue::saveAll}, {"save","(I)I", (void*) SkCanvasGlue::save}, {"native_saveLayer","(ILandroid/graphics/RectF;II)I", @@ -992,10 +990,10 @@ static JNINativeMethod gCanvasMethods[] = { {"native_getClipBounds","(ILandroid/graphics/Rect;)Z", (void*) SkCanvasGlue::getClipBounds}, {"native_getCTM", "(II)V", (void*)SkCanvasGlue::getCTM}, - {"native_quickReject","(ILandroid/graphics/RectF;I)Z", - (void*) SkCanvasGlue::quickReject__RectFI}, - {"native_quickReject","(III)Z", (void*) SkCanvasGlue::quickReject__PathI}, - {"native_quickReject","(IFFFFI)Z", (void*)SkCanvasGlue::quickReject__FFFFI}, + {"native_quickReject","(ILandroid/graphics/RectF;)Z", + (void*) SkCanvasGlue::quickReject__RectF}, + {"native_quickReject","(II)Z", (void*) SkCanvasGlue::quickReject__Path}, + {"native_quickReject","(IFFFF)Z", (void*)SkCanvasGlue::quickReject__FFFF}, {"native_drawRGB","(IIII)V", (void*) SkCanvasGlue::drawRGB}, {"native_drawARGB","(IIIII)V", (void*) SkCanvasGlue::drawARGB}, {"native_drawColor","(II)V", (void*) SkCanvasGlue::drawColor__I}, diff --git a/core/jni/android/graphics/NinePatchImpl.cpp b/core/jni/android/graphics/NinePatchImpl.cpp index ff0eb45b986dc..01e7e3e0eb6ad 100644 --- a/core/jni/android/graphics/NinePatchImpl.cpp +++ b/core/jni/android/graphics/NinePatchImpl.cpp @@ -105,7 +105,7 @@ SkScalar calculateStretch(SkScalar boundsLimit, SkScalar startingPoint, void NinePatch_Draw(SkCanvas* canvas, const SkRect& bounds, const SkBitmap& bitmap, const android::Res_png_9patch& chunk, const SkPaint* paint, SkRegion** outRegion) { - if (canvas && canvas->quickReject(bounds, SkCanvas::kBW_EdgeType)) { + if (canvas && canvas->quickReject(bounds)) { return; } diff --git a/core/jni/android/graphics/Region.cpp b/core/jni/android/graphics/Region.cpp index ab7cf4698c1ed..ded21860b8b97 100644 --- a/core/jni/android/graphics/Region.cpp +++ b/core/jni/android/graphics/Region.cpp @@ -177,7 +177,7 @@ static SkRegion* Region_createFromParcel(JNIEnv* env, jobject clazz, jobject par SkRegion* region = new SkRegion; size_t size = p->readInt32(); - region->unflatten(p->readInplace(size)); + region->readFromMemory(p->readInplace(size)); return region; } @@ -190,9 +190,9 @@ static jboolean Region_writeToParcel(JNIEnv* env, jobject clazz, const SkRegion* android::Parcel* p = android::parcelForJavaObject(env, parcel); - size_t size = region->flatten(NULL); + size_t size = region->writeToMemory(NULL); p->writeInt32(size); - region->flatten(p->writeInplace(size)); + region->writeToMemory(p->writeInplace(size)); return true; } diff --git a/core/jni/android/graphics/TextLayoutCache.cpp b/core/jni/android/graphics/TextLayoutCache.cpp index 6d3c87857dc5b..75446459665e1 100644 --- a/core/jni/android/graphics/TextLayoutCache.cpp +++ b/core/jni/android/graphics/TextLayoutCache.cpp @@ -345,7 +345,7 @@ TextLayoutShaper::TextLayoutShaper() { } void TextLayoutShaper::init() { - mDefaultTypeface = SkFontHost::CreateTypeface(NULL, NULL, NULL, 0, SkTypeface::kNormal); + mDefaultTypeface = SkFontHost::CreateTypeface(NULL, NULL, SkTypeface::kNormal); } void TextLayoutShaper::unrefTypefaces() { diff --git a/core/jni/android/graphics/Typeface.cpp b/core/jni/android/graphics/Typeface.cpp index 7f4c37bff34db..e056b618bca45 100644 --- a/core/jni/android/graphics/Typeface.cpp +++ b/core/jni/android/graphics/Typeface.cpp @@ -147,25 +147,6 @@ static SkTypeface* Typeface_createFromFile(JNIEnv* env, jobject, jstring jpath) return SkTypeface::CreateFromFile(str.c_str()); } -#define MIN_GAMMA (0.1f) -#define MAX_GAMMA (10.0f) -static float pinGamma(float gamma) { - if (gamma < MIN_GAMMA) { - gamma = MIN_GAMMA; - } else if (gamma > MAX_GAMMA) { - gamma = MAX_GAMMA; - } - return gamma; -} - -extern void skia_set_text_gamma(float, float); - -static void Typeface_setGammaForText(JNIEnv* env, jobject, jfloat blackGamma, - jfloat whiteGamma) { - // Comment this out for release builds. This is only used during development - skia_set_text_gamma(pinGamma(blackGamma), pinGamma(whiteGamma)); -} - /////////////////////////////////////////////////////////////////////////////// static JNINativeMethod gTypefaceMethods[] = { @@ -177,7 +158,6 @@ static JNINativeMethod gTypefaceMethods[] = { (void*)Typeface_createFromAsset }, { "nativeCreateFromFile", "(Ljava/lang/String;)I", (void*)Typeface_createFromFile }, - { "setGammaForText", "(FF)V", (void*)Typeface_setGammaForText }, }; int register_android_graphics_Typeface(JNIEnv* env) diff --git a/core/jni/android_view_GLES20Canvas.cpp b/core/jni/android_view_GLES20Canvas.cpp index 33ed0b95b5aaf..895a0dc61fea2 100644 --- a/core/jni/android_view_GLES20Canvas.cpp +++ b/core/jni/android_view_GLES20Canvas.cpp @@ -269,8 +269,7 @@ static jint android_view_GLES20Canvas_saveLayerAlphaClip(JNIEnv* env, jobject cl // ---------------------------------------------------------------------------- static bool android_view_GLES20Canvas_quickReject(JNIEnv* env, jobject clazz, - OpenGLRenderer* renderer, jfloat left, jfloat top, jfloat right, jfloat bottom, - SkCanvas::EdgeType edge) { + OpenGLRenderer* renderer, jfloat left, jfloat top, jfloat right, jfloat bottom) { return renderer->quickReject(left, top, right, bottom); } @@ -981,7 +980,7 @@ static JNINativeMethod gMethods[] = { { "nSaveLayerAlpha", "(IFFFFII)I", (void*) android_view_GLES20Canvas_saveLayerAlpha }, { "nSaveLayerAlpha", "(III)I", (void*) android_view_GLES20Canvas_saveLayerAlphaClip }, - { "nQuickReject", "(IFFFFI)Z", (void*) android_view_GLES20Canvas_quickReject }, + { "nQuickReject", "(IFFFF)Z", (void*) android_view_GLES20Canvas_quickReject }, { "nClipRect", "(IFFFFI)Z", (void*) android_view_GLES20Canvas_clipRectF }, { "nClipRect", "(IIIIII)Z", (void*) android_view_GLES20Canvas_clipRect }, { "nClipPath", "(III)Z", (void*) android_view_GLES20Canvas_clipPath }, diff --git a/core/jni/android_view_Surface.cpp b/core/jni/android_view_Surface.cpp index 1f1537082a906..ed92e43c9ddba 100644 --- a/core/jni/android_view_Surface.cpp +++ b/core/jni/android_view_Surface.cpp @@ -66,7 +66,6 @@ static struct { jfieldID mNativeSurfaceControl; jfieldID mGenerationId; jfieldID mCanvas; - jfieldID mCanvasSaveCount; jmethodID ctor; } gSurfaceClassInfo; @@ -78,10 +77,15 @@ static struct { } gRectClassInfo; static struct { + jfieldID mFinalizer; jfieldID mNativeCanvas; jfieldID mSurfaceFormat; } gCanvasClassInfo; +static struct { + jfieldID mNativeCanvas; +} gCanvasFinalizerClassInfo; + static struct { jfieldID width; jfieldID height; @@ -135,6 +139,7 @@ public: return mScreenshot.getFormat(); } + SK_DECLARE_UNFLATTENABLE_OBJECT() protected: // overrides from SkPixelRef virtual void* onLockPixels(SkColorTable** ct) { @@ -373,6 +378,15 @@ static inline SkBitmap::Config convertPixelFormat(PixelFormat format) { } } +static inline void swapCanvasPtr(JNIEnv* env, jobject canvasObj, SkCanvas* newCanvas) { + jobject canvasFinalizerObj = env->GetObjectField(canvasObj, gCanvasClassInfo.mFinalizer); + SkCanvas* previousCanvas = reinterpret_cast( + env->GetIntField(canvasObj, gCanvasClassInfo.mNativeCanvas)); + env->SetIntField(canvasObj, gCanvasClassInfo.mNativeCanvas, (int)newCanvas); + env->SetIntField(canvasFinalizerObj, gCanvasFinalizerClassInfo.mNativeCanvas, (int)newCanvas); + SkSafeUnref(previousCanvas); +} + static jobject nativeLockCanvas(JNIEnv* env, jobject surfaceObj, jobject dirtyRectObj) { sp surface(getSurface(env, surfaceObj)); if (!Surface::isValid(surface)) { @@ -409,8 +423,6 @@ static jobject nativeLockCanvas(JNIEnv* env, jobject surfaceObj, jobject dirtyRe jobject canvasObj = env->GetObjectField(surfaceObj, gSurfaceClassInfo.mCanvas); env->SetIntField(canvasObj, gCanvasClassInfo.mSurfaceFormat, info.format); - SkCanvas* nativeCanvas = reinterpret_cast( - env->GetIntField(canvasObj, gCanvasClassInfo.mNativeCanvas)); SkBitmap bitmap; ssize_t bpr = info.s * bytesPerPixel(info.format); bitmap.setConfig(convertPixelFormat(info.format), info.w, info.h, bpr); @@ -423,7 +435,9 @@ static jobject nativeLockCanvas(JNIEnv* env, jobject surfaceObj, jobject dirtyRe // be safe with an empty bitmap. bitmap.setPixels(NULL); } - nativeCanvas->setBitmapDevice(bitmap); + + SkCanvas* nativeCanvas = SkNEW_ARGS(SkCanvas, (bitmap)); + swapCanvasPtr(env, canvasObj, nativeCanvas); SkRegion clipReg; if (dirtyRegion.isRect()) { // very common case @@ -440,9 +454,6 @@ static jobject nativeLockCanvas(JNIEnv* env, jobject surfaceObj, jobject dirtyRe nativeCanvas->clipRegion(clipReg); - int saveCount = nativeCanvas->save(); - env->SetIntField(surfaceObj, gSurfaceClassInfo.mCanvasSaveCount, saveCount); - if (dirtyRectObj) { const Rect& bounds(dirtyRegion.getBounds()); env->SetIntField(dirtyRectObj, gRectClassInfo.left, bounds.left); @@ -467,12 +478,8 @@ static void nativeUnlockCanvasAndPost(JNIEnv* env, jobject surfaceObj, jobject c } // detach the canvas from the surface - SkCanvas* nativeCanvas = reinterpret_cast( - env->GetIntField(canvasObj, gCanvasClassInfo.mNativeCanvas)); - int saveCount = env->GetIntField(surfaceObj, gSurfaceClassInfo.mCanvasSaveCount); - nativeCanvas->restoreToCount(saveCount); - nativeCanvas->setBitmapDevice(SkBitmap()); - env->SetIntField(surfaceObj, gSurfaceClassInfo.mCanvasSaveCount, 0); + SkCanvas* nativeCanvas = SkNEW(SkCanvas); + swapCanvasPtr(env, canvasObj, nativeCanvas); // unlock surface status_t err = surface->unlockAndPost(); @@ -888,14 +895,16 @@ int register_android_view_Surface(JNIEnv* env) env->GetFieldID(gSurfaceClassInfo.clazz, "mGenerationId", "I"); gSurfaceClassInfo.mCanvas = env->GetFieldID(gSurfaceClassInfo.clazz, "mCanvas", "Landroid/graphics/Canvas;"); - gSurfaceClassInfo.mCanvasSaveCount = - env->GetFieldID(gSurfaceClassInfo.clazz, "mCanvasSaveCount", "I"); gSurfaceClassInfo.ctor = env->GetMethodID(gSurfaceClassInfo.clazz, "", "()V"); clazz = env->FindClass("android/graphics/Canvas"); + gCanvasClassInfo.mFinalizer = env->GetFieldID(clazz, "mFinalizer", "Landroid/graphics/Canvas$CanvasFinalizer;"); gCanvasClassInfo.mNativeCanvas = env->GetFieldID(clazz, "mNativeCanvas", "I"); gCanvasClassInfo.mSurfaceFormat = env->GetFieldID(clazz, "mSurfaceFormat", "I"); + clazz = env->FindClass("android/graphics/Canvas$CanvasFinalizer"); + gCanvasFinalizerClassInfo.mNativeCanvas = env->GetFieldID(clazz, "mNativeCanvas", "I"); + clazz = env->FindClass("android/graphics/Rect"); gRectClassInfo.left = env->GetFieldID(clazz, "left", "I"); gRectClassInfo.top = env->GetFieldID(clazz, "top", "I"); diff --git a/core/jni/android_view_TextureView.cpp b/core/jni/android_view_TextureView.cpp index 87b312f4cbfe7..64cbda3091a45 100644 --- a/core/jni/android_view_TextureView.cpp +++ b/core/jni/android_view_TextureView.cpp @@ -43,10 +43,15 @@ static struct { } gRectClassInfo; static struct { - jfieldID nativeCanvas; - jfieldID surfaceFormat; + jfieldID mFinalizer; + jfieldID mNativeCanvas; + jfieldID mSurfaceFormat; } gCanvasClassInfo; +static struct { + jfieldID mNativeCanvas; +} gCanvasFinalizerClassInfo; + static struct { jfieldID nativeWindow; } gTextureViewClassInfo; @@ -120,6 +125,15 @@ static void android_view_TextureView_destroyNativeWindow(JNIEnv* env, jobject te } } +static inline void swapCanvasPtr(JNIEnv* env, jobject canvasObj, SkCanvas* newCanvas) { + jobject canvasFinalizerObj = env->GetObjectField(canvasObj, gCanvasClassInfo.mFinalizer); + SkCanvas* previousCanvas = reinterpret_cast( + env->GetIntField(canvasObj, gCanvasClassInfo.mNativeCanvas)); + env->SetIntField(canvasObj, gCanvasClassInfo.mNativeCanvas, (int)newCanvas); + env->SetIntField(canvasFinalizerObj, gCanvasFinalizerClassInfo.mNativeCanvas, (int)newCanvas); + SkSafeUnref(previousCanvas); +} + static void android_view_TextureView_lockCanvas(JNIEnv* env, jobject, jint nativeWindow, jobject canvas, jobject dirtyRect) { @@ -157,9 +171,10 @@ static void android_view_TextureView_lockCanvas(JNIEnv* env, jobject, bitmap.setPixels(NULL); } - SET_INT(canvas, gCanvasClassInfo.surfaceFormat, buffer.format); - SkCanvas* nativeCanvas = (SkCanvas*) GET_INT(canvas, gCanvasClassInfo.nativeCanvas); - nativeCanvas->setBitmapDevice(bitmap); + SET_INT(canvas, gCanvasClassInfo.mSurfaceFormat, buffer.format); + + SkCanvas* nativeCanvas = SkNEW_ARGS(SkCanvas, (bitmap)); + swapCanvasPtr(env, canvas, nativeCanvas); SkRect clipRect; clipRect.set(rect.left, rect.top, rect.right, rect.bottom); @@ -174,8 +189,8 @@ static void android_view_TextureView_lockCanvas(JNIEnv* env, jobject, static void android_view_TextureView_unlockCanvasAndPost(JNIEnv* env, jobject, jint nativeWindow, jobject canvas) { - SkCanvas* nativeCanvas = (SkCanvas*) GET_INT(canvas, gCanvasClassInfo.nativeCanvas); - nativeCanvas->setBitmapDevice(SkBitmap()); + SkCanvas* nativeCanvas = SkNEW(SkCanvas); + swapCanvasPtr(env, canvas, nativeCanvas); if (nativeWindow) { sp window((ANativeWindow*) nativeWindow); @@ -226,8 +241,12 @@ int register_android_view_TextureView(JNIEnv* env) { GET_FIELD_ID(gRectClassInfo.bottom, clazz, "bottom", "I"); FIND_CLASS(clazz, "android/graphics/Canvas"); - GET_FIELD_ID(gCanvasClassInfo.nativeCanvas, clazz, "mNativeCanvas", "I"); - GET_FIELD_ID(gCanvasClassInfo.surfaceFormat, clazz, "mSurfaceFormat", "I"); + GET_FIELD_ID(gCanvasClassInfo.mFinalizer, clazz, "mFinalizer", "Landroid/graphics/Canvas$CanvasFinalizer;"); + GET_FIELD_ID(gCanvasClassInfo.mNativeCanvas, clazz, "mNativeCanvas", "I"); + GET_FIELD_ID(gCanvasClassInfo.mSurfaceFormat, clazz, "mSurfaceFormat", "I"); + + FIND_CLASS(clazz, "android/graphics/Canvas$CanvasFinalizer"); + GET_FIELD_ID(gCanvasFinalizerClassInfo.mNativeCanvas, clazz, "mNativeCanvas", "I"); FIND_CLASS(clazz, "android/view/TextureView"); GET_FIELD_ID(gTextureViewClassInfo.nativeWindow, clazz, "mNativeWindow", "I"); diff --git a/graphics/java/android/graphics/Canvas.java b/graphics/java/android/graphics/Canvas.java index 3949afdd4a2ae..483d11afb8f3f 100644 --- a/graphics/java/android/graphics/Canvas.java +++ b/graphics/java/android/graphics/Canvas.java @@ -37,8 +37,8 @@ import javax.microedition.khronos.opengles.GL; * Canvas and Drawables developer guide.

*/ public class Canvas { - // assigned in constructors, freed in finalizer - final int mNativeCanvas; + // assigned in constructors or setBitmap, freed in finalizer + int mNativeCanvas; // may be null private Bitmap mBitmap; @@ -83,7 +83,7 @@ public class Canvas { private final CanvasFinalizer mFinalizer; private static class CanvasFinalizer { - private final int mNativeCanvas; + private int mNativeCanvas; public CanvasFinalizer(int nativeCanvas) { mNativeCanvas = nativeCanvas; @@ -142,6 +142,17 @@ public class Canvas { mDensity = Bitmap.getDefaultDensity(); } + /** + * Replace existing canvas while ensuring that the swap has occurred before + * the previous native canvas is unreferenced. + */ + private void safeCanvasSwap(int nativeCanvas) { + final int oldCanvas = mNativeCanvas; + mNativeCanvas = nativeCanvas; + mFinalizer.mNativeCanvas = nativeCanvas; + finalizer(oldCanvas); + } + /** * Returns null. * @@ -168,11 +179,11 @@ public class Canvas { } /** - * 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. + * Specify a bitmap for the canvas to draw into. As a side-effect, the + * canvas' target density is updated to match that of the bitmap while all + * other state such as the layers, filters, matrix, and clip are reset. * * @param bitmap Specifies a mutable bitmap for the canvas to draw into. - * * @see #setDensity(int) * @see #getDensity() */ @@ -181,17 +192,19 @@ public class Canvas { throw new RuntimeException("Can't set a bitmap device on a GL canvas"); } - int pointer = 0; - if (bitmap != null) { + if (bitmap == null) { + safeCanvasSwap(initRaster(0)); + mDensity = Bitmap.DENSITY_NONE; + } else { if (!bitmap.isMutable()) { throw new IllegalStateException(); } throwIfRecycled(bitmap); + + safeCanvasSwap(initRaster(bitmap.ni())); mDensity = bitmap.mDensity; - pointer = bitmap.ni(); } - native_setBitmap(mNativeCanvas, pointer); mBitmap = bitmap; } @@ -706,7 +719,7 @@ public class Canvas { * does not intersect with the canvas' clip */ public boolean quickReject(RectF rect, EdgeType type) { - return native_quickReject(mNativeCanvas, rect, type.nativeInt); + return native_quickReject(mNativeCanvas, rect); } /** @@ -726,7 +739,7 @@ public class Canvas { * does not intersect with the canvas' clip */ public boolean quickReject(Path path, EdgeType type) { - return native_quickReject(mNativeCanvas, path.ni(), type.nativeInt); + return native_quickReject(mNativeCanvas, path.ni()); } /** @@ -749,9 +762,9 @@ public class Canvas { * @return true if the rect (transformed by the canvas' matrix) * does not intersect with the canvas' clip */ - public boolean quickReject(float left, float top, float right, float bottom, EdgeType type) { - return native_quickReject(mNativeCanvas, left, top, right, bottom, - type.nativeInt); + public boolean quickReject(float left, float top, float right, float bottom, + EdgeType type) { + return native_quickReject(mNativeCanvas, left, top, right, bottom); } /** @@ -1625,7 +1638,6 @@ public class Canvas { public static native void freeTextLayoutCaches(); private static native int initRaster(int nativeBitmapOrZero); - private static native void native_setBitmap(int nativeCanvas, int bitmap); private static native int native_saveLayer(int nativeCanvas, RectF bounds, int paint, int layerFlags); private static native int native_saveLayer(int nativeCanvas, float l, @@ -1656,15 +1668,12 @@ public class Canvas { Rect bounds); private static native void native_getCTM(int canvas, int matrix); private static native boolean native_quickReject(int nativeCanvas, - RectF rect, - int native_edgeType); + RectF rect); private static native boolean native_quickReject(int nativeCanvas, - int path, - int native_edgeType); + int path); private static native boolean native_quickReject(int nativeCanvas, float left, float top, - float right, float bottom, - int native_edgeType); + float right, float bottom); private static native void native_drawRGB(int nativeCanvas, int r, int g, int b); private static native void native_drawARGB(int nativeCanvas, int a, int r, diff --git a/graphics/java/android/graphics/Path.java b/graphics/java/android/graphics/Path.java index f6b5ffc9ad7ca..157c7d1470cda 100644 --- a/graphics/java/android/graphics/Path.java +++ b/graphics/java/android/graphics/Path.java @@ -375,9 +375,9 @@ public class Path { */ public enum Direction { /** clockwise */ - CW (0), // must match enum in SkPath.h + CW (1), // must match enum in SkPath.h /** counter-clockwise */ - CCW (1); // must match enum in SkPath.h + CCW (2); // must match enum in SkPath.h Direction(int ni) { nativeInt = ni; diff --git a/graphics/java/android/graphics/Typeface.java b/graphics/java/android/graphics/Typeface.java index 4487a3c473287..c68c9f7dd9fd1 100644 --- a/graphics/java/android/graphics/Typeface.java +++ b/graphics/java/android/graphics/Typeface.java @@ -225,16 +225,4 @@ public class Typeface { private static native int nativeGetStyle(int native_instance); private static native int nativeCreateFromAsset(AssetManager mgr, String path); private static native int nativeCreateFromFile(String path); - - /** - * Set the global gamma coefficients for black and white text. This call is - * usually a no-op in shipping products, and only exists for testing during - * development. - * - * @param blackGamma gamma coefficient for black text - * @param whiteGamma gamma coefficient for white text - * - * @hide - this is just for calibrating devices, not for normal apps - */ - public static native void setGammaForText(float blackGamma, float whiteGamma); } diff --git a/libs/hwui/Android.mk b/libs/hwui/Android.mk index 549edd2bf7b3a..67359adcfe052 100644 --- a/libs/hwui/Android.mk +++ b/libs/hwui/Android.mk @@ -42,6 +42,7 @@ ifeq ($(USE_OPENGL_RENDERER),true) external/skia/include/core \ external/skia/include/effects \ external/skia/include/images \ + external/skia/src/core \ external/skia/src/ports \ external/skia/include/utils diff --git a/libs/hwui/DisplayListRenderer.h b/libs/hwui/DisplayListRenderer.h index b25288b1f0594..f3bd188ea1910 100644 --- a/libs/hwui/DisplayListRenderer.h +++ b/libs/hwui/DisplayListRenderer.h @@ -18,7 +18,8 @@ #define ANDROID_HWUI_DISPLAY_LIST_RENDERER_H #include -#include +#include +#include #include #include #include diff --git a/libs/hwui/FontRenderer.cpp b/libs/hwui/FontRenderer.cpp index 97988f78454bf..d8297daeb636b 100644 --- a/libs/hwui/FontRenderer.cpp +++ b/libs/hwui/FontRenderer.cpp @@ -16,6 +16,7 @@ #define LOG_TAG "OpenGLRenderer" +#include #include #include diff --git a/libs/hwui/Layer.h b/libs/hwui/Layer.h index e8a85fdf3dde6..a580d899458b3 100644 --- a/libs/hwui/Layer.h +++ b/libs/hwui/Layer.h @@ -23,6 +23,7 @@ #include +#include #include #include "Rect.h" diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp index 45569ace79d51..1fdd97d10fd17 100644 --- a/libs/hwui/OpenGLRenderer.cpp +++ b/libs/hwui/OpenGLRenderer.cpp @@ -80,7 +80,7 @@ static const Blender gBlends[] = { { SkXfermode::kDstATop_Mode, GL_ONE_MINUS_DST_ALPHA, GL_SRC_ALPHA }, { SkXfermode::kXor_Mode, GL_ONE_MINUS_DST_ALPHA, GL_ONE_MINUS_SRC_ALPHA }, { SkXfermode::kPlus_Mode, GL_ONE, GL_ONE }, - { SkXfermode::kMultiply_Mode, GL_ZERO, GL_SRC_COLOR }, + { SkXfermode::kModulate_Mode, GL_ZERO, GL_SRC_COLOR }, { SkXfermode::kScreen_Mode, GL_ONE, GL_ONE_MINUS_SRC_COLOR } }; @@ -101,7 +101,7 @@ static const Blender gBlendsSwap[] = { { SkXfermode::kDstATop_Mode, GL_DST_ALPHA, GL_ONE_MINUS_SRC_ALPHA }, { SkXfermode::kXor_Mode, GL_ONE_MINUS_DST_ALPHA, GL_ONE_MINUS_SRC_ALPHA }, { SkXfermode::kPlus_Mode, GL_ONE, GL_ONE }, - { SkXfermode::kMultiply_Mode, GL_DST_COLOR, GL_ZERO }, + { SkXfermode::kModulate_Mode, GL_DST_COLOR, GL_ZERO }, { SkXfermode::kScreen_Mode, GL_ONE_MINUS_DST_COLOR, GL_ONE } }; diff --git a/libs/hwui/font/CacheTexture.cpp b/libs/hwui/font/CacheTexture.cpp index f653592177681..24b0523cc7e10 100644 --- a/libs/hwui/font/CacheTexture.cpp +++ b/libs/hwui/font/CacheTexture.cpp @@ -14,6 +14,7 @@ * limitations under the License. */ +#include #include #include "Debug.h" diff --git a/libs/hwui/font/Font.cpp b/libs/hwui/font/Font.cpp index 128e8b85669f8..1afcb46d998cc 100644 --- a/libs/hwui/font/Font.cpp +++ b/libs/hwui/font/Font.cpp @@ -20,6 +20,7 @@ #include +#include #include #include "Debug.h" diff --git a/media/tests/omxjpegdecoder/SkOmxPixelRef.h b/media/tests/omxjpegdecoder/SkOmxPixelRef.h index afedcbdf53cd3..374604c39dae7 100644 --- a/media/tests/omxjpegdecoder/SkOmxPixelRef.h +++ b/media/tests/omxjpegdecoder/SkOmxPixelRef.h @@ -33,6 +33,7 @@ public: //! Return the allocation size for the pixels size_t getSize() const { return mSize; } + SK_DECLARE_UNFLATTENABLE_OBJECT() protected: // overrides from SkPixelRef virtual void* onLockPixels(SkColorTable**); diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml index 48edc732c1336..c40e26d233f8f 100644 --- a/packages/SystemUI/res/values-ar/strings.xml +++ b/packages/SystemUI/res/values-ar/strings.xml @@ -189,7 +189,7 @@ "الموقع المستخدم" "جهاز الوسائط" "RSSI" - "مكالمات طوارئ فقط" + "مكالمات الطوارئ فقط" "الإعدادات" "الوقت" "أنا" diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml index 580bfe746c00c..8c2dd8e23edf1 100644 --- a/packages/SystemUI/res/values-ca/strings.xml +++ b/packages/SystemUI/res/values-ca/strings.xml @@ -147,7 +147,7 @@ "Mode silenci." "S\'ha omès %s." "Notificació omesa." - "Àrea de notificacions" + "Capa de notificació." "Configuració ràpida." "Aplicacions recents." "Usuari %s." diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml index 0789b29cb4a2a..d619de11e82f8 100644 --- a/packages/SystemUI/res/values-es-rUS/strings.xml +++ b/packages/SystemUI/res/values-es-rUS/strings.xml @@ -133,7 +133,7 @@ "Wi-Fi" "No hay tarjeta SIM." "Conexión mediante Bluetooth" - "Modo avión" + "Modo de avión" @@ -154,7 +154,7 @@ "%1$s. %2$s" "Móvil %1$s. %2$s. %3$s." "Batería %s" - "Modo avión %s" + "Modo de avión %s" "Bluetooth %s" "Alarma: %s" "Datos de 2G-3G inhabilitados" diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml index fff1aa043d304..c454bb1bb15d9 100644 --- a/packages/SystemUI/res/values-pl/strings.xml +++ b/packages/SystemUI/res/values-pl/strings.xml @@ -157,14 +157,14 @@ "Alarm ustawiony na %s." "Wyłączono transmisję danych 2G/3G" "Wyłączono transmisję danych 4G" - "Transmisja danych została wyłączona" + "Wyłączono komórkową transmisję danych" "Wyłączono transmisję danych" - "Ustawiony limit transmisji danych został osiągnięty."\n\n"Jeśli ponownie włączysz przesyłanie danych, operator może naliczyć dodatkowe opłaty." + "Osiągnięto określony limit wykorzystania transmisji danych."\n\n"Jeśli ponownie włączysz przesyłanie danych, operator może naliczyć opłaty." "Włącz transmisję danych" "Brak internetu" "Wi-Fi: połączono" "Wyszukiwanie sygnału GPS" - "Lokalizacja z GPSa" + "Lokalizacja ustawiona według GPS" "Usuń wszystkie powiadomienia." "O aplikacji" "Zamknij" diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml index 3d0ddd4205fb0..ccf4fd48b5d8e 100644 --- a/packages/SystemUI/res/values-ru/strings.xml +++ b/packages/SystemUI/res/values-ru/strings.xml @@ -77,7 +77,7 @@ "Установить как камеру (PTP)" "Установить приложение" "Назад" - "Домой" + "Главная страница" "Меню" "Недавние приложения" "Кнопка переключения способа ввода." @@ -118,8 +118,8 @@ "два деления" "три деления" "надежный сигнал" - "Вкл." - "Выкл." + "ВКЛ" + "ВЫКЛ" "Подключено" "GPRS" "1 X" diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml index 7666f7d0ba53c..91214d192a4eb 100644 --- a/packages/SystemUI/res/values-sv/strings.xml +++ b/packages/SystemUI/res/values-sv/strings.xml @@ -197,8 +197,8 @@ "Ej ansluten" "Inget nätverk" "Wi-Fi är inaktiverat" - "Trådlös skärm" - "Trådlös skärm" + "Wi-Fi visas" + "Trådlös visning" "Ljusstyrka" "AUTO" "Meddelanden visas här" diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml index f43eabe47e067..7750e77064928 100644 --- a/packages/SystemUI/res/values-uk/strings.xml +++ b/packages/SystemUI/res/values-uk/strings.xml @@ -35,10 +35,10 @@ "Поточні" "Сповіщення" "Підключіть зарядний пристрій" - "Акумулятор розряджається." + "Батарея виснажується." "Залишилося %d%%" "Заряджання USB не підтримується."\n"Використовуйте лише наданий у комплекті зарядний пристрій." - "Використання акумулятора" + "Викор. батареї" "Налаштування" "Wi-Fi" "Режим польоту" @@ -85,11 +85,11 @@ "Збільшення екрана." "Bluetooth під’єднано." "Bluetooth від’єднано." - "Акумулятор розряджений." - "Заряд акумулятора: одна смужка." - "Заряд акумулятора: дві смужки." - "Заряд акумулятора: три смужки." - "Акумулятор заряджений." + "Немає заряду батареї." + "Одна смужка заряду батареї." + "Дві смужки заряду батареї." + "Три смужки заряду батареї." + "Повний заряд батареї" "Немає сигналу телефону." "Одна смужка сигналу телефону." "Дві смужки сигналу телефону." @@ -134,7 +134,7 @@ "Немає SIM-карти." "Прив’язка Bluetooth." "Режим польоту." - "Заряд акумулятора: %d." + "Відсотків батареї: %d." "Налаштування системи." "Сповіщення." "Очистити сповіщення." diff --git a/services/input/SpriteController.cpp b/services/input/SpriteController.cpp index 1f3d2cf2fdf03..8163ea0aa1fcb 100644 --- a/services/input/SpriteController.cpp +++ b/services/input/SpriteController.cpp @@ -208,8 +208,7 @@ void SpriteController::doUpdateSprites() { surfaceInfo.w, surfaceInfo.h, bpr); surfaceBitmap.setPixels(surfaceInfo.bits); - SkCanvas surfaceCanvas; - surfaceCanvas.setBitmapDevice(surfaceBitmap); + SkCanvas surfaceCanvas(surfaceBitmap); SkPaint paint; paint.setXfermodeMode(SkXfermode::kSrc_Mode); diff --git a/tools/layoutlib/bridge/src/android/graphics/Typeface_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Typeface_Delegate.java index 2414d705be8a4..8701cc8068a65 100644 --- a/tools/layoutlib/bridge/src/android/graphics/Typeface_Delegate.java +++ b/tools/layoutlib/bridge/src/android/graphics/Typeface_Delegate.java @@ -188,11 +188,6 @@ public final class Typeface_Delegate { return delegate.mStyle; } - @LayoutlibDelegate - /*package*/ static void setGammaForText(float blackGamma, float whiteGamma) { - // This is for device testing only: pass - } - // ---- Private delegate/helper methods ---- private Typeface_Delegate(String family, int style) {