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

Side by Side Diff: chrome/browser/android/compositor/scene_layer/reader_mode_scene_layer.cc

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

Powered by Google App Engine
This is Rietveld 408576698