blob: 814130f14607454c4db7abe39a8ee680eb47619f [file] [log] [blame]
// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ui/views/view_shadow.h"
#include "ui/compositor/layer.h"
#include "ui/compositor_extra/shadow.h"
#include "ui/views/view.h"
#include "ui/views/view_class_properties.h"
namespace views {
ViewShadow::ViewShadow(View* view, int elevation)
: view_(view), shadow_(std::make_unique<ui::Shadow>()) {
if (!view_->layer()) {
view_->SetPaintToLayer();
}
shadow_->Init(elevation);
view_->AddLayerToRegion(shadow_->layer(), LayerRegion::kBelow);
shadow_->SetContentBounds(view_->layer()->bounds());
view_observation_.Observe(view_);
shadow_observation_.Observe(shadow_.get());
}
ViewShadow::~ViewShadow() {
if (view_) {
OnViewIsDeleting(view_);
}
}
void ViewShadow::SetRoundedCornerRadius(int corner_radius) {
shadow_->SetRoundedCornerRadius(corner_radius);
}
void ViewShadow::OnLayerRecreated(ui::Layer* old_layer) {
if (!view_) {
return;
}
view_->RemoveLayerFromRegionsKeepInLayerTree(old_layer);
view_->AddLayerToRegion(shadow_->layer(), LayerRegion::kBelow);
}
void ViewShadow::OnViewLayerBoundsSet(View* view) {
shadow_->SetContentBounds(view->layer()->bounds());
}
void ViewShadow::OnViewIsDeleting(View* view) {
shadow_observation_.Reset();
shadow_.reset();
view_observation_.Reset();
view_ = nullptr;
}
} // namespace views