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 @@
#include "ash/strings/grit/ash_strings.h"
#include "ash/style/ash_color_provider.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/top_shortcut_button.h"
#include "base/macros.h"
#include "base/metrics/user_metrics.h"
#include "base/timer/timer.h"
......@@ -44,21 +44,19 @@ SkColor HoveredButtonColor() {
} // namespace
// The close button for the automatic clicks scroll bubble.
class AutoclickScrollCloseButton : public TopShortcutButton,
class AutoclickScrollCloseButton : public FloatingMenuButton,
public views::ButtonListener {
public:
explicit AutoclickScrollCloseButton()
: TopShortcutButton(this, IDS_ASH_AUTOCLICK_SCROLL_CLOSE) {
AutoclickScrollCloseButton()
: FloatingMenuButton(this,
kAutoclickCloseIcon,
IDS_ASH_AUTOCLICK_SCROLL_CLOSE,
/*flip_for_rtl=*/false,
kScrollButtonCloseSizeDips,
/*draw_highlight=*/false,
/*is_a11y_togglable=*/false) {
views::View::SetID(
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;
......@@ -82,7 +80,7 @@ class AutoclickScrollCloseButton : public TopShortcutButton,
SchedulePaint();
}
// TopShortcutButton:
// FloatingMenuButton:
void PaintButtonContents(gfx::Canvas* canvas) override {
if (hovered_) {
gfx::Rect rect(GetContentsBounds());
......
......@@ -6,12 +6,18 @@
#include "ash/style/ash_color_provider.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/base/l10n/l10n_util.h"
#include "ui/gfx/canvas.h"
#include "ui/gfx/paint_vector_icon.h"
#include "ui/gfx/vector_icon_types.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/controls/highlight_path_generator.h"
namespace ash {
......@@ -38,37 +44,36 @@ FloatingMenuButton::FloatingMenuButton(views::ButtonListener* listener,
int size,
bool draw_highlight,
bool is_a11y_togglable)
: TopShortcutButton(listener, accessible_name_id),
: views::ImageButton(listener),
icon_(&icon),
size_(size),
draw_highlight_(draw_highlight),
is_a11y_togglable_(is_a11y_togglable) {
SetImageHorizontalAlignment(ALIGN_CENTER);
SetImageVerticalAlignment(ALIGN_MIDDLE);
EnableCanvasFlippingForRTLUI(flip_for_rtl);
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();
}
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) {
icon_ = &icon;
UpdateImage();
}
// Change the toggle state.
void FloatingMenuButton::SetToggled(bool toggled) {
toggled_ = toggled;
UpdateImage();
SchedulePaint();
}
// TopShortcutButton:
void FloatingMenuButton::PaintButtonContents(gfx::Canvas* canvas) {
if (draw_highlight_) {
gfx::Rect rect(GetContentsBounds());
......@@ -93,7 +98,7 @@ gfx::Size FloatingMenuButton::CalculatePreferredSize() const {
void FloatingMenuButton::GetAccessibleNodeData(ui::AXNodeData* node_data) {
if (!GetEnabled())
return;
TopShortcutButton::GetAccessibleNodeData(node_data);
views::ImageButton::GetAccessibleNodeData(node_data);
if (!is_a11y_togglable_)
return;
node_data->role = ax::mojom::Role::kToggleButton;
......@@ -101,6 +106,26 @@ void FloatingMenuButton::GetAccessibleNodeData(ui::AXNodeData* node_data) {
: 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) {
views::View::SetID(id);
}
......
......@@ -5,7 +5,7 @@
#ifndef 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 {
struct VectorIcon;
......@@ -16,7 +16,7 @@ namespace ash {
// Button view that is used in floating menu.
class FloatingMenuButton : public TopShortcutButton {
class FloatingMenuButton : public views::ImageButton {
public:
FloatingMenuButton(views::ButtonListener* listener,
const gfx::VectorIcon& icon,
......@@ -33,9 +33,6 @@ class FloatingMenuButton : public TopShortcutButton {
~FloatingMenuButton() override;
// views::Button:
const char* GetClassName() const override;
// Set the vector icon shown in a circle.
void SetVectorIcon(const gfx::VectorIcon& icon);
......@@ -44,10 +41,15 @@ class FloatingMenuButton : public TopShortcutButton {
bool IsToggled() { return toggled_; }
// TopShortcutButton:
// views::ImageButton:
void PaintButtonContents(gfx::Canvas* canvas) override;
gfx::Size CalculatePreferredSize() const 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.
void SetId(int id);
......
......@@ -18,22 +18,19 @@
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,
const gfx::VectorIcon& icon,
int accessible_name_id)
: TopShortcutButton(listener, accessible_name_id) {
const SkColor icon_color = AshColorProvider::Get()->GetContentLayerColor(
: 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);
auto* color_provider = AshColorProvider::Get();
const SkColor icon_color = color_provider->GetContentLayerColor(
AshColorProvider::ContentLayerType::kIconColorPrimary);
SetImage(
views::Button::STATE_NORMAL,
......@@ -42,19 +39,7 @@ TopShortcutButton::TopShortcutButton(views::ButtonListener* listener,
views::Button::STATE_DISABLED,
gfx::CreateVectorIcon(icon, kTrayTopShortcutButtonIconSize,
AshColorProvider::GetDisabledColor(icon_color)));
}
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(
focus_ring()->SetColor(color_provider->GetControlsLayerColor(
AshColorProvider::ControlsLayerType::kFocusRingColor));
}
......
......@@ -15,12 +15,9 @@ namespace ash {
// frequently used features e.g. lock screen, settings, and shutdown.
class TopShortcutButton : public views::ImageButton {
public:
explicit TopShortcutButton(const gfx::VectorIcon& icon,
int accessible_name_id);
TopShortcutButton(views::ButtonListener* listener,
const gfx::VectorIcon& icon,
int accessible_name_id);
TopShortcutButton(views::ButtonListener* listener, int accessible_name_id);
~TopShortcutButton() override;
// views::View:
......
......@@ -156,16 +156,18 @@ views::View* CreateUserAvatarView(int user_index) {
if (user_session->user_info.type == user_manager::USER_TYPE_GUEST) {
// In guest mode, the user avatar is just a disabled button pod.
return new TopShortcutButton(kSystemMenuGuestIcon,
IDS_ASH_STATUS_TRAY_GUEST_LABEL);
} else {
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));
auto* image_view =
new TopShortcutButton(/*listener=*/nullptr, kSystemMenuGuestIcon,
IDS_ASH_STATUS_TRAY_GUEST_LABEL);
image_view->SetEnabled(false);
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) {
......
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