blob: 13a853f1aa0674920df8169a0eb4ace093197eb5 [file] [log] [blame]
Avi Drissman3a215d1e2022-09-07 19:43:091// Copyright 2019 The Chromium Authors
Andrew Xu8a2a7bb2019-08-15 00:08:242// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "ash/shelf/shelf_container_view.h"
6
Matthew Mourgos75327562019-09-09 21:23:577#include "ash/public/cpp/shelf_config.h"
Lei Zhang0c043322021-04-27 16:43:058#include "ui/compositor/layer.h"
Andrew Xu8a2a7bb2019-08-15 00:08:249
10namespace ash {
11
12ShelfContainerView::ShelfContainerView(ShelfView* shelf_view)
13 : shelf_view_(shelf_view) {}
14
15ShelfContainerView::~ShelfContainerView() = default;
16
17void ShelfContainerView::Initialize() {
Mitsuru Oshimad1a016a2020-03-10 04:49:3818 SetPaintToLayer(ui::LAYER_NOT_DRAWN);
Andrew Xu8a2a7bb2019-08-15 00:08:2419 layer()->SetFillsBoundsOpaquely(false);
20 layer()->SetMasksToBounds(true);
21
Mitsuru Oshimad1a016a2020-03-10 04:49:3822 shelf_view_->SetPaintToLayer(ui::LAYER_NOT_DRAWN);
Andrew Xu8a2a7bb2019-08-15 00:08:2423 shelf_view_->layer()->SetFillsBoundsOpaquely(false);
Arthur Sonzogni834e018f2023-04-22 10:20:0224 AddChildView(shelf_view_.get());
Andrew Xu8a2a7bb2019-08-15 00:08:2425}
26
Andrew Xudfea91b92020-05-12 19:03:4627gfx::Size ShelfContainerView::CalculateIdealSize(int button_size) const {
Avery Musbachc459c542022-10-07 04:07:4528 const int button_strip_size = shelf_view_->GetSizeOfAppButtons(
Andrew Xua9865d72020-06-04 20:30:5329 shelf_view_->number_of_visible_apps(), button_size);
Andrew Xudfea91b92020-05-12 19:03:4630 return shelf_view_->shelf()->IsHorizontalAlignment()
31 ? gfx::Size(button_strip_size, button_size)
32 : gfx::Size(button_size, button_strip_size);
33}
34
Andrew Xu8a2a7bb2019-08-15 00:08:2435gfx::Size ShelfContainerView::CalculatePreferredSize() const {
Andrew Xudfea91b92020-05-12 19:03:4636 return CalculateIdealSize(shelf_view_->GetButtonSize());
Andrew Xu8a2a7bb2019-08-15 00:08:2437}
38
39void ShelfContainerView::ChildPreferredSizeChanged(views::View* child) {
Andrew Xub1faf0c2019-11-19 00:27:1440 // The CL (https://crrev.com/c/1876128) modifies View::PreferredSizeChanged
41 // by moving InvalidateLayout() after ChildPreferredSizeChanged(). Meanwhile,
42 // the parent view of ShelfContainerView overrides ChildPreferredSizeChanged
43 // with calling Layout(). Due to the CL above, ShelfContainerView is not
44 // labeled as |needs_layout_| when the parent view updates the layout. As a
45 // result, Calling Layout() in the parent view may not trigger the update in
46 // child view. So we have to invalidate the layout here explicitly.
47 InvalidateLayout();
48
Andrew Xu8a2a7bb2019-08-15 00:08:2449 PreferredSizeChanged();
50}
51
Andrew Xu8a2a7bb2019-08-15 00:08:2452const char* ShelfContainerView::GetClassName() const {
53 return "ShelfContainerView";
54}
55
56void ShelfContainerView::TranslateShelfView(const gfx::Vector2dF& offset) {
57 gfx::Transform transform_matrix;
58 transform_matrix.Translate(-offset);
59 shelf_view_->SetTransform(transform_matrix);
Andrew Xu5ca25012019-11-01 20:48:3960 shelf_view_->NotifyAccessibilityEvent(ax::mojom::Event::kLocationChanged,
61 true);
Andrew Xu8a2a7bb2019-08-15 00:08:2462}
63
Andrew Xu8a2a7bb2019-08-15 00:08:2464} // namespace ash