| Index: chrome/browser/android/compositor/scene_layer/tab_strip_scene_layer.cc
|
| diff --git a/chrome/browser/android/compositor/scene_layer/tab_strip_scene_layer.cc b/chrome/browser/android/compositor/scene_layer/tab_strip_scene_layer.cc
|
| index 034a6480416333bf22c4fdcefca6e66e66954db3..d5ff1921effc5e7390ea0ffb297f2e10447a569d 100644
|
| --- a/chrome/browser/android/compositor/scene_layer/tab_strip_scene_layer.cc
|
| +++ b/chrome/browser/android/compositor/scene_layer/tab_strip_scene_layer.cc
|
| @@ -11,6 +11,7 @@
|
| #include "content/public/browser/android/compositor.h"
|
| #include "jni/TabStripSceneLayer_jni.h"
|
| #include "ui/android/resources/resource_manager_impl.h"
|
| +#include "ui/gfx/transform.h"
|
|
|
| namespace chrome {
|
| namespace android {
|
| @@ -18,7 +19,10 @@ namespace android {
|
| TabStripSceneLayer::TabStripSceneLayer(JNIEnv* env, jobject jobj)
|
| : SceneLayer(env, jobj),
|
| tab_strip_layer_(cc::SolidColorLayer::Create()),
|
| + scrollable_strip_layer_(cc::Layer::Create()),
|
| new_tab_button_(cc::UIResourceLayer::Create()),
|
| + left_fade_(cc::UIResourceLayer::Create()),
|
| + right_fade_(cc::UIResourceLayer::Create()),
|
| model_selector_button_(cc::UIResourceLayer::Create()),
|
| background_tab_brightness_(1.f),
|
| brightness_(1.f),
|
| @@ -26,9 +30,20 @@ TabStripSceneLayer::TabStripSceneLayer(JNIEnv* env, jobject jobj)
|
| content_tree_(nullptr) {
|
| new_tab_button_->SetIsDrawable(true);
|
| model_selector_button_->SetIsDrawable(true);
|
| + left_fade_->SetIsDrawable(true);
|
| + right_fade_->SetIsDrawable(true);
|
| +
|
| + // When the ScrollingStripStacker is used, the new tab button and tabs scroll,
|
| + // while the incognito button and left/ride fade stay fixed. Put the new tab
|
| + // button and tabs in a separate layer placed visually below the others.
|
| + scrollable_strip_layer_->SetIsDrawable(true);
|
| + scrollable_strip_layer_->AddChild(new_tab_button_);
|
| +
|
| tab_strip_layer_->SetBackgroundColor(SK_ColorBLACK);
|
| tab_strip_layer_->SetIsDrawable(true);
|
| - tab_strip_layer_->AddChild(new_tab_button_);
|
| + tab_strip_layer_->AddChild(scrollable_strip_layer_);
|
| + tab_strip_layer_->AddChild(left_fade_);
|
| + tab_strip_layer_->AddChild(right_fade_);
|
| tab_strip_layer_->AddChild(model_selector_button_);
|
| layer()->AddChild(tab_strip_layer_);
|
| }
|
| @@ -90,6 +105,7 @@ void TabStripSceneLayer::UpdateTabStripLayer(JNIEnv* env,
|
| gfx::RectF content(0, y_offset, width, height);
|
| layer()->SetPosition(gfx::PointF(0, y_offset));
|
| tab_strip_layer_->SetBounds(gfx::Size(width, height));
|
| + scrollable_strip_layer_->SetBounds(gfx::Size(width, height));
|
|
|
| if (brightness != brightness_) {
|
| brightness_ = brightness;
|
| @@ -168,6 +184,88 @@ void TabStripSceneLayer::UpdateModelSelectorButton(
|
| model_selector_button_->SetHideLayerAndSubtree(!visible);
|
| }
|
|
|
| +void TabStripSceneLayer::UpdateTabStripLeftFade(
|
| + JNIEnv* env,
|
| + const JavaParamRef<jobject>& jobj,
|
| + jint resource_id,
|
| + jfloat opacity,
|
| + const JavaParamRef<jobject>& jresource_manager) {
|
| +
|
| + // Hide layer if it's not visible.
|
| + if (opacity == 0.f) {
|
| + left_fade_->SetHideLayerAndSubtree(true);
|
| + return;
|
| + }
|
| +
|
| + // Set UI resource.
|
| + ui::ResourceManager* resource_manager =
|
| + ui::ResourceManagerImpl::FromJavaObject(jresource_manager);
|
| + ui::ResourceManager::Resource* fade_resource =
|
| + resource_manager->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC,
|
| + resource_id);
|
| + left_fade_->SetUIResourceId(fade_resource->ui_resource->id());
|
| +
|
| + // The same resource is used for both left and right fade, so the
|
| + // resource must be rotated for the left fade.
|
| + gfx::Transform fade_transform;
|
| + fade_transform.RotateAboutYAxis(180.0);
|
| + left_fade_->SetTransform(fade_transform);
|
| +
|
| + // Set opacity.
|
| + left_fade_->SetOpacity(opacity);
|
| +
|
| + // Set bounds. Use the parent layer height so the 1px fade resource is
|
| + // stretched vertically.
|
| + left_fade_->SetBounds(gfx::Size(fade_resource->size.width(),
|
| + scrollable_strip_layer_->bounds().height()));
|
| +
|
| + // Set position. The rotation set above requires the layer to be offset
|
| + // by its width in order to display on the left edge.
|
| + left_fade_->SetPosition(gfx::PointF(fade_resource->size.width(), 0));
|
| +
|
| + // Ensure layer is visible.
|
| + left_fade_->SetHideLayerAndSubtree(false);
|
| +}
|
| +
|
| +void TabStripSceneLayer::UpdateTabStripRightFade(
|
| + JNIEnv* env,
|
| + const JavaParamRef<jobject>& jobj,
|
| + jint resource_id,
|
| + jfloat opacity,
|
| + const JavaParamRef<jobject>& jresource_manager) {
|
| +
|
| + // Hide layer if it's not visible.
|
| + if (opacity == 0.f) {
|
| + right_fade_->SetHideLayerAndSubtree(true);
|
| + return;
|
| + }
|
| +
|
| + // Set UI resource.
|
| + ui::ResourceManager* resource_manager =
|
| + ui::ResourceManagerImpl::FromJavaObject(jresource_manager);
|
| + ui::ResourceManager::Resource* fade_resource =
|
| + resource_manager->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC,
|
| + resource_id);
|
| + right_fade_->SetUIResourceId(fade_resource->ui_resource->id());
|
| +
|
| + // Set opacity.
|
| + right_fade_->SetOpacity(opacity);
|
| +
|
| + // Set bounds. Use the parent layer height so the 1px fade resource is
|
| + // stretched vertically.
|
| + right_fade_->SetBounds(gfx::Size(
|
| + fade_resource->size.width(),
|
| + scrollable_strip_layer_->bounds().height()));
|
| +
|
| + // Set position. The right fade is positioned at the end of the tab strip.
|
| + float x =
|
| + scrollable_strip_layer_->bounds().width() - fade_resource->size.width();
|
| + right_fade_->SetPosition(gfx::PointF(x, 0));
|
| +
|
| + // Ensure layer is visible.
|
| + right_fade_->SetHideLayerAndSubtree(false);
|
| +}
|
| +
|
| void TabStripSceneLayer::PutStripTabLayer(
|
| JNIEnv* env,
|
| const JavaParamRef<jobject>& jobj,
|
| @@ -214,7 +312,7 @@ scoped_refptr<TabHandleLayer> TabStripSceneLayer::GetNextLayer(
|
| scoped_refptr<TabHandleLayer> layer_tree =
|
| TabHandleLayer::Create(layer_title_cache);
|
| tab_handle_layers_.push_back(layer_tree);
|
| - tab_strip_layer_->AddChild(layer_tree->layer());
|
| + scrollable_strip_layer_->AddChild(layer_tree->layer());
|
| write_index_++;
|
| return layer_tree;
|
| }
|
|
|