| 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 15f2b6f977cdf5e5ac241682d169b6cf434eee3c..f392da3b9da82aa8c87ac7892c371640e8b49df1 100644
|
| --- a/chrome/browser/android/compositor/layer/contextual_search_layer.cc
|
| +++ b/chrome/browser/android/compositor/layer/contextual_search_layer.cc
|
| @@ -8,6 +8,7 @@
|
| #include "cc/layers/nine_patch_layer.h"
|
| #include "cc/layers/solid_color_layer.h"
|
| #include "cc/layers/ui_resource_layer.h"
|
| +#include "chrome/browser/android/compositor/layer/crushed_sprite_layer.h"
|
| #include "content/public/browser/android/compositor.h"
|
| #include "content/public/browser/android/content_view_core.h"
|
| #include "third_party/skia/include/core/SkColor.h"
|
| @@ -60,6 +61,10 @@ void ContextualSearchLayer::SetProperties(
|
| float search_bar_border_height,
|
| bool search_bar_shadow_visible,
|
| float search_bar_shadow_opacity,
|
| + bool search_provider_icon_sprite_visible,
|
| + float search_provider_icon_sprite_size,
|
| + std::vector<int> search_provider_icon_sprite_rects,
|
| + bool search_provider_icon_sprite_paint_previous_frames,
|
| float arrow_icon_opacity,
|
| float arrow_icon_rotation,
|
| bool close_icon_visible,
|
| @@ -81,12 +86,12 @@ void ContextualSearchLayer::SetProperties(
|
| ui::ResourceManager::Resource* panel_shadow_resource =
|
| resource_manager_->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC,
|
| panel_shadow_resource_id);
|
| - ui::ResourceManager::Resource* search_provider_icon_resource =
|
| + ui::ResourceManager::Resource* search_provider_icon_sprite_resource =
|
| resource_manager_->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC,
|
| search_provider_icon_resource_id);
|
|
|
| DCHECK(panel_shadow_resource);
|
| - DCHECK(search_provider_icon_resource);
|
| + DCHECK(search_provider_icon_sprite_resource);
|
|
|
| // Round values to avoid pixel gap between layers.
|
| search_bar_height = floor(search_bar_height);
|
| @@ -148,25 +153,56 @@ void ContextualSearchLayer::SetProperties(
|
| // ---------------------------------------------------------------------------
|
| // Search Provider Icon
|
| // ---------------------------------------------------------------------------
|
| - // Positions the Search Provider Icon at the start of the Search Bar.
|
| - float search_provider_icon_left;
|
| - if (is_rtl) {
|
| - search_provider_icon_left = search_panel_width -
|
| - search_provider_icon_resource->size.width() - search_bar_margin_side;
|
| - } else {
|
| - search_provider_icon_left = search_bar_margin_side;
|
| - }
|
| + if (search_provider_icon_sprite_visible) {
|
| + if (search_provider_icon_sprite_->layer()->parent() != layer_) {
|
| + layer_->AddChild(search_provider_icon_sprite_->layer());
|
| + }
|
|
|
| - // Centers the Search Provider Icon vertically in the Search Bar.
|
| - float search_provider_icon_top =
|
| - search_bar_height / 2 -
|
| - search_provider_icon_resource->size.height() / 2;
|
| + // Positions the Search Provider Icon at the start of the Search Bar.
|
| + float icon_x;
|
| + if (is_rtl) {
|
| + icon_x = search_panel_width - search_provider_icon_sprite_size -
|
| + search_bar_margin_side;
|
| + } else {
|
| + icon_x = search_bar_margin_side;
|
| + }
|
|
|
| - search_provider_icon_->SetUIResourceId(
|
| - search_provider_icon_resource->ui_resource->id());
|
| - search_provider_icon_->SetBounds(search_provider_icon_resource->size);
|
| - search_provider_icon_->SetPosition(
|
| - gfx::PointF(search_provider_icon_left, search_provider_icon_top));
|
| + // Centers the Search Provider Icon vertically in the Search Bar.
|
| + float icon_y = search_bar_height / 2 - search_provider_icon_sprite_size / 2;
|
| + search_provider_icon_sprite_->layer()->SetBounds(
|
| + gfx::Size(search_provider_icon_sprite_size,
|
| + search_provider_icon_sprite_size));
|
| + search_provider_icon_sprite_->layer()->SetPosition(
|
| + gfx::PointF(icon_x, icon_y));
|
| +
|
| + // Create source and destination gfx::Rect's for each rectangle in
|
| + // |search_provider_icon_sprite_rects|. Each rectangle consists of 6 values:
|
| + // i: destination x i+1: destination y i+2: source x i+3: source y
|
| + // i+4: width i+5: height
|
| + std::vector<std::pair<gfx::Rect, gfx::Rect>> rects;
|
| + for (size_t i = 0; i < search_provider_icon_sprite_rects.size();) {
|
| + gfx::Rect sprite_rect_destination(search_provider_icon_sprite_rects[i],
|
| + search_provider_icon_sprite_rects[i+1],
|
| + search_provider_icon_sprite_rects[i+4],
|
| + search_provider_icon_sprite_rects[i+5]);
|
| + gfx::Rect sprite_rect_source(search_provider_icon_sprite_rects[i+2],
|
| + search_provider_icon_sprite_rects[i+3],
|
| + search_provider_icon_sprite_rects[i+4],
|
| + search_provider_icon_sprite_rects[i+5]);
|
| + rects.push_back(std::pair<gfx::Rect, gfx::Rect>(sprite_rect_source,
|
| + sprite_rect_destination));
|
| + i += 6;
|
| + }
|
| +
|
| + search_provider_icon_sprite_->UpdateCrushedSprite(
|
| + search_provider_icon_sprite_resource->ui_resource->GetSkBitmap(), rects,
|
| + search_provider_icon_sprite_paint_previous_frames);
|
| + } else {
|
| + if (search_provider_icon_sprite_.get() &&
|
| + search_provider_icon_sprite_->layer()->parent()) {
|
| + search_provider_icon_sprite_->layer()->RemoveFromParent();
|
| + }
|
| + }
|
|
|
| // ---------------------------------------------------------------------------
|
| // Arrow Icon
|
| @@ -413,8 +449,7 @@ ContextualSearchLayer::ContextualSearchLayer(
|
| cc::UIResourceLayer::Create(content::Compositor::LayerSettings())),
|
| search_bar_shadow_(
|
| cc::UIResourceLayer::Create(content::Compositor::LayerSettings())),
|
| - search_provider_icon_(
|
| - cc::UIResourceLayer::Create(content::Compositor::LayerSettings())),
|
| + search_provider_icon_sprite_(CrushedSpriteLayer::Create()),
|
| arrow_icon_(
|
| cc::UIResourceLayer::Create(content::Compositor::LayerSettings())),
|
| close_icon_(
|
| @@ -451,8 +486,7 @@ ContextualSearchLayer::ContextualSearchLayer(
|
| layer_->AddChild(search_term_);
|
|
|
| // Search Provider Icon
|
| - search_provider_icon_->SetIsDrawable(true);
|
| - layer_->AddChild(search_provider_icon_);
|
| + search_provider_icon_sprite_->layer()->SetIsDrawable(true);
|
|
|
| // Arrow Icon
|
| arrow_icon_->SetIsDrawable(true);
|
|
|