Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1706)

Unified Diff: chrome/browser/android/compositor/layer/contextual_search_layer.cc

Issue 1337703002: [Contextual Search] Add support for crushed sprites and animate the search provider icon (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Very small changes from last pedrosimonneti@ review Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);

Powered by Google App Engine
This is Rietveld 408576698