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 1d7f62fe7f41e8cc076ab4a1b3805a298a191d70..33b48dad88db3e12ae6cebb19f28f668d005376d 100644 |
--- a/chrome/browser/android/compositor/layer/contextual_search_layer.cc |
+++ b/chrome/browser/android/compositor/layer/contextual_search_layer.cc |
@@ -9,9 +9,11 @@ |
#include "cc/layers/solid_color_layer.h" |
#include "cc/layers/ui_resource_layer.h" |
#include "cc/resources/scoped_ui_resource.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" |
+#include "ui/android/resources/crushed_sprite_resource.h" |
#include "ui/android/resources/resource_manager.h" |
#include "ui/base/l10n/l10n_util_android.h" |
#include "ui/gfx/color_utils.h" |
@@ -43,7 +45,7 @@ void ContextualSearchLayer::SetProperties( |
int search_context_resource_id, |
int search_term_resource_id, |
int search_bar_shadow_resource_id, |
- int search_provider_icon_resource_id, |
+ int panel_icon_resource_id, |
int arrow_up_resource_id, |
int close_icon_resource_id, |
int progress_bar_background_resource_id, |
@@ -51,6 +53,8 @@ void ContextualSearchLayer::SetProperties( |
int search_promo_resource_id, |
int peek_promo_ripple_resource_id, |
int peek_promo_text_resource_id, |
+ int search_provider_icon_sprite_bitmap_resource_id, |
+ int search_provider_icon_sprite_metadata_resource_id, |
content::ContentViewCore* content_view_core, |
bool search_promo_visible, |
float search_promo_height, |
@@ -73,6 +77,9 @@ 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_completion_percentage, |
+ float search_provider_icon_sprite_size, |
float arrow_icon_opacity, |
float arrow_icon_rotation, |
float close_icon_opacity, |
@@ -92,12 +99,8 @@ 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 = |
- resource_manager_->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC, |
- search_provider_icon_resource_id); |
DCHECK(panel_shadow_resource); |
- DCHECK(search_provider_icon_resource); |
// Round values to avoid pixel gap between layers. |
search_bar_height = floor(search_bar_height); |
@@ -107,6 +110,11 @@ void ContextualSearchLayer::SetProperties( |
bool is_rtl = l10n_util::IsLayoutRtl(); |
+ // If |panel_icon_resource_id| != 0, the static resource associated with that |
+ // id will be displayed. If |panel_icon_resource_id| == 0, then the |
+ // search provider icon sprite will be shown instead. |
+ bool should_use_static_icon = panel_icon_resource_id != 0; |
+ |
// --------------------------------------------------------------------------- |
// Panel Shadow |
// --------------------------------------------------------------------------- |
@@ -159,8 +167,7 @@ void ContextualSearchLayer::SetProperties( |
color_utils::AlphaBlend(kPeekPromoRippleBackgroundColor, |
kSearchBarBackgroundColor, |
kPeekPromoBackgroundMaximumAlphaBlend * |
- search_peek_promo_ripple_opacity |
- )); |
+ search_peek_promo_ripple_opacity)); |
// ----------------------------------------------------------------- |
// Peek Promo Ripple |
@@ -255,27 +262,80 @@ void ContextualSearchLayer::SetProperties( |
} |
// --------------------------------------------------------------------------- |
- // Search Provider Icon |
+ // Panel Icon (Static) |
// --------------------------------------------------------------------------- |
- // 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 (should_use_static_icon) { |
+ if (panel_icon_->parent() != layer_) { |
+ layer_->AddChild(panel_icon_); |
+ } |
+ ui::ResourceManager::Resource* panel_icon_resource = |
+ resource_manager_->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC, |
+ panel_icon_resource_id); |
+ DCHECK(panel_icon_resource); |
- // Centers the Search Provider Icon vertically in the Search Bar. |
- float search_provider_icon_top = search_bar_top + |
- search_bar_height / 2 - |
- search_provider_icon_resource->size.height() / 2; |
+ // Positions the Icon at the start of the Search Bar. |
+ float search_provider_icon_left; |
+ if (is_rtl) { |
+ search_provider_icon_left = search_panel_width - |
+ panel_icon_resource->size.width() - search_bar_margin_side; |
+ } else { |
+ search_provider_icon_left = search_bar_margin_side; |
+ } |
+ |
+ // Centers the Icon vertically in the Search Bar. |
+ float search_provider_icon_top = search_bar_top + |
+ search_bar_height / 2 - |
+ panel_icon_resource->size.height() / 2; |
+ |
+ panel_icon_->SetUIResourceId( |
+ panel_icon_resource->ui_resource->id()); |
+ panel_icon_->SetBounds(panel_icon_resource->size); |
+ panel_icon_->SetPosition( |
+ gfx::PointF(search_provider_icon_left, search_provider_icon_top)); |
+ } |
- 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)); |
+ // --------------------------------------------------------------------------- |
+ // Search Provider Icon Sprite (Animated) |
+ // --------------------------------------------------------------------------- |
+ if (!should_use_static_icon) { |
+ if (search_provider_icon_sprite_visible) { |
+ if (search_provider_icon_sprite_->layer()->parent() != layer_) { |
+ layer_->AddChild(search_provider_icon_sprite_->layer()); |
+ } |
+ |
+ search_provider_icon_sprite_->DrawSpriteFrame( |
+ resource_manager_, |
+ search_provider_icon_sprite_bitmap_resource_id, |
+ search_provider_icon_sprite_metadata_resource_id, |
+ search_provider_icon_sprite_completion_percentage); |
+ |
+ // 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; |
+ } |
+ |
+ // Centers the Search Provider Icon vertically in the Search Bar. |
+ float icon_y = search_bar_top + search_bar_height / 2 |
+ - search_provider_icon_sprite_size / 2; |
+ search_provider_icon_sprite_->layer()->SetPosition( |
+ gfx::PointF(icon_x, icon_y)); |
+ |
+ // Scales the layer to the correct size. |
+ search_provider_icon_sprite_->layer()->SetBounds( |
+ gfx::Size(search_provider_icon_sprite_size, |
+ search_provider_icon_sprite_size)); |
+ |
+ } else { |
+ if (search_provider_icon_sprite_->layer().get() && |
+ search_provider_icon_sprite_->layer()->parent()) { |
+ search_provider_icon_sprite_->layer()->RemoveFromParent(); |
+ } |
+ } |
+ } |
// --------------------------------------------------------------------------- |
// Arrow Icon |
@@ -518,8 +578,9 @@ ContextualSearchLayer::ContextualSearchLayer( |
cc::UIResourceLayer::Create(content::Compositor::LayerSettings())), |
search_bar_shadow_( |
cc::UIResourceLayer::Create(content::Compositor::LayerSettings())), |
- search_provider_icon_( |
+ panel_icon_( |
cc::UIResourceLayer::Create(content::Compositor::LayerSettings())), |
+ search_provider_icon_sprite_(CrushedSpriteLayer::Create()), |
arrow_icon_( |
cc::UIResourceLayer::Create(content::Compositor::LayerSettings())), |
close_icon_( |
@@ -570,9 +631,8 @@ ContextualSearchLayer::ContextualSearchLayer( |
search_term_->SetIsDrawable(true); |
layer_->AddChild(search_term_); |
- // Search Provider Icon |
- search_provider_icon_->SetIsDrawable(true); |
- layer_->AddChild(search_provider_icon_); |
+ // Panel Icon |
+ panel_icon_->SetIsDrawable(true); |
// Arrow Icon |
arrow_icon_->SetIsDrawable(true); |