Commit 8ad1c494 authored by Peter Kasting's avatar Peter Kasting Committed by Commit Bot

More API changes to aid porting to PressedCallback.

Bug: 772945
Change-Id: Ib11f9a77c8118b7afba482bf9b80cab8d1b1fb6f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2438945
Auto-Submit: Peter Kasting <pkasting@chromium.org>
Reviewed-by: default avatarRobert Liao <robliao@chromium.org>
Commit-Queue: Peter Kasting <pkasting@chromium.org>
Cr-Commit-Position: refs/heads/master@{#812436}
parent 69f65b4e
......@@ -31,6 +31,24 @@ void ConfigureBubbleMenuItem(views::Button* button, int button_id) {
button->SetID(button_id);
}
std::unique_ptr<views::LabelButton> CreateBubbleMenuItem(
int button_id,
const base::string16& name,
views::Button::PressedCallback callback) {
auto button = std::make_unique<views::LabelButton>(
callback, name, views::style::CONTEXT_BUTTON);
ConfigureBubbleMenuItem(button.get(), button_id);
button->SetButtonController(std::make_unique<HoverButtonController>(
button.get(), std::move(callback),
std::make_unique<views::Button::DefaultButtonControllerDelegate>(
button.get())));
button->SetBorder(views::CreateEmptyBorder(kDefaultBorderInsets));
return button;
}
std::unique_ptr<views::LabelButton> CreateBubbleMenuItem(
int button_id,
const base::string16& name,
......@@ -41,7 +59,7 @@ std::unique_ptr<views::LabelButton> CreateBubbleMenuItem(
ConfigureBubbleMenuItem(button.get(), button_id);
button->SetButtonController(std::make_unique<HoverButtonController>(
button.get(), listener,
button.get(), views::Button::PressedCallback(listener, button.get()),
std::make_unique<views::Button::DefaultButtonControllerDelegate>(
button.get())));
button->SetBorder(views::CreateEmptyBorder(kDefaultBorderInsets));
......@@ -49,6 +67,14 @@ std::unique_ptr<views::LabelButton> CreateBubbleMenuItem(
return button;
}
std::unique_ptr<views::ImageButton> CreateBubbleMenuItem(
int button_id,
views::Button::PressedCallback callback) {
auto button = views::CreateVectorImageButton(std::move(callback));
ConfigureBubbleMenuItem(button.get(), button_id);
return button;
}
std::unique_ptr<views::ImageButton> CreateBubbleMenuItem(
int button_id,
views::ButtonListener* listener) {
......
......@@ -9,10 +9,9 @@
#include <string>
#include "base/strings/string16.h"
#include "ui/views/controls/button/button.h"
namespace views {
class Button;
class ButtonListener;
class ImageButton;
class LabelButton;
} // namespace views
......@@ -21,12 +20,19 @@ void ConfigureBubbleMenuItem(views::Button* button, int button_id);
// Convience method for creating a menu item used inside a bubble that can then
// be futher configured to hold an image and text.
std::unique_ptr<views::LabelButton> CreateBubbleMenuItem(
int button_id,
const base::string16& name,
views::Button::PressedCallback callback);
std::unique_ptr<views::LabelButton> CreateBubbleMenuItem(
int button_id,
const base::string16& name,
views::ButtonListener* listener);
// Convience method for creating a menu item used inside a bubble with an image.
std::unique_ptr<views::ImageButton> CreateBubbleMenuItem(
int id,
views::Button::PressedCallback callback);
std::unique_ptr<views::ImageButton> CreateBubbleMenuItem(
int id,
views::ButtonListener* listener);
......
......@@ -32,7 +32,7 @@ ExtensionsMenuButton::ExtensionsMenuButton(
allow_pinning_(allow_pinning) {
ConfigureBubbleMenuItem(this, 0);
SetButtonController(std::make_unique<HoverButtonController>(
this, this,
this, PressedCallback(this, this),
std::make_unique<views::Button::DefaultButtonControllerDelegate>(this)));
controller_->SetDelegate(this);
UpdateState();
......
......@@ -81,8 +81,8 @@ ExtensionsMenuItemView::ExtensionsMenuItemView(
AddChildView(std::move(pin_button));
}
auto context_menu_button =
CreateBubbleMenuItem(EXTENSION_CONTEXT_MENU, nullptr);
auto context_menu_button = CreateBubbleMenuItem(
EXTENSION_CONTEXT_MENU, views::Button::PressedCallback());
context_menu_button->SetBorder(
views::CreateEmptyBorder(kSecondaryButtonInsets));
context_menu_button->SetTooltipText(
......
......@@ -71,11 +71,10 @@ class IconWrapper : public views::View {
} // namespace
HoverButton::HoverButton(views::ButtonListener* button_listener,
const base::string16& text)
: views::LabelButton(button_listener, text, views::style::CONTEXT_BUTTON) {
HoverButton::HoverButton(PressedCallback callback, const base::string16& text)
: views::LabelButton(callback, text, views::style::CONTEXT_BUTTON) {
SetButtonController(std::make_unique<HoverButtonController>(
this, button_listener,
this, std::move(callback),
std::make_unique<views::Button::DefaultButtonControllerDelegate>(this)));
views::InstallRectHighlightPathGenerator(this);
......@@ -96,21 +95,30 @@ HoverButton::HoverButton(views::ButtonListener* button_listener,
views::ButtonController::NotifyAction::kOnRelease);
}
HoverButton::HoverButton(views::ButtonListener* button_listener,
HoverButton::HoverButton(views::ButtonListener* listener,
const base::string16& text)
: HoverButton(PressedCallback(listener, this), text) {}
HoverButton::HoverButton(PressedCallback callback,
const gfx::ImageSkia& icon,
const base::string16& text)
: HoverButton(button_listener, text) {
: HoverButton(std::move(callback), text) {
SetImage(STATE_NORMAL, icon);
}
HoverButton::HoverButton(views::ButtonListener* button_listener,
HoverButton::HoverButton(views::ButtonListener* listener,
const gfx::ImageSkia& icon,
const base::string16& text)
: HoverButton(PressedCallback(listener, this), icon, text) {}
HoverButton::HoverButton(PressedCallback callback,
std::unique_ptr<views::View> icon_view,
const base::string16& title,
const base::string16& subtitle,
std::unique_ptr<views::View> secondary_view,
bool resize_row_for_secondary_view,
bool secondary_view_can_process_events)
: HoverButton(button_listener, base::string16()) {
: HoverButton(std::move(callback), base::string16()) {
label()->SetHandlesTooltips(false);
// Set the layout manager to ignore the ink_drop_container to ensure the ink
......@@ -194,6 +202,21 @@ HoverButton::HoverButton(views::ButtonListener* button_listener,
SetBorder(CreateBorderWithVerticalSpacing(0));
}
HoverButton::HoverButton(views::ButtonListener* listener,
std::unique_ptr<views::View> icon_view,
const base::string16& title,
const base::string16& subtitle,
std::unique_ptr<views::View> secondary_view,
bool resize_row_for_secondary_view,
bool secondary_view_can_process_events)
: HoverButton(PressedCallback(listener, this),
std::move(icon_view),
title,
subtitle,
std::move(secondary_view),
resize_row_for_secondary_view,
secondary_view_can_process_events) {}
HoverButton::~HoverButton() = default;
// static
......
......@@ -22,7 +22,6 @@ FORWARD_DECLARE_TEST(CastDialogSinkButtonTest, SetStatusLabel);
} // namespace media_router
namespace views {
class ButtonListener;
class Label;
class StyledLabel;
class View;
......@@ -37,11 +36,14 @@ class HoverButton : public views::LabelButton {
enum Style { STYLE_PROMINENT, STYLE_ERROR };
// Creates a single line hover button with no icon.
HoverButton(views::ButtonListener* button_listener,
const base::string16& text);
HoverButton(PressedCallback callback, const base::string16& text);
HoverButton(views::ButtonListener* listener, const base::string16& text);
// Creates a single line hover button with an icon.
HoverButton(views::ButtonListener* button_listener,
HoverButton(PressedCallback callback,
const gfx::ImageSkia& icon,
const base::string16& text);
HoverButton(views::ButtonListener* listener,
const gfx::ImageSkia& icon,
const base::string16& text);
......@@ -52,7 +54,14 @@ class HoverButton : public views::LabelButton {
// When |resize_row_for_secondary_icon| is false, the button tries to
// accommodate the view's preferred size by reducing the top and bottom
// insets appropriately up to a value of 0.
HoverButton(views::ButtonListener* button_listener,
HoverButton(PressedCallback callback,
std::unique_ptr<views::View> icon_view,
const base::string16& title,
const base::string16& subtitle = base::string16(),
std::unique_ptr<views::View> secondary_view = nullptr,
bool resize_row_for_secondary_view = true,
bool secondary_view_can_process_events = false);
HoverButton(views::ButtonListener* listener,
std::unique_ptr<views::View> icon_view,
const base::string16& title,
const base::string16& subtitle = base::string16(),
......
......@@ -12,34 +12,28 @@
HoverButtonController::HoverButtonController(
views::Button* button,
views::ButtonListener* listener,
views::Button::PressedCallback callback,
std::unique_ptr<views::ButtonControllerDelegate> delegate)
: ButtonController(button, std::move(delegate)), listener_(listener) {
: ButtonController(button, std::move(delegate)),
callback_(std::move(callback)) {
set_notify_action(views::ButtonController::NotifyAction::kOnRelease);
}
HoverButtonController::~HoverButtonController() = default;
bool HoverButtonController::OnKeyPressed(const ui::KeyEvent& event) {
if (!listener_)
return false;
switch (event.key_code()) {
case ui::VKEY_SPACE:
case ui::VKEY_RETURN:
listener_->ButtonPressed(button(), event);
return true;
default:
break;
}
return false;
const bool pressed = callback_ && ((event.key_code() == ui::VKEY_SPACE) ||
(event.key_code() == ui::VKEY_RETURN));
if (pressed)
callback_.Run(event);
return pressed;
}
bool HoverButtonController::OnMousePressed(const ui::MouseEvent& event) {
DCHECK(notify_action() == views::ButtonController::NotifyAction::kOnRelease);
if (button()->GetRequestFocusOnPress())
button()->RequestFocus();
if (listener_) {
if (callback_) {
button()->AnimateInkDrop(views::InkDropState::ACTION_TRIGGERED,
ui::LocatedEvent::FromIfValid(&event));
} else {
......@@ -54,8 +48,8 @@ void HoverButtonController::OnMouseReleased(const ui::MouseEvent& event) {
if (button()->GetState() != views::Button::STATE_DISABLED &&
delegate()->IsTriggerableEvent(event) &&
button()->HitTestPoint(event.location()) && !delegate()->InDrag()) {
if (listener_)
listener_->ButtonPressed(button(), event);
if (callback_)
callback_.Run(event);
} else {
button()->AnimateInkDrop(views::InkDropState::HIDDEN, &event);
ButtonController::OnMouseReleased(event);
......@@ -64,8 +58,8 @@ void HoverButtonController::OnMouseReleased(const ui::MouseEvent& event) {
void HoverButtonController::OnGestureEvent(ui::GestureEvent* event) {
if (event->type() == ui::ET_GESTURE_TAP) {
if (listener_)
listener_->ButtonPressed(button(), *event);
if (callback_)
callback_.Run(*event);
button()->SetState(views::Button::STATE_NORMAL);
} else {
ButtonController::OnGestureEvent(event);
......
......@@ -22,7 +22,7 @@ class HoverButtonController : public views::ButtonController {
public:
HoverButtonController(
views::Button* button,
views::ButtonListener* listener,
views::Button::PressedCallback callback,
std::unique_ptr<views::ButtonControllerDelegate> delegate);
~HoverButtonController() override;
......@@ -33,8 +33,8 @@ class HoverButtonController : public views::ButtonController {
void OnGestureEvent(ui::GestureEvent* event) override;
private:
// Listener to be called when button is clicked.
views::ButtonListener* listener_;
// Callback to be called when button is clicked.
views::Button::PressedCallback callback_;
DISALLOW_COPY_AND_ASSIGN(HoverButtonController);
};
......
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