| Index: ash/display/display_configuration_controller.cc
|
| diff --git a/ash/display/display_configuration_controller.cc b/ash/display/display_configuration_controller.cc
|
| index 6a3aa8ace29bb0505a17ffe5c020cea8fa5d6107..78cc055b29ddc29d4aa1f8d8df3e7af12866f233 100644
|
| --- a/ash/display/display_configuration_controller.cc
|
| +++ b/ash/display/display_configuration_controller.cc
|
| @@ -100,11 +100,18 @@ void DisplayConfigurationController::SetDisplayRotation(
|
| int64_t display_id,
|
| display::Display::Rotation rotation,
|
| display::Display::RotationSource source) {
|
| - ash::ScreenRotationAnimator screen_rotation_animator(display_id);
|
| - if (screen_rotation_animator.CanAnimate())
|
| - screen_rotation_animator.Rotate(rotation, source);
|
| - else
|
| + if (display_manager_->GetDisplayInfo(display_id).GetActiveRotation() ==
|
| + rotation)
|
| + return;
|
| +
|
| + if (display_manager_->IsDisplayIdValid(display_id)) {
|
| + ScreenRotationAnimator* screen_rotation_animator =
|
| + GetScreenRotationAnimatorForDisplay(display_id);
|
| + screen_rotation_animator->Rotate(rotation, source);
|
| + } else {
|
| + DCHECK(!rotation_animator_map_.count(display_id));
|
| display_manager_->SetDisplayRotation(display_id, rotation, source);
|
| + }
|
| }
|
|
|
| void DisplayConfigurationController::SetPrimaryDisplayId(int64_t display_id) {
|
| @@ -126,6 +133,16 @@ void DisplayConfigurationController::OnDisplayConfigurationChanged() {
|
| SetThrottleTimeout(kAfterDisplayChangeThrottleTimeoutMs);
|
| }
|
|
|
| +void DisplayConfigurationController::OnScreenRotationAnimationFinished(
|
| + ScreenRotationAnimator* screen_rotation_animator) {
|
| + const int64_t display_id = screen_rotation_animator->display_id();
|
| +
|
| + DCHECK(rotation_animator_map_.count(display_id));
|
| +
|
| + screen_rotation_animator->RemoveScreenRotationAnimatorObserver(this);
|
| + rotation_animator_map_.erase(screen_rotation_animator->display_id());
|
| +}
|
| +
|
| // Protected
|
|
|
| void DisplayConfigurationController::ResetAnimatorForTest() {
|
| @@ -165,4 +182,19 @@ void DisplayConfigurationController::SetPrimaryDisplayIdImpl(
|
| display_animator_->StartFadeInAnimation();
|
| }
|
|
|
| +ScreenRotationAnimator*
|
| +DisplayConfigurationController::GetScreenRotationAnimatorForDisplay(
|
| + int64_t display_id) {
|
| + auto iter = rotation_animator_map_.find(display_id);
|
| + if (iter != rotation_animator_map_.end())
|
| + return iter->second.get();
|
| +
|
| + auto animator = base::MakeUnique<ScreenRotationAnimator>(display_id);
|
| + animator->AddScreenRotationAnimatorObserver(this);
|
| + ScreenRotationAnimator* result = animator.get();
|
| + rotation_animator_map_.insert(
|
| + std::make_pair(display_id, std::move(animator)));
|
| + return result;
|
| +}
|
| +
|
| } // namespace ash
|
|
|