| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "chrome/browser/download/download_started_animation.h" | 5 #include "chrome/browser/download/download_started_animation.h" |
| 6 | 6 |
| 7 #include "content/browser/tab_contents/tab_contents.h" | 7 #include "content/browser/tab_contents/tab_contents.h" |
| 8 #include "content/common/notification_details.h" | 8 #include "content/common/notification_details.h" |
| 9 #include "content/common/notification_registrar.h" | 9 #include "content/common/notification_registrar.h" |
| 10 #include "content/common/notification_source.h" | 10 #include "content/common/notification_source.h" |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 43 // Move the animation to wherever it should currently be. | 43 // Move the animation to wherever it should currently be. |
| 44 void Reposition(); | 44 void Reposition(); |
| 45 | 45 |
| 46 // Shut down the animation cleanly. | 46 // Shut down the animation cleanly. |
| 47 void Close(); | 47 void Close(); |
| 48 | 48 |
| 49 // Animation | 49 // Animation |
| 50 virtual void AnimateToState(double state); | 50 virtual void AnimateToState(double state); |
| 51 | 51 |
| 52 // NotificationObserver | 52 // NotificationObserver |
| 53 virtual void Observe(NotificationType type, | 53 virtual void Observe(int type, |
| 54 const NotificationSource& source, | 54 const NotificationSource& source, |
| 55 const NotificationDetails& details); | 55 const NotificationDetails& details); |
| 56 | 56 |
| 57 // We use a HWND for the popup so that it may float above any HWNDs in our UI. | 57 // We use a HWND for the popup so that it may float above any HWNDs in our UI. |
| 58 views::Widget* popup_; | 58 views::Widget* popup_; |
| 59 | 59 |
| 60 // The content area holding us. | 60 // The content area holding us. |
| 61 TabContents* tab_contents_; | 61 TabContents* tab_contents_; |
| 62 | 62 |
| 63 // The content area at the start of the animation. We store this so that the | 63 // The content area at the start of the animation. We store this so that the |
| (...skipping 21 matching lines...) Expand all Loading... |
| 85 } | 85 } |
| 86 | 86 |
| 87 // If we're too small to show the download image, then don't bother - | 87 // If we're too small to show the download image, then don't bother - |
| 88 // the shelf will be enough. | 88 // the shelf will be enough. |
| 89 tab_contents_->GetContainerBounds(&tab_contents_bounds_); | 89 tab_contents_->GetContainerBounds(&tab_contents_bounds_); |
| 90 if (tab_contents_bounds_.height() < kDownloadImage->height()) | 90 if (tab_contents_bounds_.height() < kDownloadImage->height()) |
| 91 return; | 91 return; |
| 92 | 92 |
| 93 registrar_.Add( | 93 registrar_.Add( |
| 94 this, | 94 this, |
| 95 NotificationType::TAB_CONTENTS_HIDDEN, | 95 content::NOTIFICATION_TAB_CONTENTS_HIDDEN, |
| 96 Source<TabContents>(tab_contents_)); | 96 Source<TabContents>(tab_contents_)); |
| 97 registrar_.Add( | 97 registrar_.Add( |
| 98 this, | 98 this, |
| 99 NotificationType::TAB_CONTENTS_DESTROYED, | 99 content::NOTIFICATION_TAB_CONTENTS_DESTROYED, |
| 100 Source<TabContents>(tab_contents_)); | 100 Source<TabContents>(tab_contents_)); |
| 101 | 101 |
| 102 SetImage(kDownloadImage); | 102 SetImage(kDownloadImage); |
| 103 | 103 |
| 104 popup_ = new views::Widget; | 104 popup_ = new views::Widget; |
| 105 | 105 |
| 106 views::Widget::InitParams params(views::Widget::InitParams::TYPE_POPUP); | 106 views::Widget::InitParams params(views::Widget::InitParams::TYPE_POPUP); |
| 107 params.transparent = true; | 107 params.transparent = true; |
| 108 params.accept_events = false; | 108 params.accept_events = false; |
| 109 params.parent = tab_contents_->GetNativeView(); | 109 params.parent = tab_contents_->GetNativeView(); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 132 size.width(), | 132 size.width(), |
| 133 size.height())); | 133 size.height())); |
| 134 } | 134 } |
| 135 | 135 |
| 136 void DownloadStartedAnimationWin::Close() { | 136 void DownloadStartedAnimationWin::Close() { |
| 137 if (!tab_contents_) | 137 if (!tab_contents_) |
| 138 return; | 138 return; |
| 139 | 139 |
| 140 registrar_.Remove( | 140 registrar_.Remove( |
| 141 this, | 141 this, |
| 142 NotificationType::TAB_CONTENTS_HIDDEN, | 142 content::NOTIFICATION_TAB_CONTENTS_HIDDEN, |
| 143 Source<TabContents>(tab_contents_)); | 143 Source<TabContents>(tab_contents_)); |
| 144 registrar_.Remove( | 144 registrar_.Remove( |
| 145 this, | 145 this, |
| 146 NotificationType::TAB_CONTENTS_DESTROYED, | 146 content::NOTIFICATION_TAB_CONTENTS_DESTROYED, |
| 147 Source<TabContents>(tab_contents_)); | 147 Source<TabContents>(tab_contents_)); |
| 148 tab_contents_ = NULL; | 148 tab_contents_ = NULL; |
| 149 popup_->Close(); | 149 popup_->Close(); |
| 150 } | 150 } |
| 151 | 151 |
| 152 void DownloadStartedAnimationWin::AnimateToState(double state) { | 152 void DownloadStartedAnimationWin::AnimateToState(double state) { |
| 153 if (state >= 1.0) { | 153 if (state >= 1.0) { |
| 154 Close(); | 154 Close(); |
| 155 } else { | 155 } else { |
| 156 Reposition(); | 156 Reposition(); |
| 157 | 157 |
| 158 // Start at zero, peak halfway and end at zero. | 158 // Start at zero, peak halfway and end at zero. |
| 159 double opacity = std::min(1.0 - pow(GetCurrentValue() - 0.5, 2) * 4.0, | 159 double opacity = std::min(1.0 - pow(GetCurrentValue() - 0.5, 2) * 4.0, |
| 160 static_cast<double>(1.0)); | 160 static_cast<double>(1.0)); |
| 161 | 161 |
| 162 popup_->SetOpacity( | 162 popup_->SetOpacity( |
| 163 static_cast<SkColor>(opacity * 255.0)); | 163 static_cast<SkColor>(opacity * 255.0)); |
| 164 SchedulePaint(); // Reposition() calls MoveWindow() which never picks up | 164 SchedulePaint(); // Reposition() calls MoveWindow() which never picks up |
| 165 // alpha changes, so we need to force a paint. | 165 // alpha changes, so we need to force a paint. |
| 166 } | 166 } |
| 167 } | 167 } |
| 168 | 168 |
| 169 void DownloadStartedAnimationWin::Observe(NotificationType type, | 169 void DownloadStartedAnimationWin::Observe(int type, |
| 170 const NotificationSource& source, | 170 const NotificationSource& source, |
| 171 const NotificationDetails& details) { | 171 const NotificationDetails& details) { |
| 172 Close(); | 172 Close(); |
| 173 } | 173 } |
| 174 | 174 |
| 175 } // namespace | 175 } // namespace |
| 176 | 176 |
| 177 // static | 177 // static |
| 178 void DownloadStartedAnimation::Show(TabContents* tab_contents) { | 178 void DownloadStartedAnimation::Show(TabContents* tab_contents) { |
| 179 // The animation will delete itself when it's finished or when the tab | 179 // The animation will delete itself when it's finished or when the tab |
| 180 // contents is hidden or destroyed. | 180 // contents is hidden or destroyed. |
| 181 new DownloadStartedAnimationWin(tab_contents); | 181 new DownloadStartedAnimationWin(tab_contents); |
| 182 } | 182 } |
| OLD | NEW |