OLD | NEW |
---|---|
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)); | |
27 layer()->AddChild(content_container_); | |
20 } | 28 } |
21 | 29 |
22 ReaderModeSceneLayer::~ReaderModeSceneLayer() { | 30 ReaderModeSceneLayer::~ReaderModeSceneLayer() { |
23 } | 31 } |
24 | 32 |
25 void ReaderModeSceneLayer::CreateReaderModeLayer( | 33 void ReaderModeSceneLayer::CreateReaderModeLayer( |
26 JNIEnv* env, | 34 JNIEnv* env, |
27 const JavaParamRef<jobject>& object, | 35 const JavaParamRef<jobject>& object, |
28 const JavaParamRef<jobject>& jresource_manager) { | 36 const JavaParamRef<jobject>& jresource_manager) { |
29 ui::ResourceManager* resource_manager = | 37 ui::ResourceManager* resource_manager = |
30 ui::ResourceManagerImpl::FromJavaObject(jresource_manager); | 38 ui::ResourceManagerImpl::FromJavaObject(jresource_manager); |
31 reader_mode_layer_ = ReaderModeLayer::Create(resource_manager); | 39 reader_mode_layer_ = ReaderModeLayer::Create(resource_manager); |
32 layer_->AddChild(reader_mode_layer_->layer()); | 40 |
41 // The Reader Mode layer is initially invisible. | |
42 reader_mode_layer_->layer()->SetHideLayerAndSubtree(true); | |
43 | |
44 layer()->AddChild(reader_mode_layer_->layer()); | |
33 } | 45 } |
34 | 46 |
35 void ReaderModeSceneLayer::SetResourceIds( | 47 void ReaderModeSceneLayer::SetResourceIds( |
36 JNIEnv* env, | 48 JNIEnv* env, |
37 const JavaParamRef<jobject>& object, | 49 const JavaParamRef<jobject>& object, |
38 jint text_resource_id, | 50 jint text_resource_id, |
39 jint bar_background_resource_id, | 51 jint bar_background_resource_id, |
40 jint bar_shadow_resource_id, | 52 jint bar_shadow_resource_id, |
41 jint panel_icon_resource_id, | 53 jint panel_icon_resource_id, |
42 jint close_icon_resource_id) { | 54 jint close_icon_resource_id) { |
43 | 55 |
44 reader_mode_layer_->SetResourceIds( | 56 reader_mode_layer_->SetResourceIds( |
45 text_resource_id, | 57 text_resource_id, |
46 bar_background_resource_id, | 58 bar_background_resource_id, |
47 bar_shadow_resource_id, | 59 bar_shadow_resource_id, |
48 panel_icon_resource_id, | 60 panel_icon_resource_id, |
49 close_icon_resource_id); | 61 close_icon_resource_id); |
50 } | 62 } |
51 | 63 |
52 void ReaderModeSceneLayer::Update( | 64 void ReaderModeSceneLayer::Update( |
53 JNIEnv* env, | 65 JNIEnv* env, |
54 const JavaParamRef<jobject>& object, | 66 const JavaParamRef<jobject>& object, |
55 jfloat dp_to_px, | 67 jfloat dp_to_px, |
68 jfloat base_page_brightness, | |
69 jfloat base_page_offset, | |
56 const JavaParamRef<jobject>& jcontent_view_core, | 70 const JavaParamRef<jobject>& jcontent_view_core, |
57 jfloat panel_X, | 71 jfloat panel_X, |
58 jfloat panel_y, | 72 jfloat panel_y, |
59 jfloat panel_width, | 73 jfloat panel_width, |
60 jfloat panel_height, | 74 jfloat panel_height, |
61 jfloat bar_margin_side, | 75 jfloat bar_margin_side, |
62 jfloat bar_height, | 76 jfloat bar_height, |
63 jfloat text_opacity, | 77 jfloat text_opacity, |
64 jboolean bar_border_visible, | 78 jboolean bar_border_visible, |
65 jfloat bar_border_height, | 79 jfloat bar_border_height, |
66 jboolean bar_shadow_visible, | 80 jboolean bar_shadow_visible, |
67 jfloat bar_shadow_opacity) { | 81 jfloat bar_shadow_opacity) { |
68 // NOTE(mdjones): It is possible to render the panel before content has been | 82 // 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 | 83 // created. If this is the case, do not attempt to access the ContentViewCore |
70 // and instead pass null. | 84 // and instead pass null. |
71 content::ContentViewCore* content_view_core = | 85 content::ContentViewCore* content_view_core = |
72 !jcontent_view_core ? NULL | 86 !jcontent_view_core ? NULL |
73 : content::ContentViewCore::GetNativeContentViewCore( | 87 : content::ContentViewCore::GetNativeContentViewCore( |
74 env, jcontent_view_core); | 88 env, jcontent_view_core); |
75 | 89 |
90 // Fade the base page out. | |
91 if (base_page_brightness_ != base_page_brightness) { | |
92 base_page_brightness_ = base_page_brightness; | |
93 cc::FilterOperations filters; | |
94 if (base_page_brightness < 1.f) | |
David Trainor- moved to gerrit
2016/05/13 16:14:34
Same here. Maybe check the styleguide first?
mdjones
2016/05/13 20:30:07
Checked, you are correct.
| |
95 filters.Append( | |
96 cc::FilterOperation::CreateBrightnessFilter(base_page_brightness)); | |
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 | |
76 reader_mode_layer_->SetProperties( | 103 reader_mode_layer_->SetProperties( |
77 dp_to_px, | 104 dp_to_px, |
78 content_view_core, | 105 content_view_core, |
79 panel_X, | 106 panel_X, |
80 panel_y, | 107 panel_y, |
81 panel_width, | 108 panel_width, |
82 panel_height, | 109 panel_height, |
83 bar_margin_side, | 110 bar_margin_side, |
84 bar_height, | 111 bar_height, |
85 text_opacity, | 112 text_opacity, |
86 bar_border_visible, | 113 bar_border_visible, |
87 bar_border_height, | 114 bar_border_height, |
88 bar_shadow_visible, | 115 bar_shadow_visible, |
89 bar_shadow_opacity); | 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)); | |
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 |
OLD | NEW |