OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/android/compositor/layer/contextual_search_layer.h" | 5 #include "chrome/browser/android/compositor/layer/contextual_search_layer.h" |
6 | 6 |
7 #include "cc/layers/layer.h" | 7 #include "cc/layers/layer.h" |
8 #include "cc/layers/nine_patch_layer.h" | 8 #include "cc/layers/nine_patch_layer.h" |
9 #include "cc/layers/solid_color_layer.h" | 9 #include "cc/layers/solid_color_layer.h" |
10 #include "cc/layers/ui_resource_layer.h" | 10 #include "cc/layers/ui_resource_layer.h" |
11 #include "cc/resources/scoped_ui_resource.h" | 11 #include "cc/resources/scoped_ui_resource.h" |
| 12 #include "chrome/browser/android/compositor/layer/crushed_sprite_layer.h" |
12 #include "content/public/browser/android/compositor.h" | 13 #include "content/public/browser/android/compositor.h" |
13 #include "content/public/browser/android/content_view_core.h" | 14 #include "content/public/browser/android/content_view_core.h" |
14 #include "third_party/skia/include/core/SkColor.h" | 15 #include "third_party/skia/include/core/SkColor.h" |
| 16 #include "ui/android/resources/crushed_sprite_resource.h" |
15 #include "ui/android/resources/resource_manager.h" | 17 #include "ui/android/resources/resource_manager.h" |
16 #include "ui/base/l10n/l10n_util_android.h" | 18 #include "ui/base/l10n/l10n_util_android.h" |
17 #include "ui/gfx/color_utils.h" | 19 #include "ui/gfx/color_utils.h" |
18 | 20 |
19 namespace { | 21 namespace { |
20 | 22 |
21 const SkColor kSearchBackgroundColor = SkColorSetRGB(0xee, 0xee, 0xee); | 23 const SkColor kSearchBackgroundColor = SkColorSetRGB(0xee, 0xee, 0xee); |
22 const SkColor kSearchBarBackgroundColor = SkColorSetRGB(0xff, 0xff, 0xff); | 24 const SkColor kSearchBarBackgroundColor = SkColorSetRGB(0xff, 0xff, 0xff); |
23 const SkColor kSearchBarBorderColor = SkColorSetRGB(0xf1, 0xf1, 0xf1); | 25 const SkColor kSearchBarBorderColor = SkColorSetRGB(0xf1, 0xf1, 0xf1); |
24 const SkColor kPeekPromoRippleBackgroundColor = SkColorSetRGB(0x42, 0x85, 0xF4); | 26 const SkColor kPeekPromoRippleBackgroundColor = SkColorSetRGB(0x42, 0x85, 0xF4); |
(...skipping 11 matching lines...) Expand all Loading... |
36 scoped_refptr<ContextualSearchLayer> ContextualSearchLayer::Create( | 38 scoped_refptr<ContextualSearchLayer> ContextualSearchLayer::Create( |
37 ui::ResourceManager* resource_manager) { | 39 ui::ResourceManager* resource_manager) { |
38 return make_scoped_refptr(new ContextualSearchLayer(resource_manager)); | 40 return make_scoped_refptr(new ContextualSearchLayer(resource_manager)); |
39 } | 41 } |
40 | 42 |
41 void ContextualSearchLayer::SetProperties( | 43 void ContextualSearchLayer::SetProperties( |
42 int panel_shadow_resource_id, | 44 int panel_shadow_resource_id, |
43 int search_context_resource_id, | 45 int search_context_resource_id, |
44 int search_term_resource_id, | 46 int search_term_resource_id, |
45 int search_bar_shadow_resource_id, | 47 int search_bar_shadow_resource_id, |
46 int search_provider_icon_resource_id, | |
47 int arrow_up_resource_id, | 48 int arrow_up_resource_id, |
48 int close_icon_resource_id, | 49 int close_icon_resource_id, |
49 int progress_bar_background_resource_id, | 50 int progress_bar_background_resource_id, |
50 int progress_bar_resource_id, | 51 int progress_bar_resource_id, |
51 int search_promo_resource_id, | 52 int search_promo_resource_id, |
52 int peek_promo_ripple_resource_id, | 53 int peek_promo_ripple_resource_id, |
53 int peek_promo_text_resource_id, | 54 int peek_promo_text_resource_id, |
| 55 int search_provider_icon_sprite_bitmap_resource_id, |
| 56 int search_provider_icon_sprite_metadata_resource_id, |
54 content::ContentViewCore* content_view_core, | 57 content::ContentViewCore* content_view_core, |
55 bool search_promo_visible, | 58 bool search_promo_visible, |
56 float search_promo_height, | 59 float search_promo_height, |
57 float search_promo_opacity, | 60 float search_promo_opacity, |
58 bool search_peek_promo_visible, | 61 bool search_peek_promo_visible, |
59 float search_peek_promo_height, | 62 float search_peek_promo_height, |
60 float search_peek_promo_padding, | 63 float search_peek_promo_padding, |
61 float search_peek_promo_ripple_width, | 64 float search_peek_promo_ripple_width, |
62 float search_peek_promo_ripple_opacity, | 65 float search_peek_promo_ripple_opacity, |
63 float search_peek_promo_text_opacity, | 66 float search_peek_promo_text_opacity, |
64 float search_panel_x, | 67 float search_panel_x, |
65 float search_panel_y, | 68 float search_panel_y, |
66 float search_panel_width, | 69 float search_panel_width, |
67 float search_panel_height, | 70 float search_panel_height, |
68 float search_bar_margin_side, | 71 float search_bar_margin_side, |
69 float search_bar_height, | 72 float search_bar_height, |
70 float search_context_opacity, | 73 float search_context_opacity, |
71 float search_term_opacity, | 74 float search_term_opacity, |
72 bool search_bar_border_visible, | 75 bool search_bar_border_visible, |
73 float search_bar_border_height, | 76 float search_bar_border_height, |
74 bool search_bar_shadow_visible, | 77 bool search_bar_shadow_visible, |
75 float search_bar_shadow_opacity, | 78 float search_bar_shadow_opacity, |
| 79 bool search_provider_icon_sprite_visible, |
| 80 float search_provider_icon_sprite_completion_percentage, |
| 81 float search_provider_icon_sprite_size, |
76 float arrow_icon_opacity, | 82 float arrow_icon_opacity, |
77 float arrow_icon_rotation, | 83 float arrow_icon_rotation, |
78 float close_icon_opacity, | 84 float close_icon_opacity, |
79 bool progress_bar_visible, | 85 bool progress_bar_visible, |
80 float progress_bar_height, | 86 float progress_bar_height, |
81 float progress_bar_opacity, | 87 float progress_bar_opacity, |
82 int progress_bar_completion) { | 88 int progress_bar_completion) { |
83 // Grabs the dynamic Search Bar Text resource. | 89 // Grabs the dynamic Search Bar Text resource. |
84 ui::ResourceManager::Resource* search_context_resource = | 90 ui::ResourceManager::Resource* search_context_resource = |
85 resource_manager_->GetResource(ui::ANDROID_RESOURCE_TYPE_DYNAMIC, | 91 resource_manager_->GetResource(ui::ANDROID_RESOURCE_TYPE_DYNAMIC, |
86 search_context_resource_id); | 92 search_context_resource_id); |
87 ui::ResourceManager::Resource* search_term_resource = | 93 ui::ResourceManager::Resource* search_term_resource = |
88 resource_manager_->GetResource(ui::ANDROID_RESOURCE_TYPE_DYNAMIC, | 94 resource_manager_->GetResource(ui::ANDROID_RESOURCE_TYPE_DYNAMIC, |
89 search_term_resource_id); | 95 search_term_resource_id); |
90 | 96 |
91 // Grabs required static resources. | 97 // Grabs required static resources. |
92 ui::ResourceManager::Resource* panel_shadow_resource = | 98 ui::ResourceManager::Resource* panel_shadow_resource = |
93 resource_manager_->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC, | 99 resource_manager_->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC, |
94 panel_shadow_resource_id); | 100 panel_shadow_resource_id); |
95 ui::ResourceManager::Resource* search_provider_icon_resource = | |
96 resource_manager_->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC, | |
97 search_provider_icon_resource_id); | |
98 | 101 |
99 DCHECK(panel_shadow_resource); | 102 DCHECK(panel_shadow_resource); |
100 DCHECK(search_provider_icon_resource); | |
101 | 103 |
102 // Round values to avoid pixel gap between layers. | 104 // Round values to avoid pixel gap between layers. |
103 search_bar_height = floor(search_bar_height); | 105 search_bar_height = floor(search_bar_height); |
104 | 106 |
105 float search_bar_top = search_peek_promo_height; | 107 float search_bar_top = search_peek_promo_height; |
106 float search_bar_bottom = search_bar_top + search_bar_height; | 108 float search_bar_bottom = search_bar_top + search_bar_height; |
107 | 109 |
108 bool is_rtl = l10n_util::IsLayoutRtl(); | 110 bool is_rtl = l10n_util::IsLayoutRtl(); |
109 | 111 |
110 // --------------------------------------------------------------------------- | 112 // --------------------------------------------------------------------------- |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
152 | 154 |
153 // Apply a blend based on the ripple opacity. The resulting color will | 155 // Apply a blend based on the ripple opacity. The resulting color will |
154 // be an interpolation between the background color of the Search Bar and | 156 // be an interpolation between the background color of the Search Bar and |
155 // a lighter shade of the background color of the Ripple. The range of | 157 // a lighter shade of the background color of the Ripple. The range of |
156 // the alpha value used in the blend will be: | 158 // the alpha value used in the blend will be: |
157 // [0.f, kPeekPromoBackgroundMaximumAlphaBlend] | 159 // [0.f, kPeekPromoBackgroundMaximumAlphaBlend] |
158 peek_promo_container_->SetBackgroundColor( | 160 peek_promo_container_->SetBackgroundColor( |
159 color_utils::AlphaBlend(kPeekPromoRippleBackgroundColor, | 161 color_utils::AlphaBlend(kPeekPromoRippleBackgroundColor, |
160 kSearchBarBackgroundColor, | 162 kSearchBarBackgroundColor, |
161 kPeekPromoBackgroundMaximumAlphaBlend * | 163 kPeekPromoBackgroundMaximumAlphaBlend * |
162 search_peek_promo_ripple_opacity | 164 search_peek_promo_ripple_opacity)); |
163 )); | |
164 | 165 |
165 // ----------------------------------------------------------------- | 166 // ----------------------------------------------------------------- |
166 // Peek Promo Ripple | 167 // Peek Promo Ripple |
167 // ----------------------------------------------------------------- | 168 // ----------------------------------------------------------------- |
168 gfx::Size peek_promo_ripple_size( | 169 gfx::Size peek_promo_ripple_size( |
169 search_peek_promo_ripple_width, search_peek_promo_height); | 170 search_peek_promo_ripple_width, search_peek_promo_height); |
170 gfx::Rect peek_promo_ripple_border( | 171 gfx::Rect peek_promo_ripple_border( |
171 peek_promo_ripple_resource->Border(peek_promo_ripple_size)); | 172 peek_promo_ripple_resource->Border(peek_promo_ripple_size)); |
172 | 173 |
173 // Add padding so the ripple will occupy the whole width at 100%. | 174 // Add padding so the ripple will occupy the whole width at 100%. |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
250 search_term_resource->size.height() / 2; | 251 search_term_resource->size.height() / 2; |
251 search_term_->SetUIResourceId(search_term_resource->ui_resource->id()); | 252 search_term_->SetUIResourceId(search_term_resource->ui_resource->id()); |
252 search_term_->SetBounds(search_term_resource->size); | 253 search_term_->SetBounds(search_term_resource->size); |
253 search_term_->SetPosition(gfx::PointF(0.f, search_bar_padding_top)); | 254 search_term_->SetPosition(gfx::PointF(0.f, search_bar_padding_top)); |
254 search_term_->SetOpacity(search_term_opacity); | 255 search_term_->SetOpacity(search_term_opacity); |
255 } | 256 } |
256 | 257 |
257 // --------------------------------------------------------------------------- | 258 // --------------------------------------------------------------------------- |
258 // Search Provider Icon | 259 // Search Provider Icon |
259 // --------------------------------------------------------------------------- | 260 // --------------------------------------------------------------------------- |
260 // Positions the Search Provider Icon at the start of the Search Bar. | 261 if (search_provider_icon_sprite_visible) { |
261 float search_provider_icon_left; | 262 if (search_provider_icon_sprite_->layer()->parent() != layer_) { |
262 if (is_rtl) { | 263 layer_->AddChild(search_provider_icon_sprite_->layer()); |
263 search_provider_icon_left = search_panel_width - | 264 } |
264 search_provider_icon_resource->size.width() - search_bar_margin_side; | 265 |
| 266 search_provider_icon_sprite_->DrawSpriteFrame( |
| 267 resource_manager_, |
| 268 search_provider_icon_sprite_bitmap_resource_id, |
| 269 search_provider_icon_sprite_metadata_resource_id, |
| 270 search_provider_icon_sprite_completion_percentage); |
| 271 |
| 272 // Positions the Search Provider Icon at the start of the Search Bar. |
| 273 float icon_x; |
| 274 if (is_rtl) { |
| 275 icon_x = search_panel_width - search_provider_icon_sprite_size - |
| 276 search_bar_margin_side; |
| 277 } else { |
| 278 icon_x = search_bar_margin_side; |
| 279 } |
| 280 |
| 281 // Centers the Search Provider Icon vertically in the Search Bar. |
| 282 float icon_y = search_bar_top + search_bar_height / 2 |
| 283 - search_provider_icon_sprite_size / 2; |
| 284 search_provider_icon_sprite_->layer()->SetPosition( |
| 285 gfx::PointF(icon_x, icon_y)); |
| 286 |
| 287 // Scales the layer to the correct size. |
| 288 search_provider_icon_sprite_->layer()->SetBounds( |
| 289 gfx::Size(search_provider_icon_sprite_size, |
| 290 search_provider_icon_sprite_size)); |
| 291 |
265 } else { | 292 } else { |
266 search_provider_icon_left = search_bar_margin_side; | 293 if (search_provider_icon_sprite_->layer().get() && |
| 294 search_provider_icon_sprite_->layer()->parent()) { |
| 295 search_provider_icon_sprite_->layer()->RemoveFromParent(); |
| 296 } |
267 } | 297 } |
268 | 298 |
269 // Centers the Search Provider Icon vertically in the Search Bar. | |
270 float search_provider_icon_top = search_bar_top + | |
271 search_bar_height / 2 - | |
272 search_provider_icon_resource->size.height() / 2; | |
273 | |
274 search_provider_icon_->SetUIResourceId( | |
275 search_provider_icon_resource->ui_resource->id()); | |
276 search_provider_icon_->SetBounds(search_provider_icon_resource->size); | |
277 search_provider_icon_->SetPosition( | |
278 gfx::PointF(search_provider_icon_left, search_provider_icon_top)); | |
279 | |
280 // --------------------------------------------------------------------------- | 299 // --------------------------------------------------------------------------- |
281 // Arrow Icon | 300 // Arrow Icon |
282 // --------------------------------------------------------------------------- | 301 // --------------------------------------------------------------------------- |
283 // Grabs the Search Arrow Icon resource. | 302 // Grabs the Search Arrow Icon resource. |
284 ui::ResourceManager::Resource* arrow_icon_resource = | 303 ui::ResourceManager::Resource* arrow_icon_resource = |
285 resource_manager_->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC, | 304 resource_manager_->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC, |
286 arrow_up_resource_id); | 305 arrow_up_resource_id); |
287 | 306 |
288 // Positions the icon at the end of the Search Bar. | 307 // Positions the icon at the end of the Search Bar. |
289 float arrow_icon_left; | 308 float arrow_icon_left; |
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
511 panel_shadow_( | 530 panel_shadow_( |
512 cc::NinePatchLayer::Create(content::Compositor::LayerSettings())), | 531 cc::NinePatchLayer::Create(content::Compositor::LayerSettings())), |
513 search_bar_background_( | 532 search_bar_background_( |
514 cc::SolidColorLayer::Create(content::Compositor::LayerSettings())), | 533 cc::SolidColorLayer::Create(content::Compositor::LayerSettings())), |
515 search_context_( | 534 search_context_( |
516 cc::UIResourceLayer::Create(content::Compositor::LayerSettings())), | 535 cc::UIResourceLayer::Create(content::Compositor::LayerSettings())), |
517 search_term_( | 536 search_term_( |
518 cc::UIResourceLayer::Create(content::Compositor::LayerSettings())), | 537 cc::UIResourceLayer::Create(content::Compositor::LayerSettings())), |
519 search_bar_shadow_( | 538 search_bar_shadow_( |
520 cc::UIResourceLayer::Create(content::Compositor::LayerSettings())), | 539 cc::UIResourceLayer::Create(content::Compositor::LayerSettings())), |
521 search_provider_icon_( | 540 search_provider_icon_sprite_(CrushedSpriteLayer::Create()), |
522 cc::UIResourceLayer::Create(content::Compositor::LayerSettings())), | |
523 arrow_icon_( | 541 arrow_icon_( |
524 cc::UIResourceLayer::Create(content::Compositor::LayerSettings())), | 542 cc::UIResourceLayer::Create(content::Compositor::LayerSettings())), |
525 close_icon_( | 543 close_icon_( |
526 cc::UIResourceLayer::Create(content::Compositor::LayerSettings())), | 544 cc::UIResourceLayer::Create(content::Compositor::LayerSettings())), |
527 content_view_container_( | 545 content_view_container_( |
528 cc::Layer::Create(content::Compositor::LayerSettings())), | 546 cc::Layer::Create(content::Compositor::LayerSettings())), |
529 search_bar_border_( | 547 search_bar_border_( |
530 cc::SolidColorLayer::Create(content::Compositor::LayerSettings())), | 548 cc::SolidColorLayer::Create(content::Compositor::LayerSettings())), |
531 progress_bar_( | 549 progress_bar_( |
532 cc::NinePatchLayer::Create(content::Compositor::LayerSettings())), | 550 cc::NinePatchLayer::Create(content::Compositor::LayerSettings())), |
(...skipping 30 matching lines...) Expand all Loading... |
563 search_bar_background_->SetIsDrawable(true); | 581 search_bar_background_->SetIsDrawable(true); |
564 search_bar_background_->SetBackgroundColor(kSearchBarBackgroundColor); | 582 search_bar_background_->SetBackgroundColor(kSearchBarBackgroundColor); |
565 layer_->AddChild(search_bar_background_); | 583 layer_->AddChild(search_bar_background_); |
566 | 584 |
567 // Search Bar Text | 585 // Search Bar Text |
568 search_context_->SetIsDrawable(true); | 586 search_context_->SetIsDrawable(true); |
569 layer_->AddChild(search_context_); | 587 layer_->AddChild(search_context_); |
570 search_term_->SetIsDrawable(true); | 588 search_term_->SetIsDrawable(true); |
571 layer_->AddChild(search_term_); | 589 layer_->AddChild(search_term_); |
572 | 590 |
573 // Search Provider Icon | |
574 search_provider_icon_->SetIsDrawable(true); | |
575 layer_->AddChild(search_provider_icon_); | |
576 | |
577 // Arrow Icon | 591 // Arrow Icon |
578 arrow_icon_->SetIsDrawable(true); | 592 arrow_icon_->SetIsDrawable(true); |
579 layer_->AddChild(arrow_icon_); | 593 layer_->AddChild(arrow_icon_); |
580 | 594 |
581 // Close Icon | 595 // Close Icon |
582 close_icon_->SetIsDrawable(true); | 596 close_icon_->SetIsDrawable(true); |
583 layer_->AddChild(close_icon_); | 597 layer_->AddChild(close_icon_); |
584 | 598 |
585 // Search Opt Out Promo | 599 // Search Opt Out Promo |
586 search_promo_container_->SetIsDrawable(true); | 600 search_promo_container_->SetIsDrawable(true); |
(...skipping 21 matching lines...) Expand all Loading... |
608 | 622 |
609 ContextualSearchLayer::~ContextualSearchLayer() { | 623 ContextualSearchLayer::~ContextualSearchLayer() { |
610 } | 624 } |
611 | 625 |
612 scoped_refptr<cc::Layer> ContextualSearchLayer::layer() { | 626 scoped_refptr<cc::Layer> ContextualSearchLayer::layer() { |
613 return layer_; | 627 return layer_; |
614 } | 628 } |
615 | 629 |
616 } // namespace android | 630 } // namespace android |
617 } // namespace chrome | 631 } // namespace chrome |
OLD | NEW |