Chromium Code Reviews| 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..094440771c743621371beb472081d25f6c537299 100644 |
| --- a/ash/display/display_configuration_controller.cc |
| +++ b/ash/display/display_configuration_controller.cc |
| @@ -100,11 +100,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) { |
| @@ -126,6 +132,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() { |
| @@ -165,4 +181,30 @@ void DisplayConfigurationController::SetPrimaryDisplayIdImpl( |
| display_animator_->StartFadeInAnimation(); |
| } |
| +bool DisplayConfigurationController::CanAnimateScreenRotation( |
|
oshima
2017/03/16 20:13:09
instead of defining a method here, can you add IsA
wutao
2017/03/17 00:01:03
Done, name it IsDisplayValid(display_id)
Is there
|
| + 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(); |
|
oshima
2017/03/16 20:13:09
inline this
wutao
2017/03/17 00:01:03
Done.
|
| +} |
| + |
| +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 |