Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2721)

Unified Diff: ash/shelf/shelf_button.cc

Issue 1816753002: Enable mash shelf tooltips. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address destructor comment. Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ash/shelf/shelf_button.h ('k') | ash/shelf/shelf_button_host.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ash/shelf/shelf_button.cc
diff --git a/ash/shelf/shelf_button.cc b/ash/shelf/shelf_button.cc
index 5d44aa5eb78548a20080d02e500b4ef033c46b54..ff7b1390f8b8a1319747fe9202c680c14180227b 100644
--- a/ash/shelf/shelf_button.cc
+++ b/ash/shelf/shelf_button.cc
@@ -9,7 +9,7 @@
#include "ash/ash_constants.h"
#include "ash/ash_switches.h"
#include "ash/shelf/shelf.h"
-#include "ash/shelf/shelf_button_host.h"
+#include "ash/shelf/shelf_view.h"
#include "base/time/time.h"
#include "grit/ash_resources.h"
#include "skia/ext/image_operations.h"
@@ -115,8 +115,8 @@ namespace ash {
class ShelfButton::BarView : public views::ImageView,
public ShelfButtonAnimation::Observer {
public:
- BarView(ShelfButton* host)
- : host_(host),
+ BarView(Shelf* shelf)
+ : shelf_(shelf),
show_attention_(false),
animation_end_time_(base::TimeTicks()),
animating_(false) {
@@ -180,7 +180,7 @@ class ShelfButton::BarView : public views::ImageView,
double animation = animating_ ?
ShelfButtonAnimation::GetInstance()->GetAnimation() : 1.0;
double scale = .35 + .65 * animation;
- if (host_->shelf()->alignment() == SHELF_ALIGNMENT_BOTTOM) {
+ if (shelf_->alignment() == SHELF_ALIGNMENT_BOTTOM) {
int width = base_bounds_.width() * scale;
bounds.set_width(std::min(width, kIconSize));
int x_offset = (base_bounds_.width() - bounds.width()) / 2;
@@ -206,7 +206,7 @@ class ShelfButton::BarView : public views::ImageView,
}
}
- ShelfButton* host_;
+ Shelf* shelf_;
bool show_attention_;
base::TimeTicks animation_end_time_; // For attention throbbing underline.
bool animating_; // Is time-limited attention animation running?
@@ -216,41 +216,18 @@ class ShelfButton::BarView : public views::ImageView,
};
////////////////////////////////////////////////////////////////////////////////
-// ShelfButton::IconView
-
-ShelfButton::IconView::IconView() : icon_size_(kIconSize) {
- // Do not make this interactive, so that events are sent to ShelfView for
- // handling.
- set_interactive(false);
-}
-
-ShelfButton::IconView::~IconView() {
-}
-
-////////////////////////////////////////////////////////////////////////////////
// ShelfButton
// static
const char ShelfButton::kViewClassName[] = "ash/ShelfButton";
-ShelfButton* ShelfButton::Create(views::ButtonListener* listener,
- ShelfButtonHost* host,
- Shelf* shelf) {
- ShelfButton* button = new ShelfButton(listener, host, shelf);
- button->Init();
- return button;
-}
-
-ShelfButton::ShelfButton(views::ButtonListener* listener,
- ShelfButtonHost* host,
- Shelf* shelf)
- : CustomButton(listener),
- host_(host),
- icon_view_(NULL),
- bar_(new BarView(this)),
+ShelfButton::ShelfButton(ShelfView* shelf_view)
+ : CustomButton(shelf_view),
+ shelf_view_(shelf_view),
+ icon_view_(new views::ImageView()),
+ bar_(new BarView(shelf_view->shelf())),
state_(STATE_NORMAL),
- shelf_(shelf),
- destroyed_flag_(NULL) {
+ destroyed_flag_(nullptr) {
SetAccessibilityFocusable(true);
const gfx::ShadowValue kShadows[] = {
@@ -260,7 +237,16 @@ ShelfButton::ShelfButton(views::ButtonListener* listener,
};
icon_shadows_.assign(kShadows, kShadows + arraysize(kShadows));
+ // TODO: refactor the layers so each button doesn't require 2.
+ icon_view_->SetPaintToLayer(true);
+ icon_view_->layer()->SetFillsBoundsOpaquely(false);
+ icon_view_->SetHorizontalAlignment(views::ImageView::CENTER);
+ icon_view_->SetVerticalAlignment(views::ImageView::LEADING);
+ // Do not make this interactive, so that events are sent to ShelfView.
+ icon_view_->set_interactive(false);
+
AddChildView(bar_);
+ AddChildView(icon_view_);
}
ShelfButton::~ShelfButton() {
@@ -280,19 +266,13 @@ void ShelfButton::SetImage(const gfx::ImageSkia& image) {
return;
}
- if (icon_view_->icon_size() == 0) {
- SetShadowedImage(image);
- return;
- }
-
// Resize the image maintaining our aspect ratio.
- int pref = icon_view_->icon_size();
float aspect_ratio =
static_cast<float>(image.width()) / static_cast<float>(image.height());
- int height = pref;
+ int height = kIconSize;
int width = static_cast<int>(aspect_ratio * height);
- if (width > pref) {
- width = pref;
+ if (width > kIconSize) {
+ width = kIconSize;
height = static_cast<int>(width / aspect_ratio);
}
@@ -342,7 +322,7 @@ void ShelfButton::ShowContextMenu(const gfx::Point& p,
CustomButton::ShowContextMenu(p, source_type);
if (!destroyed) {
- destroyed_flag_ = NULL;
+ destroyed_flag_ = nullptr;
// The menu will not propagate mouse events while its shown. To address,
// the hover state gets cleared once the menu was shown (and this was not
// destroyed).
@@ -356,71 +336,53 @@ const char* ShelfButton::GetClassName() const {
bool ShelfButton::OnMousePressed(const ui::MouseEvent& event) {
CustomButton::OnMousePressed(event);
- host_->PointerPressedOnButton(this, ShelfButtonHost::MOUSE, event);
+ shelf_view_->PointerPressedOnButton(this, ShelfView::MOUSE, event);
return true;
}
void ShelfButton::OnMouseReleased(const ui::MouseEvent& event) {
CustomButton::OnMouseReleased(event);
- host_->PointerReleasedOnButton(this, ShelfButtonHost::MOUSE, false);
+ shelf_view_->PointerReleasedOnButton(this, ShelfView::MOUSE, false);
}
void ShelfButton::OnMouseCaptureLost() {
ClearState(STATE_HOVERED);
- host_->PointerReleasedOnButton(this, ShelfButtonHost::MOUSE, true);
+ shelf_view_->PointerReleasedOnButton(this, ShelfView::MOUSE, true);
CustomButton::OnMouseCaptureLost();
}
bool ShelfButton::OnMouseDragged(const ui::MouseEvent& event) {
CustomButton::OnMouseDragged(event);
- host_->PointerDraggedOnButton(this, ShelfButtonHost::MOUSE, event);
+ shelf_view_->PointerDraggedOnButton(this, ShelfView::MOUSE, event);
return true;
}
-void ShelfButton::OnMouseMoved(const ui::MouseEvent& event) {
- CustomButton::OnMouseMoved(event);
- host_->MouseMovedOverButton(this);
-}
-
-void ShelfButton::OnMouseEntered(const ui::MouseEvent& event) {
- AddState(STATE_HOVERED);
- CustomButton::OnMouseEntered(event);
- host_->MouseEnteredButton(this);
-}
-
-void ShelfButton::OnMouseExited(const ui::MouseEvent& event) {
- ClearState(STATE_HOVERED);
- CustomButton::OnMouseExited(event);
- host_->MouseExitedButton(this);
-}
-
void ShelfButton::GetAccessibleState(ui::AXViewState* state) {
state->role = ui::AX_ROLE_BUTTON;
- state->name = host_->GetAccessibleName(this);
+ state->name = shelf_view_->GetTitleForView(this);
}
void ShelfButton::Layout() {
const gfx::Rect button_bounds(GetContentsBounds());
- int icon_pad = shelf_->IsHorizontalAlignment() ? kIconPad : kIconPadVertical;
- int x_offset = shelf_->PrimaryAxisValue(0, icon_pad);
- int y_offset = shelf_->PrimaryAxisValue(icon_pad, 0);
+ Shelf* shelf = shelf_view_->shelf();
+ int icon_pad = shelf->PrimaryAxisValue(kIconPad, kIconPadVertical);
+ int x_offset = shelf->PrimaryAxisValue(0, icon_pad);
+ int y_offset = shelf->PrimaryAxisValue(icon_pad, 0);
- int icon_width = std::min(kIconSize,
- button_bounds.width() - x_offset);
- int icon_height = std::min(kIconSize,
- button_bounds.height() - y_offset);
+ int icon_width = std::min(kIconSize, button_bounds.width() - x_offset);
+ int icon_height = std::min(kIconSize, button_bounds.height() - y_offset);
// If on the left or top 'invert' the inset so the constant gap is on
// the interior (towards the center of display) edge of the shelf.
- if (SHELF_ALIGNMENT_LEFT == shelf_->alignment())
+ if (SHELF_ALIGNMENT_LEFT == shelf->alignment())
x_offset = button_bounds.width() - (kIconSize + icon_pad);
- if (SHELF_ALIGNMENT_TOP == shelf_->alignment())
+ if (SHELF_ALIGNMENT_TOP == shelf->alignment())
y_offset = button_bounds.height() - (kIconSize + icon_pad);
// Center icon with respect to the secondary axis, and ensure
// that the icon doesn't occlude the bar highlight.
- if (shelf_->IsHorizontalAlignment()) {
+ if (shelf->IsHorizontalAlignment()) {
x_offset = std::max(0, button_bounds.width() - icon_width) / 2;
if (y_offset + icon_height + kBarSize > button_bounds.height())
icon_height = button_bounds.height() - (y_offset + kBarSize);
@@ -484,16 +446,16 @@ void ShelfButton::OnGestureEvent(ui::GestureEvent* event) {
ClearState(STATE_HOVERED);
return CustomButton::OnGestureEvent(event);
case ui::ET_GESTURE_SCROLL_BEGIN:
- host_->PointerPressedOnButton(this, ShelfButtonHost::TOUCH, *event);
+ shelf_view_->PointerPressedOnButton(this, ShelfView::TOUCH, *event);
event->SetHandled();
return;
case ui::ET_GESTURE_SCROLL_UPDATE:
- host_->PointerDraggedOnButton(this, ShelfButtonHost::TOUCH, *event);
+ shelf_view_->PointerDraggedOnButton(this, ShelfView::TOUCH, *event);
event->SetHandled();
return;
case ui::ET_GESTURE_SCROLL_END:
case ui::ET_SCROLL_FLING_START:
- host_->PointerReleasedOnButton(this, ShelfButtonHost::TOUCH, false);
+ shelf_view_->PointerReleasedOnButton(this, ShelfView::TOUCH, false);
event->SetHandled();
return;
default:
@@ -501,28 +463,12 @@ void ShelfButton::OnGestureEvent(ui::GestureEvent* event) {
}
}
-void ShelfButton::Init() {
- icon_view_ = CreateIconView();
-
- // TODO: refactor the layers so each button doesn't require 2.
- icon_view_->SetPaintToLayer(true);
- icon_view_->layer()->SetFillsBoundsOpaquely(false);
- icon_view_->SetHorizontalAlignment(views::ImageView::CENTER);
- icon_view_->SetVerticalAlignment(views::ImageView::LEADING);
-
- AddChildView(icon_view_);
-}
-
-ShelfButton::IconView* ShelfButton::CreateIconView() {
- return new IconView;
-}
-
void ShelfButton::UpdateState() {
UpdateBar();
-
- icon_view_->SetHorizontalAlignment(shelf_->PrimaryAxisValue(
+ Shelf* shelf = shelf_view_->shelf();
+ icon_view_->SetHorizontalAlignment(shelf->PrimaryAxisValue(
views::ImageView::CENTER, views::ImageView::LEADING));
- icon_view_->SetVerticalAlignment(shelf_->PrimaryAxisValue(
+ icon_view_->SetVerticalAlignment(shelf->PrimaryAxisValue(
views::ImageView::LEADING, views::ImageView::CENTER));
SchedulePaint();
}
@@ -544,20 +490,22 @@ void ShelfButton::UpdateBar() {
if (bar_id != 0) {
ResourceBundle& rb = ResourceBundle::GetSharedInstance();
const gfx::ImageSkia* image = rb.GetImageNamed(bar_id).ToImageSkia();
- if (shelf_->alignment() == SHELF_ALIGNMENT_BOTTOM) {
+
+ Shelf* shelf = shelf_view_->shelf();
+ if (shelf->alignment() == SHELF_ALIGNMENT_BOTTOM) {
bar_->SetImage(*image);
} else {
bar_->SetImage(gfx::ImageSkiaOperations::CreateRotatedImage(
- *image, shelf_->SelectValueForShelfAlignment(
+ *image, shelf->SelectValueForShelfAlignment(
SkBitmapOperations::ROTATION_90_CW,
SkBitmapOperations::ROTATION_90_CW,
SkBitmapOperations::ROTATION_270_CW,
SkBitmapOperations::ROTATION_180_CW)));
}
- bar_->SetHorizontalAlignment(shelf_->SelectValueForShelfAlignment(
+ bar_->SetHorizontalAlignment(shelf->SelectValueForShelfAlignment(
views::ImageView::CENTER, views::ImageView::LEADING,
views::ImageView::TRAILING, views::ImageView::CENTER));
- bar_->SetVerticalAlignment(shelf_->SelectValueForShelfAlignment(
+ bar_->SetVerticalAlignment(shelf->SelectValueForShelfAlignment(
views::ImageView::TRAILING, views::ImageView::CENTER,
views::ImageView::CENTER, views::ImageView::LEADING));
bar_->SchedulePaint();
« no previous file with comments | « ash/shelf/shelf_button.h ('k') | ash/shelf/shelf_button_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698