root/android_webview/java/src/org/chromium/android_webview/AwPicture.java

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. JNINamespace
  2. run
  3. beginRecording
  4. endRecording
  5. getWidth
  6. getHeight
  7. draw
  8. SuppressWarnings
  9. writeToStream
  10. unsupportedOperation
  11. nativeDestroy
  12. nativeGetWidth
  13. nativeGetHeight
  14. nativeDraw

// 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
    @SuppressWarnings("deprecation")
    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);
}


/* [<][>][^][v][top][bottom][index][help] */