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

Side by Side 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/android/compositor/scene_layer/reader_mode_scene_layer. h" 5 #include "chrome/browser/android/compositor/scene_layer/reader_mode_scene_layer. h"
6 6
7 #include "base/android/jni_android.h" 7 #include "base/android/jni_android.h"
8 #include "base/android/jni_array.h" 8 #include "base/android/jni_array.h"
9 #include "cc/layers/solid_color_layer.h"
9 #include "chrome/browser/android/compositor/layer/reader_mode_layer.h" 10 #include "chrome/browser/android/compositor/layer/reader_mode_layer.h"
11 #include "content/public/browser/android/compositor.h"
10 #include "content/public/browser/android/content_view_core.h" 12 #include "content/public/browser/android/content_view_core.h"
11 #include "jni/ReaderModeSceneLayer_jni.h" 13 #include "jni/ReaderModeSceneLayer_jni.h"
12 #include "ui/android/resources/resource_manager_impl.h" 14 #include "ui/android/resources/resource_manager_impl.h"
13 #include "ui/gfx/android/java_bitmap.h" 15 #include "ui/gfx/android/java_bitmap.h"
14 16
15 namespace chrome { 17 namespace chrome {
16 namespace android { 18 namespace android {
17 19
18 ReaderModeSceneLayer::ReaderModeSceneLayer(JNIEnv* env, jobject jobj) 20 ReaderModeSceneLayer::ReaderModeSceneLayer(JNIEnv* env, jobject jobj)
19 : SceneLayer(env, jobj) { 21 : SceneLayer(env, jobj),
22 base_page_brightness_(1.0f),
23 content_container_(cc::Layer::Create()) {
24 // Responsible for moving the base page without modifying the layer itself.
25 content_container_->SetIsDrawable(true);
26 content_container_->SetPosition(gfx::PointF(0.0f, 0.0f));
20 } 27 }
21 28
22 ReaderModeSceneLayer::~ReaderModeSceneLayer() { 29 ReaderModeSceneLayer::~ReaderModeSceneLayer() {
23 } 30 }
24 31
25 void ReaderModeSceneLayer::CreateReaderModeLayer( 32 void ReaderModeSceneLayer::CreateReaderModeLayer(
26 JNIEnv* env, 33 JNIEnv* env,
27 const JavaParamRef<jobject>& object, 34 const JavaParamRef<jobject>& object,
28 const JavaParamRef<jobject>& jresource_manager) { 35 const JavaParamRef<jobject>& jresource_manager) {
29 ui::ResourceManager* resource_manager = 36 ui::ResourceManager* resource_manager =
30 ui::ResourceManagerImpl::FromJavaObject(jresource_manager); 37 ui::ResourceManagerImpl::FromJavaObject(jresource_manager);
31 reader_mode_layer_ = ReaderModeLayer::Create(resource_manager); 38 reader_mode_layer_ = ReaderModeLayer::Create(resource_manager);
32 layer_->AddChild(reader_mode_layer_->layer()); 39
40 // The Reader Mode layer is initially invisible.
41 reader_mode_layer_->layer()->SetHideLayerAndSubtree(true);
42
43 // Add all layers to the tree; this is order dependent.
44 layer()->AddChild(content_container_);
45 layer()->AddChild(reader_mode_layer_->layer());
33 } 46 }
34 47
35 void ReaderModeSceneLayer::SetResourceIds( 48 void ReaderModeSceneLayer::SetResourceIds(
36 JNIEnv* env, 49 JNIEnv* env,
37 const JavaParamRef<jobject>& object, 50 const JavaParamRef<jobject>& object,
38 jint text_resource_id, 51 jint text_resource_id,
39 jint bar_background_resource_id, 52 jint bar_background_resource_id,
40 jint bar_shadow_resource_id, 53 jint bar_shadow_resource_id,
41 jint panel_icon_resource_id, 54 jint panel_icon_resource_id,
42 jint close_icon_resource_id) { 55 jint close_icon_resource_id) {
43 56
44 reader_mode_layer_->SetResourceIds( 57 reader_mode_layer_->SetResourceIds(
45 text_resource_id, 58 text_resource_id,
46 bar_background_resource_id, 59 bar_background_resource_id,
47 bar_shadow_resource_id, 60 bar_shadow_resource_id,
48 panel_icon_resource_id, 61 panel_icon_resource_id,
49 close_icon_resource_id); 62 close_icon_resource_id);
50 } 63 }
51 64
52 void ReaderModeSceneLayer::Update( 65 void ReaderModeSceneLayer::Update(
53 JNIEnv* env, 66 JNIEnv* env,
54 const JavaParamRef<jobject>& object, 67 const JavaParamRef<jobject>& object,
55 jfloat dp_to_px, 68 jfloat dp_to_px,
69 jfloat base_page_brightness,
70 jfloat base_page_offset,
56 const JavaParamRef<jobject>& jcontent_view_core, 71 const JavaParamRef<jobject>& jcontent_view_core,
57 jfloat panel_X, 72 jfloat panel_X,
58 jfloat panel_y, 73 jfloat panel_y,
59 jfloat panel_width, 74 jfloat panel_width,
60 jfloat panel_height, 75 jfloat panel_height,
61 jfloat bar_margin_side, 76 jfloat bar_margin_side,
62 jfloat bar_height, 77 jfloat bar_height,
63 jfloat text_opacity, 78 jfloat text_opacity,
64 jboolean bar_border_visible, 79 jboolean bar_border_visible,
65 jfloat bar_border_height, 80 jfloat bar_border_height,
66 jboolean bar_shadow_visible, 81 jboolean bar_shadow_visible,
67 jfloat bar_shadow_opacity) { 82 jfloat bar_shadow_opacity) {
68 // NOTE(mdjones): It is possible to render the panel before content has been 83 // NOTE(mdjones): It is possible to render the panel before content has been
69 // created. If this is the case, do not attempt to access the ContentViewCore 84 // created. If this is the case, do not attempt to access the ContentViewCore
70 // and instead pass null. 85 // and instead pass null.
71 content::ContentViewCore* content_view_core = 86 content::ContentViewCore* content_view_core =
72 !jcontent_view_core ? NULL 87 !jcontent_view_core ? NULL
73 : content::ContentViewCore::GetNativeContentViewCore( 88 : content::ContentViewCore::GetNativeContentViewCore(
74 env, jcontent_view_core); 89 env, jcontent_view_core);
75 90
91 // Fade the base page out.
92 if (base_page_brightness_ != base_page_brightness) {
93 base_page_brightness_ = base_page_brightness;
94 cc::FilterOperations filters;
95 if (base_page_brightness < 1.f)
96 filters.Append(
97 cc::FilterOperation::CreateBrightnessFilter(base_page_brightness));
98 content_container_->SetFilters(filters);
99 }
100
101 // Move the base page contents up.
102 content_container_->SetPosition(gfx::PointF(0.0f, base_page_offset));
103
76 reader_mode_layer_->SetProperties( 104 reader_mode_layer_->SetProperties(
77 dp_to_px, 105 dp_to_px,
78 content_view_core, 106 content_view_core,
79 panel_X, 107 panel_X,
80 panel_y, 108 panel_y,
81 panel_width, 109 panel_width,
82 panel_height, 110 panel_height,
83 bar_margin_side, 111 bar_margin_side,
84 bar_height, 112 bar_height,
85 text_opacity, 113 text_opacity,
86 bar_border_visible, 114 bar_border_visible,
87 bar_border_height, 115 bar_border_height,
88 bar_shadow_visible, 116 bar_shadow_visible,
89 bar_shadow_opacity); 117 bar_shadow_opacity);
118
119 // Make the layer visible if it is not already.
120 reader_mode_layer_->layer()->SetHideLayerAndSubtree(false);
121 }
122
123 void ReaderModeSceneLayer::SetContentTree(
124 JNIEnv* env,
125 const JavaParamRef<jobject>& jobj,
126 const JavaParamRef<jobject>& jcontent_tree) {
127 SceneLayer* content_tree = FromJavaObject(env, jcontent_tree);
128 if (!content_tree || !content_tree->layer()) return;
129
130 if (!content_tree->layer()->parent()
131 || (content_tree->layer()->parent()->id() != content_container_->id())) {
132 content_container_->AddChild(content_tree->layer());
133 }
134 }
135
136 void ReaderModeSceneLayer::HideTree(JNIEnv* env,
137 const JavaParamRef<jobject>& jobj) {
138 if (reader_mode_layer_) {
139 reader_mode_layer_->layer()->SetHideLayerAndSubtree(true);
140 }
141 // Reset base page brightness.
142 cc::FilterOperations filters;
143 filters.Append(cc::FilterOperation::CreateBrightnessFilter(1.0f));
144 content_container_->SetFilters(filters);
145 // Reset base page offset.
146 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-
90 } 147 }
91 148
92 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& jobj) { 149 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& jobj) {
93 // This will automatically bind to the Java object and pass ownership there. 150 // This will automatically bind to the Java object and pass ownership there.
94 ReaderModeSceneLayer* reader_mode_scene_layer = 151 ReaderModeSceneLayer* reader_mode_scene_layer =
95 new ReaderModeSceneLayer(env, jobj); 152 new ReaderModeSceneLayer(env, jobj);
96 return reinterpret_cast<intptr_t>(reader_mode_scene_layer); 153 return reinterpret_cast<intptr_t>(reader_mode_scene_layer);
97 } 154 }
98 155
99 bool RegisterReaderModeSceneLayer(JNIEnv* env) { 156 bool RegisterReaderModeSceneLayer(JNIEnv* env) {
100 return RegisterNativesImpl(env); 157 return RegisterNativesImpl(env);
101 } 158 }
102 159
103 } // namespace android 160 } // namespace android
104 } // namespace chrome 161 } // namespace chrome
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698