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

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: Changes from newt@ review Created 5 years, 3 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 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);

Powered by Google App Engine
This is Rietveld 408576698