OLD | NEW |
(Empty) | |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "chrome/browser/android/compositor/layer/reader_mode_layer.h" |
| 6 |
| 7 #include "cc/layers/layer.h" |
| 8 #include "cc/layers/nine_patch_layer.h" |
| 9 #include "cc/layers/solid_color_layer.h" |
| 10 #include "cc/layers/ui_resource_layer.h" |
| 11 #include "cc/output/filter_operation.h" |
| 12 #include "cc/output/filter_operations.h" |
| 13 #include "content/public/browser/android/content_view_core.h" |
| 14 #include "content/public/browser/web_contents.h" |
| 15 #include "third_party/skia/include/core/SkColor.h" |
| 16 #include "ui/android/resources/resource_manager.h" |
| 17 #include "ui/android/resources/ui_resource_android.h" |
| 18 |
| 19 namespace chrome { |
| 20 namespace android { |
| 21 |
| 22 // static |
| 23 scoped_refptr<ReaderModeLayer> ReaderModeLayer::Create( |
| 24 ui::ResourceManager* resource_manager) { |
| 25 return make_scoped_refptr(new ReaderModeLayer(resource_manager)); |
| 26 } |
| 27 |
| 28 void ReaderModeLayer::SetProperties( |
| 29 int panel_background_resource_id, |
| 30 int panel_text_resource_id, |
| 31 content::ContentViewCore* reader_mode_content_view_core, |
| 32 float panel_y, |
| 33 float panel_width, |
| 34 float panel_margin_top, |
| 35 float panel_height, |
| 36 float distilled_y, |
| 37 float distilled_height, |
| 38 float x, |
| 39 float panel_text_opacity, |
| 40 int header_background_color) { |
| 41 // Grab the dynamic Reader Mode Text resource. |
| 42 ui::ResourceManager::Resource* panel_text_resource = |
| 43 resource_manager_->GetResource(ui::ANDROID_RESOURCE_TYPE_DYNAMIC, |
| 44 panel_text_resource_id); |
| 45 |
| 46 // Grab required static resources. |
| 47 ui::ResourceManager::Resource* panel_background_resource = |
| 48 resource_manager_->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC, |
| 49 panel_background_resource_id); |
| 50 |
| 51 DCHECK(panel_background_resource); |
| 52 |
| 53 cc::FilterOperations blur_filter; |
| 54 |
| 55 // --------------------------------------------------------------------------- |
| 56 // Reader Mode Bar Background |
| 57 // --------------------------------------------------------------------------- |
| 58 gfx::Size background_size(panel_width, panel_height); |
| 59 panel_background_->SetUIResourceId( |
| 60 panel_background_resource->ui_resource->id()); |
| 61 panel_background_->SetBorder( |
| 62 panel_background_resource->Border(background_size)); |
| 63 panel_background_->SetAperture(panel_background_resource->aperture); |
| 64 panel_background_->SetBounds(background_size); |
| 65 panel_background_->SetPosition(gfx::PointF(0.0f, panel_y)); |
| 66 panel_background_->SetOpacity(panel_text_opacity); |
| 67 |
| 68 // --------------------------------------------------------------------------- |
| 69 // Reader Mode Bar Text |
| 70 // --------------------------------------------------------------------------- |
| 71 if (panel_text_resource) { |
| 72 // Centralizes the text vertically in the Reader Mode panel. |
| 73 panel_text_->SetUIResourceId( |
| 74 panel_text_resource->ui_resource->id()); |
| 75 panel_text_->SetBounds(panel_text_resource->size); |
| 76 panel_text_->SetPosition(gfx::PointF(0.f, panel_margin_top + panel_y)); |
| 77 panel_text_->SetFilters(blur_filter); |
| 78 panel_text_->SetOpacity(panel_text_opacity); |
| 79 } |
| 80 |
| 81 // --------------------------------------------------------------------------- |
| 82 // Reader Mode Content View |
| 83 // --------------------------------------------------------------------------- |
| 84 content_shadow_->SetUIResourceId( |
| 85 panel_background_resource->ui_resource->id()); |
| 86 content_shadow_->SetBorder( |
| 87 panel_background_resource->Border(background_size)); |
| 88 content_shadow_->SetAperture(panel_background_resource->aperture); |
| 89 content_shadow_->SetBounds(background_size); |
| 90 content_shadow_->SetPosition(gfx::PointF(0.f, distilled_y)); |
| 91 |
| 92 content_solid_->SetBounds(background_size); |
| 93 content_solid_->SetPosition(gfx::PointF(0.f, panel_margin_top + distilled_y)); |
| 94 content_solid_->SetBackgroundColor(header_background_color); |
| 95 |
| 96 content_view_container_->SetPosition( |
| 97 gfx::PointF(0.f, panel_margin_top + distilled_y)); |
| 98 content_view_container_->SetOpacity(1.0f - panel_text_opacity); |
| 99 |
| 100 if (reader_mode_content_view_core && |
| 101 reader_mode_content_view_core->GetLayer().get()) { |
| 102 scoped_refptr<cc::Layer> content_view_layer = |
| 103 reader_mode_content_view_core->GetLayer(); |
| 104 if (content_view_layer->parent() != content_view_container_) { |
| 105 content_view_container_->AddChild(content_view_layer); |
| 106 content_view_container_->SetFilters(blur_filter); |
| 107 } |
| 108 } else { |
| 109 content_view_container_->RemoveAllChildren(); |
| 110 } |
| 111 |
| 112 // --------------------------------------------------------------------------- |
| 113 // Reader Mode Panel. |
| 114 // --------------------------------------------------------------------------- |
| 115 layer_->SetPosition(gfx::PointF(x, 0.f)); |
| 116 } |
| 117 |
| 118 ReaderModeLayer::ReaderModeLayer( |
| 119 ui::ResourceManager* resource_manager) |
| 120 : resource_manager_(resource_manager), |
| 121 layer_(cc::Layer::Create()), |
| 122 panel_background_(cc::NinePatchLayer::Create()), |
| 123 panel_text_(cc::UIResourceLayer::Create()), |
| 124 content_shadow_(cc::NinePatchLayer::Create()), |
| 125 content_solid_(cc::SolidColorLayer::Create()), |
| 126 content_view_container_(cc::Layer::Create()) { |
| 127 layer_->SetMasksToBounds(false); |
| 128 |
| 129 // Reader Mode Background |
| 130 panel_background_->SetIsDrawable(true); |
| 131 panel_background_->SetFillCenter(true); |
| 132 layer_->AddChild(panel_background_); |
| 133 |
| 134 // Reader Mode Text |
| 135 panel_text_->SetIsDrawable(true); |
| 136 layer_->AddChild(panel_text_); |
| 137 |
| 138 // Reader Mode Content shadow |
| 139 content_shadow_->SetIsDrawable(true); |
| 140 content_shadow_->SetFillCenter(true); |
| 141 layer_->AddChild(content_shadow_); |
| 142 |
| 143 // Reader Mode Content solid background |
| 144 content_solid_->SetIsDrawable(true); |
| 145 layer_->AddChild(content_solid_); |
| 146 |
| 147 // Reader Mode Content View |
| 148 layer_->AddChild(content_view_container_); |
| 149 } |
| 150 |
| 151 ReaderModeLayer::~ReaderModeLayer() { |
| 152 } |
| 153 |
| 154 scoped_refptr<cc::Layer> ReaderModeLayer::layer() { |
| 155 return layer_; |
| 156 } |
| 157 |
| 158 } // namespace android |
| 159 } // namespace chrome |
OLD | NEW |