| Index: android_webview/java/src/org/chromium/android_webview/AwPicture.java
|
| diff --git a/android_webview/java/src/org/chromium/android_webview/AwPicture.java b/android_webview/java/src/org/chromium/android_webview/AwPicture.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..30ec57b7ff1df481d2fa5cd28e526fb5881593a1
|
| --- /dev/null
|
| +++ b/android_webview/java/src/org/chromium/android_webview/AwPicture.java
|
| @@ -0,0 +1,95 @@
|
| +// Copyright 2013 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +package org.chromium.android_webview;
|
| +
|
| +import android.graphics.Canvas;
|
| +import android.graphics.Picture;
|
| +import android.graphics.Rect;
|
| +
|
| +import org.chromium.base.CalledByNative;
|
| +import org.chromium.base.JNINamespace;
|
| +import org.chromium.content.common.CleanupReference;
|
| +
|
| +import java.io.OutputStream;
|
| +
|
| +// A simple wrapper around a SkPicture, that allows final rendering to be performed using the
|
| +// chromium skia library.
|
| +@JNINamespace("android_webview")
|
| +class AwPicture extends Picture {
|
| +
|
| + private int mNativeAwPicture;
|
| +
|
| + // There is no explicit destroy method on Picture base-class, so cleanup is always
|
| + // handled via the CleanupReference.
|
| + private static final class DestroyRunnable implements Runnable {
|
| + private int mNativeAwPicture;
|
| + private DestroyRunnable(int nativeAwPicture) {
|
| + mNativeAwPicture = nativeAwPicture;
|
| + }
|
| + @Override
|
| + public void run() {
|
| + nativeDestroy(mNativeAwPicture);
|
| + }
|
| + }
|
| +
|
| + private CleanupReference mCleanupReference;
|
| +
|
| + /**
|
| + * @param nativeAwPicture is an instance of the AwPicture native class. Ownership is
|
| + * taken by this java instance.
|
| + */
|
| + AwPicture(int nativeAwPicture) {
|
| + mNativeAwPicture = nativeAwPicture;
|
| + mCleanupReference = new CleanupReference(this, new DestroyRunnable(nativeAwPicture));
|
| + }
|
| +
|
| + @Override
|
| + public Canvas beginRecording(int width, int height) {
|
| + unsupportedOperation();
|
| + return null;
|
| + }
|
| +
|
| + @Override
|
| + public void endRecording() {
|
| + // Intentional no-op. The native picture ended recording prior to java c'tor call.
|
| + }
|
| +
|
| + @Override
|
| + public int getWidth() {
|
| + return nativeGetWidth(mNativeAwPicture);
|
| + }
|
| +
|
| + @Override
|
| + public int getHeight() {
|
| + return nativeGetHeight(mNativeAwPicture);
|
| + }
|
| +
|
| + // Effectively a local variable of draw(), but held as a member to avoid GC churn.
|
| + private Rect mClipBoundsTemporary = new Rect();
|
| +
|
| + @Override
|
| + public void draw(Canvas canvas) {
|
| + canvas.getClipBounds(mClipBoundsTemporary);
|
| + nativeDraw(mNativeAwPicture, canvas,
|
| + mClipBoundsTemporary.left, mClipBoundsTemporary.top,
|
| + mClipBoundsTemporary.right, mClipBoundsTemporary.bottom);
|
| + }
|
| +
|
| + @Override
|
| + public void writeToStream(OutputStream stream) {
|
| + unsupportedOperation();
|
| + }
|
| +
|
| + private void unsupportedOperation() {
|
| + throw new IllegalStateException("Unsupported in AwPicture");
|
| + }
|
| +
|
| + private static native void nativeDestroy(int nativeAwPicture);
|
| + private native int nativeGetWidth(int nativeAwPicture);
|
| + private native int nativeGetHeight(int nativeAwPicture);
|
| + private native void nativeDraw(int nativeAwPicture, Canvas canvas,
|
| + int left, int top, int right, int bottom);
|
| +}
|
| +
|
|
|