| Index: ash/display/display_configuration_controller.cc
|
| diff --git a/ash/display/display_configuration_controller.cc b/ash/display/display_configuration_controller.cc
|
| index 2cbf4759a8cab3e934a98ff669bbfccf69be873c..fb227721550a9e18ba1289b5d5613752a8c8ca7e 100644
|
| --- a/ash/display/display_configuration_controller.cc
|
| +++ b/ash/display/display_configuration_controller.cc
|
| @@ -104,11 +104,17 @@ 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 (GetCurrentScreenRotation(display_id) == rotation)
|
| + return;
|
| +
|
| + if (CanAnimateScreenRotation(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,
|
| @@ -131,6 +137,16 @@ void DisplayConfigurationController::OnDisplayConfigurationChanged() {
|
| SetThrottleTimeout(kAfterDisplayChangeThrottleTimeoutMs);
|
| }
|
|
|
| +void DisplayConfigurationController::OnEndedOrAbortedScreenRotationAnimation(
|
| + 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();
|
| + rotation_animator_map_.erase(screen_rotation_animator->display_id());
|
| +}
|
| +
|
| // Protected
|
|
|
| void DisplayConfigurationController::ResetAnimatorForTest() {
|
| @@ -170,4 +186,30 @@ void DisplayConfigurationController::SetPrimaryDisplayIdImpl(
|
| display_animator_->StartFadeInAnimation();
|
| }
|
|
|
| +bool DisplayConfigurationController::CanAnimateScreenRotation(
|
| + int64_t display_id) const {
|
| + return display_manager_->GetDisplayForId(display_id).is_valid();
|
| +}
|
| +
|
| +display::Display::Rotation
|
| +DisplayConfigurationController::GetCurrentScreenRotation(
|
| + int64_t display_id) const {
|
| + return display_manager_->GetDisplayInfo(display_id).GetActiveRotation();
|
| +}
|
| +
|
| +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->SetScreenRotationAnimatorObserver(this);
|
| + ScreenRotationAnimator* result = animator.get();
|
| + rotation_animator_map_.insert(
|
| + std::make_pair(display_id, std::move(animator)));
|
| + return result;
|
| +}
|
| +
|
| } // namespace ash
|
|
|