| Index: sky/shell/sky_view.cc
|
| diff --git a/sky/shell/sky_view.cc b/sky/shell/sky_view.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..c7e6d2d06c74440f6a7a6bdb4e198b627bd1163e
|
| --- /dev/null
|
| +++ b/sky/shell/sky_view.cc
|
| @@ -0,0 +1,72 @@
|
| +// Copyright 2015 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 "sky/shell/sky_view.h"
|
| +
|
| +#include <android/input.h>
|
| +#include <android/native_window_jni.h>
|
| +
|
| +#include "base/android/jni_android.h"
|
| +#include "jni/SkyView_jni.h"
|
| +
|
| +namespace sky {
|
| +namespace shell {
|
| +
|
| +// static
|
| +bool SkyView::Register(JNIEnv* env) {
|
| + return RegisterNativesImpl(env);
|
| +}
|
| +
|
| +SkyView::Delegate::~Delegate() {
|
| +}
|
| +
|
| +SkyView::SkyView(Delegate* delegate) : delegate_(delegate), window_(NULL) {
|
| +}
|
| +
|
| +SkyView::~SkyView() {
|
| + if (window_)
|
| + ReleaseWindow();
|
| +}
|
| +
|
| +void SkyView::Init() {
|
| + JNIEnv* env = base::android::AttachCurrentThread();
|
| + Java_SkyView_createForActivity(env, base::android::GetApplicationContext(),
|
| + reinterpret_cast<jlong>(this));
|
| +}
|
| +
|
| +void SkyView::Destroy(JNIEnv* env, jobject obj) {
|
| + delegate_->OnDestroyed();
|
| +}
|
| +
|
| +void SkyView::SurfaceCreated(JNIEnv* env, jobject obj, jobject jsurface) {
|
| + base::android::ScopedJavaLocalRef<jobject> protector(env, jsurface);
|
| + // Note: This ensures that any local references used by
|
| + // ANativeWindow_fromSurface are released immediately. This is needed as a
|
| + // workaround for https://code.google.com/p/android/issues/detail?id=68174
|
| + {
|
| + base::android::ScopedJavaLocalFrame scoped_local_reference_frame(env);
|
| + window_ = ANativeWindow_fromSurface(env, jsurface);
|
| + }
|
| + delegate_->OnAcceleratedWidgetAvailable(window_);
|
| +}
|
| +
|
| +void SkyView::SurfaceDestroyed(JNIEnv* env, jobject obj) {
|
| + DCHECK(window_);
|
| + ReleaseWindow();
|
| +}
|
| +
|
| +void SkyView::SurfaceSetSize(JNIEnv* env,
|
| + jobject obj,
|
| + jint width,
|
| + jint height,
|
| + jfloat density) {
|
| +}
|
| +
|
| +void SkyView::ReleaseWindow() {
|
| + ANativeWindow_release(window_);
|
| + window_ = NULL;
|
| +}
|
| +
|
| +} // namespace shell
|
| +} // namespace sky
|
|
|