| Index: chrome/browser/android/compositor/layer/contextual_search_layer.cc
|
| diff --git a/chrome/browser/android/compositor/layer/contextual_search_layer.cc b/chrome/browser/android/compositor/layer/contextual_search_layer.cc
|
| index 46a243b611b13a4d0ef84a3fb5f9607620016474..bd1cf21c4679702d1137701937f89c5eb148872e 100644
|
| --- a/chrome/browser/android/compositor/layer/contextual_search_layer.cc
|
| +++ b/chrome/browser/android/compositor/layer/contextual_search_layer.cc
|
| @@ -38,38 +38,6 @@ scoped_refptr<ContextualSearchLayer> ContextualSearchLayer::Create(
|
| return make_scoped_refptr(new ContextualSearchLayer(resource_manager));
|
| }
|
|
|
| -scoped_refptr<cc::Layer> ContextualSearchLayer::GetIconLayer() {
|
| - scoped_refptr<cc::Layer> icon = nullptr;
|
| -
|
| - // Thumbnail.
|
| - if (thumbnail_visible_) {
|
| - if (thumbnail_layer_->parent() != layer_)
|
| - layer_->AddChild(thumbnail_layer_);
|
| -
|
| - icon = thumbnail_layer_;
|
| - } else if (thumbnail_layer_->parent()) {
|
| - thumbnail_layer_->RemoveFromParent();
|
| - }
|
| -
|
| - // Search Provider Icon Sprite (Animated).
|
| - if (search_provider_icon_sprite_visible_) {
|
| - if (search_provider_icon_sprite_->layer()->parent() != layer_)
|
| - layer_->AddChild(search_provider_icon_sprite_->layer().get());
|
| -
|
| - search_provider_icon_sprite_->DrawSpriteFrame(
|
| - resource_manager_,
|
| - panel_icon_resource_id_,
|
| - search_provider_icon_sprite_metadata_resource_id_,
|
| - search_provider_icon_sprite_completion_percentage_);
|
| - icon = search_provider_icon_sprite_->layer();
|
| - } else if (search_provider_icon_sprite_->layer().get() &&
|
| - search_provider_icon_sprite_->layer()->parent()) {
|
| - search_provider_icon_sprite_->layer()->RemoveFromParent();
|
| - }
|
| -
|
| - return icon;
|
| -}
|
| -
|
| void ContextualSearchLayer::SetProperties(
|
| int panel_shadow_resource_id,
|
| int search_context_resource_id,
|
| @@ -113,6 +81,7 @@ void ContextualSearchLayer::SetProperties(
|
| bool search_provider_icon_sprite_visible,
|
| float search_provider_icon_sprite_completion_percentage,
|
| bool thumbnail_visible,
|
| + float thumbnail_visibility_percentage,
|
| int thumbnail_size,
|
| float arrow_icon_opacity,
|
| float arrow_icon_rotation,
|
| @@ -122,15 +91,6 @@ void ContextualSearchLayer::SetProperties(
|
| float progress_bar_opacity,
|
| int progress_bar_completion) {
|
|
|
| - search_provider_icon_sprite_visible_ = search_provider_icon_sprite_visible;
|
| - search_provider_icon_sprite_metadata_resource_id_ =
|
| - search_provider_icon_sprite_metadata_resource_id;
|
| - search_provider_icon_sprite_completion_percentage_ =
|
| - search_provider_icon_sprite_completion_percentage;
|
| -
|
| - thumbnail_visible_ = thumbnail_visible;
|
| - thumbnail_size_ = thumbnail_size;
|
| -
|
| // Grabs the dynamic Search Context resource.
|
| ui::ResourceManager::Resource* search_context_resource =
|
| resource_manager_->GetResource(ui::ANDROID_RESOURCE_TYPE_DYNAMIC,
|
| @@ -469,6 +429,77 @@ void ContextualSearchLayer::SetProperties(
|
| if (progress_bar_.get() && progress_bar_->parent())
|
| progress_bar_->RemoveFromParent();
|
| }
|
| +
|
| + // ---------------------------------------------------------------------------
|
| + // Icon Layer
|
| + // ---------------------------------------------------------------------------
|
| + thumbnail_size_ = thumbnail_size;
|
| + SetupIconLayer(search_provider_icon_sprite_visible,
|
| + search_provider_icon_sprite_metadata_resource_id,
|
| + search_provider_icon_sprite_completion_percentage,
|
| + thumbnail_visible,
|
| + thumbnail_visibility_percentage);
|
| +}
|
| +
|
| +scoped_refptr<cc::Layer> ContextualSearchLayer::GetIconLayer() {
|
| + return icon_layer_;
|
| +}
|
| +
|
| +void ContextualSearchLayer::SetupIconLayer(
|
| + bool search_provider_icon_sprite_visible,
|
| + int search_provider_icon_sprite_metadata_resource_id,
|
| + float search_provider_icon_sprite_completion_percentage,
|
| + bool thumbnail_visible,
|
| + float thumbnail_visibility_percentage) {
|
| + icon_layer_->SetBounds(gfx::Size(thumbnail_size_, thumbnail_size_));
|
| + icon_layer_->SetMasksToBounds(true);
|
| +
|
| + // Thumbnail
|
| + if (thumbnail_visible) {
|
| + if (thumbnail_layer_->parent() != icon_layer_)
|
| + icon_layer_->AddChild(thumbnail_layer_);
|
| +
|
| + thumbnail_layer_->SetOpacity(thumbnail_visibility_percentage);
|
| +
|
| + // When animating, the thumbnail and icon sprite slide through
|
| + // |icon_layer_|. This effect is achieved by changing the y-offset
|
| + // for each child layer.
|
| + // If the thumbnail has a height less than |thumbnail_size_|, it will have
|
| + // a top margin that needs to be accounted for while running the
|
| + // animation. The final |thumbnail_y_offset| should be equal to
|
| + // |thumbnail_top_margin_|.
|
| + float thumbnail_y_offset =
|
| + (thumbnail_size_ * (1.f - thumbnail_visibility_percentage))
|
| + + thumbnail_top_margin_;
|
| + thumbnail_layer_->SetPosition(
|
| + gfx::PointF(thumbnail_side_margin_, thumbnail_y_offset));
|
| + } else if (thumbnail_layer_->parent()) {
|
| + thumbnail_layer_->RemoveFromParent();
|
| + }
|
| +
|
| + // Search Provider Icon Sprite
|
| + if (search_provider_icon_sprite_visible) {
|
| + if (search_provider_icon_sprite_->layer()->parent() != icon_layer_)
|
| + icon_layer_->AddChild(search_provider_icon_sprite_->layer().get());
|
| +
|
| + search_provider_icon_sprite_->DrawSpriteFrame(
|
| + resource_manager_,
|
| + panel_icon_resource_id_,
|
| + search_provider_icon_sprite_metadata_resource_id,
|
| + search_provider_icon_sprite_completion_percentage);
|
| +
|
| + search_provider_icon_sprite_->layer()->SetOpacity(
|
| + 1.f - thumbnail_visibility_percentage);
|
| +
|
| + float icon_y_offset =
|
| + -(thumbnail_size_ * thumbnail_visibility_percentage);
|
| + search_provider_icon_sprite_->layer()->SetPosition(
|
| + gfx::PointF(0.f, icon_y_offset));
|
| +
|
| + } else if (search_provider_icon_sprite_->layer().get() &&
|
| + search_provider_icon_sprite_->layer()->parent()) {
|
| + search_provider_icon_sprite_->layer()->RemoveFromParent();
|
| + }
|
| }
|
|
|
| void ContextualSearchLayer::SetThumbnail(const SkBitmap* thumbnail) {
|
| @@ -510,17 +541,17 @@ void ContextualSearchLayer::SetThumbnail(const SkBitmap* thumbnail) {
|
| }
|
|
|
| // If the original |thumbnail| height or width is smaller than
|
| - // |thumbnail_size_| determine the x, y offset needed to center
|
| + // |thumbnail_size_| determine the side and top margins needed to center
|
| // the thumbnail.
|
| - float x_pos = 0;
|
| - float y_pos = 0;
|
| + thumbnail_side_margin_ = 0;
|
| + thumbnail_top_margin_ = 0;
|
|
|
| if (scaled_thumbnail_width < thumbnail_size_) {
|
| - x_pos = (thumbnail_size_ - scaled_thumbnail_width) / 2.f;
|
| + thumbnail_side_margin_ = (thumbnail_size_ - scaled_thumbnail_width) / 2.f;
|
| }
|
|
|
| if (scaled_thumbnail_height < thumbnail_size_) {
|
| - y_pos = (thumbnail_size_ - scaled_thumbnail_height) / 2.f;
|
| + thumbnail_top_margin_ = (thumbnail_size_ - scaled_thumbnail_height) / 2.f;
|
| }
|
|
|
| // Determine the layer bounds. This will down scale the thumbnail if
|
| @@ -541,7 +572,8 @@ void ContextualSearchLayer::SetThumbnail(const SkBitmap* thumbnail) {
|
|
|
| thumbnail_layer_->SetBitmap(thumbnail_copy);
|
| thumbnail_layer_->SetBounds(gfx::Size(layer_width, layer_height));
|
| - thumbnail_layer_->SetPosition(gfx::PointF(x_pos, y_pos));
|
| + thumbnail_layer_->SetPosition(
|
| + gfx::PointF(thumbnail_side_margin_, thumbnail_top_margin_));
|
| thumbnail_layer_->SetUV(gfx::PointF(top_left_x, top_left_y),
|
| gfx::PointF(bottom_right_x, bottom_right_y));
|
| }
|
| @@ -550,6 +582,7 @@ ContextualSearchLayer::ContextualSearchLayer(
|
| ui::ResourceManager* resource_manager)
|
| : OverlayPanelLayer(resource_manager),
|
| search_context_(cc::UIResourceLayer::Create()),
|
| + icon_layer_(cc::Layer::Create()),
|
| search_provider_icon_sprite_(CrushedSpriteLayer::Create()),
|
| thumbnail_layer_(cc::UIResourceLayer::Create()),
|
| arrow_icon_(cc::UIResourceLayer::Create()),
|
| @@ -595,6 +628,10 @@ ContextualSearchLayer::ContextualSearchLayer(
|
| progress_bar_->SetIsDrawable(true);
|
| progress_bar_->SetFillCenter(true);
|
|
|
| + // Icon
|
| + icon_layer_->SetIsDrawable(true);
|
| + layer_->AddChild(icon_layer_);
|
| +
|
| // Thumbnail
|
| thumbnail_layer_->SetIsDrawable(true);
|
| }
|
|
|