| // Copyright 2015 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/ui/android/layouts/scene_layer.h" |
| |
| #include "cc/slim/layer.h" |
| |
| // Must come after all headers that specialize FromJniType() / ToJniType(). |
| #include "chrome/browser/ui/android/layouts/layouts_jni_headers/SceneLayer_jni.h" |
| |
| using base::android::JavaParamRef; |
| using base::android::JavaRef; |
| using base::android::ScopedJavaLocalRef; |
| |
| namespace android { |
| |
| // static |
| SceneLayer* SceneLayer::FromJavaObject(JNIEnv* env, |
| const JavaRef<jobject>& jobj) { |
| if (jobj.is_null()) { |
| return nullptr; |
| } |
| return reinterpret_cast<SceneLayer*>(Java_SceneLayer_getNativePtr(env, jobj)); |
| } |
| |
| SceneLayer::SceneLayer(JNIEnv* env, const JavaRef<jobject>& jobj) |
| : SceneLayer(env, jobj, cc::slim::Layer::Create()) {} |
| |
| SceneLayer::SceneLayer(JNIEnv* env, |
| const JavaRef<jobject>& jobj, |
| scoped_refptr<cc::slim::Layer> layer) |
| : weak_java_scene_layer_(env, jobj), layer_(std::move(layer)) { |
| Java_SceneLayer_setNativePtr(env, jobj, reinterpret_cast<intptr_t>(this)); |
| } |
| |
| SceneLayer::~SceneLayer() { |
| JNIEnv* env = jni_zero::AttachCurrentThread(); |
| ScopedJavaLocalRef<jobject> jobj = weak_java_scene_layer_.get(env); |
| if (jobj.is_null()) { |
| return; |
| } |
| |
| Java_SceneLayer_setNativePtr( |
| env, jobj, reinterpret_cast<intptr_t>(static_cast<SceneLayer*>(nullptr))); |
| } |
| |
| void SceneLayer::RemoveFromParent(JNIEnv* env) { |
| layer()->RemoveFromParent(); |
| } |
| |
| void SceneLayer::OnDetach() { |
| // TODO(crbug.com/40149397): Determine if this needed with the exposure of |
| // RemoveFromParent to java. |
| layer()->RemoveFromParent(); |
| } |
| |
| void SceneLayer::Destroy(JNIEnv* env) { |
| delete this; |
| } |
| |
| bool SceneLayer::ShouldShowBackground() { |
| return false; |
| } |
| |
| SkColor SceneLayer::GetBackgroundColor() { |
| return SK_ColorWHITE; |
| } |
| |
| static jlong JNI_SceneLayer_Init(JNIEnv* env, |
| const JavaParamRef<jobject>& jobj) { |
| // This will automatically bind to the Java object and pass ownership there. |
| SceneLayer* tree_provider = new SceneLayer(env, jobj); |
| return reinterpret_cast<intptr_t>(tree_provider); |
| } |
| |
| } // namespace android |