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, | 48 int panel_icon_resource_id, |
47 int arrow_up_resource_id, | 49 int arrow_up_resource_id, |
48 int close_icon_resource_id, | 50 int close_icon_resource_id, |
49 int progress_bar_background_resource_id, | 51 int progress_bar_background_resource_id, |
50 int progress_bar_resource_id, | 52 int progress_bar_resource_id, |
51 int search_promo_resource_id, | 53 int search_promo_resource_id, |
52 int peek_promo_ripple_resource_id, | 54 int peek_promo_ripple_resource_id, |
53 int peek_promo_text_resource_id, | 55 int peek_promo_text_resource_id, |
56 int search_provider_icon_sprite_bitmap_resource_id, | |
57 int search_provider_icon_sprite_metadata_resource_id, | |
54 content::ContentViewCore* content_view_core, | 58 content::ContentViewCore* content_view_core, |
55 bool search_promo_visible, | 59 bool search_promo_visible, |
56 float search_promo_height, | 60 float search_promo_height, |
57 float search_promo_opacity, | 61 float search_promo_opacity, |
58 bool search_peek_promo_visible, | 62 bool search_peek_promo_visible, |
59 float search_peek_promo_height, | 63 float search_peek_promo_height, |
60 float search_peek_promo_padding, | 64 float search_peek_promo_padding, |
61 float search_peek_promo_ripple_width, | 65 float search_peek_promo_ripple_width, |
62 float search_peek_promo_ripple_opacity, | 66 float search_peek_promo_ripple_opacity, |
63 float search_peek_promo_text_opacity, | 67 float search_peek_promo_text_opacity, |
64 float search_panel_x, | 68 float search_panel_x, |
65 float search_panel_y, | 69 float search_panel_y, |
66 float search_panel_width, | 70 float search_panel_width, |
67 float search_panel_height, | 71 float search_panel_height, |
68 float search_bar_margin_side, | 72 float search_bar_margin_side, |
69 float search_bar_height, | 73 float search_bar_height, |
70 float search_context_opacity, | 74 float search_context_opacity, |
71 float search_term_opacity, | 75 float search_term_opacity, |
72 bool search_bar_border_visible, | 76 bool search_bar_border_visible, |
73 float search_bar_border_height, | 77 float search_bar_border_height, |
74 bool search_bar_shadow_visible, | 78 bool search_bar_shadow_visible, |
75 float search_bar_shadow_opacity, | 79 float search_bar_shadow_opacity, |
80 bool search_provider_icon_sprite_visible, | |
81 float search_provider_icon_sprite_completion_percentage, | |
82 float search_provider_icon_sprite_size, | |
76 float arrow_icon_opacity, | 83 float arrow_icon_opacity, |
77 float arrow_icon_rotation, | 84 float arrow_icon_rotation, |
78 float close_icon_opacity, | 85 float close_icon_opacity, |
79 bool progress_bar_visible, | 86 bool progress_bar_visible, |
80 float progress_bar_height, | 87 float progress_bar_height, |
81 float progress_bar_opacity, | 88 float progress_bar_opacity, |
82 int progress_bar_completion) { | 89 int progress_bar_completion) { |
83 // Grabs the dynamic Search Bar Text resource. | 90 // Grabs the dynamic Search Bar Text resource. |
84 ui::ResourceManager::Resource* search_context_resource = | 91 ui::ResourceManager::Resource* search_context_resource = |
85 resource_manager_->GetResource(ui::ANDROID_RESOURCE_TYPE_DYNAMIC, | 92 resource_manager_->GetResource(ui::ANDROID_RESOURCE_TYPE_DYNAMIC, |
86 search_context_resource_id); | 93 search_context_resource_id); |
87 ui::ResourceManager::Resource* search_term_resource = | 94 ui::ResourceManager::Resource* search_term_resource = |
88 resource_manager_->GetResource(ui::ANDROID_RESOURCE_TYPE_DYNAMIC, | 95 resource_manager_->GetResource(ui::ANDROID_RESOURCE_TYPE_DYNAMIC, |
89 search_term_resource_id); | 96 search_term_resource_id); |
90 | 97 |
91 // Grabs required static resources. | 98 // Grabs required static resources. |
92 ui::ResourceManager::Resource* panel_shadow_resource = | 99 ui::ResourceManager::Resource* panel_shadow_resource = |
93 resource_manager_->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC, | 100 resource_manager_->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC, |
94 panel_shadow_resource_id); | 101 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 | 102 |
99 DCHECK(panel_shadow_resource); | 103 DCHECK(panel_shadow_resource); |
100 DCHECK(search_provider_icon_resource); | |
101 | 104 |
102 // Round values to avoid pixel gap between layers. | 105 // Round values to avoid pixel gap between layers. |
103 search_bar_height = floor(search_bar_height); | 106 search_bar_height = floor(search_bar_height); |
104 | 107 |
105 float search_bar_top = search_peek_promo_height; | 108 float search_bar_top = search_peek_promo_height; |
106 float search_bar_bottom = search_bar_top + search_bar_height; | 109 float search_bar_bottom = search_bar_top + search_bar_height; |
107 | 110 |
108 bool is_rtl = l10n_util::IsLayoutRtl(); | 111 bool is_rtl = l10n_util::IsLayoutRtl(); |
109 | 112 |
pedro (no code reviews)
2015/10/28 18:31:14
I still think it's worth adding a new boolean:
//
Theresa
2015/10/28 22:20:59
Done.
| |
110 // --------------------------------------------------------------------------- | 113 // --------------------------------------------------------------------------- |
111 // Panel Shadow | 114 // Panel Shadow |
112 // --------------------------------------------------------------------------- | 115 // --------------------------------------------------------------------------- |
113 gfx::Size shadow_res_size = panel_shadow_resource->size; | 116 gfx::Size shadow_res_size = panel_shadow_resource->size; |
114 gfx::Rect shadow_res_padding = panel_shadow_resource->padding; | 117 gfx::Rect shadow_res_padding = panel_shadow_resource->padding; |
115 gfx::Size shadow_bounds( | 118 gfx::Size shadow_bounds( |
116 search_panel_width + shadow_res_size.width() | 119 search_panel_width + shadow_res_size.width() |
117 - shadow_res_padding.size().width(), | 120 - shadow_res_padding.size().width(), |
118 search_panel_height + shadow_res_size.height() | 121 search_panel_height + shadow_res_size.height() |
119 - shadow_res_padding.size().height()); | 122 - shadow_res_padding.size().height()); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
152 | 155 |
153 // Apply a blend based on the ripple opacity. The resulting color will | 156 // 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 | 157 // 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 | 158 // a lighter shade of the background color of the Ripple. The range of |
156 // the alpha value used in the blend will be: | 159 // the alpha value used in the blend will be: |
157 // [0.f, kPeekPromoBackgroundMaximumAlphaBlend] | 160 // [0.f, kPeekPromoBackgroundMaximumAlphaBlend] |
158 peek_promo_container_->SetBackgroundColor( | 161 peek_promo_container_->SetBackgroundColor( |
159 color_utils::AlphaBlend(kPeekPromoRippleBackgroundColor, | 162 color_utils::AlphaBlend(kPeekPromoRippleBackgroundColor, |
160 kSearchBarBackgroundColor, | 163 kSearchBarBackgroundColor, |
161 kPeekPromoBackgroundMaximumAlphaBlend * | 164 kPeekPromoBackgroundMaximumAlphaBlend * |
162 search_peek_promo_ripple_opacity | 165 search_peek_promo_ripple_opacity)); |
163 )); | |
164 | 166 |
165 // ----------------------------------------------------------------- | 167 // ----------------------------------------------------------------- |
166 // Peek Promo Ripple | 168 // Peek Promo Ripple |
167 // ----------------------------------------------------------------- | 169 // ----------------------------------------------------------------- |
168 gfx::Size peek_promo_ripple_size( | 170 gfx::Size peek_promo_ripple_size( |
169 search_peek_promo_ripple_width, search_peek_promo_height); | 171 search_peek_promo_ripple_width, search_peek_promo_height); |
170 gfx::Rect peek_promo_ripple_border( | 172 gfx::Rect peek_promo_ripple_border( |
171 peek_promo_ripple_resource->Border(peek_promo_ripple_size)); | 173 peek_promo_ripple_resource->Border(peek_promo_ripple_size)); |
172 | 174 |
173 // Add padding so the ripple will occupy the whole width at 100%. | 175 // Add padding so the ripple will occupy the whole width at 100%. |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
248 search_bar_top + | 250 search_bar_top + |
249 search_bar_height / 2 - | 251 search_bar_height / 2 - |
250 search_term_resource->size.height() / 2; | 252 search_term_resource->size.height() / 2; |
251 search_term_->SetUIResourceId(search_term_resource->ui_resource->id()); | 253 search_term_->SetUIResourceId(search_term_resource->ui_resource->id()); |
252 search_term_->SetBounds(search_term_resource->size); | 254 search_term_->SetBounds(search_term_resource->size); |
253 search_term_->SetPosition(gfx::PointF(0.f, search_bar_padding_top)); | 255 search_term_->SetPosition(gfx::PointF(0.f, search_bar_padding_top)); |
254 search_term_->SetOpacity(search_term_opacity); | 256 search_term_->SetOpacity(search_term_opacity); |
255 } | 257 } |
256 | 258 |
257 // --------------------------------------------------------------------------- | 259 // --------------------------------------------------------------------------- |
258 // Search Provider Icon | 260 // Panel Icon (Static) |
259 // --------------------------------------------------------------------------- | 261 // --------------------------------------------------------------------------- |
260 // Positions the Search Provider Icon at the start of the Search Bar. | 262 if (panel_icon_resource_id != 0) { |
261 float search_provider_icon_left; | 263 if (panel_icon_->parent() != layer_) { |
262 if (is_rtl) { | 264 layer_->AddChild(panel_icon_); |
263 search_provider_icon_left = search_panel_width - | 265 } |
264 search_provider_icon_resource->size.width() - search_bar_margin_side; | 266 ui::ResourceManager::Resource* panel_icon_resource = |
267 resource_manager_->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC, | |
268 panel_icon_resource_id); | |
269 | |
270 // Positions the Icon at the start of the Search Bar. | |
271 float search_provider_icon_left; | |
272 if (is_rtl) { | |
273 search_provider_icon_left = search_panel_width - | |
274 panel_icon_resource->size.width() - search_bar_margin_side; | |
275 } else { | |
276 search_provider_icon_left = search_bar_margin_side; | |
277 } | |
278 | |
279 // Centers the Icon vertically in the Search Bar. | |
280 float search_provider_icon_top = search_bar_top + | |
281 search_bar_height / 2 - | |
282 panel_icon_resource->size.height() / 2; | |
283 | |
284 panel_icon_->SetUIResourceId( | |
285 panel_icon_resource->ui_resource->id()); | |
286 panel_icon_->SetBounds(panel_icon_resource->size); | |
287 panel_icon_->SetPosition( | |
288 gfx::PointF(search_provider_icon_left, search_provider_icon_top)); | |
265 } else { | 289 } else { |
266 search_provider_icon_left = search_bar_margin_side; | 290 if (panel_icon_.get() && panel_icon_->parent()) { |
291 panel_icon_->RemoveFromParent(); | |
292 } | |
267 } | 293 } |
268 | 294 |
269 // Centers the Search Provider Icon vertically in the Search Bar. | 295 // --------------------------------------------------------------------------- |
270 float search_provider_icon_top = search_bar_top + | 296 // Search Provider Icon Sprite (Animated) |
271 search_bar_height / 2 - | 297 // --------------------------------------------------------------------------- |
272 search_provider_icon_resource->size.height() / 2; | 298 if (panel_icon_resource_id == 0 && search_provider_icon_sprite_visible) { |
299 if (search_provider_icon_sprite_->layer()->parent() != layer_) { | |
300 layer_->AddChild(search_provider_icon_sprite_->layer()); | |
301 } | |
273 | 302 |
274 search_provider_icon_->SetUIResourceId( | 303 search_provider_icon_sprite_->DrawSpriteFrame( |
275 search_provider_icon_resource->ui_resource->id()); | 304 resource_manager_, |
276 search_provider_icon_->SetBounds(search_provider_icon_resource->size); | 305 search_provider_icon_sprite_bitmap_resource_id, |
277 search_provider_icon_->SetPosition( | 306 search_provider_icon_sprite_metadata_resource_id, |
278 gfx::PointF(search_provider_icon_left, search_provider_icon_top)); | 307 search_provider_icon_sprite_completion_percentage); |
308 | |
309 // Positions the Search Provider Icon at the start of the Search Bar. | |
310 float icon_x; | |
311 if (is_rtl) { | |
312 icon_x = search_panel_width - search_provider_icon_sprite_size - | |
313 search_bar_margin_side; | |
314 } else { | |
315 icon_x = search_bar_margin_side; | |
316 } | |
317 | |
318 // Centers the Search Provider Icon vertically in the Search Bar. | |
319 float icon_y = search_bar_top + search_bar_height / 2 | |
320 - search_provider_icon_sprite_size / 2; | |
321 search_provider_icon_sprite_->layer()->SetPosition( | |
322 gfx::PointF(icon_x, icon_y)); | |
323 | |
324 // Scales the layer to the correct size. | |
325 search_provider_icon_sprite_->layer()->SetBounds( | |
326 gfx::Size(search_provider_icon_sprite_size, | |
327 search_provider_icon_sprite_size)); | |
328 | |
329 } else { | |
330 if (search_provider_icon_sprite_->layer().get() && | |
pedro (no code reviews)
2015/10/28 18:31:14
We should only execute this when not rendering the
Theresa
2015/10/28 22:20:59
Done.
| |
331 search_provider_icon_sprite_->layer()->parent()) { | |
332 search_provider_icon_sprite_->layer()->RemoveFromParent(); | |
333 } | |
334 } | |
279 | 335 |
280 // --------------------------------------------------------------------------- | 336 // --------------------------------------------------------------------------- |
281 // Arrow Icon | 337 // Arrow Icon |
282 // --------------------------------------------------------------------------- | 338 // --------------------------------------------------------------------------- |
283 // Grabs the Search Arrow Icon resource. | 339 // Grabs the Search Arrow Icon resource. |
284 ui::ResourceManager::Resource* arrow_icon_resource = | 340 ui::ResourceManager::Resource* arrow_icon_resource = |
285 resource_manager_->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC, | 341 resource_manager_->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC, |
286 arrow_up_resource_id); | 342 arrow_up_resource_id); |
287 | 343 |
288 // Positions the icon at the end of the Search Bar. | 344 // Positions the icon at the end of the Search Bar. |
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
511 panel_shadow_( | 567 panel_shadow_( |
512 cc::NinePatchLayer::Create(content::Compositor::LayerSettings())), | 568 cc::NinePatchLayer::Create(content::Compositor::LayerSettings())), |
513 search_bar_background_( | 569 search_bar_background_( |
514 cc::SolidColorLayer::Create(content::Compositor::LayerSettings())), | 570 cc::SolidColorLayer::Create(content::Compositor::LayerSettings())), |
515 search_context_( | 571 search_context_( |
516 cc::UIResourceLayer::Create(content::Compositor::LayerSettings())), | 572 cc::UIResourceLayer::Create(content::Compositor::LayerSettings())), |
517 search_term_( | 573 search_term_( |
518 cc::UIResourceLayer::Create(content::Compositor::LayerSettings())), | 574 cc::UIResourceLayer::Create(content::Compositor::LayerSettings())), |
519 search_bar_shadow_( | 575 search_bar_shadow_( |
520 cc::UIResourceLayer::Create(content::Compositor::LayerSettings())), | 576 cc::UIResourceLayer::Create(content::Compositor::LayerSettings())), |
521 search_provider_icon_( | 577 panel_icon_( |
522 cc::UIResourceLayer::Create(content::Compositor::LayerSettings())), | 578 cc::UIResourceLayer::Create(content::Compositor::LayerSettings())), |
579 search_provider_icon_sprite_(CrushedSpriteLayer::Create()), | |
523 arrow_icon_( | 580 arrow_icon_( |
524 cc::UIResourceLayer::Create(content::Compositor::LayerSettings())), | 581 cc::UIResourceLayer::Create(content::Compositor::LayerSettings())), |
525 close_icon_( | 582 close_icon_( |
526 cc::UIResourceLayer::Create(content::Compositor::LayerSettings())), | 583 cc::UIResourceLayer::Create(content::Compositor::LayerSettings())), |
527 content_view_container_( | 584 content_view_container_( |
528 cc::Layer::Create(content::Compositor::LayerSettings())), | 585 cc::Layer::Create(content::Compositor::LayerSettings())), |
529 search_bar_border_( | 586 search_bar_border_( |
530 cc::SolidColorLayer::Create(content::Compositor::LayerSettings())), | 587 cc::SolidColorLayer::Create(content::Compositor::LayerSettings())), |
531 progress_bar_( | 588 progress_bar_( |
532 cc::NinePatchLayer::Create(content::Compositor::LayerSettings())), | 589 cc::NinePatchLayer::Create(content::Compositor::LayerSettings())), |
(...skipping 30 matching lines...) Expand all Loading... | |
563 search_bar_background_->SetIsDrawable(true); | 620 search_bar_background_->SetIsDrawable(true); |
564 search_bar_background_->SetBackgroundColor(kSearchBarBackgroundColor); | 621 search_bar_background_->SetBackgroundColor(kSearchBarBackgroundColor); |
565 layer_->AddChild(search_bar_background_); | 622 layer_->AddChild(search_bar_background_); |
566 | 623 |
567 // Search Bar Text | 624 // Search Bar Text |
568 search_context_->SetIsDrawable(true); | 625 search_context_->SetIsDrawable(true); |
569 layer_->AddChild(search_context_); | 626 layer_->AddChild(search_context_); |
570 search_term_->SetIsDrawable(true); | 627 search_term_->SetIsDrawable(true); |
571 layer_->AddChild(search_term_); | 628 layer_->AddChild(search_term_); |
572 | 629 |
573 // Search Provider Icon | 630 // Panel Icon |
574 search_provider_icon_->SetIsDrawable(true); | 631 panel_icon_->SetIsDrawable(true); |
pedro (no code reviews)
2015/10/28 18:31:14
Don't we need to call SetIsDrawable() on the sprit
Theresa
2015/10/28 22:20:59
I'm calling SetIsDrawable on the UIResourceLayer t
| |
575 layer_->AddChild(search_provider_icon_); | |
576 | 632 |
577 // Arrow Icon | 633 // Arrow Icon |
578 arrow_icon_->SetIsDrawable(true); | 634 arrow_icon_->SetIsDrawable(true); |
579 layer_->AddChild(arrow_icon_); | 635 layer_->AddChild(arrow_icon_); |
580 | 636 |
581 // Close Icon | 637 // Close Icon |
582 close_icon_->SetIsDrawable(true); | 638 close_icon_->SetIsDrawable(true); |
583 layer_->AddChild(close_icon_); | 639 layer_->AddChild(close_icon_); |
584 | 640 |
585 // Search Opt Out Promo | 641 // Search Opt Out Promo |
(...skipping 22 matching lines...) Expand all Loading... | |
608 | 664 |
609 ContextualSearchLayer::~ContextualSearchLayer() { | 665 ContextualSearchLayer::~ContextualSearchLayer() { |
610 } | 666 } |
611 | 667 |
612 scoped_refptr<cc::Layer> ContextualSearchLayer::layer() { | 668 scoped_refptr<cc::Layer> ContextualSearchLayer::layer() { |
613 return layer_; | 669 return layer_; |
614 } | 670 } |
615 | 671 |
616 } // namespace android | 672 } // namespace android |
617 } // namespace chrome | 673 } // namespace chrome |
OLD | NEW |