Chromium Code Reviews| Index: ash/common/system/tray/system_menu_button.cc |
| diff --git a/ash/common/system/tray/system_menu_button.cc b/ash/common/system/tray/system_menu_button.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..5586d965de6d87b3fb6065fa48d6bf2cecc7cc44 |
| --- /dev/null |
| +++ b/ash/common/system/tray/system_menu_button.cc |
| @@ -0,0 +1,66 @@ |
| +// Copyright 2016 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "ash/common/system/tray/system_menu_button.h" |
| + |
| +#include "ash/common/ash_constants.h" |
| +#include "ash/common/system/tray/system_tray.h" |
| +#include "ash/common/system/tray/tray_constants.h" |
| +#include "ui/base/resource/resource_bundle.h" |
| +#include "ui/gfx/paint_vector_icon.h" |
| +#include "ui/views/animation/flood_fill_ink_drop_ripple.h" |
| +#include "ui/views/animation/ink_drop_highlight.h" |
| +#include "ui/views/border.h" |
| +#include "ui/views/painter.h" |
| + |
| +namespace ash { |
| + |
| +SystemMenuButton::SystemMenuButton(views::ButtonListener* listener, |
| + const gfx::VectorIcon& icon, |
| + int accessible_name_id) |
| + : views::ImageButton(listener) { |
| + gfx::ImageSkia image = gfx::CreateVectorIcon(icon, kMenuIconColor); |
| + SetImage(views::Button::STATE_NORMAL, &image); |
| + const int horizontal_padding = (kMenuButtonSize - image.width()) / 2; |
|
James Cook
2016/09/23 18:32:16
Aside: It's a bit of a bummer these constants don'
|
| + const int vertical_padding = (kMenuButtonSize - image.height()) / 2; |
| + SetBorder( |
| + views::Border::CreateEmptyBorder(vertical_padding, horizontal_padding, |
| + vertical_padding, horizontal_padding)); |
| + |
| + ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); |
| + SetTooltipText(bundle.GetLocalizedString(accessible_name_id)); |
| + |
| + // TODO(tdanderson): Update the focus rect color, border thickness, and |
| + // location for material design. |
| + SetFocusForPlatform(); |
| + SetFocusPainter(views::Painter::CreateSolidFocusPainter( |
| + kFocusBorderColor, gfx::Insets(1, 1, 1, 1))); |
| + |
| + SetInkDropMode(InkDropMode::ON_NO_GESTURE_HANDLER); |
| + set_has_ink_drop_action_on_click(true); |
| + set_ink_drop_base_color(kMenuIconColor); |
| +} |
| + |
| +SystemMenuButton::~SystemMenuButton() {} |
| + |
| +std::unique_ptr<views::InkDropRipple> SystemMenuButton::CreateInkDropRipple() |
| + const { |
| + return base::MakeUnique<views::FloodFillInkDropRipple>( |
| + GetLocalBounds(), GetInkDropCenterBasedOnLastEvent(), |
| + GetInkDropBaseColor(), ink_drop_visible_opacity()); |
| +} |
| + |
| +std::unique_ptr<views::InkDropHighlight> |
| +SystemMenuButton::CreateInkDropHighlight() const { |
| + gfx::Size size = GetLocalBounds().size(); |
| + return base::MakeUnique<views::InkDropHighlight>( |
| + size, kInkDropSmallCornerRadius, |
| + gfx::RectF(gfx::SizeF(size)).CenterPoint(), kMenuIconColor); |
| +} |
| + |
| +bool SystemMenuButton::ShouldShowInkDropForFocus() const { |
| + return false; |
| +} |
| + |
| +} // namespace ash |