910e62b5创建于 1月15日历史提交
// Copyright 2022 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/tab_slot_animation_delegate.h"

TabSlotAnimationDelegate::TabSlotAnimationDelegate(TabContainer* tab_container,
                                                   TabSlotView* slot_view)
    : tab_container_(tab_container), slot_view_(slot_view) {
  slot_view_->set_animating(true);
  view_observation_.Observe(slot_view);
}

TabSlotAnimationDelegate::~TabSlotAnimationDelegate() = default;

void TabSlotAnimationDelegate::AnimationProgressed(
    const gfx::Animation* animation) {
  tab_container_->OnTabSlotAnimationProgressed(slot_view_);
}

void TabSlotAnimationDelegate::AnimationEnded(const gfx::Animation* animation) {
  if (slot_view_) {
    slot_view_->set_animating(false);
  }
  AnimationProgressed(animation);
  if (slot_view_) {
    slot_view_->DeprecatedLayoutImmediately();
  }
}

void TabSlotAnimationDelegate::AnimationCanceled(
    const gfx::Animation* animation) {
  AnimationEnded(animation);
}

void TabSlotAnimationDelegate::OnViewIsDeleting(views::View* observed_view) {
  // In some cases animations can end after a view is deleted. When the view
  // is deleted, the animation stops tracking it, and will not Layout on
  // completion.
  CHECK_EQ(slot_view_, observed_view);
  slot_view_ = nullptr;
}

void TabSlotAnimationDelegate::StopObserving() {
  view_observation_.Reset();
}