| 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/tab_layer.h" | 5 #include "chrome/browser/android/compositor/layer/tab_layer.h" |
| 6 | 6 |
| 7 #include "base/base_switches.h" | |
| 8 #include "base/command_line.h" | |
| 9 #include "base/i18n/rtl.h" | 7 #include "base/i18n/rtl.h" |
| 10 #include "base/memory/ptr_util.h" | 8 #include "base/memory/ptr_util.h" |
| 11 #include "cc/layers/layer.h" | 9 #include "cc/layers/layer.h" |
| 12 #include "cc/layers/layer_collections.h" | 10 #include "cc/layers/layer_collections.h" |
| 13 #include "cc/layers/nine_patch_layer.h" | 11 #include "cc/layers/nine_patch_layer.h" |
| 14 #include "cc/layers/solid_color_layer.h" | 12 #include "cc/layers/solid_color_layer.h" |
| 15 #include "cc/layers/ui_resource_layer.h" | 13 #include "cc/layers/ui_resource_layer.h" |
| 16 #include "cc/resources/scoped_ui_resource.h" | 14 #include "cc/resources/scoped_ui_resource.h" |
| 17 #include "chrome/browser/android/compositor/decoration_title.h" | 15 #include "chrome/browser/android/compositor/decoration_title.h" |
| 18 #include "chrome/browser/android/compositor/layer/content_layer.h" | 16 #include "chrome/browser/android/compositor/layer/content_layer.h" |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 130 float brightness, | 128 float brightness, |
| 131 float close_btn_width, | 129 float close_btn_width, |
| 132 float static_to_view_blend, | 130 float static_to_view_blend, |
| 133 float content_width, | 131 float content_width, |
| 134 float content_height, | 132 float content_height, |
| 135 float view_width, | 133 float view_width, |
| 136 float view_height, | 134 float view_height, |
| 137 bool show_toolbar, | 135 bool show_toolbar, |
| 138 int default_theme_color, | 136 int default_theme_color, |
| 139 int toolbar_background_color, | 137 int toolbar_background_color, |
| 138 int default_close_button_color, |
| 140 int close_button_color, | 139 int close_button_color, |
| 141 bool anonymize_toolbar, | 140 bool anonymize_toolbar, |
| 142 int toolbar_textbox_resource_id, | 141 int toolbar_textbox_resource_id, |
| 143 int toolbar_textbox_background_color, | 142 int toolbar_textbox_background_color, |
| 144 float toolbar_textbox_alpha, | 143 float toolbar_textbox_alpha, |
| 145 float toolbar_alpha, | 144 float toolbar_alpha, |
| 146 float toolbar_y_offset, | 145 float toolbar_y_offset, |
| 147 float side_border_scale, | 146 float side_border_scale, |
| 148 bool attach_content, | 147 bool attach_content, |
| 149 bool inset_border) { | 148 bool inset_border) { |
| 150 if (alpha <= 0) { | 149 if (alpha <= 0) { |
| 151 layer_->SetHideLayerAndSubtree(true); | 150 layer_->SetHideLayerAndSubtree(true); |
| 152 return; | 151 return; |
| 153 } | 152 } |
| 154 | 153 |
| 155 layer_->SetHideLayerAndSubtree(false); | 154 layer_->SetHideLayerAndSubtree(false); |
| 156 | 155 |
| 157 // Grab required resources | 156 // Grab required resources |
| 158 ui::ResourceManager::Resource* border_resource = | 157 ui::ResourceManager::Resource* border_resource = |
| 159 resource_manager_->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC, | 158 resource_manager_->GetStaticResourceWithTint(border_resource_id, |
| 160 border_resource_id); | 159 toolbar_background_color, |
| 160 default_theme_color); |
| 161 ui::ResourceManager::Resource* border_inner_shadow_resource = | 161 ui::ResourceManager::Resource* border_inner_shadow_resource = |
| 162 resource_manager_->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC, | 162 resource_manager_->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC, |
| 163 border_inner_shadow_resource_id); | 163 border_inner_shadow_resource_id); |
| 164 ui::ResourceManager::Resource* shadow_resource = | 164 ui::ResourceManager::Resource* shadow_resource = |
| 165 resource_manager_->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC, | 165 resource_manager_->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC, |
| 166 shadow_resource_id); | 166 shadow_resource_id); |
| 167 ui::ResourceManager::Resource* contour_resource = | 167 ui::ResourceManager::Resource* contour_resource = |
| 168 resource_manager_->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC, | 168 resource_manager_->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC, |
| 169 contour_resource_id); | 169 contour_resource_id); |
| 170 ui::ResourceManager::Resource* close_btn_resource = | 170 ui::ResourceManager::Resource* close_btn_resource = |
| 171 resource_manager_->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC, | 171 resource_manager_->GetStaticResourceWithTint(close_button_resource_id, |
| 172 close_button_resource_id); | 172 close_button_color, |
| 173 default_close_button_color); |
| 173 ui::ResourceManager::Resource* back_logo_resource = nullptr; | 174 ui::ResourceManager::Resource* back_logo_resource = nullptr; |
| 174 | 175 |
| 175 DecorationTitle* title_layer = nullptr; | 176 DecorationTitle* title_layer = nullptr; |
| 176 | 177 |
| 177 //---------------------------------------------------------------------------- | 178 //---------------------------------------------------------------------------- |
| 178 // Handle Border Scaling (Upscale/Downscale everything until final scaling) | 179 // Handle Border Scaling (Upscale/Downscale everything until final scaling) |
| 179 //---------------------------------------------------------------------------- | 180 //---------------------------------------------------------------------------- |
| 180 width /= border_scale; | 181 width /= border_scale; |
| 181 height /= border_scale; | 182 height /= border_scale; |
| 182 shadow_x /= border_scale; | 183 shadow_x /= border_scale; |
| (...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 474 contour_shadow_->SetBounds(contour_size); | 475 contour_shadow_->SetBounds(contour_size); |
| 475 contour_shadow_->SetOpacity(contour_alpha); | 476 contour_shadow_->SetOpacity(contour_alpha); |
| 476 } | 477 } |
| 477 | 478 |
| 478 front_border_->SetHideLayerAndSubtree(!border_visible); | 479 front_border_->SetHideLayerAndSubtree(!border_visible); |
| 479 if (border_visible) { | 480 if (border_visible) { |
| 480 front_border_->SetPosition(border_position); | 481 front_border_->SetPosition(border_position); |
| 481 front_border_->SetBounds(border_size); | 482 front_border_->SetBounds(border_size); |
| 482 front_border_->SetOpacity(border_alpha); | 483 front_border_->SetOpacity(border_alpha); |
| 483 front_border_->SetNearestNeighbor(toolbar_visible); | 484 front_border_->SetNearestNeighbor(toolbar_visible); |
| 484 | |
| 485 int tab_switcher_color = default_theme_color; | |
| 486 | |
| 487 // Colorize the tab decoration if enabled. | |
| 488 if (tab_switcher_themes_enabled_) { | |
| 489 tab_switcher_color = toolbar_background_color; | |
| 490 } | |
| 491 | |
| 492 if (toolbar_background_color != toolbar_background_color_) { | |
| 493 toolbar_background_color_ = toolbar_background_color; | |
| 494 front_border_->SetFilters( | |
| 495 *createSolidColorFilter(tab_switcher_color).get()); | |
| 496 } | |
| 497 } | 485 } |
| 498 | 486 |
| 499 front_border_inner_shadow_->SetHideLayerAndSubtree( | 487 front_border_inner_shadow_->SetHideLayerAndSubtree( |
| 500 !border_inner_shadow_visible); | 488 !border_inner_shadow_visible); |
| 501 if (border_inner_shadow_visible) { | 489 if (border_inner_shadow_visible) { |
| 502 front_border_inner_shadow_->SetPosition(border_inner_shadow_position); | 490 front_border_inner_shadow_->SetPosition(border_inner_shadow_position); |
| 503 front_border_inner_shadow_->SetBounds(border_inner_shadow_size); | 491 front_border_inner_shadow_->SetBounds(border_inner_shadow_size); |
| 504 front_border_inner_shadow_->SetOpacity(border_inner_shadow_alpha); | 492 front_border_inner_shadow_->SetOpacity(border_inner_shadow_alpha); |
| 505 } | 493 } |
| 506 | 494 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 525 title_position.y() + | 513 title_position.y() + |
| 526 (title_size.height() - title_layer->size().height()) / 2.f); | 514 (title_size.height() - title_layer->size().height()) / 2.f); |
| 527 | 515 |
| 528 title_->SetPosition(vertically_centered_position); | 516 title_->SetPosition(vertically_centered_position); |
| 529 title_layer->setBounds(title_size); | 517 title_layer->setBounds(title_size); |
| 530 title_layer->setOpacity(border_alpha); | 518 title_layer->setOpacity(border_alpha); |
| 531 } | 519 } |
| 532 | 520 |
| 533 close_button_->SetHideLayerAndSubtree(!close_btn_visible); | 521 close_button_->SetHideLayerAndSubtree(!close_btn_visible); |
| 534 if (close_btn_visible) { | 522 if (close_btn_visible) { |
| 535 | |
| 536 if (close_button_color != close_button_color_) { | |
| 537 close_button_color_ = close_button_color; | |
| 538 close_button_->SetFilters( | |
| 539 *createSolidColorFilter(close_button_color).get()); | |
| 540 } | |
| 541 | |
| 542 close_button_->SetPosition(close_button_position); | 523 close_button_->SetPosition(close_button_position); |
| 543 close_button_->SetBounds(close_button_size); | 524 close_button_->SetBounds(close_button_size); |
| 544 // Non-linear alpha looks better. | 525 // Non-linear alpha looks better. |
| 545 close_button_->SetOpacity(close_alpha * close_alpha * border_alpha); | 526 close_button_->SetOpacity(close_alpha * close_alpha * border_alpha); |
| 546 } | 527 } |
| 547 | 528 |
| 548 if (content_visible && attach_content) { | 529 if (content_visible && attach_content) { |
| 549 { | 530 { |
| 550 // content_ and back_logo_ Transforms | 531 // content_ and back_logo_ Transforms |
| 551 gfx::Transform transform; | 532 gfx::Transform transform; |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 631 // than 1. | 612 // than 1. |
| 632 if (brightness != brightness_) { | 613 if (brightness != brightness_) { |
| 633 brightness_ = brightness; | 614 brightness_ = brightness; |
| 634 cc::FilterOperations filters; | 615 cc::FilterOperations filters; |
| 635 if (brightness_ < 1.f) | 616 if (brightness_ < 1.f) |
| 636 filters.Append(cc::FilterOperation::CreateBrightnessFilter(brightness_)); | 617 filters.Append(cc::FilterOperation::CreateBrightnessFilter(brightness_)); |
| 637 layer_->SetFilters(filters); | 618 layer_->SetFilters(filters); |
| 638 } | 619 } |
| 639 } | 620 } |
| 640 | 621 |
| 641 std::unique_ptr<cc::FilterOperations> TabLayer::createSolidColorFilter( | |
| 642 int color) { | |
| 643 std::unique_ptr<cc::FilterOperations> filters = | |
| 644 base::WrapUnique(new cc::FilterOperations()); | |
| 645 SkScalar colorMatrix[] = { | |
| 646 SkColorGetR(color) / 255.0f, 0, 0, 0, 0, | |
| 647 0, SkColorGetG(color) / 255.0f, 0, 0, 0, | |
| 648 0, 0, SkColorGetB(color) / 255.0f, 0, 0, | |
| 649 0, 0, 0, 1, 0, | |
| 650 }; | |
| 651 filters->Append(cc::FilterOperation::CreateColorMatrixFilter(colorMatrix)); | |
| 652 return filters; | |
| 653 } | |
| 654 | |
| 655 scoped_refptr<cc::Layer> TabLayer::layer() { | 622 scoped_refptr<cc::Layer> TabLayer::layer() { |
| 656 return layer_; | 623 return layer_; |
| 657 } | 624 } |
| 658 | 625 |
| 659 TabLayer::TabLayer(bool incognito, | 626 TabLayer::TabLayer(bool incognito, |
| 660 ui::ResourceManager* resource_manager, | 627 ui::ResourceManager* resource_manager, |
| 661 LayerTitleCache* layer_title_cache, | 628 LayerTitleCache* layer_title_cache, |
| 662 TabContentManager* tab_content_manager) | 629 TabContentManager* tab_content_manager) |
| 663 : incognito_(incognito), | 630 : incognito_(incognito), |
| 664 toolbar_background_color_(0), | |
| 665 close_button_color_(0), | |
| 666 tab_switcher_themes_enabled_(false), | |
| 667 resource_manager_(resource_manager), | 631 resource_manager_(resource_manager), |
| 668 layer_title_cache_(layer_title_cache), | 632 layer_title_cache_(layer_title_cache), |
| 669 layer_(cc::Layer::Create()), | 633 layer_(cc::Layer::Create()), |
| 670 toolbar_layer_(ToolbarLayer::Create(resource_manager)), | 634 toolbar_layer_(ToolbarLayer::Create(resource_manager)), |
| 671 title_(cc::Layer::Create()), | 635 title_(cc::Layer::Create()), |
| 672 content_(ContentLayer::Create(tab_content_manager)), | 636 content_(ContentLayer::Create(tab_content_manager)), |
| 673 side_padding_(cc::SolidColorLayer::Create()), | 637 side_padding_(cc::SolidColorLayer::Create()), |
| 674 bottom_padding_(cc::SolidColorLayer::Create()), | 638 bottom_padding_(cc::SolidColorLayer::Create()), |
| 675 close_button_(cc::UIResourceLayer::Create()), | 639 close_button_(cc::UIResourceLayer::Create()), |
| 676 front_border_(cc::NinePatchLayer::Create()), | 640 front_border_(cc::NinePatchLayer::Create()), |
| (...skipping 17 matching lines...) Expand all Loading... |
| 694 contour_shadow_->SetIsDrawable(true); | 658 contour_shadow_->SetIsDrawable(true); |
| 695 side_padding_->SetIsDrawable(true); | 659 side_padding_->SetIsDrawable(true); |
| 696 bottom_padding_->SetIsDrawable(true); | 660 bottom_padding_->SetIsDrawable(true); |
| 697 front_border_->SetIsDrawable(true); | 661 front_border_->SetIsDrawable(true); |
| 698 front_border_inner_shadow_->SetIsDrawable(true); | 662 front_border_inner_shadow_->SetIsDrawable(true); |
| 699 shadow_->SetIsDrawable(true); | 663 shadow_->SetIsDrawable(true); |
| 700 close_button_->SetIsDrawable(true); | 664 close_button_->SetIsDrawable(true); |
| 701 back_logo_->SetIsDrawable(true); | 665 back_logo_->SetIsDrawable(true); |
| 702 | 666 |
| 703 front_border_->SetFillCenter(false); | 667 front_border_->SetFillCenter(false); |
| 704 | |
| 705 tab_switcher_themes_enabled_ = | |
| 706 base::CommandLine::ForCurrentProcess()->HasSwitch( | |
| 707 switches::kEnableTabSwitcherThemeColors); | |
| 708 } | 668 } |
| 709 | 669 |
| 710 TabLayer::~TabLayer() { | 670 TabLayer::~TabLayer() { |
| 711 } | 671 } |
| 712 | 672 |
| 713 void TabLayer::SetTitle(DecorationTitle* title) { | 673 void TabLayer::SetTitle(DecorationTitle* title) { |
| 714 scoped_refptr<cc::Layer> layer = title ? title->layer() : nullptr; | 674 scoped_refptr<cc::Layer> layer = title ? title->layer() : nullptr; |
| 715 | 675 |
| 716 if (!layer.get()) { | 676 if (!layer.get()) { |
| 717 title_->RemoveAllChildren(); | 677 title_->RemoveAllChildren(); |
| 718 } else { | 678 } else { |
| 719 const cc::LayerList& children = title_->children(); | 679 const cc::LayerList& children = title_->children(); |
| 720 if (children.size() == 0 || children[0]->id() != layer->id()) { | 680 if (children.size() == 0 || children[0]->id() != layer->id()) { |
| 721 title_->RemoveAllChildren(); | 681 title_->RemoveAllChildren(); |
| 722 title_->AddChild(layer); | 682 title_->AddChild(layer); |
| 723 } | 683 } |
| 724 } | 684 } |
| 725 | 685 |
| 726 if (title) | 686 if (title) |
| 727 title->SetUIResourceIds(); | 687 title->SetUIResourceIds(); |
| 728 } | 688 } |
| 729 | 689 |
| 730 } // namespace android | 690 } // namespace android |
| 731 } // namespace chrome | 691 } // namespace chrome |
| OLD | NEW |