Index: ash/shelf/app_list_button.cc |
diff --git a/ash/shelf/app_list_button.cc b/ash/shelf/app_list_button.cc |
deleted file mode 100644 |
index 2c9eced2f8940be7d25bd5ed5542dc13e254fccf..0000000000000000000000000000000000000000 |
--- a/ash/shelf/app_list_button.cc |
+++ /dev/null |
@@ -1,294 +0,0 @@ |
-// Copyright 2014 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/shelf/app_list_button.h" |
- |
-#include "ash/common/ash_constants.h" |
-#include "ash/common/material_design/material_design_controller.h" |
-#include "ash/common/shelf/ink_drop_button_listener.h" |
-#include "ash/common/shelf/shelf_constants.h" |
-#include "ash/common/shelf/shelf_item_types.h" |
-#include "ash/common/shelf/shelf_types.h" |
-#include "ash/common/shelf/wm_shelf_util.h" |
-#include "ash/shelf/shelf_layout_manager.h" |
-#include "ash/shelf/shelf_view.h" |
-#include "ash/shelf/shelf_widget.h" |
-#include "ash/shell.h" |
-#include "base/command_line.h" |
-#include "grit/ash_resources.h" |
-#include "grit/ash_strings.h" |
-#include "ui/accessibility/ax_view_state.h" |
-#include "ui/app_list/app_list_switches.h" |
-#include "ui/base/l10n/l10n_util.h" |
-#include "ui/base/resource/resource_bundle.h" |
-#include "ui/base/ui_base_switches_util.h" |
-#include "ui/gfx/canvas.h" |
-#include "ui/gfx/paint_vector_icon.h" |
-#include "ui/gfx/vector_icons_public.h" |
-#include "ui/views/animation/square_ink_drop_ripple.h" |
-#include "ui/views/painter.h" |
- |
-namespace ash { |
- |
-AppListButton::AppListButton(InkDropButtonListener* listener, |
- ShelfView* shelf_view) |
- : views::ImageButton(nullptr), |
- draw_background_as_active_(false), |
- listener_(listener), |
- shelf_view_(shelf_view) { |
- if (ash::MaterialDesignController::IsShelfMaterial()) { |
- SetInkDropMode(InkDropMode::ON_NO_GESTURE_HANDLER); |
- set_ink_drop_base_color(kShelfInkDropBaseColor); |
- set_ink_drop_visible_opacity(kShelfInkDropVisibleOpacity); |
- } |
- SetAccessibleName( |
- app_list::switches::IsExperimentalAppListEnabled() |
- ? l10n_util::GetStringUTF16(IDS_ASH_SHELF_APP_LIST_LAUNCHER_TITLE) |
- : l10n_util::GetStringUTF16(IDS_ASH_SHELF_APP_LIST_TITLE)); |
- SetSize( |
- gfx::Size(GetShelfConstant(SHELF_SIZE), GetShelfConstant(SHELF_SIZE))); |
- SetFocusPainter(views::Painter::CreateSolidFocusPainter( |
- kFocusBorderColor, gfx::Insets(1, 1, 1, 1))); |
- set_notify_action(CustomButton::NOTIFY_ON_PRESS); |
-} |
- |
-AppListButton::~AppListButton() {} |
- |
-void AppListButton::OnAppListShown() { |
- if (ash::MaterialDesignController::IsShelfMaterial()) |
- AnimateInkDrop(views::InkDropState::ACTIVATED, nullptr); |
- else |
- SchedulePaint(); |
-} |
- |
-void AppListButton::OnAppListDismissed() { |
- if (ash::MaterialDesignController::IsShelfMaterial()) |
- AnimateInkDrop(views::InkDropState::DEACTIVATED, nullptr); |
- else |
- SchedulePaint(); |
-} |
- |
-bool AppListButton::OnMousePressed(const ui::MouseEvent& event) { |
- ImageButton::OnMousePressed(event); |
- shelf_view_->PointerPressedOnButton(this, ShelfView::MOUSE, event); |
- return true; |
-} |
- |
-void AppListButton::OnMouseReleased(const ui::MouseEvent& event) { |
- ImageButton::OnMouseReleased(event); |
- shelf_view_->PointerReleasedOnButton(this, ShelfView::MOUSE, false); |
-} |
- |
-void AppListButton::OnMouseCaptureLost() { |
- shelf_view_->PointerReleasedOnButton(this, ShelfView::MOUSE, true); |
- ImageButton::OnMouseCaptureLost(); |
-} |
- |
-bool AppListButton::OnMouseDragged(const ui::MouseEvent& event) { |
- ImageButton::OnMouseDragged(event); |
- shelf_view_->PointerDraggedOnButton(this, ShelfView::MOUSE, event); |
- return true; |
-} |
- |
-void AppListButton::OnGestureEvent(ui::GestureEvent* event) { |
- const bool is_material = ash::MaterialDesignController::IsShelfMaterial(); |
- const bool touch_feedback = |
- !is_material && switches::IsTouchFeedbackEnabled(); |
- switch (event->type()) { |
- case ui::ET_GESTURE_SCROLL_BEGIN: |
- if (touch_feedback) |
- SetDrawBackgroundAsActive(false); |
- else if (is_material) |
- AnimateInkDrop(views::InkDropState::HIDDEN, event); |
- shelf_view_->PointerPressedOnButton(this, ShelfView::TOUCH, *event); |
- event->SetHandled(); |
- return; |
- case ui::ET_GESTURE_SCROLL_UPDATE: |
- shelf_view_->PointerDraggedOnButton(this, ShelfView::TOUCH, *event); |
- event->SetHandled(); |
- return; |
- case ui::ET_GESTURE_SCROLL_END: |
- case ui::ET_SCROLL_FLING_START: |
- shelf_view_->PointerReleasedOnButton(this, ShelfView::TOUCH, false); |
- event->SetHandled(); |
- return; |
- case ui::ET_GESTURE_TAP_DOWN: |
- if (touch_feedback) |
- SetDrawBackgroundAsActive(true); |
- else if (is_material && !Shell::GetInstance()->IsApplistVisible()) |
- AnimateInkDrop(views::InkDropState::ACTION_PENDING, event); |
- ImageButton::OnGestureEvent(event); |
- break; |
- case ui::ET_GESTURE_TAP_CANCEL: |
- case ui::ET_GESTURE_TAP: |
- if (touch_feedback) |
- SetDrawBackgroundAsActive(false); |
- ImageButton::OnGestureEvent(event); |
- break; |
- default: |
- ImageButton::OnGestureEvent(event); |
- return; |
- } |
-} |
- |
-void AppListButton::OnPaint(gfx::Canvas* canvas) { |
- // Call the base class first to paint any background/borders. |
- View::OnPaint(canvas); |
- ResourceBundle& rb = ResourceBundle::GetSharedInstance(); |
- |
- const gfx::ImageSkia& foreground_image = |
- MaterialDesignController::IsShelfMaterial() |
- ? CreateVectorIcon(gfx::VectorIconId::SHELF_APPLIST, kShelfIconColor) |
- : *rb.GetImageNamed(IDR_ASH_SHELF_ICON_APPLIST).ToImageSkia(); |
- |
- if (ash::MaterialDesignController::IsShelfMaterial()) { |
- PaintBackgroundMD(canvas); |
- PaintForegroundMD(canvas, foreground_image); |
- } else { |
- PaintAppListButton(canvas, foreground_image); |
- } |
- |
- views::Painter::PaintFocusPainter(this, canvas, focus_painter()); |
-} |
- |
-void AppListButton::PaintBackgroundMD(gfx::Canvas* canvas) { |
- SkPaint background_paint; |
- background_paint.setColor(SK_ColorTRANSPARENT); |
- background_paint.setFlags(SkPaint::kAntiAlias_Flag); |
- background_paint.setStyle(SkPaint::kFill_Style); |
- |
- const ShelfWidget* shelf_widget = shelf_view_->shelf()->shelf_widget(); |
- if (shelf_widget && |
- shelf_widget->GetBackgroundType() == |
- ShelfBackgroundType::SHELF_BACKGROUND_DEFAULT) { |
- background_paint.setColor( |
- SkColorSetA(kShelfBaseColor, GetShelfConstant(SHELF_BACKGROUND_ALPHA))); |
- } |
- |
- // Paint the circular background of AppList button. |
- gfx::Point circle_center = GetContentsBounds().CenterPoint(); |
- if (!IsHorizontalAlignment(shelf_view_->shelf()->alignment())) |
- circle_center = gfx::Point(circle_center.y(), circle_center.x()); |
- |
- canvas->DrawCircle(circle_center, kAppListButtonRadius, background_paint); |
-} |
- |
-void AppListButton::PaintForegroundMD(gfx::Canvas* canvas, |
- const gfx::ImageSkia& foreground_image) { |
- gfx::Rect foreground_bounds(foreground_image.size()); |
- gfx::Rect contents_bounds = GetContentsBounds(); |
- |
- if (IsHorizontalAlignment(shelf_view_->shelf()->alignment())) { |
- foreground_bounds.set_x( |
- (contents_bounds.width() - foreground_bounds.width()) / 2); |
- foreground_bounds.set_y( |
- (contents_bounds.height() - foreground_bounds.height()) / 2); |
- } else { |
- foreground_bounds.set_x( |
- (contents_bounds.height() - foreground_bounds.height()) / 2); |
- foreground_bounds.set_y( |
- (contents_bounds.width() - foreground_bounds.width()) / 2); |
- } |
- canvas->DrawImageInt(foreground_image, foreground_bounds.x(), |
- foreground_bounds.y()); |
-} |
- |
-void AppListButton::PaintAppListButton(gfx::Canvas* canvas, |
- const gfx::ImageSkia& foreground_image) { |
- int background_image_id = 0; |
- |
- if (Shell::GetInstance()->GetAppListTargetVisibility() || |
- draw_background_as_active_) { |
- background_image_id = IDR_AURA_NOTIFICATION_BACKGROUND_PRESSED; |
- } else { |
- if (shelf_view_->shelf()->shelf_widget()->GetDimsShelf()) { |
- background_image_id = IDR_AURA_NOTIFICATION_BACKGROUND_ON_BLACK; |
- } else { |
- background_image_id = IDR_AURA_NOTIFICATION_BACKGROUND_NORMAL; |
- } |
- } |
- |
- ResourceBundle& rb = ResourceBundle::GetSharedInstance(); |
- gfx::ImageSkia background_image = |
- *rb.GetImageNamed(background_image_id).ToImageSkia(); |
- gfx::Rect background_bounds(background_image.size()); |
- ShelfAlignment alignment = shelf_view_->shelf()->alignment(); |
- gfx::Rect contents_bounds = GetContentsBounds(); |
- |
- if (alignment == SHELF_ALIGNMENT_LEFT) { |
- background_bounds.set_x(contents_bounds.width() - kShelfItemInset - |
- background_image.width()); |
- background_bounds.set_y( |
- contents_bounds.y() + |
- (contents_bounds.height() - background_image.height()) / 2); |
- } else if (alignment == SHELF_ALIGNMENT_RIGHT) { |
- background_bounds.set_x(kShelfItemInset); |
- background_bounds.set_y( |
- contents_bounds.y() + |
- (contents_bounds.height() - background_image.height()) / 2); |
- } else { |
- background_bounds.set_y(kShelfItemInset); |
- background_bounds.set_x( |
- contents_bounds.x() + |
- (contents_bounds.width() - background_image.width()) / 2); |
- } |
- |
- canvas->DrawImageInt(background_image, background_bounds.x(), |
- background_bounds.y()); |
- gfx::Rect foreground_bounds(foreground_image.size()); |
- foreground_bounds.set_x( |
- background_bounds.x() + |
- std::max(0, (background_bounds.width() - foreground_bounds.width()) / 2)); |
- foreground_bounds.set_y( |
- background_bounds.y() + |
- std::max(0, |
- (background_bounds.height() - foreground_bounds.height()) / 2)); |
- canvas->DrawImageInt(foreground_image, foreground_bounds.x(), |
- foreground_bounds.y()); |
-} |
- |
-void AppListButton::GetAccessibleState(ui::AXViewState* state) { |
- state->role = ui::AX_ROLE_BUTTON; |
- state->name = shelf_view_->GetTitleForView(this); |
-} |
- |
-std::unique_ptr<views::InkDropRipple> AppListButton::CreateInkDropRipple() |
- const { |
- // TODO(mohsen): A circular SquareInkDropRipple is created with equal small |
- // and large sizes to mimic a circular flood fill. Replace with an actual |
- // flood fill when circular flood fills are implemented. |
- gfx::Size ripple_size(2 * kAppListButtonRadius, 2 * kAppListButtonRadius); |
- auto ink_drop_ripple = new views::SquareInkDropRipple( |
- ripple_size, 0, ripple_size, 0, GetContentsBounds().CenterPoint(), |
- GetInkDropBaseColor(), ink_drop_visible_opacity()); |
- ink_drop_ripple->set_activated_shape(views::SquareInkDropRipple::CIRCLE); |
- return base::WrapUnique(ink_drop_ripple); |
-} |
- |
-void AppListButton::NotifyClick(const ui::Event& event) { |
- ImageButton::NotifyClick(event); |
- if (listener_) |
- listener_->ButtonPressed(this, event, ink_drop()); |
-} |
- |
-bool AppListButton::ShouldEnterPushedState(const ui::Event& event) { |
- if (!shelf_view_->ShouldEventActivateButton(this, event)) |
- return false; |
- if (Shell::GetInstance()->IsApplistVisible()) |
- return false; |
- return views::ImageButton::ShouldEnterPushedState(event); |
-} |
- |
-bool AppListButton::ShouldShowInkDropHighlight() const { |
- return false; |
-} |
- |
-void AppListButton::SetDrawBackgroundAsActive(bool draw_background_as_active) { |
- if (draw_background_as_active_ == draw_background_as_active) |
- return; |
- draw_background_as_active_ = draw_background_as_active; |
- SchedulePaint(); |
-} |
- |
-} // namespace ash |