Commit 727448a3 authored by minch's avatar minch Committed by Commit Bot

dark_mode: Correct the use of TopShortcutButton.

FloatingMenuButton only reuses little logic of TopShortcutButton. e.g,
set the tooltip. And TopShortcutButton named as the top shortcut button
at the system tray menu. Make FloatingMenuButton as ImageButton instead.
And AutoclickScrollCloseButton to be a FloatingMenuButton to reuse its
logic.

Then simplify TopShortcutButton to have only one constructor.

Bug: 1131543
Change-Id: I68bc2ed7e535b45319c47271c2dfc4cd8f0e2626
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2485563
Commit-Queue: Min Chen <minch@chromium.org>
Reviewed-by: default avatarAhmed Fakhry <afakhry@chromium.org>
Cr-Commit-Position: refs/heads/master@{#819888}
parent 2e1715b9
...@@ -10,8 +10,8 @@ ...@@ -10,8 +10,8 @@
#include "ash/strings/grit/ash_strings.h" #include "ash/strings/grit/ash_strings.h"
#include "ash/style/ash_color_provider.h" #include "ash/style/ash_color_provider.h"
#include "ash/system/accessibility/autoclick_menu_bubble_controller.h" #include "ash/system/accessibility/autoclick_menu_bubble_controller.h"
#include "ash/system/accessibility/floating_menu_button.h"
#include "ash/system/unified/custom_shape_button.h" #include "ash/system/unified/custom_shape_button.h"
#include "ash/system/unified/top_shortcut_button.h"
#include "base/macros.h" #include "base/macros.h"
#include "base/metrics/user_metrics.h" #include "base/metrics/user_metrics.h"
#include "base/timer/timer.h" #include "base/timer/timer.h"
...@@ -44,21 +44,19 @@ SkColor HoveredButtonColor() { ...@@ -44,21 +44,19 @@ SkColor HoveredButtonColor() {
} // namespace } // namespace
// The close button for the automatic clicks scroll bubble. // The close button for the automatic clicks scroll bubble.
class AutoclickScrollCloseButton : public TopShortcutButton, class AutoclickScrollCloseButton : public FloatingMenuButton,
public views::ButtonListener { public views::ButtonListener {
public: public:
explicit AutoclickScrollCloseButton() AutoclickScrollCloseButton()
: TopShortcutButton(this, IDS_ASH_AUTOCLICK_SCROLL_CLOSE) { : FloatingMenuButton(this,
kAutoclickCloseIcon,
IDS_ASH_AUTOCLICK_SCROLL_CLOSE,
/*flip_for_rtl=*/false,
kScrollButtonCloseSizeDips,
/*draw_highlight=*/false,
/*is_a11y_togglable=*/false) {
views::View::SetID( views::View::SetID(
static_cast<int>(AutoclickScrollView::ButtonId::kCloseScroll)); static_cast<int>(AutoclickScrollView::ButtonId::kCloseScroll));
EnableCanvasFlippingForRTLUI(false);
SetPreferredSize(
gfx::Size(kScrollButtonCloseSizeDips, kScrollButtonCloseSizeDips));
SetImage(
views::Button::STATE_NORMAL,
gfx::CreateVectorIcon(kAutoclickCloseIcon,
AshColorProvider::Get()->GetContentLayerColor(
ContentLayerType::kIconColorPrimary)));
} }
~AutoclickScrollCloseButton() override = default; ~AutoclickScrollCloseButton() override = default;
...@@ -82,7 +80,7 @@ class AutoclickScrollCloseButton : public TopShortcutButton, ...@@ -82,7 +80,7 @@ class AutoclickScrollCloseButton : public TopShortcutButton,
SchedulePaint(); SchedulePaint();
} }
// TopShortcutButton: // FloatingMenuButton:
void PaintButtonContents(gfx::Canvas* canvas) override { void PaintButtonContents(gfx::Canvas* canvas) override {
if (hovered_) { if (hovered_) {
gfx::Rect rect(GetContentsBounds()); gfx::Rect rect(GetContentsBounds());
......
...@@ -6,12 +6,18 @@ ...@@ -6,12 +6,18 @@
#include "ash/style/ash_color_provider.h" #include "ash/style/ash_color_provider.h"
#include "ash/system/tray/tray_constants.h" #include "ash/system/tray/tray_constants.h"
#include "ash/system/tray/tray_popup_utils.h"
#include "ui/accessibility/ax_node_data.h" #include "ui/accessibility/ax_node_data.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/gfx/canvas.h" #include "ui/gfx/canvas.h"
#include "ui/gfx/paint_vector_icon.h" #include "ui/gfx/paint_vector_icon.h"
#include "ui/gfx/vector_icon_types.h" #include "ui/gfx/vector_icon_types.h"
#include "ui/views/accessibility/view_accessibility.h" #include "ui/views/accessibility/view_accessibility.h"
#include "ui/views/animation/flood_fill_ink_drop_ripple.h"
#include "ui/views/animation/ink_drop_highlight.h"
#include "ui/views/animation/ink_drop_impl.h"
#include "ui/views/animation/ink_drop_mask.h" #include "ui/views/animation/ink_drop_mask.h"
#include "ui/views/controls/highlight_path_generator.h"
namespace ash { namespace ash {
...@@ -38,37 +44,36 @@ FloatingMenuButton::FloatingMenuButton(views::ButtonListener* listener, ...@@ -38,37 +44,36 @@ FloatingMenuButton::FloatingMenuButton(views::ButtonListener* listener,
int size, int size,
bool draw_highlight, bool draw_highlight,
bool is_a11y_togglable) bool is_a11y_togglable)
: TopShortcutButton(listener, accessible_name_id), : views::ImageButton(listener),
icon_(&icon), icon_(&icon),
size_(size), size_(size),
draw_highlight_(draw_highlight), draw_highlight_(draw_highlight),
is_a11y_togglable_(is_a11y_togglable) { is_a11y_togglable_(is_a11y_togglable) {
SetImageHorizontalAlignment(ALIGN_CENTER);
SetImageVerticalAlignment(ALIGN_MIDDLE);
EnableCanvasFlippingForRTLUI(flip_for_rtl); EnableCanvasFlippingForRTLUI(flip_for_rtl);
SetPreferredSize(gfx::Size(size_, size_)); SetPreferredSize(gfx::Size(size_, size_));
TrayPopupUtils::ConfigureTrayPopupButton(this);
views::InstallCircleHighlightPathGenerator(this);
focus_ring()->SetColor(AshColorProvider::Get()->GetControlsLayerColor(
AshColorProvider::ControlsLayerType::kFocusRingColor));
SetTooltipText(l10n_util::GetStringUTF16(accessible_name_id));
UpdateImage(); UpdateImage();
} }
FloatingMenuButton::~FloatingMenuButton() = default; FloatingMenuButton::~FloatingMenuButton() = default;
// views::Button:
const char* FloatingMenuButton::GetClassName() const {
return "FloatingMenuButton";
}
// Set the vector icon shown in a circle.
void FloatingMenuButton::SetVectorIcon(const gfx::VectorIcon& icon) { void FloatingMenuButton::SetVectorIcon(const gfx::VectorIcon& icon) {
icon_ = &icon; icon_ = &icon;
UpdateImage(); UpdateImage();
} }
// Change the toggle state.
void FloatingMenuButton::SetToggled(bool toggled) { void FloatingMenuButton::SetToggled(bool toggled) {
toggled_ = toggled; toggled_ = toggled;
UpdateImage(); UpdateImage();
SchedulePaint(); SchedulePaint();
} }
// TopShortcutButton:
void FloatingMenuButton::PaintButtonContents(gfx::Canvas* canvas) { void FloatingMenuButton::PaintButtonContents(gfx::Canvas* canvas) {
if (draw_highlight_) { if (draw_highlight_) {
gfx::Rect rect(GetContentsBounds()); gfx::Rect rect(GetContentsBounds());
...@@ -93,7 +98,7 @@ gfx::Size FloatingMenuButton::CalculatePreferredSize() const { ...@@ -93,7 +98,7 @@ gfx::Size FloatingMenuButton::CalculatePreferredSize() const {
void FloatingMenuButton::GetAccessibleNodeData(ui::AXNodeData* node_data) { void FloatingMenuButton::GetAccessibleNodeData(ui::AXNodeData* node_data) {
if (!GetEnabled()) if (!GetEnabled())
return; return;
TopShortcutButton::GetAccessibleNodeData(node_data); views::ImageButton::GetAccessibleNodeData(node_data);
if (!is_a11y_togglable_) if (!is_a11y_togglable_)
return; return;
node_data->role = ax::mojom::Role::kToggleButton; node_data->role = ax::mojom::Role::kToggleButton;
...@@ -101,6 +106,26 @@ void FloatingMenuButton::GetAccessibleNodeData(ui::AXNodeData* node_data) { ...@@ -101,6 +106,26 @@ void FloatingMenuButton::GetAccessibleNodeData(ui::AXNodeData* node_data) {
: ax::mojom::CheckedState::kFalse); : ax::mojom::CheckedState::kFalse);
} }
const char* FloatingMenuButton::GetClassName() const {
return "FloatingMenuButton";
}
std::unique_ptr<views::InkDrop> FloatingMenuButton::CreateInkDrop() {
return TrayPopupUtils::CreateInkDrop(this);
}
std::unique_ptr<views::InkDropRipple> FloatingMenuButton::CreateInkDropRipple()
const {
return TrayPopupUtils::CreateInkDropRipple(
TrayPopupInkDropStyle::FILL_BOUNDS, this,
GetInkDropCenterBasedOnLastEvent());
}
std::unique_ptr<views::InkDropHighlight>
FloatingMenuButton::CreateInkDropHighlight() const {
return TrayPopupUtils::CreateInkDropHighlight(this);
}
void FloatingMenuButton::SetId(int id) { void FloatingMenuButton::SetId(int id) {
views::View::SetID(id); views::View::SetID(id);
} }
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
#ifndef ASH_SYSTEM_ACCESSIBILITY_FLOATING_MENU_BUTTON_H_ #ifndef ASH_SYSTEM_ACCESSIBILITY_FLOATING_MENU_BUTTON_H_
#define ASH_SYSTEM_ACCESSIBILITY_FLOATING_MENU_BUTTON_H_ #define ASH_SYSTEM_ACCESSIBILITY_FLOATING_MENU_BUTTON_H_
#include "ash/system/unified/top_shortcut_button.h" #include "ui/views/controls/button/image_button.h"
namespace gfx { namespace gfx {
struct VectorIcon; struct VectorIcon;
...@@ -16,7 +16,7 @@ namespace ash { ...@@ -16,7 +16,7 @@ namespace ash {
// Button view that is used in floating menu. // Button view that is used in floating menu.
class FloatingMenuButton : public TopShortcutButton { class FloatingMenuButton : public views::ImageButton {
public: public:
FloatingMenuButton(views::ButtonListener* listener, FloatingMenuButton(views::ButtonListener* listener,
const gfx::VectorIcon& icon, const gfx::VectorIcon& icon,
...@@ -33,9 +33,6 @@ class FloatingMenuButton : public TopShortcutButton { ...@@ -33,9 +33,6 @@ class FloatingMenuButton : public TopShortcutButton {
~FloatingMenuButton() override; ~FloatingMenuButton() override;
// views::Button:
const char* GetClassName() const override;
// Set the vector icon shown in a circle. // Set the vector icon shown in a circle.
void SetVectorIcon(const gfx::VectorIcon& icon); void SetVectorIcon(const gfx::VectorIcon& icon);
...@@ -44,10 +41,15 @@ class FloatingMenuButton : public TopShortcutButton { ...@@ -44,10 +41,15 @@ class FloatingMenuButton : public TopShortcutButton {
bool IsToggled() { return toggled_; } bool IsToggled() { return toggled_; }
// TopShortcutButton: // views::ImageButton:
void PaintButtonContents(gfx::Canvas* canvas) override; void PaintButtonContents(gfx::Canvas* canvas) override;
gfx::Size CalculatePreferredSize() const override; gfx::Size CalculatePreferredSize() const override;
void GetAccessibleNodeData(ui::AXNodeData* node_data) override; void GetAccessibleNodeData(ui::AXNodeData* node_data) override;
const char* GetClassName() const override;
std::unique_ptr<views::InkDrop> CreateInkDrop() override;
std::unique_ptr<views::InkDropRipple> CreateInkDropRipple() const override;
std::unique_ptr<views::InkDropHighlight> CreateInkDropHighlight()
const override;
// Used in tests. // Used in tests.
void SetId(int id); void SetId(int id);
......
...@@ -18,22 +18,19 @@ ...@@ -18,22 +18,19 @@
namespace ash { namespace ash {
TopShortcutButton::TopShortcutButton(const gfx::VectorIcon& icon,
int accessible_name_id)
: TopShortcutButton(nullptr /* listener */, accessible_name_id) {
SetImage(views::Button::STATE_DISABLED,
gfx::CreateVectorIcon(
icon, kTrayTopShortcutButtonIconSize,
AshColorProvider::Get()->GetContentLayerColor(
AshColorProvider::ContentLayerType::kIconColorPrimary)));
SetEnabled(false);
}
TopShortcutButton::TopShortcutButton(views::ButtonListener* listener, TopShortcutButton::TopShortcutButton(views::ButtonListener* listener,
const gfx::VectorIcon& icon, const gfx::VectorIcon& icon,
int accessible_name_id) int accessible_name_id)
: TopShortcutButton(listener, accessible_name_id) { : views::ImageButton(listener) {
const SkColor icon_color = AshColorProvider::Get()->GetContentLayerColor( SetImageHorizontalAlignment(ALIGN_CENTER);
SetImageVerticalAlignment(ALIGN_MIDDLE);
if (accessible_name_id)
SetTooltipText(l10n_util::GetStringUTF16(accessible_name_id));
TrayPopupUtils::ConfigureTrayPopupButton(this);
views::InstallCircleHighlightPathGenerator(this);
auto* color_provider = AshColorProvider::Get();
const SkColor icon_color = color_provider->GetContentLayerColor(
AshColorProvider::ContentLayerType::kIconColorPrimary); AshColorProvider::ContentLayerType::kIconColorPrimary);
SetImage( SetImage(
views::Button::STATE_NORMAL, views::Button::STATE_NORMAL,
...@@ -42,19 +39,7 @@ TopShortcutButton::TopShortcutButton(views::ButtonListener* listener, ...@@ -42,19 +39,7 @@ TopShortcutButton::TopShortcutButton(views::ButtonListener* listener,
views::Button::STATE_DISABLED, views::Button::STATE_DISABLED,
gfx::CreateVectorIcon(icon, kTrayTopShortcutButtonIconSize, gfx::CreateVectorIcon(icon, kTrayTopShortcutButtonIconSize,
AshColorProvider::GetDisabledColor(icon_color))); AshColorProvider::GetDisabledColor(icon_color)));
} focus_ring()->SetColor(color_provider->GetControlsLayerColor(
TopShortcutButton::TopShortcutButton(views::ButtonListener* listener,
int accessible_name_id)
: views::ImageButton(listener) {
SetImageHorizontalAlignment(ALIGN_CENTER);
SetImageVerticalAlignment(ALIGN_MIDDLE);
if (accessible_name_id)
SetTooltipText(l10n_util::GetStringUTF16(accessible_name_id));
TrayPopupUtils::ConfigureTrayPopupButton(this);
views::InstallCircleHighlightPathGenerator(this);
focus_ring()->SetColor(AshColorProvider::Get()->GetControlsLayerColor(
AshColorProvider::ControlsLayerType::kFocusRingColor)); AshColorProvider::ControlsLayerType::kFocusRingColor));
} }
......
...@@ -15,12 +15,9 @@ namespace ash { ...@@ -15,12 +15,9 @@ namespace ash {
// frequently used features e.g. lock screen, settings, and shutdown. // frequently used features e.g. lock screen, settings, and shutdown.
class TopShortcutButton : public views::ImageButton { class TopShortcutButton : public views::ImageButton {
public: public:
explicit TopShortcutButton(const gfx::VectorIcon& icon,
int accessible_name_id);
TopShortcutButton(views::ButtonListener* listener, TopShortcutButton(views::ButtonListener* listener,
const gfx::VectorIcon& icon, const gfx::VectorIcon& icon,
int accessible_name_id); int accessible_name_id);
TopShortcutButton(views::ButtonListener* listener, int accessible_name_id);
~TopShortcutButton() override; ~TopShortcutButton() override;
// views::View: // views::View:
......
...@@ -156,16 +156,18 @@ views::View* CreateUserAvatarView(int user_index) { ...@@ -156,16 +156,18 @@ views::View* CreateUserAvatarView(int user_index) {
if (user_session->user_info.type == user_manager::USER_TYPE_GUEST) { if (user_session->user_info.type == user_manager::USER_TYPE_GUEST) {
// In guest mode, the user avatar is just a disabled button pod. // In guest mode, the user avatar is just a disabled button pod.
return new TopShortcutButton(kSystemMenuGuestIcon, auto* image_view =
IDS_ASH_STATUS_TRAY_GUEST_LABEL); new TopShortcutButton(/*listener=*/nullptr, kSystemMenuGuestIcon,
} else { IDS_ASH_STATUS_TRAY_GUEST_LABEL);
auto* image_view = new RoundedImageView( image_view->SetEnabled(false);
kTrayItemSize / 2, RoundedImageView::Alignment::kLeading);
image_view->SetCanProcessEventsWithinSubtree(false);
image_view->SetImage(user_session->user_info.avatar.image,
gfx::Size(kTrayItemSize, kTrayItemSize));
return image_view; return image_view;
} }
auto* image_view = new RoundedImageView(
kTrayItemSize / 2, RoundedImageView::Alignment::kLeading);
image_view->SetCanProcessEventsWithinSubtree(false);
image_view->SetImage(user_session->user_info.avatar.image,
gfx::Size(kTrayItemSize, kTrayItemSize));
return image_view;
} }
base::string16 GetUserItemAccessibleString(int user_index) { base::string16 GetUserItemAccessibleString(int user_index) {
......
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