1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 package org.chromium.android_webview; 6 7 import android.graphics.Canvas; 8 import android.graphics.Picture; 9 10 import org.chromium.base.JNINamespace; 11 import org.chromium.content.common.CleanupReference; 12 13 import java.io.OutputStream; 14 15 // A simple wrapper around a SkPicture, that allows final rendering to be performed using the 16 // chromium skia library. 17 @JNINamespace("android_webview") 18 class AwPicture extends Picture { 19 20 private long mNativeAwPicture; 21 22 // There is no explicit destroy method on Picture base-class, so cleanup is always 23 // handled via the CleanupReference. 24 private static final class DestroyRunnable implements Runnable { 25 private long mNativeAwPicture; DestroyRunnable(long nativeAwPicture)26 private DestroyRunnable(long nativeAwPicture) { 27 mNativeAwPicture = nativeAwPicture; 28 } 29 @Override run()30 public void run() { 31 nativeDestroy(mNativeAwPicture); 32 } 33 } 34 35 private CleanupReference mCleanupReference; 36 37 /** 38 * @param nativeAwPicture is an instance of the AwPicture native class. Ownership is 39 * taken by this java instance. 40 */ AwPicture(long nativeAwPicture)41 AwPicture(long nativeAwPicture) { 42 mNativeAwPicture = nativeAwPicture; 43 mCleanupReference = new CleanupReference(this, new DestroyRunnable(nativeAwPicture)); 44 } 45 46 @Override beginRecording(int width, int height)47 public Canvas beginRecording(int width, int height) { 48 unsupportedOperation(); 49 return null; 50 } 51 52 @Override endRecording()53 public void endRecording() { 54 // Intentional no-op. The native picture ended recording prior to java c'tor call. 55 } 56 57 @Override getWidth()58 public int getWidth() { 59 return nativeGetWidth(mNativeAwPicture); 60 } 61 62 @Override getHeight()63 public int getHeight() { 64 return nativeGetHeight(mNativeAwPicture); 65 } 66 67 @Override draw(Canvas canvas)68 public void draw(Canvas canvas) { 69 nativeDraw(mNativeAwPicture, canvas); 70 } 71 72 @Override 73 @SuppressWarnings("deprecation") writeToStream(OutputStream stream)74 public void writeToStream(OutputStream stream) { 75 unsupportedOperation(); 76 } 77 unsupportedOperation()78 private void unsupportedOperation() { 79 throw new IllegalStateException("Unsupported in AwPicture"); 80 } 81 nativeDestroy(long nativeAwPicture)82 private static native void nativeDestroy(long nativeAwPicture); nativeGetWidth(long nativeAwPicture)83 private native int nativeGetWidth(long nativeAwPicture); nativeGetHeight(long nativeAwPicture)84 private native int nativeGetHeight(long nativeAwPicture); nativeDraw(long nativeAwPicture, Canvas canvas)85 private native void nativeDraw(long nativeAwPicture, Canvas canvas); 86 } 87 88