OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/wm/window_animations.h" | 5 #include "ash/wm/window_animations.h" |
6 | 6 |
7 #include <math.h> | 7 #include <math.h> |
8 #include <algorithm> | 8 #include <algorithm> |
9 #include <utility> | 9 #include <utility> |
10 #include <vector> | 10 #include <vector> |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
78 int max_area = std::max(old_area, new_area); | 78 int max_area = std::max(old_area, new_area); |
79 // Avoid divide by zero. | 79 // Avoid divide by zero. |
80 if (max_area == 0) | 80 if (max_area == 0) |
81 return base::TimeDelta::FromMilliseconds(kCrossFadeDurationMS); | 81 return base::TimeDelta::FromMilliseconds(kCrossFadeDurationMS); |
82 | 82 |
83 int delta_area = std::abs(old_area - new_area); | 83 int delta_area = std::abs(old_area - new_area); |
84 // If the area didn't change, the animation is instantaneous. | 84 // If the area didn't change, the animation is instantaneous. |
85 if (delta_area == 0) | 85 if (delta_area == 0) |
86 return base::TimeDelta::FromMilliseconds(kCrossFadeDurationMS); | 86 return base::TimeDelta::FromMilliseconds(kCrossFadeDurationMS); |
87 | 87 |
88 float factor = | 88 float factor = static_cast<float>(delta_area) / static_cast<float>(max_area); |
89 static_cast<float>(delta_area) / static_cast<float>(max_area); | |
90 const float kRange = kCrossFadeDurationMaxMs - kCrossFadeDurationMinMs; | 89 const float kRange = kCrossFadeDurationMaxMs - kCrossFadeDurationMinMs; |
91 return base::TimeDelta::FromMilliseconds( | 90 return base::TimeDelta::FromMilliseconds( |
92 Round64(kCrossFadeDurationMinMs + (factor * kRange))); | 91 Round64(kCrossFadeDurationMinMs + (factor * kRange))); |
93 } | 92 } |
94 | 93 |
95 } // namespace | 94 } // namespace |
96 | 95 |
97 const int kCrossFadeDurationMS = 200; | 96 const int kCrossFadeDurationMS = 200; |
98 | 97 |
99 void AddLayerAnimationsForMinimize(aura::Window* window, bool show) { | 98 void AddLayerAnimationsForMinimize(aura::Window* window, bool show) { |
(...skipping 11 matching lines...) Expand all Loading... |
111 gfx::Point3F(1, 1, 1), gfx::Point3F(scale_x, scale_y, 1))); | 110 gfx::Point3F(1, 1, 1), gfx::Point3F(scale_x, scale_y, 1))); |
112 | 111 |
113 std::unique_ptr<ui::InterpolatedTransform> translation( | 112 std::unique_ptr<ui::InterpolatedTransform> translation( |
114 new ui::InterpolatedTranslation( | 113 new ui::InterpolatedTranslation( |
115 gfx::PointF(), gfx::PointF(target_bounds.x() - bounds.x(), | 114 gfx::PointF(), gfx::PointF(target_bounds.x() - bounds.x(), |
116 target_bounds.y() - bounds.y()))); | 115 target_bounds.y() - bounds.y()))); |
117 | 116 |
118 scale->SetChild(translation.release()); | 117 scale->SetChild(translation.release()); |
119 scale->SetReversed(show); | 118 scale->SetReversed(show); |
120 | 119 |
121 base::TimeDelta duration = window->layer()->GetAnimator()-> | 120 base::TimeDelta duration = |
122 GetTransitionDuration(); | 121 window->layer()->GetAnimator()->GetTransitionDuration(); |
123 | 122 |
124 std::unique_ptr<ui::LayerAnimationElement> transition( | 123 std::unique_ptr<ui::LayerAnimationElement> transition( |
125 ui::LayerAnimationElement::CreateInterpolatedTransformElement( | 124 ui::LayerAnimationElement::CreateInterpolatedTransformElement( |
126 scale.release(), duration)); | 125 scale.release(), duration)); |
127 | 126 |
128 transition->set_tween_type( | 127 transition->set_tween_type(show ? gfx::Tween::EASE_IN |
129 show ? gfx::Tween::EASE_IN : gfx::Tween::EASE_IN_OUT); | 128 : gfx::Tween::EASE_IN_OUT); |
130 | 129 |
131 window->layer()->GetAnimator()->ScheduleAnimation( | 130 window->layer()->GetAnimator()->ScheduleAnimation( |
132 new ui::LayerAnimationSequence(transition.release())); | 131 new ui::LayerAnimationSequence(transition.release())); |
133 | 132 |
134 // When hiding a window, turn off blending until the animation is 3 / 4 done | 133 // When hiding a window, turn off blending until the animation is 3 / 4 done |
135 // to save bandwidth and reduce jank. | 134 // to save bandwidth and reduce jank. |
136 if (!show) { | 135 if (!show) { |
137 window->layer()->GetAnimator()->SchedulePauseForProperties( | 136 window->layer()->GetAnimator()->SchedulePauseForProperties( |
138 (duration * 3) / 4, ui::LayerAnimationElement::OPACITY); | 137 (duration * 3) / 4, ui::LayerAnimationElement::OPACITY); |
139 } | 138 } |
140 | 139 |
141 // Fade in and out quickly when the window is small to reduce jank. | 140 // Fade in and out quickly when the window is small to reduce jank. |
142 float opacity = show ? 1.0f : 0.0f; | 141 float opacity = show ? 1.0f : 0.0f; |
143 window->layer()->GetAnimator()->ScheduleAnimation( | 142 window->layer()->GetAnimator()->ScheduleAnimation( |
144 new ui::LayerAnimationSequence( | 143 new ui::LayerAnimationSequence( |
145 ui::LayerAnimationElement::CreateOpacityElement( | 144 ui::LayerAnimationElement::CreateOpacityElement(opacity, |
146 opacity, duration / 4))); | 145 duration / 4))); |
147 | 146 |
148 // Reset the transform to identity when the minimize animation is completed. | 147 // Reset the transform to identity when the minimize animation is completed. |
149 window->layer()->GetAnimator()->ScheduleAnimation( | 148 window->layer()->GetAnimator()->ScheduleAnimation( |
150 new ui::LayerAnimationSequence( | 149 new ui::LayerAnimationSequence( |
151 ui::LayerAnimationElement::CreateTransformElement( | 150 ui::LayerAnimationElement::CreateTransformElement( |
152 gfx::Transform(), | 151 gfx::Transform(), base::TimeDelta()))); |
153 base::TimeDelta()))); | |
154 } | 152 } |
155 | 153 |
156 void AnimateShowWindow_Minimize(aura::Window* window) { | 154 void AnimateShowWindow_Minimize(aura::Window* window) { |
157 window->layer()->SetOpacity(kWindowAnimation_HideOpacity); | 155 window->layer()->SetOpacity(kWindowAnimation_HideOpacity); |
158 ui::ScopedLayerAnimationSettings settings(window->layer()->GetAnimator()); | 156 ui::ScopedLayerAnimationSettings settings(window->layer()->GetAnimator()); |
159 base::TimeDelta duration = base::TimeDelta::FromMilliseconds( | 157 base::TimeDelta duration = |
160 kLayerAnimationsForMinimizeDurationMS); | 158 base::TimeDelta::FromMilliseconds(kLayerAnimationsForMinimizeDurationMS); |
161 settings.SetTransitionDuration(duration); | 159 settings.SetTransitionDuration(duration); |
162 AddLayerAnimationsForMinimize(window, true); | 160 AddLayerAnimationsForMinimize(window, true); |
163 | 161 |
164 // Now that the window has been restored, we need to clear its animation style | 162 // Now that the window has been restored, we need to clear its animation style |
165 // to default so that normal animation applies. | 163 // to default so that normal animation applies. |
166 ::wm::SetWindowVisibilityAnimationType( | 164 ::wm::SetWindowVisibilityAnimationType( |
167 window, ::wm::WINDOW_VISIBILITY_ANIMATION_TYPE_DEFAULT); | 165 window, ::wm::WINDOW_VISIBILITY_ANIMATION_TYPE_DEFAULT); |
168 } | 166 } |
169 | 167 |
170 void AnimateHideWindow_Minimize(aura::Window* window) { | 168 void AnimateHideWindow_Minimize(aura::Window* window) { |
171 // Property sets within this scope will be implicitly animated. | 169 // Property sets within this scope will be implicitly animated. |
172 ::wm::ScopedHidingAnimationSettings hiding_settings(window); | 170 ::wm::ScopedHidingAnimationSettings hiding_settings(window); |
173 base::TimeDelta duration = base::TimeDelta::FromMilliseconds( | 171 base::TimeDelta duration = |
174 kLayerAnimationsForMinimizeDurationMS); | 172 base::TimeDelta::FromMilliseconds(kLayerAnimationsForMinimizeDurationMS); |
175 hiding_settings.layer_animation_settings()->SetTransitionDuration(duration); | 173 hiding_settings.layer_animation_settings()->SetTransitionDuration(duration); |
176 window->layer()->SetVisible(false); | 174 window->layer()->SetVisible(false); |
177 | 175 |
178 AddLayerAnimationsForMinimize(window, false); | 176 AddLayerAnimationsForMinimize(window, false); |
179 } | 177 } |
180 | 178 |
181 void AnimateShowHideWindowCommon_BrightnessGrayscale(aura::Window* window, | 179 void AnimateShowHideWindowCommon_BrightnessGrayscale(aura::Window* window, |
182 bool show) { | 180 bool show) { |
183 float start_value, end_value; | 181 float start_value, end_value; |
184 if (show) { | 182 if (show) { |
185 start_value = kWindowAnimation_HideBrightnessGrayscale; | 183 start_value = kWindowAnimation_HideBrightnessGrayscale; |
186 end_value = kWindowAnimation_ShowBrightnessGrayscale; | 184 end_value = kWindowAnimation_ShowBrightnessGrayscale; |
187 } else { | 185 } else { |
188 start_value = kWindowAnimation_ShowBrightnessGrayscale; | 186 start_value = kWindowAnimation_ShowBrightnessGrayscale; |
189 end_value = kWindowAnimation_HideBrightnessGrayscale; | 187 end_value = kWindowAnimation_HideBrightnessGrayscale; |
190 } | 188 } |
191 | 189 |
192 window->layer()->SetLayerBrightness(start_value); | 190 window->layer()->SetLayerBrightness(start_value); |
193 window->layer()->SetLayerGrayscale(start_value); | 191 window->layer()->SetLayerGrayscale(start_value); |
194 if (show) { | 192 if (show) { |
195 window->layer()->SetOpacity(kWindowAnimation_ShowOpacity); | 193 window->layer()->SetOpacity(kWindowAnimation_ShowOpacity); |
196 window->layer()->SetVisible(true); | 194 window->layer()->SetVisible(true); |
197 } | 195 } |
198 | 196 |
199 base::TimeDelta duration = | 197 base::TimeDelta duration = |
200 base::TimeDelta::FromMilliseconds(kBrightnessGrayscaleFadeDurationMs); | 198 base::TimeDelta::FromMilliseconds(kBrightnessGrayscaleFadeDurationMs); |
201 | 199 |
202 if (show) { | 200 if (show) { |
203 ui::ScopedLayerAnimationSettings settings(window->layer()->GetAnimator()); | 201 ui::ScopedLayerAnimationSettings settings(window->layer()->GetAnimator()); |
204 window->layer()->GetAnimator()-> | 202 window->layer()->GetAnimator()->ScheduleTogether( |
205 ScheduleTogether( | 203 CreateBrightnessGrayscaleAnimationSequence(end_value, duration)); |
206 CreateBrightnessGrayscaleAnimationSequence(end_value, duration)); | |
207 } else { | 204 } else { |
208 ::wm::ScopedHidingAnimationSettings hiding_settings(window); | 205 ::wm::ScopedHidingAnimationSettings hiding_settings(window); |
209 window->layer()->GetAnimator()-> | 206 window->layer()->GetAnimator()->ScheduleTogether( |
210 ScheduleTogether( | 207 CreateBrightnessGrayscaleAnimationSequence(end_value, duration)); |
211 CreateBrightnessGrayscaleAnimationSequence(end_value, duration)); | |
212 window->layer()->SetOpacity(kWindowAnimation_HideOpacity); | 208 window->layer()->SetOpacity(kWindowAnimation_HideOpacity); |
213 window->layer()->SetVisible(false); | 209 window->layer()->SetVisible(false); |
214 } | 210 } |
215 } | 211 } |
216 | 212 |
217 void AnimateShowWindow_BrightnessGrayscale(aura::Window* window) { | 213 void AnimateShowWindow_BrightnessGrayscale(aura::Window* window) { |
218 AnimateShowHideWindowCommon_BrightnessGrayscale(window, true); | 214 AnimateShowHideWindowCommon_BrightnessGrayscale(window, true); |
219 } | 215 } |
220 | 216 |
221 void AnimateHideWindow_BrightnessGrayscale(aura::Window* window) { | 217 void AnimateHideWindow_BrightnessGrayscale(aura::Window* window) { |
222 AnimateShowHideWindowCommon_BrightnessGrayscale(window, false); | 218 AnimateShowHideWindowCommon_BrightnessGrayscale(window, false); |
223 } | 219 } |
224 | 220 |
225 bool AnimateShowWindow(aura::Window* window) { | 221 bool AnimateShowWindow(aura::Window* window) { |
226 if (!::wm::HasWindowVisibilityAnimationTransition( | 222 if (!::wm::HasWindowVisibilityAnimationTransition(window, |
227 window, ::wm::ANIMATE_SHOW)) { | 223 ::wm::ANIMATE_SHOW)) { |
228 return false; | 224 return false; |
229 } | 225 } |
230 | 226 |
231 switch (::wm::GetWindowVisibilityAnimationType(window)) { | 227 switch (::wm::GetWindowVisibilityAnimationType(window)) { |
232 case wm::WINDOW_VISIBILITY_ANIMATION_TYPE_MINIMIZE: | 228 case wm::WINDOW_VISIBILITY_ANIMATION_TYPE_MINIMIZE: |
233 AnimateShowWindow_Minimize(window); | 229 AnimateShowWindow_Minimize(window); |
234 return true; | 230 return true; |
235 case wm::WINDOW_VISIBILITY_ANIMATION_TYPE_BRIGHTNESS_GRAYSCALE: | 231 case wm::WINDOW_VISIBILITY_ANIMATION_TYPE_BRIGHTNESS_GRAYSCALE: |
236 AnimateShowWindow_BrightnessGrayscale(window); | 232 AnimateShowWindow_BrightnessGrayscale(window); |
237 return true; | 233 return true; |
238 default: | 234 default: |
239 NOTREACHED(); | 235 NOTREACHED(); |
240 return false; | 236 return false; |
241 } | 237 } |
242 } | 238 } |
243 | 239 |
244 bool AnimateHideWindow(aura::Window* window) { | 240 bool AnimateHideWindow(aura::Window* window) { |
245 if (!::wm::HasWindowVisibilityAnimationTransition( | 241 if (!::wm::HasWindowVisibilityAnimationTransition(window, |
246 window, ::wm::ANIMATE_HIDE)) { | 242 ::wm::ANIMATE_HIDE)) { |
247 return false; | 243 return false; |
248 } | 244 } |
249 | 245 |
250 switch (::wm::GetWindowVisibilityAnimationType(window)) { | 246 switch (::wm::GetWindowVisibilityAnimationType(window)) { |
251 case wm::WINDOW_VISIBILITY_ANIMATION_TYPE_MINIMIZE: | 247 case wm::WINDOW_VISIBILITY_ANIMATION_TYPE_MINIMIZE: |
252 AnimateHideWindow_Minimize(window); | 248 AnimateHideWindow_Minimize(window); |
253 return true; | 249 return true; |
254 case wm::WINDOW_VISIBILITY_ANIMATION_TYPE_BRIGHTNESS_GRAYSCALE: | 250 case wm::WINDOW_VISIBILITY_ANIMATION_TYPE_BRIGHTNESS_GRAYSCALE: |
255 AnimateHideWindow_BrightnessGrayscale(window); | 251 AnimateHideWindow_BrightnessGrayscale(window); |
256 return true; | 252 return true; |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
323 gfx::Transform old_transform(old_layer_owner->root()->transform()); | 319 gfx::Transform old_transform(old_layer_owner->root()->transform()); |
324 gfx::Transform old_transform_in_root; | 320 gfx::Transform old_transform_in_root; |
325 old_transform_in_root.Translate(old_bounds.x(), old_bounds.y()); | 321 old_transform_in_root.Translate(old_bounds.x(), old_bounds.y()); |
326 old_transform_in_root.PreconcatTransform(old_transform); | 322 old_transform_in_root.PreconcatTransform(old_transform); |
327 old_transform_in_root.Translate(-old_bounds.x(), -old_bounds.y()); | 323 old_transform_in_root.Translate(-old_bounds.x(), -old_bounds.y()); |
328 old_transform_in_root.TransformRect(&old_transformed_bounds); | 324 old_transform_in_root.TransformRect(&old_transformed_bounds); |
329 const gfx::Rect new_bounds(window->bounds()); | 325 const gfx::Rect new_bounds(window->bounds()); |
330 const bool old_on_top = (old_bounds.width() > new_bounds.width()); | 326 const bool old_on_top = (old_bounds.width() > new_bounds.width()); |
331 | 327 |
332 // Shorten the animation if there's not much visual movement. | 328 // Shorten the animation if there's not much visual movement. |
333 const base::TimeDelta duration = GetCrossFadeDuration(window, | 329 const base::TimeDelta duration = |
334 old_transformed_bounds, new_bounds); | 330 GetCrossFadeDuration(window, old_transformed_bounds, new_bounds); |
335 | 331 |
336 // Scale up the old layer while translating to new position. | 332 // Scale up the old layer while translating to new position. |
337 { | 333 { |
338 ui::Layer* old_layer = old_layer_owner->root(); | 334 ui::Layer* old_layer = old_layer_owner->root(); |
339 old_layer->GetAnimator()->StopAnimating(); | 335 old_layer->GetAnimator()->StopAnimating(); |
340 old_layer->SetTransform(old_transform); | 336 old_layer->SetTransform(old_transform); |
341 ui::ScopedLayerAnimationSettings settings(old_layer->GetAnimator()); | 337 ui::ScopedLayerAnimationSettings settings(old_layer->GetAnimator()); |
342 | 338 |
343 // Animation observer owns the old layer and deletes itself. | 339 // Animation observer owns the old layer and deletes itself. |
344 settings.AddObserver( | 340 settings.AddObserver( |
345 new CrossFadeObserver(window, std::move(old_layer_owner))); | 341 new CrossFadeObserver(window, std::move(old_layer_owner))); |
346 settings.SetTransitionDuration(duration); | 342 settings.SetTransitionDuration(duration); |
347 settings.SetTweenType(tween_type); | 343 settings.SetTweenType(tween_type); |
348 gfx::Transform out_transform; | 344 gfx::Transform out_transform; |
349 float scale_x = static_cast<float>(new_bounds.width()) / | 345 float scale_x = static_cast<float>(new_bounds.width()) / |
350 static_cast<float>(old_bounds.width()); | 346 static_cast<float>(old_bounds.width()); |
351 float scale_y = static_cast<float>(new_bounds.height()) / | 347 float scale_y = static_cast<float>(new_bounds.height()) / |
352 static_cast<float>(old_bounds.height()); | 348 static_cast<float>(old_bounds.height()); |
353 out_transform.Translate(new_bounds.x() - old_bounds.x(), | 349 out_transform.Translate(new_bounds.x() - old_bounds.x(), |
354 new_bounds.y() - old_bounds.y()); | 350 new_bounds.y() - old_bounds.y()); |
355 out_transform.Scale(scale_x, scale_y); | 351 out_transform.Scale(scale_x, scale_y); |
356 old_layer->SetTransform(out_transform); | 352 old_layer->SetTransform(out_transform); |
357 if (old_on_top) { | 353 if (old_on_top) { |
358 // The old layer is on top, and should fade out. The new layer below will | 354 // The old layer is on top, and should fade out. The new layer below will |
359 // stay opaque to block the desktop. | 355 // stay opaque to block the desktop. |
360 old_layer->SetOpacity(kWindowAnimation_HideOpacity); | 356 old_layer->SetOpacity(kWindowAnimation_HideOpacity); |
361 } | 357 } |
362 // In tests |old_layer| is deleted here, as animations have zero duration. | 358 // In tests |old_layer| is deleted here, as animations have zero duration. |
363 old_layer = NULL; | 359 old_layer = NULL; |
364 } | 360 } |
365 | 361 |
366 // Set the new layer's current transform, such that the user sees a scaled | 362 // Set the new layer's current transform, such that the user sees a scaled |
367 // version of the window with the original bounds at the original position. | 363 // version of the window with the original bounds at the original position. |
368 gfx::Transform in_transform; | 364 gfx::Transform in_transform; |
369 const float scale_x = old_transformed_bounds.width() / | 365 const float scale_x = |
370 static_cast<float>(new_bounds.width()); | 366 old_transformed_bounds.width() / static_cast<float>(new_bounds.width()); |
371 const float scale_y = old_transformed_bounds.height() / | 367 const float scale_y = |
372 static_cast<float>(new_bounds.height()); | 368 old_transformed_bounds.height() / static_cast<float>(new_bounds.height()); |
373 in_transform.Translate(old_transformed_bounds.x() - new_bounds.x(), | 369 in_transform.Translate(old_transformed_bounds.x() - new_bounds.x(), |
374 old_transformed_bounds.y() - new_bounds.y()); | 370 old_transformed_bounds.y() - new_bounds.y()); |
375 in_transform.Scale(scale_x, scale_y); | 371 in_transform.Scale(scale_x, scale_y); |
376 window->layer()->SetTransform(in_transform); | 372 window->layer()->SetTransform(in_transform); |
377 if (!old_on_top) { | 373 if (!old_on_top) { |
378 // The new layer is on top and should fade in. The old layer below will | 374 // The new layer is on top and should fade in. The old layer below will |
379 // stay opaque and block the desktop. | 375 // stay opaque and block the desktop. |
380 window->layer()->SetOpacity(kWindowAnimation_HideOpacity); | 376 window->layer()->SetOpacity(kWindowAnimation_HideOpacity); |
381 } | 377 } |
382 { | 378 { |
(...skipping 17 matching lines...) Expand all Loading... |
400 | 396 |
401 // Attempt to run CoreWm supplied animation types. | 397 // Attempt to run CoreWm supplied animation types. |
402 if (::wm::AnimateOnChildWindowVisibilityChanged(window, visible)) | 398 if (::wm::AnimateOnChildWindowVisibilityChanged(window, visible)) |
403 return true; | 399 return true; |
404 | 400 |
405 // Otherwise try to run an Ash-specific animation. | 401 // Otherwise try to run an Ash-specific animation. |
406 if (visible) | 402 if (visible) |
407 return AnimateShowWindow(window); | 403 return AnimateShowWindow(window); |
408 // Don't start hiding the window again if it's already being hidden. | 404 // Don't start hiding the window again if it's already being hidden. |
409 return window->layer()->GetTargetOpacity() != 0.0f && | 405 return window->layer()->GetTargetOpacity() != 0.0f && |
410 AnimateHideWindow(window); | 406 AnimateHideWindow(window); |
411 } | 407 } |
412 | 408 |
413 std::vector<ui::LayerAnimationSequence*> | 409 std::vector<ui::LayerAnimationSequence*> |
414 CreateBrightnessGrayscaleAnimationSequence(float target_value, | 410 CreateBrightnessGrayscaleAnimationSequence(float target_value, |
415 base::TimeDelta duration) { | 411 base::TimeDelta duration) { |
416 gfx::Tween::Type animation_type = gfx::Tween::EASE_OUT; | 412 gfx::Tween::Type animation_type = gfx::Tween::EASE_OUT; |
417 std::unique_ptr<ui::LayerAnimationSequence> brightness_sequence( | 413 std::unique_ptr<ui::LayerAnimationSequence> brightness_sequence( |
418 new ui::LayerAnimationSequence()); | 414 new ui::LayerAnimationSequence()); |
419 std::unique_ptr<ui::LayerAnimationSequence> grayscale_sequence( | 415 std::unique_ptr<ui::LayerAnimationSequence> grayscale_sequence( |
420 new ui::LayerAnimationSequence()); | 416 new ui::LayerAnimationSequence()); |
(...skipping 13 matching lines...) Expand all Loading... |
434 std::vector<ui::LayerAnimationSequence*> animations; | 430 std::vector<ui::LayerAnimationSequence*> animations; |
435 animations.push_back(brightness_sequence.release()); | 431 animations.push_back(brightness_sequence.release()); |
436 animations.push_back(grayscale_sequence.release()); | 432 animations.push_back(grayscale_sequence.release()); |
437 | 433 |
438 return animations; | 434 return animations; |
439 } | 435 } |
440 | 436 |
441 // Returns scale related to the specified AshWindowScaleType. | 437 // Returns scale related to the specified AshWindowScaleType. |
442 void SetTransformForScaleAnimation(ui::Layer* layer, | 438 void SetTransformForScaleAnimation(ui::Layer* layer, |
443 LayerScaleAnimationDirection type) { | 439 LayerScaleAnimationDirection type) { |
444 const float scale = | 440 const float scale = type == LAYER_SCALE_ANIMATION_ABOVE |
445 type == LAYER_SCALE_ANIMATION_ABOVE ? kLayerScaleAboveSize : | 441 ? kLayerScaleAboveSize |
446 kLayerScaleBelowSize; | 442 : kLayerScaleBelowSize; |
447 gfx::Transform transform; | 443 gfx::Transform transform; |
448 transform.Translate(-layer->bounds().width() * (scale - 1.0f) / 2, | 444 transform.Translate(-layer->bounds().width() * (scale - 1.0f) / 2, |
449 -layer->bounds().height() * (scale - 1.0f) / 2); | 445 -layer->bounds().height() * (scale - 1.0f) / 2); |
450 transform.Scale(scale, scale); | 446 transform.Scale(scale, scale); |
451 layer->SetTransform(transform); | 447 layer->SetTransform(transform); |
452 } | 448 } |
453 | 449 |
454 gfx::Rect GetMinimizeAnimationTargetBoundsInScreen(aura::Window* window) { | 450 gfx::Rect GetMinimizeAnimationTargetBoundsInScreen(aura::Window* window) { |
455 Shelf* shelf = Shelf::ForWindow(window); | 451 Shelf* shelf = Shelf::ForWindow(window); |
456 // Shelf is created lazily and can be NULL. | 452 // Shelf is created lazily and can be NULL. |
(...skipping 29 matching lines...) Expand all Loading... |
486 gfx::Rect work_area = | 482 gfx::Rect work_area = |
487 display::Screen::GetScreen()->GetDisplayNearestWindow(window).work_area(); | 483 display::Screen::GetScreen()->GetDisplayNearestWindow(window).work_area(); |
488 int ltr_adjusted_x = base::i18n::IsRTL() ? work_area.right() : work_area.x(); | 484 int ltr_adjusted_x = base::i18n::IsRTL() ? work_area.right() : work_area.x(); |
489 return shelf->SelectValueForShelfAlignment( | 485 return shelf->SelectValueForShelfAlignment( |
490 gfx::Rect(ltr_adjusted_x, work_area.bottom(), 0, 0), | 486 gfx::Rect(ltr_adjusted_x, work_area.bottom(), 0, 0), |
491 gfx::Rect(work_area.x(), work_area.y(), 0, 0), | 487 gfx::Rect(work_area.x(), work_area.y(), 0, 0), |
492 gfx::Rect(work_area.right(), work_area.y(), 0, 0)); | 488 gfx::Rect(work_area.right(), work_area.y(), 0, 0)); |
493 } | 489 } |
494 | 490 |
495 } // namespace ash | 491 } // namespace ash |
OLD | NEW |