From 667fe1039feae068d3333de8fb7115313f4a517b Mon Sep 17 00:00:00 2001 From: Jonathan Dixon Date: Fri, 2 Aug 2013 15:28:31 -0700 Subject: [PATCH] Refactor Canvas.drawPicture() to delegate to Picture Bug: 9814370 To allow WebView.capturePicture() to return a subclass, we need to ensure the subclass is always consulted when being drawn into a canvas. Change-Id: Ia0357f95b6fafb3ac81e6bcfaef05739e619897a --- core/jni/android/graphics/Canvas.cpp | 17 ----------------- graphics/java/android/graphics/Canvas.java | 6 +++--- .../src/android/graphics/Canvas_Delegate.java | 8 -------- 3 files changed, 3 insertions(+), 28 deletions(-) diff --git a/core/jni/android/graphics/Canvas.cpp b/core/jni/android/graphics/Canvas.cpp index 330806463eccd..6c4526eccfdf7 100644 --- a/core/jni/android/graphics/Canvas.cpp +++ b/core/jni/android/graphics/Canvas.cpp @@ -35,8 +35,6 @@ #include -#define TIME_DRAWx - static uint32_t get_thread_msec() { #if defined(HAVE_POSIX_CLOCKS) struct timespec tm; @@ -463,20 +461,6 @@ public: canvas->drawPath(*path, *paint); } - static void drawPicture(JNIEnv* env, jobject, SkCanvas* canvas, - SkPicture* picture) { - SkASSERT(canvas); - SkASSERT(picture); - -#ifdef TIME_DRAW - SkMSec now = get_thread_msec(); //SkTime::GetMSecs(); -#endif - canvas->drawPicture(*picture); -#ifdef TIME_DRAW - ALOGD("---- picture playback %d ms\n", get_thread_msec() - now); -#endif - } - static void drawBitmap__BitmapFFPaint(JNIEnv* env, jobject jcanvas, SkCanvas* canvas, SkBitmap* bitmap, jfloat left, jfloat top, @@ -1103,7 +1087,6 @@ static JNINativeMethod gCanvasMethods[] = { (void*) SkCanvasGlue::drawTextOnPath___CIIPathFFPaint}, {"native_drawTextOnPath","(ILjava/lang/String;IFFII)V", (void*) SkCanvasGlue::drawTextOnPath__StringPathFFPaint}, - {"native_drawPicture", "(II)V", (void*) SkCanvasGlue::drawPicture}, {"freeCaches", "()V", (void*) SkCanvasGlue::freeCaches}, diff --git a/graphics/java/android/graphics/Canvas.java b/graphics/java/android/graphics/Canvas.java index fdec22be93509..1cdc6f573cb41 100644 --- a/graphics/java/android/graphics/Canvas.java +++ b/graphics/java/android/graphics/Canvas.java @@ -1646,7 +1646,9 @@ public class Canvas { */ public void drawPicture(Picture picture) { picture.endRecording(); - native_drawPicture(mNativeCanvas, picture.ni()); + int restoreCount = save(); + picture.draw(this); + restoreToCount(restoreCount); } /** @@ -1831,7 +1833,5 @@ public class Canvas { float hOffset, float vOffset, int flags, int paint); - private static native void native_drawPicture(int nativeCanvas, - int nativePicture); private static native void finalizer(int nativeCanvas); } diff --git a/tools/layoutlib/bridge/src/android/graphics/Canvas_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Canvas_Delegate.java index 4171bb54b31c0..361f5d7a8bef6 100644 --- a/tools/layoutlib/bridge/src/android/graphics/Canvas_Delegate.java +++ b/tools/layoutlib/bridge/src/android/graphics/Canvas_Delegate.java @@ -1147,14 +1147,6 @@ public final class Canvas_Delegate { "Canvas.drawTextOnPath is not supported.", null, null /*data*/); } - @LayoutlibDelegate - /*package*/ static void native_drawPicture(int nativeCanvas, - int nativePicture) { - // FIXME - Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED, - "Canvas.drawPicture is not supported.", null, null /*data*/); - } - @LayoutlibDelegate /*package*/ static void finalizer(int nativeCanvas) { // get the delegate from the native int so that it can be disposed.