| Index: chrome/browser/android/compositor/layer/reader_mode_layer.cc
|
| diff --git a/chrome/browser/android/compositor/layer/reader_mode_layer.cc b/chrome/browser/android/compositor/layer/reader_mode_layer.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..76a175903dc1bdf4f1fb48c0d71defdf7e819d77
|
| --- /dev/null
|
| +++ b/chrome/browser/android/compositor/layer/reader_mode_layer.cc
|
| @@ -0,0 +1,159 @@
|
| +// Copyright 2015 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "chrome/browser/android/compositor/layer/reader_mode_layer.h"
|
| +
|
| +#include "cc/layers/layer.h"
|
| +#include "cc/layers/nine_patch_layer.h"
|
| +#include "cc/layers/solid_color_layer.h"
|
| +#include "cc/layers/ui_resource_layer.h"
|
| +#include "cc/output/filter_operation.h"
|
| +#include "cc/output/filter_operations.h"
|
| +#include "content/public/browser/android/content_view_core.h"
|
| +#include "content/public/browser/web_contents.h"
|
| +#include "third_party/skia/include/core/SkColor.h"
|
| +#include "ui/android/resources/resource_manager.h"
|
| +#include "ui/android/resources/ui_resource_android.h"
|
| +
|
| +namespace chrome {
|
| +namespace android {
|
| +
|
| +// static
|
| +scoped_refptr<ReaderModeLayer> ReaderModeLayer::Create(
|
| + ui::ResourceManager* resource_manager) {
|
| + return make_scoped_refptr(new ReaderModeLayer(resource_manager));
|
| +}
|
| +
|
| +void ReaderModeLayer::SetProperties(
|
| + int panel_background_resource_id,
|
| + int panel_text_resource_id,
|
| + content::ContentViewCore* reader_mode_content_view_core,
|
| + float panel_y,
|
| + float panel_width,
|
| + float panel_margin_top,
|
| + float panel_height,
|
| + float distilled_y,
|
| + float distilled_height,
|
| + float x,
|
| + float panel_text_opacity,
|
| + int header_background_color) {
|
| + // Grab the dynamic Reader Mode Text resource.
|
| + ui::ResourceManager::Resource* panel_text_resource =
|
| + resource_manager_->GetResource(ui::ANDROID_RESOURCE_TYPE_DYNAMIC,
|
| + panel_text_resource_id);
|
| +
|
| + // Grab required static resources.
|
| + ui::ResourceManager::Resource* panel_background_resource =
|
| + resource_manager_->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC,
|
| + panel_background_resource_id);
|
| +
|
| + DCHECK(panel_background_resource);
|
| +
|
| + cc::FilterOperations blur_filter;
|
| +
|
| + // ---------------------------------------------------------------------------
|
| + // Reader Mode Bar Background
|
| + // ---------------------------------------------------------------------------
|
| + gfx::Size background_size(panel_width, panel_height);
|
| + panel_background_->SetUIResourceId(
|
| + panel_background_resource->ui_resource->id());
|
| + panel_background_->SetBorder(
|
| + panel_background_resource->Border(background_size));
|
| + panel_background_->SetAperture(panel_background_resource->aperture);
|
| + panel_background_->SetBounds(background_size);
|
| + panel_background_->SetPosition(gfx::PointF(0.0f, panel_y));
|
| + panel_background_->SetOpacity(panel_text_opacity);
|
| +
|
| + // ---------------------------------------------------------------------------
|
| + // Reader Mode Bar Text
|
| + // ---------------------------------------------------------------------------
|
| + if (panel_text_resource) {
|
| + // Centralizes the text vertically in the Reader Mode panel.
|
| + panel_text_->SetUIResourceId(
|
| + panel_text_resource->ui_resource->id());
|
| + panel_text_->SetBounds(panel_text_resource->size);
|
| + panel_text_->SetPosition(gfx::PointF(0.f, panel_margin_top + panel_y));
|
| + panel_text_->SetFilters(blur_filter);
|
| + panel_text_->SetOpacity(panel_text_opacity);
|
| + }
|
| +
|
| + // ---------------------------------------------------------------------------
|
| + // Reader Mode Content View
|
| + // ---------------------------------------------------------------------------
|
| + content_shadow_->SetUIResourceId(
|
| + panel_background_resource->ui_resource->id());
|
| + content_shadow_->SetBorder(
|
| + panel_background_resource->Border(background_size));
|
| + content_shadow_->SetAperture(panel_background_resource->aperture);
|
| + content_shadow_->SetBounds(background_size);
|
| + content_shadow_->SetPosition(gfx::PointF(0.f, distilled_y));
|
| +
|
| + content_solid_->SetBounds(background_size);
|
| + content_solid_->SetPosition(gfx::PointF(0.f, panel_margin_top + distilled_y));
|
| + content_solid_->SetBackgroundColor(header_background_color);
|
| +
|
| + content_view_container_->SetPosition(
|
| + gfx::PointF(0.f, panel_margin_top + distilled_y));
|
| + content_view_container_->SetOpacity(1.0f - panel_text_opacity);
|
| +
|
| + if (reader_mode_content_view_core &&
|
| + reader_mode_content_view_core->GetLayer().get()) {
|
| + scoped_refptr<cc::Layer> content_view_layer =
|
| + reader_mode_content_view_core->GetLayer();
|
| + if (content_view_layer->parent() != content_view_container_) {
|
| + content_view_container_->AddChild(content_view_layer);
|
| + content_view_container_->SetFilters(blur_filter);
|
| + }
|
| + } else {
|
| + content_view_container_->RemoveAllChildren();
|
| + }
|
| +
|
| + // ---------------------------------------------------------------------------
|
| + // Reader Mode Panel.
|
| + // ---------------------------------------------------------------------------
|
| + layer_->SetPosition(gfx::PointF(x, 0.f));
|
| +}
|
| +
|
| +ReaderModeLayer::ReaderModeLayer(
|
| + ui::ResourceManager* resource_manager)
|
| + : resource_manager_(resource_manager),
|
| + layer_(cc::Layer::Create()),
|
| + panel_background_(cc::NinePatchLayer::Create()),
|
| + panel_text_(cc::UIResourceLayer::Create()),
|
| + content_shadow_(cc::NinePatchLayer::Create()),
|
| + content_solid_(cc::SolidColorLayer::Create()),
|
| + content_view_container_(cc::Layer::Create()) {
|
| + layer_->SetMasksToBounds(false);
|
| +
|
| + // Reader Mode Background
|
| + panel_background_->SetIsDrawable(true);
|
| + panel_background_->SetFillCenter(true);
|
| + layer_->AddChild(panel_background_);
|
| +
|
| + // Reader Mode Text
|
| + panel_text_->SetIsDrawable(true);
|
| + layer_->AddChild(panel_text_);
|
| +
|
| + // Reader Mode Content shadow
|
| + content_shadow_->SetIsDrawable(true);
|
| + content_shadow_->SetFillCenter(true);
|
| + layer_->AddChild(content_shadow_);
|
| +
|
| + // Reader Mode Content solid background
|
| + content_solid_->SetIsDrawable(true);
|
| + layer_->AddChild(content_solid_);
|
| +
|
| + // Reader Mode Content View
|
| + layer_->AddChild(content_view_container_);
|
| +}
|
| +
|
| +ReaderModeLayer::~ReaderModeLayer() {
|
| +}
|
| +
|
| +scoped_refptr<cc::Layer> ReaderModeLayer::layer() {
|
| + return layer_;
|
| +}
|
| +
|
| +} // namespace android
|
| +} // namespace chrome
|
|
|