// 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. #include "android_webview/native/aw_picture.h" #include "android_webview/browser/in_process_view_renderer.h" #include "android_webview/native/java_browser_view_renderer_helper.h" #include "jni/AwPicture_jni.h" #include "third_party/skia/include/core/SkPicture.h" namespace android_webview { AwPicture::AwPicture(skia::RefPtr picture) : picture_(picture) { DCHECK(picture_); } AwPicture::~AwPicture() {} void AwPicture::Destroy(JNIEnv* env, jobject obj) { delete this; } jint AwPicture::GetWidth(JNIEnv* env, jobject obj) { return picture_->width(); } jint AwPicture::GetHeight(JNIEnv* env, jobject obj) { return picture_->height(); } namespace { bool RenderPictureToCanvas(SkPicture* picture, SkCanvas* canvas) { picture->draw(canvas); return true; } } void AwPicture::Draw(JNIEnv* env, jobject obj, jobject canvas, jint left, jint top, jint right, jint bottom) { bool ok = InProcessViewRenderer::RenderViaAuxilaryBitmapIfNeeded( canvas, JavaBrowserViewRendererHelper::GetInstance(), gfx::Vector2d(), gfx::Rect(left, top, right - left, bottom - top), base::Bind(&RenderPictureToCanvas, base::Unretained(picture_.get())), this); LOG_IF(ERROR, !ok) << "Couldn't draw picture"; } bool RegisterAwPicture(JNIEnv* env) { return RegisterNativesImpl(env) >= 0; } } // namespace android_webview