Index: chrome/browser/android/compositor/scene_layer/reader_mode_scene_layer.cc |
diff --git a/chrome/browser/android/compositor/scene_layer/reader_mode_scene_layer.cc b/chrome/browser/android/compositor/scene_layer/reader_mode_scene_layer.cc |
index c4165671d201e49851263746e4f518f152f574fe..6a61e34e0767ffa9a712cf438f4618cd14d8b369 100644 |
--- a/chrome/browser/android/compositor/scene_layer/reader_mode_scene_layer.cc |
+++ b/chrome/browser/android/compositor/scene_layer/reader_mode_scene_layer.cc |
@@ -6,7 +6,9 @@ |
#include "base/android/jni_android.h" |
#include "base/android/jni_array.h" |
+#include "cc/layers/solid_color_layer.h" |
#include "chrome/browser/android/compositor/layer/reader_mode_layer.h" |
+#include "content/public/browser/android/compositor.h" |
#include "content/public/browser/android/content_view_core.h" |
#include "jni/ReaderModeSceneLayer_jni.h" |
#include "ui/android/resources/resource_manager_impl.h" |
@@ -16,7 +18,12 @@ namespace chrome { |
namespace android { |
ReaderModeSceneLayer::ReaderModeSceneLayer(JNIEnv* env, jobject jobj) |
- : SceneLayer(env, jobj) { |
+ : SceneLayer(env, jobj), |
+ base_page_brightness_(1.0f), |
+ content_container_(cc::Layer::Create()) { |
+ // Responsible for moving the base page without modifying the layer itself. |
+ content_container_->SetIsDrawable(true); |
+ content_container_->SetPosition(gfx::PointF(0.0f, 0.0f)); |
} |
ReaderModeSceneLayer::~ReaderModeSceneLayer() { |
@@ -29,7 +36,13 @@ void ReaderModeSceneLayer::CreateReaderModeLayer( |
ui::ResourceManager* resource_manager = |
ui::ResourceManagerImpl::FromJavaObject(jresource_manager); |
reader_mode_layer_ = ReaderModeLayer::Create(resource_manager); |
- layer_->AddChild(reader_mode_layer_->layer()); |
+ |
+ // The Reader Mode layer is initially invisible. |
pedro (no code reviews)
2016/05/04 22:59:34
TODO to move duplicated code to a super class?
mdjones
2016/05/05 00:46:20
Done.
|
+ reader_mode_layer_->layer()->SetHideLayerAndSubtree(true); |
+ |
+ // Add all layers to the tree; this is order dependent. |
+ layer()->AddChild(content_container_); |
+ layer()->AddChild(reader_mode_layer_->layer()); |
} |
void ReaderModeSceneLayer::SetResourceIds( |
@@ -53,6 +66,8 @@ void ReaderModeSceneLayer::Update( |
JNIEnv* env, |
const JavaParamRef<jobject>& object, |
jfloat dp_to_px, |
+ jfloat base_page_brightness, |
+ jfloat base_page_offset, |
const JavaParamRef<jobject>& jcontent_view_core, |
jfloat panel_X, |
jfloat panel_y, |
@@ -73,6 +88,19 @@ void ReaderModeSceneLayer::Update( |
: content::ContentViewCore::GetNativeContentViewCore( |
env, jcontent_view_core); |
+ // Fade the base page out. |
+ if (base_page_brightness_ != base_page_brightness) { |
+ base_page_brightness_ = base_page_brightness; |
+ cc::FilterOperations filters; |
+ if (base_page_brightness < 1.f) |
+ filters.Append( |
+ cc::FilterOperation::CreateBrightnessFilter(base_page_brightness)); |
+ content_container_->SetFilters(filters); |
+ } |
+ |
+ // Move the base page contents up. |
+ content_container_->SetPosition(gfx::PointF(0.0f, base_page_offset)); |
+ |
reader_mode_layer_->SetProperties( |
dp_to_px, |
content_view_core, |
@@ -87,6 +115,35 @@ void ReaderModeSceneLayer::Update( |
bar_border_height, |
bar_shadow_visible, |
bar_shadow_opacity); |
+ |
+ // Make the layer visible if it is not already. |
+ reader_mode_layer_->layer()->SetHideLayerAndSubtree(false); |
+} |
+ |
+void ReaderModeSceneLayer::SetContentTree( |
+ JNIEnv* env, |
+ const JavaParamRef<jobject>& jobj, |
+ const JavaParamRef<jobject>& jcontent_tree) { |
+ SceneLayer* content_tree = FromJavaObject(env, jcontent_tree); |
+ if (!content_tree || !content_tree->layer()) return; |
+ |
+ if (!content_tree->layer()->parent() |
+ || (content_tree->layer()->parent()->id() != content_container_->id())) { |
+ content_container_->AddChild(content_tree->layer()); |
+ } |
+} |
+ |
+void ReaderModeSceneLayer::HideTree(JNIEnv* env, |
+ const JavaParamRef<jobject>& jobj) { |
+ if (reader_mode_layer_) { |
+ reader_mode_layer_->layer()->SetHideLayerAndSubtree(true); |
+ } |
+ // Reset base page brightness. |
+ cc::FilterOperations filters; |
+ filters.Append(cc::FilterOperation::CreateBrightnessFilter(1.0f)); |
+ content_container_->SetFilters(filters); |
+ // Reset base page offset. |
+ content_container_->SetPosition(gfx::PointF(0.0f, 0.0f)); |
} |
static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& jobj) { |