Chromium Code Reviews| 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)); | |
| 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 |
| OLD | NEW |