| 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 "ui/views/controls/glow_hover_controller.h" | 5 #include "ui/views/controls/glow_hover_controller.h" |
| 6 | 6 |
| 7 #include "ui/views/view.h" | 7 #include "ui/views/view.h" |
| 8 | 8 |
| 9 namespace views { | 9 namespace views { |
| 10 | 10 |
| 11 // Amount to scale the opacity. | 11 // Amount to scale the opacity. |
| 12 static const double kTrackOpacityScale = 0.25; | 12 static const double kSubtleOpacityScale = 0.25; |
| 13 static const double kHighlightOpacityScale = 1.0; | 13 static const double kPronouncedOpacityScale = 1.0; |
| 14 | 14 |
| 15 // How long the hover state takes. | 15 // How long the hover state takes. |
| 16 static const int kTrackHoverDurationMs = 400; | 16 static const int kTrackHoverDurationMs = 400; |
| 17 | 17 |
| 18 GlowHoverController::GlowHoverController(views::View* view) | 18 GlowHoverController::GlowHoverController(views::View* view) |
| 19 : view_(view), | 19 : view_(view), |
| 20 animation_(this), | 20 animation_(this), |
| 21 opacity_scale_(kTrackOpacityScale) { | 21 opacity_scale_(kSubtleOpacityScale) { |
| 22 animation_.set_delegate(this); | 22 animation_.set_delegate(this); |
| 23 } | 23 } |
| 24 | 24 |
| 25 GlowHoverController::~GlowHoverController() { | 25 GlowHoverController::~GlowHoverController() { |
| 26 } | 26 } |
| 27 | 27 |
| 28 void GlowHoverController::SetAnimationContainer( | 28 void GlowHoverController::SetAnimationContainer( |
| 29 gfx::AnimationContainer* container) { | 29 gfx::AnimationContainer* container) { |
| 30 animation_.SetContainer(container); | 30 animation_.SetContainer(container); |
| 31 } | 31 } |
| 32 | 32 |
| 33 void GlowHoverController::SetLocation(const gfx::Point& location) { | 33 void GlowHoverController::SetLocation(const gfx::Point& location) { |
| 34 location_ = location; | 34 location_ = location; |
| 35 if (ShouldDraw()) | 35 if (ShouldDraw()) |
| 36 view_->SchedulePaint(); | 36 view_->SchedulePaint(); |
| 37 } | 37 } |
| 38 | 38 |
| 39 void GlowHoverController::Show(Style style) { | 39 void GlowHoverController::Show(Style style) { |
| 40 switch (style) { | 40 switch (style) { |
| 41 case SUBTLE: | 41 case SUBTLE: |
| 42 opacity_scale_ = kTrackOpacityScale; | 42 opacity_scale_ = kSubtleOpacityScale; |
| 43 animation_.SetSlideDuration(kTrackHoverDurationMs); | 43 animation_.SetSlideDuration(kTrackHoverDurationMs); |
| 44 animation_.SetTweenType(gfx::Tween::EASE_OUT); | 44 animation_.SetTweenType(gfx::Tween::EASE_OUT); |
| 45 animation_.Show(); | 45 animation_.Show(); |
| 46 break; | 46 break; |
| 47 case PRONOUNCED: | 47 case PRONOUNCED: |
| 48 opacity_scale_ = kHighlightOpacityScale; | 48 opacity_scale_ = kPronouncedOpacityScale; |
| 49 // Force the end state to show immediately. | 49 // Force the end state to show immediately. |
| 50 animation_.Show(); | 50 animation_.Show(); |
| 51 animation_.End(); | 51 animation_.End(); |
| 52 break; | 52 break; |
| 53 } | 53 } |
| 54 } | 54 } |
| 55 | 55 |
| 56 void GlowHoverController::Hide() { | 56 void GlowHoverController::Hide() { |
| 57 animation_.SetTweenType(gfx::Tween::EASE_IN); | 57 animation_.SetTweenType(gfx::Tween::EASE_IN); |
| 58 animation_.Hide(); | 58 animation_.Hide(); |
| 59 } | 59 } |
| 60 | 60 |
| 61 void GlowHoverController::HideImmediately() { | 61 void GlowHoverController::HideImmediately() { |
| 62 if (ShouldDraw()) | 62 if (ShouldDraw()) |
| 63 view_->SchedulePaint(); | 63 view_->SchedulePaint(); |
| 64 animation_.Reset(); | 64 animation_.Reset(); |
| 65 } | 65 } |
| 66 | 66 |
| 67 double GlowHoverController::GetAnimationValue() const { | 67 double GlowHoverController::GetAnimationValue() const { |
| 68 return animation_.GetCurrentValue(); | 68 return animation_.GetCurrentValue(); |
| 69 } | 69 } |
| 70 | 70 |
| 71 SkAlpha GlowHoverController::GetAlpha() const { | 71 SkAlpha GlowHoverController::GetAlpha() const { |
| 72 return static_cast<SkAlpha>(gfx::ToFlooredInt( | 72 return static_cast<SkAlpha>(animation_.CurrentValueBetween( |
| 73 0.5 + animation_.CurrentValueBetween(0., 255 * opacity_scale_))); | 73 0, gfx::ToRoundedInt(255 * opacity_scale_))); |
| 74 } | 74 } |
| 75 | 75 |
| 76 bool GlowHoverController::ShouldDraw() const { | 76 bool GlowHoverController::ShouldDraw() const { |
| 77 return animation_.IsShowing() || animation_.is_animating(); | 77 return animation_.IsShowing() || animation_.is_animating(); |
| 78 } | 78 } |
| 79 | 79 |
| 80 void GlowHoverController::AnimationEnded(const gfx::Animation* animation) { | 80 void GlowHoverController::AnimationEnded(const gfx::Animation* animation) { |
| 81 view_->SchedulePaint(); | 81 view_->SchedulePaint(); |
| 82 } | 82 } |
| 83 | 83 |
| 84 void GlowHoverController::AnimationProgressed(const gfx::Animation* animation) { | 84 void GlowHoverController::AnimationProgressed(const gfx::Animation* animation) { |
| 85 view_->SchedulePaint(); | 85 view_->SchedulePaint(); |
| 86 } | 86 } |
| 87 | 87 |
| 88 } // namespace views | 88 } // namespace views |
| OLD | NEW |