Commit c124fd20 authored by Charlene Yan's avatar Charlene Yan Committed by Commit Bot

[Tab Scrolling] Scroll the tabstrip left and right with buttons.

Bug: 1129675
Change-Id: I9897758b712c3d4d2473c00ec8d89bb060f5ea73
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2436593Reviewed-by: default avatarTaylor Bergquist <tbergquist@chromium.org>
Commit-Queue: Charlene Yan <cyan@chromium.org>
Cr-Commit-Position: refs/heads/master@{#814457}
parent 7bdad712
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include "chrome/browser/ui/views/frame/tab_strip_region_view.h" #include "chrome/browser/ui/views/frame/tab_strip_region_view.h"
#include "base/bind.h" #include "base/bind.h"
#include "chrome/app/vector_icons/vector_icons.h"
#include "chrome/browser/ui/layout_constants.h" #include "chrome/browser/ui/layout_constants.h"
#include "chrome/browser/ui/ui_features.h" #include "chrome/browser/ui/ui_features.h"
#include "chrome/browser/ui/views/tabs/tab_search_button.h" #include "chrome/browser/ui/views/tabs/tab_search_button.h"
...@@ -13,6 +14,8 @@ ...@@ -13,6 +14,8 @@
#include "chrome/grit/generated_resources.h" #include "chrome/grit/generated_resources.h"
#include "ui/accessibility/ax_node_data.h" #include "ui/accessibility/ax_node_data.h"
#include "ui/base/l10n/l10n_util.h" #include "ui/base/l10n/l10n_util.h"
#include "ui/views/controls/button/image_button.h"
#include "ui/views/controls/button/image_button_factory.h"
#include "ui/views/controls/scroll_view.h" #include "ui/views/controls/scroll_view.h"
#include "ui/views/layout/flex_layout.h" #include "ui/views/layout/flex_layout.h"
#include "ui/views/view_class_properties.h" #include "ui/views/view_class_properties.h"
...@@ -36,6 +39,20 @@ TabStripRegionView::TabStripRegionView(std::unique_ptr<TabStrip> tab_strip) { ...@@ -36,6 +39,20 @@ TabStripRegionView::TabStripRegionView(std::unique_ptr<TabStrip> tab_strip) {
tab_strip_scroll_container->SetTreatAllScrollEventsAsHorizontal(true); tab_strip_scroll_container->SetTreatAllScrollEventsAsHorizontal(true);
tab_strip_container_ = tab_strip_scroll_container; tab_strip_container_ = tab_strip_scroll_container;
tab_strip_scroll_container->SetContents(std::move(tab_strip)); tab_strip_scroll_container->SetContents(std::move(tab_strip));
auto left_scroll = std::make_unique<views::ImageButton>(base::BindRepeating(
&TabStripRegionView::ScrollLeft, base::Unretained(this)));
auto right_scroll =
std::make_unique<views::ImageButton>(base::BindRepeating(
&TabStripRegionView::ScrollRight, base::Unretained(this)));
const SkColor icon_color = GetNativeTheme()->GetSystemColor(
ui::NativeTheme::kColorId_MenuIconColor);
views::SetImageFromVectorIconWithColor(left_scroll.get(), kBrowserToolsIcon,
icon_color);
views::SetImageFromVectorIconWithColor(right_scroll.get(),
kBrowserToolsIcon, icon_color);
left_scroll_ = AddChildView(std::move(left_scroll));
right_scroll_ = AddChildView(std::move(right_scroll));
} else { } else {
tab_strip_container_ = AddChildView(std::move(tab_strip)); tab_strip_container_ = AddChildView(std::move(tab_strip));
} }
...@@ -162,3 +179,22 @@ int TabStripRegionView::CalculateTabStripAvailableWidth() { ...@@ -162,3 +179,22 @@ int TabStripRegionView::CalculateTabStripAvailableWidth() {
return size().width() - reserved_width; return size().width() - reserved_width;
} }
void TabStripRegionView::ScrollLeft() {
views::ScrollView* scroll_view_container =
static_cast<views::ScrollView*>(tab_strip_container_);
gfx::Rect visible_content = scroll_view_container->GetVisibleRect();
gfx::Rect scroll(visible_content.x() - visible_content.width(),
visible_content.y(), visible_content.width(),
visible_content.height());
scroll_view_container->contents()->ScrollRectToVisible(scroll);
}
void TabStripRegionView::ScrollRight() {
views::ScrollView* scroll_view_container =
static_cast<views::ScrollView*>(tab_strip_container_);
gfx::Rect visible_content = scroll_view_container->GetVisibleRect();
gfx::Rect scroll(visible_content.x() + visible_content.width(),
visible_content.y(), visible_content.width(),
visible_content.height());
scroll_view_container->contents()->ScrollRectToVisible(scroll);
}
...@@ -48,9 +48,14 @@ class TabStripRegionView final : public views::AccessiblePaneView { ...@@ -48,9 +48,14 @@ class TabStripRegionView final : public views::AccessiblePaneView {
int CalculateTabStripAvailableWidth(); int CalculateTabStripAvailableWidth();
void ScrollLeft();
void ScrollRight();
views::View* tab_strip_container_; views::View* tab_strip_container_;
TabStrip* tab_strip_; TabStrip* tab_strip_;
TabSearchButton* tab_search_button_ = nullptr; TabSearchButton* tab_search_button_ = nullptr;
views::ImageButton* left_scroll_;
views::ImageButton* right_scroll_;
}; };
#endif // CHROME_BROWSER_UI_VIEWS_FRAME_TAB_STRIP_REGION_VIEW_H_ #endif // CHROME_BROWSER_UI_VIEWS_FRAME_TAB_STRIP_REGION_VIEW_H_
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment