blob: 83576560866f26d6358328021658b6efa0623070 [file] [log] [blame]
// Copyright 2019 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/public/cpp/ash_constants.h"
#include "ash/system/accessibility/autoclick_scroll_view.h"
#include "ash/system/tray/tray_bubble_view.h"
#include "ui/views/bubble/bubble_border.h"
namespace ash {
// Manages the bubble which contains an AutoclickScrollView.
class AutoclickScrollBubbleController : public TrayBubbleView::Delegate {
~AutoclickScrollBubbleController() override;
void UpdateAnchorRect(gfx::Rect rect, views::BubbleBorder::Arrow alignment);
void SetScrollPosition(gfx::Rect scroll_bounds_in_dips,
const gfx::Point& scroll_point_in_dips);
void ShowBubble(gfx::Rect anchor_rect, views::BubbleBorder::Arrow alignment);
void CloseBubble();
// Shows or hides the bubble.
void SetBubbleVisibility(bool is_visible);
// Performs the mouse events on the bubble. at the given location in DIPs.
void ClickOnBubble(gfx::Point location_in_dips, int mouse_event_flags);
// Whether the tray button or the bubble, if the bubble exists, contain
// the given screen point.
bool ContainsPointInScreen(const gfx::Point& point);
// TrayBubbleView::Delegate:
void BubbleViewDestroyed() override;
friend class AutoclickMenuBubbleControllerTest;
friend class AutoclickTest;
// Owned by views hierarchy.
AutoclickScrollBubbleView* bubble_view_ = nullptr;
AutoclickScrollView* scroll_view_ = nullptr;
views::Widget* bubble_widget_ = nullptr;
// Whether the scroll bubble should be positioned based on a fixed rect
// or just relative to the rect passed in UpdateAnchorRect.
bool set_scroll_rect_ = false;
gfx::Rect menu_bubble_rect_;
views::BubbleBorder::Arrow menu_bubble_alignment_ =
} // namespace ash