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

Unified Diff: ash/shelf/shelf_tooltip_manager.cc

Issue 2176813002: mash: Migrate ShelfTooltipManager to wm common types. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update comment. Created 4 years, 5 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_tooltip_manager.h ('k') | ash/shelf/shelf_tooltip_manager_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ash/shelf/shelf_tooltip_manager.cc
diff --git a/ash/shelf/shelf_tooltip_manager.cc b/ash/shelf/shelf_tooltip_manager.cc
deleted file mode 100644
index 7dd755a4436ca37a608a581db39f52997172d60e..0000000000000000000000000000000000000000
--- a/ash/shelf/shelf_tooltip_manager.cc
+++ /dev/null
@@ -1,278 +0,0 @@
-// Copyright 2013 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/shelf_tooltip_manager.h"
-
-#include "ash/common/shell_window_ids.h"
-#include "ash/shelf/shelf.h"
-#include "ash/shelf/shelf_layout_manager.h"
-#include "ash/shelf/shelf_view.h"
-#include "ash/shell.h"
-#include "ash/wm/window_animations.h"
-#include "base/bind.h"
-#include "base/strings/string16.h"
-#include "base/threading/thread_task_runner_handle.h"
-#include "base/time/time.h"
-#include "ui/aura/window.h"
-#include "ui/events/event.h"
-#include "ui/events/event_constants.h"
-#include "ui/gfx/geometry/insets.h"
-#include "ui/views/bubble/bubble_dialog_delegate.h"
-#include "ui/views/controls/label.h"
-#include "ui/views/layout/fill_layout.h"
-#include "ui/views/widget/widget.h"
-#include "ui/wm/core/window_animations.h"
-
-namespace ash {
-namespace {
-
-const int kTooltipAppearanceDelay = 1000; // msec
-
-// Tooltip layout constants.
-
-// Shelf item tooltip height.
-const int kTooltipHeight = 24;
-
-// The maximum width of the tooltip bubble. Borrowed the value from
-// ash/tooltip/tooltip_controller.cc
-const int kTooltipMaxWidth = 250;
-
-// Shelf item tooltip internal text margins.
-const int kTooltipTopBottomMargin = 4;
-const int kTooltipLeftRightMargin = 8;
-
-// The offset for the tooltip bubble - making sure that the bubble is spaced
-// with a fixed gap. The gap is accounted for by the transparent arrow in the
-// bubble and an additional 1px padding for the shelf item views.
-const int kArrowTopBottomOffset = 1;
-const int kArrowLeftRightOffset = 1;
-
-// Tooltip's border interior thickness that defines its minimum height.
-const int kBorderInteriorThickness = kTooltipHeight / 2;
-
-} // namespace
-
-// The implementation of tooltip of the launcher.
-class ShelfTooltipManager::ShelfTooltipBubble
- : public views::BubbleDialogDelegateView {
- public:
- ShelfTooltipBubble(views::View* anchor,
- views::BubbleBorder::Arrow arrow,
- const base::string16& text)
- : views::BubbleDialogDelegateView(anchor, arrow) {
- gfx::Insets insets(kArrowTopBottomOffset, kArrowLeftRightOffset);
- // Adjust the anchor location for asymmetrical borders of shelf item.
- if (anchor->border())
- insets += anchor->border()->GetInsets();
-
- set_anchor_view_insets(insets);
- set_close_on_deactivate(false);
- set_can_activate(false);
- set_accept_events(false);
- set_margins(gfx::Insets(kTooltipTopBottomMargin, kTooltipLeftRightMargin));
- set_shadow(views::BubbleBorder::NO_ASSETS);
- SetLayoutManager(new views::FillLayout());
- // The anchor may not have the widget in tests.
- if (anchor->GetWidget() && anchor->GetWidget()->GetNativeWindow()) {
- set_parent_window(ash::Shell::GetContainer(
- anchor->GetWidget()->GetNativeWindow()->GetRootWindow(),
- ash::kShellWindowId_SettingBubbleContainer));
- }
- views::Label* label = new views::Label(text);
- label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
- ui::NativeTheme* theme = anchor->GetWidget()->GetNativeTheme();
- label->SetEnabledColor(
- theme->GetSystemColor(ui::NativeTheme::kColorId_TooltipText));
- SkColor background_color =
- theme->GetSystemColor(ui::NativeTheme::kColorId_TooltipBackground);
- set_color(background_color);
- label->SetBackgroundColor(background_color);
- AddChildView(label);
- views::BubbleDialogDelegateView::CreateBubble(this);
- // The bubble border has its own background so the background created by the
- // BubbleDialogDelegateView is redundant and would cause extra opacity.
- set_background(nullptr);
- SetArrowPaintType(views::BubbleBorder::PAINT_TRANSPARENT);
- SetBorderInteriorThickness(kBorderInteriorThickness);
- }
-
- private:
- // BubbleDialogDelegateView overrides:
- gfx::Size GetPreferredSize() const override {
- const gfx::Size size = BubbleDialogDelegateView::GetPreferredSize();
- const int kTooltipMinHeight = kTooltipHeight - 2 * kTooltipTopBottomMargin;
- return gfx::Size(std::min(size.width(), kTooltipMaxWidth),
- std::max(size.height(), kTooltipMinHeight));
- }
-
- int GetDialogButtons() const override { return ui::DIALOG_BUTTON_NONE; }
-
- DISALLOW_COPY_AND_ASSIGN(ShelfTooltipBubble);
-};
-
-ShelfTooltipManager::ShelfTooltipManager(ShelfView* shelf_view)
- : timer_delay_(kTooltipAppearanceDelay),
- shelf_view_(shelf_view),
- root_window_(nullptr),
- shelf_layout_manager_(nullptr),
- bubble_(nullptr),
- weak_factory_(this) {}
-
-ShelfTooltipManager::~ShelfTooltipManager() {
- WillDeleteShelfLayoutManager();
-
- Shell::GetInstance()->RemovePointerWatcher(this);
-
- if (root_window_) {
- root_window_->RemoveObserver(this);
- root_window_->RemovePreTargetHandler(this);
- root_window_ = nullptr;
- }
-}
-
-void ShelfTooltipManager::Init() {
- shelf_layout_manager_ = shelf_view_->shelf()->shelf_layout_manager();
- shelf_layout_manager_->AddObserver(this);
-
- root_window_ = shelf_view_->GetWidget()->GetNativeWindow()->GetRootWindow();
- root_window_->AddPreTargetHandler(this);
- root_window_->AddObserver(this);
-
- Shell::GetInstance()->AddPointerWatcher(this);
-}
-
-void ShelfTooltipManager::Close() {
- timer_.Stop();
- if (bubble_)
- bubble_->GetWidget()->Close();
- bubble_ = nullptr;
-}
-
-bool ShelfTooltipManager::IsVisible() const {
- return bubble_ && bubble_->GetWidget()->IsVisible();
-}
-
-views::View* ShelfTooltipManager::GetCurrentAnchorView() const {
- return bubble_ ? bubble_->GetAnchorView() : nullptr;
-}
-
-void ShelfTooltipManager::ShowTooltip(views::View* view) {
- timer_.Stop();
- if (bubble_) {
- // Cancel the hiding animation to hide the old bubble immediately.
- gfx::NativeView native_view = bubble_->GetWidget()->GetNativeView();
- ::wm::SetWindowVisibilityAnimationTransition(native_view,
- ::wm::ANIMATE_NONE);
- Close();
- }
-
- if (!ShouldShowTooltipForView(view))
- return;
-
- Shelf* shelf = shelf_view_->shelf();
- views::BubbleBorder::Arrow arrow = shelf->SelectValueForShelfAlignment(
- views::BubbleBorder::BOTTOM_CENTER, views::BubbleBorder::LEFT_CENTER,
- views::BubbleBorder::RIGHT_CENTER);
-
- base::string16 text = shelf_view_->GetTitleForView(view);
- bubble_ = new ShelfTooltipBubble(view, arrow, text);
- gfx::NativeView native_view = bubble_->GetWidget()->GetNativeView();
- ::wm::SetWindowVisibilityAnimationType(
- native_view, ::wm::WINDOW_VISIBILITY_ANIMATION_TYPE_VERTICAL);
- ::wm::SetWindowVisibilityAnimationTransition(native_view, ::wm::ANIMATE_HIDE);
- bubble_->GetWidget()->Show();
-}
-
-void ShelfTooltipManager::ShowTooltipWithDelay(views::View* view) {
- if (ShouldShowTooltipForView(view)) {
- timer_.Start(FROM_HERE, base::TimeDelta::FromMilliseconds(timer_delay_),
- base::Bind(&ShelfTooltipManager::ShowTooltip,
- weak_factory_.GetWeakPtr(), view));
- }
-}
-
-void ShelfTooltipManager::OnMousePressed(const ui::MouseEvent& event,
- const gfx::Point& location_in_screen,
- views::Widget* target) {
- // Close on any mouse press events inside or outside the tooltip.
- Close();
-}
-
-void ShelfTooltipManager::OnTouchPressed(const ui::TouchEvent& event,
- const gfx::Point& location_in_screen,
- views::Widget* target) {
- // Close on any touch press events inside or outside the tooltip.
- Close();
-}
-
-void ShelfTooltipManager::OnEvent(ui::Event* event) {
- // Mouse and touch press events are handled via views::PointerWatcher.
- if (event->type() == ui::ET_MOUSE_PRESSED ||
- event->type() == ui::ET_TOUCH_PRESSED) {
- return;
- }
-
- if (event->type() == ui::ET_MOUSE_EXITED || !event->IsMouseEvent() ||
- event->target() != shelf_view_->GetWidget()->GetNativeWindow()) {
- if (!event->IsKeyEvent())
- Close();
- return;
- }
-
- gfx::Point point = static_cast<ui::LocatedEvent*>(event)->location();
- aura::Window::ConvertPointToTarget(
- static_cast<aura::Window*>(event->target()),
- shelf_view_->GetWidget()->GetNativeWindow(), &point);
- views::View::ConvertPointFromWidget(shelf_view_, &point);
- views::View* view = shelf_view_->GetTooltipHandlerForPoint(point);
- const bool should_show = ShouldShowTooltipForView(view);
-
- timer_.Stop();
- if (IsVisible() && should_show && bubble_->GetAnchorView() != view)
- ShowTooltip(view);
- else if (!IsVisible() && should_show && event->type() == ui::ET_MOUSE_MOVED)
- ShowTooltipWithDelay(view);
- else if (IsVisible() && shelf_view_->ShouldHideTooltip(point))
- Close();
-}
-
-void ShelfTooltipManager::OnWindowDestroying(aura::Window* window) {
- if (window == root_window_) {
- root_window_->RemoveObserver(this);
- root_window_->RemovePreTargetHandler(this);
- root_window_ = nullptr;
- }
-}
-
-void ShelfTooltipManager::WillDeleteShelfLayoutManager() {
- if (shelf_layout_manager_)
- shelf_layout_manager_->RemoveObserver(this);
- shelf_layout_manager_ = nullptr;
- shelf_view_ = nullptr;
-}
-
-void ShelfTooltipManager::WillChangeVisibilityState(
- ShelfVisibilityState new_state) {
- if (new_state == SHELF_HIDDEN)
- Close();
-}
-
-void ShelfTooltipManager::OnAutoHideStateChanged(ShelfAutoHideState new_state) {
- if (new_state == SHELF_AUTO_HIDE_HIDDEN) {
- timer_.Stop();
- // AutoHide state change happens during an event filter, so immediate close
- // may cause a crash in the HandleMouseEvent() after the filter. So we just
- // schedule the Close here.
- base::ThreadTaskRunnerHandle::Get()->PostTask(
- FROM_HERE,
- base::Bind(&ShelfTooltipManager::Close, weak_factory_.GetWeakPtr()));
- }
-}
-
-bool ShelfTooltipManager::ShouldShowTooltipForView(views::View* view) {
- return shelf_view_ && shelf_view_->ShouldShowTooltipForView(view) &&
- shelf_layout_manager_ && shelf_layout_manager_->IsVisible();
-}
-
-} // namespace ash
« no previous file with comments | « ash/shelf/shelf_tooltip_manager.h ('k') | ash/shelf/shelf_tooltip_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698