Commit 7f924b3a authored by Bret Sepulveda's avatar Bret Sepulveda Committed by Commit Bot

Change button size and corner radius for MD Refresh.

This updates MdTextButton to draw 32dips high and with 4dip corner
radii when refresh is on. Also updates LayoutProvider::
GetControlHeightForFont even though it's not used by MdTextButton, to
avoid the two getting out of sync. Also moves empahsis methods to
LayoutProvider so that general views code can access them.

Bug: 822073
Change-Id: Ia3038ccafdddd79ca42837dc1de4f726894377e2
Reviewed-on: https://chromium-review.googlesource.com/1031551
Commit-Queue: Bret Sepulveda <bsep@chromium.org>
Reviewed-by: default avatarAllen Bauer <kylixrd@chromium.org>
Reviewed-by: default avatarScott Violet <sky@chromium.org>
Cr-Commit-Position: refs/heads/master@{#555614}
parent 90a71482
...@@ -272,10 +272,6 @@ class BookmarkBarViewEventTestBase : public ViewEventTestBase { ...@@ -272,10 +272,6 @@ class BookmarkBarViewEventTestBase : public ViewEventTestBase {
model_(NULL) {} model_(NULL) {}
void SetUp() override { void SetUp() override {
// Make sure the correct layout provider is created and used. This must be
// done prior to any view being created which uses the layout provider.
layout_provider_ = ChromeLayoutProvider::CreateLayoutProvider();
content_client_.reset(new ChromeContentClient); content_client_.reset(new ChromeContentClient);
content::SetContentClient(content_client_.get()); content::SetContentClient(content_client_.get());
browser_content_client_.reset(new ChromeContentBrowserClient()); browser_content_client_.reset(new ChromeContentBrowserClient());
...@@ -412,7 +408,6 @@ class BookmarkBarViewEventTestBase : public ViewEventTestBase { ...@@ -412,7 +408,6 @@ class BookmarkBarViewEventTestBase : public ViewEventTestBase {
std::unique_ptr<TestingProfile> profile_; std::unique_ptr<TestingProfile> profile_;
std::unique_ptr<Browser> browser_; std::unique_ptr<Browser> browser_;
std::unique_ptr<ScopedTestingLocalState> local_state_; std::unique_ptr<ScopedTestingLocalState> local_state_;
std::unique_ptr<views::LayoutProvider> layout_provider_;
}; };
// Clicks on first menu, makes sure button is depressed. Moves mouse to first // Clicks on first menu, makes sure button is depressed. Moves mouse to first
......
...@@ -118,18 +118,3 @@ bool ChromeLayoutProvider::ShouldShowWindowIcon() const { ...@@ -118,18 +118,3 @@ bool ChromeLayoutProvider::ShouldShowWindowIcon() const {
bool ChromeLayoutProvider::IsHarmonyMode() const { bool ChromeLayoutProvider::IsHarmonyMode() const {
return false; return false;
} }
int ChromeLayoutProvider::GetCornerRadiusMetric(
ChromeEmphasisMetric emphasis_metric,
const gfx::Size& size) const {
// Use the current fixed value for non-EMPHASIS_HIGH.
return emphasis_metric == EMPHASIS_HIGH
? std::min(size.width(), size.height()) / 2
: 4;
}
int ChromeLayoutProvider::GetShadowElevationMetric(
ChromeEmphasisMetric emphasis_metric) const {
// Just return a value for now.
return 2;
}
...@@ -60,18 +60,6 @@ enum ChromeDistanceMetric { ...@@ -60,18 +60,6 @@ enum ChromeDistanceMetric {
DISTANCE_BUBBLE_PREFERRED_WIDTH, DISTANCE_BUBBLE_PREFERRED_WIDTH,
}; };
enum ChromeEmphasisMetric {
// No emphasis needed for shadows, corner radius, etc.
EMPHASIS_NONE,
// Use this to indicate low-emphasis interactive elements such as buttons and
// text fields
EMPHASIS_LOW,
// Use this for components with medium emphasis, such as tabs or dialogs.
EMPHASIS_MEDIUM,
// High-emphasis components like the omnibox or rich suggestions.
EMPHASIS_HIGH,
};
class ChromeLayoutProvider : public views::LayoutProvider { class ChromeLayoutProvider : public views::LayoutProvider {
public: public:
ChromeLayoutProvider(); ChromeLayoutProvider();
...@@ -109,19 +97,6 @@ class ChromeLayoutProvider : public views::LayoutProvider { ...@@ -109,19 +97,6 @@ class ChromeLayoutProvider : public views::LayoutProvider {
// TODO(pkasting): Fix callers and remove this. // TODO(pkasting): Fix callers and remove this.
virtual bool IsHarmonyMode() const; virtual bool IsHarmonyMode() const;
// TODO (https://crbug.com/822000): Possibly combine the following two
// functions into a single function returning a struct. Keeping them separate
// for now in case different emphasis is needed for different elements in the
// same context. Delete this TODO in Q4 2018.
// Returns the corner radius specific to the given emphasis metric.
virtual int GetCornerRadiusMetric(ChromeEmphasisMetric emphasis_metric,
const gfx::Size& size = gfx::Size()) const;
// Returns the shadow elevation metric for the given emphasis.
virtual int GetShadowElevationMetric(
ChromeEmphasisMetric emphasis_metric) const;
private: private:
DISALLOW_COPY_AND_ASSIGN(ChromeLayoutProvider); DISALLOW_COPY_AND_ASSIGN(ChromeLayoutProvider);
}; };
......
...@@ -4,15 +4,25 @@ ...@@ -4,15 +4,25 @@
#include "chrome/browser/ui/views/harmony/material_refresh_layout_provider.h" #include "chrome/browser/ui/views/harmony/material_refresh_layout_provider.h"
#include "ui/views/layout/layout_provider.h"
int MaterialRefreshLayoutProvider::GetDistanceMetric(int metric) const {
switch (metric) {
case views::DistanceMetric::DISTANCE_CONTROL_VERTICAL_TEXT_PADDING:
return 8;
}
return HarmonyLayoutProvider::GetDistanceMetric(metric);
}
int MaterialRefreshLayoutProvider::GetCornerRadiusMetric( int MaterialRefreshLayoutProvider::GetCornerRadiusMetric(
ChromeEmphasisMetric emphasis_metric, views::EmphasisMetric emphasis_metric,
const gfx::Size& size) const { const gfx::Size& size) const {
switch (emphasis_metric) { switch (emphasis_metric) {
case EMPHASIS_LOW: case views::EMPHASIS_LOW:
return 4; return 4;
case EMPHASIS_MEDIUM: case views::EMPHASIS_MEDIUM:
return 8; return 8;
case EMPHASIS_HIGH: case views::EMPHASIS_HIGH:
return std::min(size.width(), size.height()) / 2; return std::min(size.width(), size.height()) / 2;
default: default:
NOTREACHED(); NOTREACHED();
......
...@@ -13,7 +13,9 @@ class MaterialRefreshLayoutProvider : public HarmonyLayoutProvider { ...@@ -13,7 +13,9 @@ class MaterialRefreshLayoutProvider : public HarmonyLayoutProvider {
MaterialRefreshLayoutProvider() = default; MaterialRefreshLayoutProvider() = default;
~MaterialRefreshLayoutProvider() override = default; ~MaterialRefreshLayoutProvider() override = default;
int GetCornerRadiusMetric(ChromeEmphasisMetric emphasis_metric, // HarmonyLayoutProvider:
int GetDistanceMetric(int metric) const override;
int GetCornerRadiusMetric(views::EmphasisMetric emphasis_metric,
const gfx::Size& size = gfx::Size()) const override; const gfx::Size& size = gfx::Size()) const override;
}; };
......
...@@ -330,7 +330,7 @@ bool LocationBarView::IsRounded() { ...@@ -330,7 +330,7 @@ bool LocationBarView::IsRounded() {
float LocationBarView::GetBorderRadius() { float LocationBarView::GetBorderRadius() {
return IsRounded() ? ChromeLayoutProvider::Get()->GetCornerRadiusMetric( return IsRounded() ? ChromeLayoutProvider::Get()->GetCornerRadiusMetric(
EMPHASIS_HIGH, size()) views::EMPHASIS_HIGH, size())
: GetLayoutConstant(LOCATION_BAR_BUBBLE_CORNER_RADIUS); : GetLayoutConstant(LOCATION_BAR_BUBBLE_CORNER_RADIUS);
} }
......
...@@ -379,7 +379,7 @@ gfx::Rect NewTabButton::GetVisibleBounds() const { ...@@ -379,7 +379,7 @@ gfx::Rect NewTabButton::GetVisibleBounds() const {
int NewTabButton::GetCornerRadius() const { int NewTabButton::GetCornerRadius() const {
return ChromeLayoutProvider::Get()->GetCornerRadiusMetric( return ChromeLayoutProvider::Get()->GetCornerRadiusMetric(
EMPHASIS_HIGH, GetLayoutSize(NEW_TAB_BUTTON, is_incognito_)); views::EMPHASIS_HIGH, GetLayoutSize(NEW_TAB_BUTTON, is_incognito_));
} }
void NewTabButton::GetBorderPath(float button_y, void NewTabButton::GetBorderPath(float button_y,
......
...@@ -361,7 +361,8 @@ Tab::~Tab() { ...@@ -361,7 +361,8 @@ Tab::~Tab() {
int Tab::GetCornerRadius() const { int Tab::GetCornerRadius() const {
// TODO(pkasting): This should vary as the tab width decreases. // TODO(pkasting): This should vary as the tab width decreases.
return ChromeLayoutProvider::Get()->GetCornerRadiusMetric(EMPHASIS_MEDIUM); return ChromeLayoutProvider::Get()->GetCornerRadiusMetric(
views::EMPHASIS_MEDIUM);
} }
SkColor Tab::GetAlertIndicatorColor(TabAlertState state) const { SkColor Tab::GetAlertIndicatorColor(TabAlertState state) const {
......
...@@ -73,15 +73,9 @@ BrowserAppMenuButton::BrowserAppMenuButton(ToolbarView* toolbar_view) ...@@ -73,15 +73,9 @@ BrowserAppMenuButton::BrowserAppMenuButton(ToolbarView* toolbar_view)
if (ui::MaterialDesignController::IsTouchOptimizedUiEnabled()) if (ui::MaterialDesignController::IsTouchOptimizedUiEnabled())
set_ink_drop_visible_opacity(kTouchToolbarInkDropVisibleOpacity); set_ink_drop_visible_opacity(kTouchToolbarInkDropVisibleOpacity);
if (ui::MaterialDesignController::IsNewerMaterialUi()) { const int radii = ChromeLayoutProvider::Get()->GetCornerRadiusMetric(
// TODO(pbos): Remove conditional once Touchable uses the same corner views::EMPHASIS_MEDIUM);
// metrics as Refresh. set_ink_drop_corner_radii(radii, radii);
const int radii = ui::MaterialDesignController::IsTouchOptimizedUiEnabled()
? 8
: ChromeLayoutProvider::Get()->GetCornerRadiusMetric(
EMPHASIS_MEDIUM);
set_ink_drop_corner_radii(radii, radii);
}
} }
BrowserAppMenuButton::~BrowserAppMenuButton() {} BrowserAppMenuButton::~BrowserAppMenuButton() {}
......
...@@ -77,15 +77,9 @@ ToolbarActionView::ToolbarActionView( ...@@ -77,15 +77,9 @@ ToolbarActionView::ToolbarActionView(
if (ui::MaterialDesignController::IsTouchOptimizedUiEnabled()) if (ui::MaterialDesignController::IsTouchOptimizedUiEnabled())
set_ink_drop_visible_opacity(kTouchToolbarInkDropVisibleOpacity); set_ink_drop_visible_opacity(kTouchToolbarInkDropVisibleOpacity);
if (ui::MaterialDesignController::IsNewerMaterialUi()) { const int radii = ChromeLayoutProvider::Get()->GetCornerRadiusMetric(
// TODO(pbos): Remove conditional once Touchable uses the same corner views::EMPHASIS_MEDIUM);
// metrics as Refresh. set_ink_drop_corner_radii(radii, radii);
const int radii = ui::MaterialDesignController::IsTouchOptimizedUiEnabled()
? 8
: ChromeLayoutProvider::Get()->GetCornerRadiusMetric(
EMPHASIS_MEDIUM);
set_ink_drop_corner_radii(radii, radii);
}
UpdateState(); UpdateState();
} }
......
...@@ -12,11 +12,11 @@ ...@@ -12,11 +12,11 @@
#include "chrome/browser/ui/toolbar/test_toolbar_action_view_controller.h" #include "chrome/browser/ui/toolbar/test_toolbar_action_view_controller.h"
#include "chrome/browser/ui/toolbar/toolbar_action_view_controller.h" #include "chrome/browser/ui/toolbar/toolbar_action_view_controller.h"
#include "chrome/test/base/testing_profile.h" #include "chrome/test/base/testing_profile.h"
#include "chrome/test/views/chrome_views_test_base.h"
#include "content/public/test/test_browser_thread_bundle.h" #include "content/public/test/test_browser_thread_bundle.h"
#include "content/public/test/test_web_contents_factory.h" #include "content/public/test/test_web_contents_factory.h"
#include "ui/accessibility/ax_node_data.h" #include "ui/accessibility/ax_node_data.h"
#include "ui/events/test/event_generator.h" #include "ui/events/test/event_generator.h"
#include "ui/views/test/views_test_base.h"
namespace { namespace {
...@@ -96,13 +96,13 @@ class OpenMenuListener : public views::ContextMenuController { ...@@ -96,13 +96,13 @@ class OpenMenuListener : public views::ContextMenuController {
} // namespace } // namespace
class ToolbarActionViewUnitTest : public views::ViewsTestBase { class ToolbarActionViewUnitTest : public ChromeViewsTestBase {
public: public:
ToolbarActionViewUnitTest() : widget_(nullptr) {} ToolbarActionViewUnitTest() : widget_(nullptr) {}
~ToolbarActionViewUnitTest() override {} ~ToolbarActionViewUnitTest() override {}
void SetUp() override { void SetUp() override {
views::ViewsTestBase::SetUp(); ChromeViewsTestBase::SetUp();
widget_ = new views::Widget; widget_ = new views::Widget;
views::Widget::InitParams params = views::Widget::InitParams params =
...@@ -110,10 +110,11 @@ class ToolbarActionViewUnitTest : public views::ViewsTestBase { ...@@ -110,10 +110,11 @@ class ToolbarActionViewUnitTest : public views::ViewsTestBase {
params.bounds = gfx::Rect(0, 0, 200, 200); params.bounds = gfx::Rect(0, 0, 200, 200);
widget_->Init(params); widget_->Init(params);
} }
void TearDown() override { void TearDown() override {
if (!widget_->IsClosed()) if (!widget_->IsClosed())
widget_->Close(); widget_->Close();
views::ViewsTestBase::TearDown(); ChromeViewsTestBase::TearDown();
} }
views::Widget* widget() { return widget_; } views::Widget* widget() { return widget_; }
......
...@@ -42,15 +42,9 @@ ToolbarButton::ToolbarButton(Profile* profile, ...@@ -42,15 +42,9 @@ ToolbarButton::ToolbarButton(Profile* profile,
if (ui::MaterialDesignController::IsTouchOptimizedUiEnabled()) if (ui::MaterialDesignController::IsTouchOptimizedUiEnabled())
set_ink_drop_visible_opacity(kTouchToolbarInkDropVisibleOpacity); set_ink_drop_visible_opacity(kTouchToolbarInkDropVisibleOpacity);
if (ui::MaterialDesignController::IsNewerMaterialUi()) { const int radii = ChromeLayoutProvider::Get()->GetCornerRadiusMetric(
// TODO(pbos): Remove conditional once Touchable uses the same corner views::EMPHASIS_MEDIUM);
// metrics as refresh. set_ink_drop_corner_radii(radii, radii);
const int radii = ui::MaterialDesignController::IsTouchOptimizedUiEnabled()
? 8
: ChromeLayoutProvider::Get()->GetCornerRadiusMetric(
EMPHASIS_MEDIUM);
set_ink_drop_corner_radii(radii, radii);
}
} }
ToolbarButton::~ToolbarButton() {} ToolbarButton::~ToolbarButton() {}
......
...@@ -19,9 +19,9 @@ ...@@ -19,9 +19,9 @@
#include "base/run_loop.h" #include "base/run_loop.h"
#include "base/threading/thread.h" #include "base/threading/thread.h"
#include "build/build_config.h" #include "build/build_config.h"
#include "chrome/test/views/chrome_test_views_delegate.h"
#include "content/public/test/test_browser_thread_bundle.h" #include "content/public/test/test_browser_thread_bundle.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
#include "ui/views/test/test_views_delegate.h"
#include "ui/views/widget/widget_delegate.h" #include "ui/views/widget/widget_delegate.h"
#if defined(OS_WIN) #if defined(OS_WIN)
...@@ -153,7 +153,7 @@ class ViewEventTestBase : public views::WidgetDelegate, ...@@ -153,7 +153,7 @@ class ViewEventTestBase : public views::WidgetDelegate,
std::unique_ptr<ViewEventTestPlatformPart> platform_part_; std::unique_ptr<ViewEventTestPlatformPart> platform_part_;
views::TestViewsDelegate views_delegate_; ChromeTestViewsDelegate views_delegate_;
base::RunLoop run_loop_; base::RunLoop run_loop_;
......
...@@ -95,6 +95,11 @@ void MdTextButton::SetBgColorOverride(const base::Optional<SkColor>& color) { ...@@ -95,6 +95,11 @@ void MdTextButton::SetBgColorOverride(const base::Optional<SkColor>& color) {
UpdateColors(); UpdateColors();
} }
void MdTextButton::set_corner_radius(float radius) {
corner_radius_ = radius;
set_ink_drop_corner_radii(corner_radius_, corner_radius_);
}
void MdTextButton::OnPaintBackground(gfx::Canvas* canvas) { void MdTextButton::OnPaintBackground(gfx::Canvas* canvas) {
LabelButton::OnPaintBackground(canvas); LabelButton::OnPaintBackground(canvas);
if (hover_animation().is_animating() || state() == STATE_HOVERED) { if (hover_animation().is_animating() || state() == STATE_HOVERED) {
...@@ -179,10 +184,10 @@ void MdTextButton::UpdateStyleToIndicateDefaultStatus() { ...@@ -179,10 +184,10 @@ void MdTextButton::UpdateStyleToIndicateDefaultStatus() {
MdTextButton::MdTextButton(ButtonListener* listener, int button_context) MdTextButton::MdTextButton(ButtonListener* listener, int button_context)
: LabelButton(listener, base::string16(), button_context), : LabelButton(listener, base::string16(), button_context),
is_prominent_(false), is_prominent_(false) {
corner_radius_(ink_drop_small_corner_radius()) {
SetInkDropMode(InkDropMode::ON); SetInkDropMode(InkDropMode::ON);
set_has_ink_drop_action_on_click(true); set_has_ink_drop_action_on_click(true);
set_corner_radius(LayoutProvider::Get()->GetCornerRadiusMetric(EMPHASIS_LOW));
SetHorizontalAlignment(gfx::ALIGN_CENTER); SetHorizontalAlignment(gfx::ALIGN_CENTER);
SetFocusForPlatform(); SetFocusForPlatform();
const int minimum_width = LayoutProvider::Get()->GetDistanceMetric( const int minimum_width = LayoutProvider::Get()->GetDistanceMetric(
...@@ -226,8 +231,9 @@ void MdTextButton::UpdatePadding() { ...@@ -226,8 +231,9 @@ void MdTextButton::UpdatePadding() {
// GetControlHeightForFont(). It can't because that only returns a correct // GetControlHeightForFont(). It can't because that only returns a correct
// result with --secondary-ui-md, and MdTextButtons appear in top chrome // result with --secondary-ui-md, and MdTextButtons appear in top chrome
// without that. // without that.
const int kBaseHeight = 28; const int base_height =
int target_height = std::max(kBaseHeight + size_delta * 2, ui::MaterialDesignController::IsNewerMaterialUi() ? 32 : 28;
int target_height = std::max(base_height + size_delta * 2,
label()->font_list().GetFontSize() * 2); label()->font_list().GetFontSize() * 2);
int label_height = label()->GetPreferredSize().height(); int label_height = label()->GetPreferredSize().height();
......
...@@ -36,7 +36,7 @@ class VIEWS_EXPORT MdTextButton : public LabelButton { ...@@ -36,7 +36,7 @@ class VIEWS_EXPORT MdTextButton : public LabelButton {
// Override the default corner radius of the round rect used for the // Override the default corner radius of the round rect used for the
// background and ink drop effects. // background and ink drop effects.
void set_corner_radius(float radius) { corner_radius_ = radius; } void set_corner_radius(float radius);
// View: // View:
void OnPaintBackground(gfx::Canvas* canvas) override; void OnPaintBackground(gfx::Canvas* canvas) override;
......
...@@ -141,4 +141,27 @@ gfx::Insets LayoutProvider::GetDialogInsetsForContentType( ...@@ -141,4 +141,27 @@ gfx::Insets LayoutProvider::GetDialogInsetsForContentType(
dialog_insets.right()); dialog_insets.right());
} }
int LayoutProvider::GetCornerRadiusMetric(EmphasisMetric emphasis_metric,
const gfx::Size& size) const {
const bool is_touch =
ui::MaterialDesignController::IsTouchOptimizedUiEnabled();
switch (emphasis_metric) {
case EMPHASIS_LOW:
return is_touch ? 4 : 2;
case EMPHASIS_MEDIUM:
return is_touch ? 8 : 4;
case EMPHASIS_HIGH:
return std::min(size.width(), size.height()) / 2;
default:
NOTREACHED();
return 0;
}
}
int LayoutProvider::GetShadowElevationMetric(
EmphasisMetric emphasis_metric) const {
// Just return a value for now.
return 2;
}
} // namespace views } // namespace views
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include "base/macros.h" #include "base/macros.h"
#include "ui/gfx/geometry/insets.h" #include "ui/gfx/geometry/insets.h"
#include "ui/gfx/geometry/size.h"
#include "ui/views/style/typography_provider.h" #include "ui/views/style/typography_provider.h"
#include "ui/views/views_export.h" #include "ui/views/views_export.h"
...@@ -110,6 +111,18 @@ enum DistanceMetric { ...@@ -110,6 +111,18 @@ enum DistanceMetric {
// elements that only show text. Otherwise CONTROL should be used. // elements that only show text. Otherwise CONTROL should be used.
enum DialogContentType { CONTROL, TEXT }; enum DialogContentType { CONTROL, TEXT };
enum EmphasisMetric {
// No emphasis needed for shadows, corner radius, etc.
EMPHASIS_NONE,
// Use this to indicate low-emphasis interactive elements such as buttons and
// text fields.
EMPHASIS_LOW,
// Use this for components with medium emphasis, such as tabs or dialogs.
EMPHASIS_MEDIUM,
// High-emphasis components like the omnibox or rich suggestions.
EMPHASIS_HIGH,
};
class VIEWS_EXPORT LayoutProvider { class VIEWS_EXPORT LayoutProvider {
public: public:
LayoutProvider(); LayoutProvider();
...@@ -145,6 +158,18 @@ class VIEWS_EXPORT LayoutProvider { ...@@ -145,6 +158,18 @@ class VIEWS_EXPORT LayoutProvider {
gfx::Insets GetDialogInsetsForContentType(DialogContentType leading, gfx::Insets GetDialogInsetsForContentType(DialogContentType leading,
DialogContentType trailing) const; DialogContentType trailing) const;
// TODO (https://crbug.com/822000): Possibly combine the following two
// functions into a single function returning a struct. Keeping them separate
// for now in case different emphasis is needed for different elements in the
// same context. Delete this TODO in Q4 2018.
// Returns the corner radius specific to the given emphasis metric.
virtual int GetCornerRadiusMetric(EmphasisMetric emphasis_metric,
const gfx::Size& size = gfx::Size()) const;
// Returns the shadow elevation metric for the given emphasis.
virtual int GetShadowElevationMetric(EmphasisMetric emphasis_metric) const;
private: private:
DefaultTypographyProvider typography_provider_; DefaultTypographyProvider typography_provider_;
......
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