Chromium Code Reviews| Index: chrome/browser/android/compositor/layer/overlay_panel_layer.cc |
| diff --git a/chrome/browser/android/compositor/layer/overlay_panel_layer.cc b/chrome/browser/android/compositor/layer/overlay_panel_layer.cc |
| index 42e2a558c91d7de89bc88b273fab23c25072369f..852fd23594963ea47f138c2b6cd687ce81330a1d 100644 |
| --- a/chrome/browser/android/compositor/layer/overlay_panel_layer.cc |
| +++ b/chrome/browser/android/compositor/layer/overlay_panel_layer.cc |
| @@ -47,17 +47,18 @@ void OverlayPanelLayer::AddBarTextLayer(scoped_refptr<cc::Layer> text_layer) { |
| text_container_->AddChild(text_layer); |
| } |
| -void OverlayPanelLayer::SetResourceIds( |
| - int bar_text_resource_id, |
| - int panel_shadow_resource_id, |
| - int bar_shadow_resource_id, |
| - int panel_icon_resource_id, |
| - int close_icon_resource_id) { |
| +void OverlayPanelLayer::SetResourceIds(int bar_text_resource_id, |
| + int panel_shadow_resource_id, |
| + int bar_shadow_resource_id, |
| + int panel_icon_resource_id, |
| + int close_icon_resource_id, |
| + int handle_resource_id) { |
| bar_text_resource_id_ = bar_text_resource_id; |
| panel_shadow_resource_id_ = panel_shadow_resource_id; |
| bar_shadow_resource_id_ = bar_shadow_resource_id; |
| panel_icon_resource_id_ = panel_icon_resource_id; |
| close_icon_resource_id_ = close_icon_resource_id; |
| + bar_handle_resource_id_ = handle_resource_id; |
| } |
| void OverlayPanelLayer::SetProperties( |
| @@ -76,8 +77,9 @@ void OverlayPanelLayer::SetProperties( |
| float bar_border_height, |
| bool bar_shadow_visible, |
| float bar_shadow_opacity, |
| - float close_icon_opacity) { |
| - |
| + float close_icon_opacity, |
| + float bar_handle_offset_y, |
| + float bar_padding_bottom) { |
| // Grabs required static resources. |
| ui::NinePatchResource* panel_shadow_resource = |
| ui::NinePatchResource::From(resource_manager_->GetResource( |
| @@ -119,6 +121,40 @@ void OverlayPanelLayer::SetProperties( |
| bar_background_->SetPosition(gfx::PointF(0.f, bar_top)); |
| // --------------------------------------------------------------------------- |
| + // Bar Handle |
| + // --------------------------------------------------------------------------- |
| + |
| + float bar_content_top = bar_top; |
| + bar_content_height_ = bar_height - bar_padding_bottom; |
| + |
| + if (bar_handle_resource_id_ != 0) { |
|
mdjones
2017/04/07 15:47:13
Do you think it makes sense to lazily create the l
Theresa
2017/04/07 16:26:43
Done.
|
| + if (bar_handle_->parent() != layer_) |
| + layer_->AddChild(bar_handle_); |
| + |
| + // Grab the bar handle resource. |
| + ui::Resource* bar_handle_resource = resource_manager_->GetResource( |
| + ui::ANDROID_RESOURCE_TYPE_DYNAMIC, bar_handle_resource_id_); |
| + |
| + // Center the handle horizontally. |
| + float bar_handle_left = |
| + (panel_width - bar_handle_resource->size().width()) / 2; |
| + float bar_handle_top = bar_top + bar_handle_offset_y; |
| + |
| + bar_handle_->SetUIResourceId(bar_handle_resource->ui_resource()->id()); |
| + bar_handle_->SetBounds(bar_handle_resource->size()); |
| + bar_handle_->SetPosition(gfx::PointF(bar_handle_left, bar_handle_top)); |
| + |
| + bar_content_top = bar_handle_top + bar_handle_resource->size().height(); |
| + bar_content_height_ = bar_height - bar_content_top - bar_padding_bottom; |
| + } |
| + |
| + // --------------------------------------------------------------------------- |
| + // Bar Content Layer |
| + // --------------------------------------------------------------------------- |
| + bar_content_layer_->SetBounds(gfx::Size(panel_width, bar_content_height_)); |
| + bar_content_layer_->SetPosition(gfx::PointF(0.f, bar_content_top)); |
| + |
| + // --------------------------------------------------------------------------- |
| // Bar Text |
| // --------------------------------------------------------------------------- |
| ui::Resource* bar_text_resource = resource_manager_->GetResource( |
| @@ -127,7 +163,7 @@ void OverlayPanelLayer::SetProperties( |
| if (bar_text_resource) { |
| // Centers the text vertically in the Search Bar. |
| float bar_padding_top = |
| - bar_top + bar_height / 2 - bar_text_resource->size().height() / 2; |
| + (bar_content_height_ - bar_text_resource->size().height()) / 2; |
| bar_text_->SetUIResourceId(bar_text_resource->ui_resource()->id()); |
| bar_text_->SetBounds(bar_text_resource->size()); |
| bar_text_->SetPosition(gfx::PointF(0.f, bar_padding_top)); |
| @@ -154,8 +190,7 @@ void OverlayPanelLayer::SetProperties( |
| } |
| // Centers the Icon vertically in the bar. |
| - float icon_y = bar_top + bar_height / 2 - |
| - icon_layer->bounds().height() / 2; |
| + float icon_y = (bar_content_height_ - icon_layer->bounds().height()) / 2; |
| icon_layer->SetPosition(gfx::PointF(icon_x, icon_y)); |
| } |
| @@ -178,7 +213,7 @@ void OverlayPanelLayer::SetProperties( |
| // Centers the Close Icon vertically in the bar. |
| float close_icon_top = |
| - bar_top + bar_height / 2 - close_icon_resource->size().height() / 2; |
| + (bar_content_height_ - close_icon_resource->size().height()) / 2; |
| close_icon_->SetUIResourceId(close_icon_resource->ui_resource()->id()); |
| close_icon_->SetBounds(close_icon_resource->size()); |
| @@ -255,7 +290,9 @@ OverlayPanelLayer::OverlayPanelLayer(ui::ResourceManager* resource_manager) |
| close_icon_(cc::UIResourceLayer::Create()), |
| content_container_(cc::SolidColorLayer::Create()), |
| text_container_(cc::Layer::Create()), |
| - bar_border_(cc::SolidColorLayer::Create()) { |
| + bar_border_(cc::SolidColorLayer::Create()), |
| + bar_handle_(cc::UIResourceLayer::Create()), |
| + bar_content_layer_(cc::UIResourceLayer::Create()) { |
| layer_->SetMasksToBounds(false); |
| layer_->SetIsDrawable(true); |
| @@ -269,10 +306,17 @@ OverlayPanelLayer::OverlayPanelLayer(ui::ResourceManager* resource_manager) |
| bar_background_->SetBackgroundColor(kBarBackgroundColor); |
| layer_->AddChild(bar_background_); |
| + // Bar Handle |
| + bar_handle_->SetIsDrawable(true); |
| + |
| + // Bar Content Layer |
| + bar_content_layer_->SetIsDrawable(true); |
| + layer_->AddChild(bar_content_layer_); |
| + |
| // Bar Text |
| bar_text_->SetIsDrawable(true); |
| AddBarTextLayer(bar_text_); |
| - layer_->AddChild(text_container_); |
| + bar_content_layer_->AddChild(text_container_); |
| // Panel Icon |
| panel_icon_->SetIsDrawable(true); |
| @@ -282,7 +326,7 @@ OverlayPanelLayer::OverlayPanelLayer(ui::ResourceManager* resource_manager) |
| // Close Icon |
| close_icon_->SetIsDrawable(true); |
| - layer_->AddChild(close_icon_); |
| + bar_content_layer_->AddChild(close_icon_); |
| // Content Container |
| content_container_->SetIsDrawable(true); |