blob: a5046410ff14186d94e3f573b7b50e094dda28f2 [file]
// Copyright 2026 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ui/views/tabs/vertical/vertical_tab_strip_utils.h"
#include "chrome/browser/ui/views/tabs/vertical/tab_collection_animating_layout_manager.h"
#include "chrome/browser/ui/views/tabs/vertical/vertical_pinned_tab_container_view.h"
#include "chrome/browser/ui/views/tabs/vertical/vertical_tab_group_view.h"
#include "chrome/browser/ui/views/tabs/vertical/vertical_unpinned_tab_container_view.h"
#include "ui/views/view.h"
#include "ui/views/view_utils.h"
gfx::Rect GetVerticalTabStripViewTargetBounds(const views::View* view) {
CHECK(view);
const views::View* const parent = view->parent();
const auto has_animating_layout_manager = [](const views::View* container) {
// New clients of `TabCollectionAnimatingLayoutManager` should be added to
// this list as usage expands.
return views::IsViewClass<VerticalPinnedTabContainerView>(container) ||
views::IsViewClass<VerticalUnpinnedTabContainerView>(container) ||
views::IsViewClass<VerticalTabGroupView>(container);
};
if (!parent || !has_animating_layout_manager(parent)) {
return view->bounds();
}
const auto* const layout_manager =
static_cast<const TabCollectionAnimatingLayoutManager*>(
parent->GetLayoutManager());
CHECK(layout_manager);
const views::ChildLayout* const view_layout =
layout_manager->target_layout().GetLayoutFor(view);
return view_layout ? view_layout->bounds : view->bounds();
}