Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ash/common/shelf/shelf_background_animator.h" | 5 #include "ash/common/shelf/shelf_background_animator.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "ash/common/material_design/material_design_controller.h" | 9 #include "ash/common/material_design/material_design_controller.h" |
| 10 #include "ash/common/shelf/shelf_background_animator_observer.h" | 10 #include "ash/common/shelf/shelf_background_animator_observer.h" |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 43 } | 43 } |
| 44 | 44 |
| 45 void ShelfBackgroundAnimator::RemoveObserver( | 45 void ShelfBackgroundAnimator::RemoveObserver( |
| 46 ShelfBackgroundAnimatorObserver* observer) { | 46 ShelfBackgroundAnimatorObserver* observer) { |
| 47 observers_.RemoveObserver(observer); | 47 observers_.RemoveObserver(observer); |
| 48 } | 48 } |
| 49 | 49 |
| 50 void ShelfBackgroundAnimator::Initialize( | 50 void ShelfBackgroundAnimator::Initialize( |
| 51 ShelfBackgroundAnimatorObserver* observer) const { | 51 ShelfBackgroundAnimatorObserver* observer) const { |
| 52 observer->UpdateShelfOpaqueBackground(opaque_background_animator_->alpha()); | 52 observer->UpdateShelfOpaqueBackground(opaque_background_animator_->alpha()); |
| 53 observer->UpdateShelfAssetBackground(asset_background_animator_->alpha()); | |
| 54 observer->UpdateShelfItemBackground(item_background_animator_->alpha()); | 53 observer->UpdateShelfItemBackground(item_background_animator_->alpha()); |
| 55 } | 54 } |
| 56 | 55 |
| 57 void ShelfBackgroundAnimator::PaintBackground( | 56 void ShelfBackgroundAnimator::PaintBackground( |
| 58 ShelfBackgroundType background_type, | 57 ShelfBackgroundType background_type, |
| 59 BackgroundAnimatorChangeType change_type) { | 58 BackgroundAnimatorChangeType change_type) { |
| 60 if (target_background_type_ == background_type && | 59 if (target_background_type_ == background_type && |
| 61 change_type == BACKGROUND_CHANGE_ANIMATE) { | 60 change_type == BACKGROUND_CHANGE_ANIMATE) { |
| 62 return; | 61 return; |
| 63 } | 62 } |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 83 // UpdateBackground() is only called when alpha values change, this ensures | 82 // UpdateBackground() is only called when alpha values change, this ensures |
| 84 // observers are always notified for every background change. | 83 // observers are always notified for every background change. |
| 85 OnAlphaChanged(animator, animator->alpha()); | 84 OnAlphaChanged(animator, animator->alpha()); |
| 86 } | 85 } |
| 87 | 86 |
| 88 void ShelfBackgroundAnimator::OnAlphaChanged(BackgroundAnimator* animator, | 87 void ShelfBackgroundAnimator::OnAlphaChanged(BackgroundAnimator* animator, |
| 89 int alpha) { | 88 int alpha) { |
| 90 if (animator == opaque_background_animator_.get()) { | 89 if (animator == opaque_background_animator_.get()) { |
| 91 for (auto& observer : observers_) | 90 for (auto& observer : observers_) |
| 92 observer.UpdateShelfOpaqueBackground(alpha); | 91 observer.UpdateShelfOpaqueBackground(alpha); |
| 93 } else if (animator == asset_background_animator_.get()) { | |
| 94 for (auto& observer : observers_) | |
| 95 observer.UpdateShelfAssetBackground(alpha); | |
| 96 } else if (animator == item_background_animator_.get()) { | 92 } else if (animator == item_background_animator_.get()) { |
| 97 for (auto& observer : observers_) | 93 for (auto& observer : observers_) |
| 98 observer.UpdateShelfItemBackground(alpha); | 94 observer.UpdateShelfItemBackground(alpha); |
| 99 } else { | 95 } else { |
| 100 NOTREACHED(); | 96 NOTREACHED(); |
| 101 } | 97 } |
| 102 } | 98 } |
| 103 | 99 |
| 104 void ShelfBackgroundAnimator::AnimateBackground( | 100 void ShelfBackgroundAnimator::AnimateBackground( |
| 105 ShelfBackgroundType background_type, | 101 ShelfBackgroundType background_type, |
| 106 BackgroundAnimatorChangeType change_type) { | 102 BackgroundAnimatorChangeType change_type) { |
| 107 // Ensure BackgroundAnimationEnded() has been called for all the | 103 // Ensure BackgroundAnimationEnded() has been called for all the |
| 108 // BackgroundAnimators owned by this so that |successful_animator_count_| | 104 // BackgroundAnimators owned by this so that |successful_animator_count_| |
| 109 // is stable and doesn't get updated as a side effect of destroying/animating | 105 // is stable and doesn't get updated as a side effect of destroying/animating |
| 110 // the animators. | 106 // the animators. |
| 111 StopAnimators(); | 107 StopAnimators(); |
| 112 | 108 |
| 113 bool show_background = true; | 109 bool show_background = true; |
| 114 if (can_reuse_animators_ && previous_background_type_ == background_type) { | 110 if (can_reuse_animators_ && previous_background_type_ == background_type) { |
| 115 DCHECK_EQ(opaque_background_animator_->paints_background(), | 111 DCHECK_EQ(opaque_background_animator_->paints_background(), |
| 116 asset_background_animator_->paints_background()); | |
| 117 DCHECK_EQ(asset_background_animator_->paints_background(), | |
| 118 item_background_animator_->paints_background()); | 112 item_background_animator_->paints_background()); |
| 119 | 113 |
| 120 show_background = !opaque_background_animator_->paints_background(); | 114 show_background = !opaque_background_animator_->paints_background(); |
| 121 } else { | 115 } else { |
| 122 CreateAnimators(background_type, change_type); | 116 CreateAnimators(background_type, change_type); |
| 123 | 117 |
| 124 // If all the previous animators completed successfully and the animation | 118 // If all the previous animators completed successfully and the animation |
| 125 // was between 2 distinct states, then the last alpha values are valid | 119 // was between 2 distinct states, then the last alpha values are valid |
| 126 // end state values. | 120 // end state values. |
| 127 can_reuse_animators_ = target_background_type_ != background_type && | 121 can_reuse_animators_ = target_background_type_ != background_type && |
| 128 successful_animator_count_ == kNumAnimators; | 122 successful_animator_count_ == kNumAnimators; |
| 129 } | 123 } |
| 130 | 124 |
| 131 successful_animator_count_ = 0; | 125 successful_animator_count_ = 0; |
| 132 | 126 |
| 133 opaque_background_animator_->SetPaintsBackground(show_background, | 127 opaque_background_animator_->SetPaintsBackground(show_background, |
| 134 change_type); | 128 change_type); |
| 135 asset_background_animator_->SetPaintsBackground(show_background, change_type); | |
| 136 item_background_animator_->SetPaintsBackground(show_background, change_type); | 129 item_background_animator_->SetPaintsBackground(show_background, change_type); |
| 137 | 130 |
| 138 if (target_background_type_ != background_type) { | 131 if (target_background_type_ != background_type) { |
| 139 previous_background_type_ = target_background_type_; | 132 previous_background_type_ = target_background_type_; |
| 140 target_background_type_ = background_type; | 133 target_background_type_ = background_type; |
| 141 } | 134 } |
| 142 } | 135 } |
| 143 | 136 |
| 144 void ShelfBackgroundAnimator::CreateAnimators( | 137 void ShelfBackgroundAnimator::CreateAnimators( |
| 145 ShelfBackgroundType background_type, | 138 ShelfBackgroundType background_type, |
| 146 BackgroundAnimatorChangeType change_type) { | 139 BackgroundAnimatorChangeType change_type) { |
| 147 const int opaque_background_alpha = | 140 const int opaque_background_alpha = |
| 148 opaque_background_animator_ ? opaque_background_animator_->alpha() : 0; | 141 opaque_background_animator_ ? opaque_background_animator_->alpha() : 0; |
| 149 const int asset_background_alpha = | |
| 150 asset_background_animator_ ? asset_background_animator_->alpha() : 0; | |
| 151 const int item_background_alpha = | 142 const int item_background_alpha = |
| 152 item_background_animator_ ? item_background_animator_->alpha() : 0; | 143 item_background_animator_ ? item_background_animator_->alpha() : 0; |
| 153 | 144 |
| 154 const bool is_material = MaterialDesignController::IsShelfMaterial(); | 145 const bool is_material = MaterialDesignController::IsShelfMaterial(); |
|
James Cook
2017/02/07 23:50:16
Should this be removed?
bruthig
2017/02/08 21:05:29
Done.
| |
| 155 int duration_ms = 0; | 146 int duration_ms = 0; |
| 156 | 147 |
| 157 switch (background_type) { | 148 switch (background_type) { |
| 158 case SHELF_BACKGROUND_DEFAULT: | 149 case SHELF_BACKGROUND_DEFAULT: |
| 159 duration_ms = is_material ? 500 : 1000; | 150 duration_ms = is_material ? 500 : 1000; |
| 160 opaque_background_animator_.reset( | 151 opaque_background_animator_.reset( |
| 161 new BackgroundAnimator(this, opaque_background_alpha, 0)); | 152 new BackgroundAnimator(this, opaque_background_alpha, 0)); |
| 162 asset_background_animator_.reset( | |
| 163 new BackgroundAnimator(this, asset_background_alpha, 0)); | |
| 164 item_background_animator_.reset( | 153 item_background_animator_.reset( |
| 165 new BackgroundAnimator(this, item_background_alpha, | 154 new BackgroundAnimator(this, item_background_alpha, |
| 166 GetShelfConstant(SHELF_BACKGROUND_ALPHA))); | 155 GetShelfConstant(SHELF_BACKGROUND_ALPHA))); |
| 167 break; | 156 break; |
| 168 case SHELF_BACKGROUND_OVERLAP: | 157 case SHELF_BACKGROUND_OVERLAP: |
| 169 duration_ms = is_material ? 500 : 1000; | 158 duration_ms = is_material ? 500 : 1000; |
| 170 opaque_background_animator_.reset(new BackgroundAnimator( | 159 opaque_background_animator_.reset(new BackgroundAnimator( |
| 171 this, opaque_background_alpha, | 160 this, opaque_background_alpha, |
| 172 is_material ? GetShelfConstant(SHELF_BACKGROUND_ALPHA) : 0)); | 161 is_material ? GetShelfConstant(SHELF_BACKGROUND_ALPHA) : 0)); |
| 173 asset_background_animator_.reset(new BackgroundAnimator( | |
| 174 this, asset_background_alpha, | |
| 175 is_material ? 0 : GetShelfConstant(SHELF_BACKGROUND_ALPHA))); | |
| 176 item_background_animator_.reset(new BackgroundAnimator( | 162 item_background_animator_.reset(new BackgroundAnimator( |
| 177 this, item_background_alpha, | 163 this, item_background_alpha, |
| 178 is_material ? 0 : GetShelfConstant(SHELF_BACKGROUND_ALPHA))); | 164 is_material ? 0 : GetShelfConstant(SHELF_BACKGROUND_ALPHA))); |
| 179 break; | 165 break; |
| 180 case SHELF_BACKGROUND_MAXIMIZED: | 166 case SHELF_BACKGROUND_MAXIMIZED: |
| 181 duration_ms = is_material ? 250 : 1000; | 167 duration_ms = is_material ? 250 : 1000; |
| 182 opaque_background_animator_.reset( | 168 opaque_background_animator_.reset( |
| 183 new BackgroundAnimator(this, opaque_background_alpha, kMaxAlpha)); | 169 new BackgroundAnimator(this, opaque_background_alpha, kMaxAlpha)); |
| 184 asset_background_animator_.reset(new BackgroundAnimator( | |
| 185 this, asset_background_alpha, | |
| 186 is_material ? 0 : GetShelfConstant(SHELF_BACKGROUND_ALPHA))); | |
| 187 item_background_animator_.reset(new BackgroundAnimator( | 170 item_background_animator_.reset(new BackgroundAnimator( |
| 188 this, item_background_alpha, is_material ? 0 : kMaxAlpha)); | 171 this, item_background_alpha, is_material ? 0 : kMaxAlpha)); |
| 189 break; | 172 break; |
| 190 } | 173 } |
| 191 | 174 |
| 192 opaque_background_animator_->SetDuration(duration_ms); | 175 opaque_background_animator_->SetDuration(duration_ms); |
| 193 asset_background_animator_->SetDuration(duration_ms); | |
| 194 item_background_animator_->SetDuration(duration_ms); | 176 item_background_animator_->SetDuration(duration_ms); |
| 195 } | 177 } |
| 196 | 178 |
| 197 void ShelfBackgroundAnimator::StopAnimators() { | 179 void ShelfBackgroundAnimator::StopAnimators() { |
| 198 if (opaque_background_animator_) | 180 if (opaque_background_animator_) |
| 199 opaque_background_animator_->Stop(); | 181 opaque_background_animator_->Stop(); |
| 200 if (asset_background_animator_) | |
| 201 asset_background_animator_->Stop(); | |
| 202 if (item_background_animator_) | 182 if (item_background_animator_) |
| 203 item_background_animator_->Stop(); | 183 item_background_animator_->Stop(); |
| 204 } | 184 } |
| 205 | 185 |
| 206 } // namespace ash | 186 } // namespace ash |
| OLD | NEW |