Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(117)

Unified Diff: chrome/browser/android/compositor/scene_layer/reader_mode_scene_layer.cc

Issue 1716653002: Implement OverlayPanels as SceneOverlays (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix tests Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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.
+ 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));
Theresa 2016/04/21 21:22:39 Does it make sense for this code (and some of the
pedro (no code reviews) 2016/04/22 02:11:05 I also think moving duplicate code to a shared cla
mdjones 2016/04/22 17:03:42 This is something I'd like to address in a follow-
}
static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& jobj) {

Powered by Google App Engine
This is Rietveld 408576698