95 lines
2.9 KiB
Java
Executable File
95 lines
2.9 KiB
Java
Executable File
// 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.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 long 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 long mNativeAwPicture;
|
|
private DestroyRunnable(long 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(long 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(long nativeAwPicture);
|
|
private native int nativeGetWidth(long nativeAwPicture);
|
|
private native int nativeGetHeight(long nativeAwPicture);
|
|
private native void nativeDraw(long nativeAwPicture, Canvas canvas,
|
|
int left, int top, int right, int bottom);
|
|
}
|
|
|