123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- // 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/shelf_test_api.h"
- #include "ash/public/cpp/shelf_ui_info.h"
- #include "ash/root_window_controller.h"
- #include "ash/shelf/home_button.h"
- #include "ash/shelf/hotseat_widget.h"
- #include "ash/shelf/scrollable_shelf_view.h"
- #include "ash/shelf/shelf.h"
- #include "ash/shelf/shelf_layout_manager.h"
- #include "ash/shelf/shelf_navigation_widget.h"
- #include "ash/shelf/shelf_widget.h"
- #include "ash/shell.h"
- #include "ui/compositor/layer_animator.h"
- namespace {
- ash::Shelf* GetShelf() {
- return ash::Shell::Get()->GetPrimaryRootWindowController()->shelf();
- }
- ash::ShelfWidget* GetShelfWidget() {
- return ash::Shell::GetRootWindowControllerWithDisplayId(
- display::Screen::GetScreen()->GetPrimaryDisplay().id())
- ->shelf()
- ->shelf_widget();
- }
- ash::HotseatWidget* GetHotseatWidget() {
- return GetShelfWidget()->hotseat_widget();
- }
- ash::ScrollableShelfView* GetScrollableShelfView() {
- return GetHotseatWidget()->scrollable_shelf_view();
- }
- } // namespace
- namespace ash {
- ShelfTestApi::ShelfTestApi() = default;
- ShelfTestApi::~ShelfTestApi() = default;
- bool ShelfTestApi::IsVisible() {
- return GetShelf()->shelf_layout_manager()->IsVisible();
- }
- bool ShelfTestApi::IsAlignmentBottomLocked() {
- return GetShelf()->alignment() == ShelfAlignment::kBottomLocked;
- }
- views::View* ShelfTestApi::GetHomeButton() {
- return GetShelfWidget()->navigation_widget()->GetHomeButton();
- }
- ScrollableShelfInfo ShelfTestApi::GetScrollableShelfInfoForState(
- const ShelfState& state) {
- const auto* scrollable_shelf_view = GetScrollableShelfView();
- ScrollableShelfInfo info;
- info.main_axis_offset =
- scrollable_shelf_view->CalculateMainAxisScrollDistance();
- info.page_offset = scrollable_shelf_view->CalculatePageScrollingOffsetInAbs(
- scrollable_shelf_view->layout_strategy_);
- info.left_arrow_bounds =
- scrollable_shelf_view->left_arrow()->GetBoundsInScreen();
- info.right_arrow_bounds =
- scrollable_shelf_view->right_arrow()->GetBoundsInScreen();
- info.is_animating = scrollable_shelf_view->during_scroll_animation_;
- info.is_overflow = (scrollable_shelf_view->layout_strategy_ !=
- ScrollableShelfView::kNotShowArrowButtons);
- info.is_shelf_widget_animating =
- GetShelfWidget()->GetLayer()->GetAnimator()->is_animating();
- const ShelfView* const shelf_view = scrollable_shelf_view->shelf_view_;
- for (int i : shelf_view->visible_views_indices()) {
- info.icons_bounds_in_screen.push_back(
- shelf_view->view_model()->view_at(i)->GetBoundsInScreen());
- }
- info.icons_under_animation = shelf_view->IsAnimating();
- // Calculates the target offset only when |scroll_distance| is specified.
- if (state.scroll_distance != 0.f) {
- const float target_offset =
- scrollable_shelf_view->CalculateTargetOffsetAfterScroll(
- info.main_axis_offset, state.scroll_distance);
- info.target_main_axis_offset = target_offset;
- }
- return info;
- }
- HotseatInfo ShelfTestApi::GetHotseatInfo() {
- HotseatInfo info;
- auto* hotseat_widget = GetHotseatWidget();
- info.is_animating =
- hotseat_widget->GetNativeView()->layer()->GetAnimator()->is_animating();
- info.hotseat_state = hotseat_widget->state();
- // Hotseat swipe can happen from the bottom center of the display.
- display::Display display =
- display::Screen::GetScreen()->GetDisplayNearestWindow(
- hotseat_widget->GetNativeWindow()->GetRootWindow());
- info.swipe_up.swipe_start_location = gfx::Point(
- display.bounds().CenterPoint().x(), display.bounds().bottom() - 1);
- // The swipe distance is small enough to avoid the window drag from shelf.
- const int swipe_distance = hotseat_widget->GetHotseatFullDragAmount() / 2;
- gfx::Point swipe_end_location = info.swipe_up.swipe_start_location;
- swipe_end_location.set_y(swipe_end_location.y() - swipe_distance);
- info.swipe_up.swipe_end_location = swipe_end_location;
- info.is_auto_hidden =
- GetShelf()->shelf_layout_manager()->is_shelf_auto_hidden();
- return info;
- }
- } // namespace ash
|