| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/tab_strip_scene_layer.h" | 5 #include "chrome/browser/android/compositor/scene_layer/tab_strip_scene_layer.h" |
| 6 | 6 |
| 7 #include "base/android/jni_android.h" | 7 #include "base/android/jni_android.h" |
| 8 #include "cc/resources/scoped_ui_resource.h" | 8 #include "cc/resources/scoped_ui_resource.h" |
| 9 #include "chrome/browser/android/compositor/layer/tab_handle_layer.h" | 9 #include "chrome/browser/android/compositor/layer/tab_handle_layer.h" |
| 10 #include "chrome/browser/android/compositor/layer_title_cache.h" | 10 #include "chrome/browser/android/compositor/layer_title_cache.h" |
| 11 #include "content/public/browser/android/compositor.h" | 11 #include "content/public/browser/android/compositor.h" |
| 12 #include "jni/TabStripSceneLayer_jni.h" | 12 #include "jni/TabStripSceneLayer_jni.h" |
| 13 #include "ui/android/resources/nine_patch_resource.h" |
| 13 #include "ui/android/resources/resource_manager_impl.h" | 14 #include "ui/android/resources/resource_manager_impl.h" |
| 14 #include "ui/gfx/transform.h" | 15 #include "ui/gfx/transform.h" |
| 15 | 16 |
| 16 using base::android::JavaParamRef; | 17 using base::android::JavaParamRef; |
| 17 | 18 |
| 18 namespace android { | 19 namespace android { |
| 19 | 20 |
| 20 TabStripSceneLayer::TabStripSceneLayer(JNIEnv* env, jobject jobj) | 21 TabStripSceneLayer::TabStripSceneLayer(JNIEnv* env, jobject jobj) |
| 21 : SceneLayer(env, jobj), | 22 : SceneLayer(env, jobj), |
| 22 tab_strip_layer_(cc::SolidColorLayer::Create()), | 23 tab_strip_layer_(cc::SolidColorLayer::Create()), |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 140 const JavaParamRef<jobject>& jobj, | 141 const JavaParamRef<jobject>& jobj, |
| 141 jint resource_id, | 142 jint resource_id, |
| 142 jfloat x, | 143 jfloat x, |
| 143 jfloat y, | 144 jfloat y, |
| 144 jfloat width, | 145 jfloat width, |
| 145 jfloat height, | 146 jfloat height, |
| 146 jboolean visible, | 147 jboolean visible, |
| 147 const JavaParamRef<jobject>& jresource_manager) { | 148 const JavaParamRef<jobject>& jresource_manager) { |
| 148 ui::ResourceManager* resource_manager = | 149 ui::ResourceManager* resource_manager = |
| 149 ui::ResourceManagerImpl::FromJavaObject(jresource_manager); | 150 ui::ResourceManagerImpl::FromJavaObject(jresource_manager); |
| 150 ui::ResourceManager::Resource* button_resource = | 151 ui::Resource* button_resource = resource_manager->GetResource( |
| 151 resource_manager->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC, | 152 ui::ANDROID_RESOURCE_TYPE_STATIC, resource_id); |
| 152 resource_id); | |
| 153 | 153 |
| 154 new_tab_button_->SetUIResourceId(button_resource->ui_resource->id()); | 154 new_tab_button_->SetUIResourceId(button_resource->ui_resource()->id()); |
| 155 float left_offset = (width - button_resource->size.width()) / 2; | 155 float left_offset = (width - button_resource->size().width()) / 2; |
| 156 float top_offset = (height - button_resource->size.height()) / 2; | 156 float top_offset = (height - button_resource->size().height()) / 2; |
| 157 new_tab_button_->SetPosition(gfx::PointF(x + left_offset, y + top_offset)); | 157 new_tab_button_->SetPosition(gfx::PointF(x + left_offset, y + top_offset)); |
| 158 new_tab_button_->SetBounds(button_resource->size); | 158 new_tab_button_->SetBounds(button_resource->size()); |
| 159 new_tab_button_->SetHideLayerAndSubtree(!visible); | 159 new_tab_button_->SetHideLayerAndSubtree(!visible); |
| 160 } | 160 } |
| 161 | 161 |
| 162 void TabStripSceneLayer::UpdateModelSelectorButton( | 162 void TabStripSceneLayer::UpdateModelSelectorButton( |
| 163 JNIEnv* env, | 163 JNIEnv* env, |
| 164 const JavaParamRef<jobject>& jobj, | 164 const JavaParamRef<jobject>& jobj, |
| 165 jint resource_id, | 165 jint resource_id, |
| 166 jfloat x, | 166 jfloat x, |
| 167 jfloat y, | 167 jfloat y, |
| 168 jfloat width, | 168 jfloat width, |
| 169 jfloat height, | 169 jfloat height, |
| 170 jboolean incognito, | 170 jboolean incognito, |
| 171 jboolean visible, | 171 jboolean visible, |
| 172 const JavaParamRef<jobject>& jresource_manager) { | 172 const JavaParamRef<jobject>& jresource_manager) { |
| 173 ui::ResourceManager* resource_manager = | 173 ui::ResourceManager* resource_manager = |
| 174 ui::ResourceManagerImpl::FromJavaObject(jresource_manager); | 174 ui::ResourceManagerImpl::FromJavaObject(jresource_manager); |
| 175 ui::ResourceManager::Resource* button_resource = | 175 ui::Resource* button_resource = resource_manager->GetResource( |
| 176 resource_manager->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC, | 176 ui::ANDROID_RESOURCE_TYPE_STATIC, resource_id); |
| 177 resource_id); | |
| 178 | 177 |
| 179 model_selector_button_->SetUIResourceId(button_resource->ui_resource->id()); | 178 model_selector_button_->SetUIResourceId(button_resource->ui_resource()->id()); |
| 180 float left_offset = (width - button_resource->size.width()) / 2; | 179 float left_offset = (width - button_resource->size().width()) / 2; |
| 181 float top_offset = (height - button_resource->size.height()) / 2; | 180 float top_offset = (height - button_resource->size().height()) / 2; |
| 182 model_selector_button_->SetPosition( | 181 model_selector_button_->SetPosition( |
| 183 gfx::PointF(x + left_offset, y + top_offset)); | 182 gfx::PointF(x + left_offset, y + top_offset)); |
| 184 model_selector_button_->SetBounds(button_resource->size); | 183 model_selector_button_->SetBounds(button_resource->size()); |
| 185 model_selector_button_->SetHideLayerAndSubtree(!visible); | 184 model_selector_button_->SetHideLayerAndSubtree(!visible); |
| 186 } | 185 } |
| 187 | 186 |
| 188 void TabStripSceneLayer::UpdateTabStripLeftFade( | 187 void TabStripSceneLayer::UpdateTabStripLeftFade( |
| 189 JNIEnv* env, | 188 JNIEnv* env, |
| 190 const JavaParamRef<jobject>& jobj, | 189 const JavaParamRef<jobject>& jobj, |
| 191 jint resource_id, | 190 jint resource_id, |
| 192 jfloat opacity, | 191 jfloat opacity, |
| 193 const JavaParamRef<jobject>& jresource_manager) { | 192 const JavaParamRef<jobject>& jresource_manager) { |
| 194 | 193 |
| 195 // Hide layer if it's not visible. | 194 // Hide layer if it's not visible. |
| 196 if (opacity == 0.f) { | 195 if (opacity == 0.f) { |
| 197 left_fade_->SetHideLayerAndSubtree(true); | 196 left_fade_->SetHideLayerAndSubtree(true); |
| 198 return; | 197 return; |
| 199 } | 198 } |
| 200 | 199 |
| 201 // Set UI resource. | 200 // Set UI resource. |
| 202 ui::ResourceManager* resource_manager = | 201 ui::ResourceManager* resource_manager = |
| 203 ui::ResourceManagerImpl::FromJavaObject(jresource_manager); | 202 ui::ResourceManagerImpl::FromJavaObject(jresource_manager); |
| 204 ui::ResourceManager::Resource* fade_resource = | 203 ui::Resource* fade_resource = resource_manager->GetResource( |
| 205 resource_manager->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC, | 204 ui::ANDROID_RESOURCE_TYPE_STATIC, resource_id); |
| 206 resource_id); | 205 left_fade_->SetUIResourceId(fade_resource->ui_resource()->id()); |
| 207 left_fade_->SetUIResourceId(fade_resource->ui_resource->id()); | |
| 208 | 206 |
| 209 // The same resource is used for both left and right fade, so the | 207 // The same resource is used for both left and right fade, so the |
| 210 // resource must be rotated for the left fade. | 208 // resource must be rotated for the left fade. |
| 211 gfx::Transform fade_transform; | 209 gfx::Transform fade_transform; |
| 212 fade_transform.RotateAboutYAxis(180.0); | 210 fade_transform.RotateAboutYAxis(180.0); |
| 213 left_fade_->SetTransform(fade_transform); | 211 left_fade_->SetTransform(fade_transform); |
| 214 | 212 |
| 215 // Set opacity. | 213 // Set opacity. |
| 216 left_fade_->SetOpacity(opacity); | 214 left_fade_->SetOpacity(opacity); |
| 217 | 215 |
| 218 // Set bounds. Use the parent layer height so the 1px fade resource is | 216 // Set bounds. Use the parent layer height so the 1px fade resource is |
| 219 // stretched vertically. | 217 // stretched vertically. |
| 220 left_fade_->SetBounds(gfx::Size(fade_resource->size.width(), | 218 left_fade_->SetBounds(gfx::Size(fade_resource->size().width(), |
| 221 scrollable_strip_layer_->bounds().height())); | 219 scrollable_strip_layer_->bounds().height())); |
| 222 | 220 |
| 223 // Set position. The rotation set above requires the layer to be offset | 221 // Set position. The rotation set above requires the layer to be offset |
| 224 // by its width in order to display on the left edge. | 222 // by its width in order to display on the left edge. |
| 225 left_fade_->SetPosition(gfx::PointF(fade_resource->size.width(), 0)); | 223 left_fade_->SetPosition(gfx::PointF(fade_resource->size().width(), 0)); |
| 226 | 224 |
| 227 // Ensure layer is visible. | 225 // Ensure layer is visible. |
| 228 left_fade_->SetHideLayerAndSubtree(false); | 226 left_fade_->SetHideLayerAndSubtree(false); |
| 229 } | 227 } |
| 230 | 228 |
| 231 void TabStripSceneLayer::UpdateTabStripRightFade( | 229 void TabStripSceneLayer::UpdateTabStripRightFade( |
| 232 JNIEnv* env, | 230 JNIEnv* env, |
| 233 const JavaParamRef<jobject>& jobj, | 231 const JavaParamRef<jobject>& jobj, |
| 234 jint resource_id, | 232 jint resource_id, |
| 235 jfloat opacity, | 233 jfloat opacity, |
| 236 const JavaParamRef<jobject>& jresource_manager) { | 234 const JavaParamRef<jobject>& jresource_manager) { |
| 237 | 235 |
| 238 // Hide layer if it's not visible. | 236 // Hide layer if it's not visible. |
| 239 if (opacity == 0.f) { | 237 if (opacity == 0.f) { |
| 240 right_fade_->SetHideLayerAndSubtree(true); | 238 right_fade_->SetHideLayerAndSubtree(true); |
| 241 return; | 239 return; |
| 242 } | 240 } |
| 243 | 241 |
| 244 // Set UI resource. | 242 // Set UI resource. |
| 245 ui::ResourceManager* resource_manager = | 243 ui::ResourceManager* resource_manager = |
| 246 ui::ResourceManagerImpl::FromJavaObject(jresource_manager); | 244 ui::ResourceManagerImpl::FromJavaObject(jresource_manager); |
| 247 ui::ResourceManager::Resource* fade_resource = | 245 ui::Resource* fade_resource = resource_manager->GetResource( |
| 248 resource_manager->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC, | 246 ui::ANDROID_RESOURCE_TYPE_STATIC, resource_id); |
| 249 resource_id); | 247 right_fade_->SetUIResourceId(fade_resource->ui_resource()->id()); |
| 250 right_fade_->SetUIResourceId(fade_resource->ui_resource->id()); | |
| 251 | 248 |
| 252 // Set opacity. | 249 // Set opacity. |
| 253 right_fade_->SetOpacity(opacity); | 250 right_fade_->SetOpacity(opacity); |
| 254 | 251 |
| 255 // Set bounds. Use the parent layer height so the 1px fade resource is | 252 // Set bounds. Use the parent layer height so the 1px fade resource is |
| 256 // stretched vertically. | 253 // stretched vertically. |
| 257 right_fade_->SetBounds(gfx::Size( | 254 right_fade_->SetBounds(gfx::Size(fade_resource->size().width(), |
| 258 fade_resource->size.width(), | 255 scrollable_strip_layer_->bounds().height())); |
| 259 scrollable_strip_layer_->bounds().height())); | |
| 260 | 256 |
| 261 // Set position. The right fade is positioned at the end of the tab strip. | 257 // Set position. The right fade is positioned at the end of the tab strip. |
| 262 float x = | 258 float x = |
| 263 scrollable_strip_layer_->bounds().width() - fade_resource->size.width(); | 259 scrollable_strip_layer_->bounds().width() - fade_resource->size().width(); |
| 264 right_fade_->SetPosition(gfx::PointF(x, 0)); | 260 right_fade_->SetPosition(gfx::PointF(x, 0)); |
| 265 | 261 |
| 266 // Ensure layer is visible. | 262 // Ensure layer is visible. |
| 267 right_fade_->SetHideLayerAndSubtree(false); | 263 right_fade_->SetHideLayerAndSubtree(false); |
| 268 } | 264 } |
| 269 | 265 |
| 270 void TabStripSceneLayer::PutStripTabLayer( | 266 void TabStripSceneLayer::PutStripTabLayer( |
| 271 JNIEnv* env, | 267 JNIEnv* env, |
| 272 const JavaParamRef<jobject>& jobj, | 268 const JavaParamRef<jobject>& jobj, |
| 273 jint id, | 269 jint id, |
| (...skipping 11 matching lines...) Expand all Loading... |
| 285 jboolean is_loading, | 281 jboolean is_loading, |
| 286 jfloat spinner_rotation, | 282 jfloat spinner_rotation, |
| 287 jfloat border_opacity, | 283 jfloat border_opacity, |
| 288 const JavaParamRef<jobject>& jlayer_title_cache, | 284 const JavaParamRef<jobject>& jlayer_title_cache, |
| 289 const JavaParamRef<jobject>& jresource_manager) { | 285 const JavaParamRef<jobject>& jresource_manager) { |
| 290 LayerTitleCache* layer_title_cache = | 286 LayerTitleCache* layer_title_cache = |
| 291 LayerTitleCache::FromJavaObject(jlayer_title_cache); | 287 LayerTitleCache::FromJavaObject(jlayer_title_cache); |
| 292 ui::ResourceManager* resource_manager = | 288 ui::ResourceManager* resource_manager = |
| 293 ui::ResourceManagerImpl::FromJavaObject(jresource_manager); | 289 ui::ResourceManagerImpl::FromJavaObject(jresource_manager); |
| 294 scoped_refptr<TabHandleLayer> layer = GetNextLayer(layer_title_cache); | 290 scoped_refptr<TabHandleLayer> layer = GetNextLayer(layer_title_cache); |
| 295 ui::ResourceManager::Resource* tab_handle_resource = | 291 ui::NinePatchResource* tab_handle_resource = |
| 296 resource_manager->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC, | 292 ui::NinePatchResource::From(resource_manager->GetResource( |
| 297 handle_resource_id); | 293 ui::ANDROID_RESOURCE_TYPE_STATIC, handle_resource_id)); |
| 298 ui::ResourceManager::Resource* close_button_resource = | 294 ui::Resource* close_button_resource = resource_manager->GetResource( |
| 299 resource_manager->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC, | 295 ui::ANDROID_RESOURCE_TYPE_STATIC, close_resource_id); |
| 300 close_resource_id); | |
| 301 layer->SetProperties(id, close_button_resource, tab_handle_resource, | 296 layer->SetProperties(id, close_button_resource, tab_handle_resource, |
| 302 foreground, close_pressed, toolbar_width, x, y, width, | 297 foreground, close_pressed, toolbar_width, x, y, width, |
| 303 height, content_offset_x, close_button_alpha, is_loading, | 298 height, content_offset_x, close_button_alpha, is_loading, |
| 304 spinner_rotation, background_tab_brightness_, | 299 spinner_rotation, background_tab_brightness_, |
| 305 border_opacity); | 300 border_opacity); |
| 306 } | 301 } |
| 307 | 302 |
| 308 scoped_refptr<TabHandleLayer> TabStripSceneLayer::GetNextLayer( | 303 scoped_refptr<TabHandleLayer> TabStripSceneLayer::GetNextLayer( |
| 309 LayerTitleCache* layer_title_cache) { | 304 LayerTitleCache* layer_title_cache) { |
| 310 if (write_index_ < tab_handle_layers_.size()) | 305 if (write_index_ < tab_handle_layers_.size()) |
| (...skipping 23 matching lines...) Expand all Loading... |
| 334 // This will automatically bind to the Java object and pass ownership there. | 329 // This will automatically bind to the Java object and pass ownership there. |
| 335 TabStripSceneLayer* scene_layer = new TabStripSceneLayer(env, jobj); | 330 TabStripSceneLayer* scene_layer = new TabStripSceneLayer(env, jobj); |
| 336 return reinterpret_cast<intptr_t>(scene_layer); | 331 return reinterpret_cast<intptr_t>(scene_layer); |
| 337 } | 332 } |
| 338 | 333 |
| 339 bool RegisterTabStripSceneLayer(JNIEnv* env) { | 334 bool RegisterTabStripSceneLayer(JNIEnv* env) { |
| 340 return RegisterNativesImpl(env); | 335 return RegisterNativesImpl(env); |
| 341 } | 336 } |
| 342 | 337 |
| 343 } // namespace android | 338 } // namespace android |
| OLD | NEW |