| Index: chrome/browser/android/compositor/layer/toolbar_layer.cc
|
| diff --git a/chrome/browser/android/compositor/layer/toolbar_layer.cc b/chrome/browser/android/compositor/layer/toolbar_layer.cc
|
| index 4015f17e84c8d495986e7b1605f88da2cfd42e1b..e2389b8b0f10ef5e290a04bfe1f279e4726d624f 100644
|
| --- a/chrome/browser/android/compositor/layer/toolbar_layer.cc
|
| +++ b/chrome/browser/android/compositor/layer/toolbar_layer.cc
|
| @@ -8,6 +8,7 @@
|
| #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/resources/toolbar_resource.h"
|
| #include "content/public/browser/android/compositor.h"
|
| #include "third_party/skia/include/core/SkColor.h"
|
| #include "ui/android/resources/nine_patch_resource.h"
|
| @@ -37,9 +38,8 @@ void ToolbarLayer::PushResource(
|
| bool show_debug,
|
| bool clip_shadow,
|
| bool browser_controls_at_bottom) {
|
| - // TODO(khushalsagar): This should not be a nine-patch resource.
|
| - ui::NinePatchResource* resource =
|
| - ui::NinePatchResource::From(resource_manager_->GetResource(
|
| + ToolbarResource* resource =
|
| + ToolbarResource::From(resource_manager_->GetResource(
|
| ui::ANDROID_RESOURCE_TYPE_DYNAMIC, toolbar_resource_id));
|
|
|
| // Ensure the toolbar resource is available before making the layer visible.
|
| @@ -47,63 +47,50 @@ void ToolbarLayer::PushResource(
|
| if (!resource)
|
| return;
|
|
|
| - // This layer effectively draws over the space it takes for shadows. Set the
|
| - // bounds to the non-shadow size so that other things can properly line up.
|
| - // Padding height does not include the height of the tabstrip, so we add
|
| - // it explicitly by adding y offset.
|
| - gfx::Size size =
|
| - gfx::Size(resource->padding().width(),
|
| - resource->padding().height() + resource->padding().y());
|
| - layer_->SetBounds(size);
|
| + // This layer effectively draws over the space the resource takes for shadows.
|
| + // Set the bounds to the non-shadow size so that other things can properly
|
| + // line up.
|
| + gfx::Size toolbar_bounds =
|
| + gfx::Size(resource->size().width(),
|
| + resource->size().height() - resource->shadow_height());
|
| + layer_->SetBounds(toolbar_bounds);
|
|
|
| // The toolbar_root_ contains all of the layers that make up the toolbar. The
|
| // toolbar_root_ is moved around inside of layer_ to allow appropriate
|
| // clipping of the shadow.
|
| - toolbar_root_->SetBounds(resource->padding().size());
|
| -
|
| - gfx::PointF root_layer_position(0, y_offset);
|
| - gfx::PointF background_position(resource->padding().origin());
|
| + toolbar_root_->SetBounds(toolbar_bounds);
|
| if (browser_controls_at_bottom) {
|
| - // The toolbar's position as if it were completely shown.
|
| - float base_toolbar_y = window_height - resource->padding().size().height();
|
| - float layer_offset =
|
| - resource->size().height() - resource->padding().size().height();
|
| -
|
| - root_layer_position.set_y(base_toolbar_y + y_offset);
|
| - toolbar_root_->SetPosition(gfx::PointF(0, -layer_offset));
|
| - background_position.set_y(layer_offset);
|
| + // If the browser controld are at bottom, this means that the shadow is at
|
| + // top of the container, i.e., at the top of the resource bitmap, move the
|
| + // toolbar up by the amount of the shadow to allow clipping if necessary.
|
| + toolbar_root_->SetPosition(gfx::PointF(0, -resource->shadow_height()));
|
| }
|
| - layer_->SetPosition(root_layer_position);
|
|
|
| - toolbar_background_layer_->SetBounds(resource->padding().size());
|
| - toolbar_background_layer_->SetPosition(background_position);
|
| + toolbar_background_layer_->SetBounds(resource->toolbar_rect().size());
|
| + toolbar_background_layer_->SetPosition(
|
| + gfx::PointF(resource->toolbar_rect().origin()));
|
| toolbar_background_layer_->SetBackgroundColor(toolbar_background_color);
|
|
|
| - bool url_bar_visible = (resource->aperture().width() != 0);
|
| + bool url_bar_visible = (resource->location_bar_content_rect().width() != 0);
|
| url_bar_background_layer_->SetHideLayerAndSubtree(!url_bar_visible);
|
| if (url_bar_visible) {
|
| ui::NinePatchResource* url_bar_background_resource =
|
| ui::NinePatchResource::From(resource_manager_->GetResource(
|
| ui::ANDROID_RESOURCE_TYPE_STATIC, url_bar_background_resource_id));
|
| - gfx::Size url_bar_size(resource->aperture().width() +
|
| - url_bar_background_resource->size().width() -
|
| - url_bar_background_resource->padding().width(),
|
| - resource->aperture().height() +
|
| - url_bar_background_resource->size().height() -
|
| - url_bar_background_resource->padding().height());
|
| - gfx::Rect url_bar_border(
|
| - url_bar_background_resource->Border(url_bar_size));
|
| - gfx::PointF url_bar_position = gfx::PointF(
|
| - resource->aperture().x() - url_bar_background_resource->padding().x(),
|
| - resource->aperture().y() - url_bar_background_resource->padding().y());
|
|
|
| - url_bar_background_layer_->SetUIResourceId(
|
| - url_bar_background_resource->ui_resource()->id());
|
| - url_bar_background_layer_->SetBorder(url_bar_border);
|
| + gfx::Size draw_size(url_bar_background_resource->DrawSize(
|
| + resource->location_bar_content_rect().size()));
|
| + gfx::Rect border(url_bar_background_resource->Border(draw_size));
|
| + gfx::PointF position(url_bar_background_resource->DrawPosition(
|
| + resource->location_bar_content_rect().origin()));
|
| +
|
| + url_bar_background_layer_->SetBounds(draw_size);
|
| + url_bar_background_layer_->SetPosition(position);
|
| + url_bar_background_layer_->SetBorder(border);
|
| url_bar_background_layer_->SetAperture(
|
| url_bar_background_resource->aperture());
|
| - url_bar_background_layer_->SetBounds(url_bar_size);
|
| - url_bar_background_layer_->SetPosition(url_bar_position);
|
| + url_bar_background_layer_->SetUIResourceId(
|
| + url_bar_background_resource->ui_resource()->id());
|
| url_bar_background_layer_->SetOpacity(url_bar_alpha);
|
| }
|
|
|
| @@ -114,8 +101,9 @@ void ToolbarLayer::PushResource(
|
|
|
| anonymize_layer_->SetHideLayerAndSubtree(!anonymize);
|
| if (anonymize) {
|
| - anonymize_layer_->SetPosition(gfx::PointF(resource->aperture().origin()));
|
| - anonymize_layer_->SetBounds(resource->aperture().size());
|
| + anonymize_layer_->SetPosition(
|
| + gfx::PointF(resource->location_bar_content_rect().origin()));
|
| + anonymize_layer_->SetBounds(resource->location_bar_content_rect().size());
|
| anonymize_layer_->SetBackgroundColor(toolbar_textbox_background_color);
|
| }
|
|
|
| @@ -124,6 +112,14 @@ void ToolbarLayer::PushResource(
|
| layer_->AddChild(debug_layer_);
|
| else if (!show_debug && debug_layer_->parent())
|
| debug_layer_->RemoveFromParent();
|
| +
|
| + gfx::PointF root_layer_position(0, y_offset);
|
| + if (browser_controls_at_bottom) {
|
| + // The toolbar's position as if it were completely shown.
|
| + float base_toolbar_y = window_height - toolbar_bounds.height();
|
| + root_layer_position.set_y(base_toolbar_y + y_offset);
|
| + }
|
| + layer_->SetPosition(root_layer_position);
|
| }
|
|
|
| void ToolbarLayer::UpdateProgressBar(int progress_bar_x,
|
|
|